Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java @ 16912:f8998c828bed
Truffle: replaces are now reported to all ReplaceObservers in the node hierarchy.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sat, 23 Aug 2014 19:31:29 +0200 |
parents | 17f7331dcc4f |
children | e1da729b3e4e |
line wrap: on
line diff
--- 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);