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);