diff graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java @ 21204:4a5df5570b7f

Truffle: make ReplaceObserver return a boolean in order to consume replace events. It can be useful for nodes to consume all replace events if they are always executed behind a @TruffleBoundary.
author Christian Humer <christian.humer@gmail.com>
date Mon, 04 May 2015 11:24:13 +0200
parents f6f3f44a1830
children 45ed86c4d127
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java	Wed Apr 29 17:16:53 2015 +0200
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/Node.java	Mon May 04 11:24:13 2015 +0200
@@ -299,14 +299,18 @@
     private void reportReplace(Node oldNode, Node newNode, CharSequence reason) {
         Node node = this;
         while (node != null) {
+            boolean consumed = false;
             if (node instanceof ReplaceObserver) {
-                ((ReplaceObserver) node).nodeReplaced(oldNode, newNode, reason);
+                consumed = ((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);
+                    consumed = ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason);
                 }
             }
+            if (consumed) {
+                break;
+            }
             node = node.getParent();
         }
         if (TruffleOptions.TraceRewrites) {