Mercurial > hg > truffle
changeset 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 | ee4fde70df19 |
children | b879421229db |
files | graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java |
diffstat | 1 files changed, 10 insertions(+), 5 deletions(-) [+] |
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);