# HG changeset patch # User Christian Humer # Date 1408815089 -7200 # Node ID f8998c828bed9d6c5199adddc600d37e35310557 # Parent ee4fde70df193187fe566440aa07f28c19d6e430 Truffle: replaces are now reported to all ReplaceObservers in the node hierarchy. diff -r ee4fde70df19 -r f8998c828bed graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java Sat Aug 23 19:31:26 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java Sat Aug 23 19:31:29 2014 +0200 @@ -299,12 +299,17 @@ } private void reportReplace(Node oldNode, Node newNode, CharSequence reason) { - RootNode rootNode = getRootNode(); - if (rootNode != null) { - CallTarget target = rootNode.getCallTarget(); - if (target instanceof ReplaceObserver) { - ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason); + Node node = this; + while (node != null) { + if (node instanceof ReplaceObserver) { + ((ReplaceObserver) node).nodeReplaced(oldNode, newNode, reason); + } else if (node instanceof RootNode) { + CallTarget target = ((RootNode) node).getCallTarget(); + if (target instanceof ReplaceObserver) { + ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason); + } } + node = node.getParent(); } if (TruffleOptions.TraceRewrites) { NodeUtil.traceRewrite(this, newNode, reason);