Mercurial > hg > truffle
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) {