Mercurial > hg > truffle
comparison 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 |
comparison
equal
deleted
inserted
replaced
21203:9f45587ad8f5 | 21204:4a5df5570b7f |
---|---|
297 } | 297 } |
298 | 298 |
299 private void reportReplace(Node oldNode, Node newNode, CharSequence reason) { | 299 private void reportReplace(Node oldNode, Node newNode, CharSequence reason) { |
300 Node node = this; | 300 Node node = this; |
301 while (node != null) { | 301 while (node != null) { |
302 boolean consumed = false; | |
302 if (node instanceof ReplaceObserver) { | 303 if (node instanceof ReplaceObserver) { |
303 ((ReplaceObserver) node).nodeReplaced(oldNode, newNode, reason); | 304 consumed = ((ReplaceObserver) node).nodeReplaced(oldNode, newNode, reason); |
304 } else if (node instanceof RootNode) { | 305 } else if (node instanceof RootNode) { |
305 CallTarget target = ((RootNode) node).getCallTarget(); | 306 CallTarget target = ((RootNode) node).getCallTarget(); |
306 if (target instanceof ReplaceObserver) { | 307 if (target instanceof ReplaceObserver) { |
307 ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason); | 308 consumed = ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason); |
308 } | 309 } |
310 } | |
311 if (consumed) { | |
312 break; | |
309 } | 313 } |
310 node = node.getParent(); | 314 node = node.getParent(); |
311 } | 315 } |
312 if (TruffleOptions.TraceRewrites) { | 316 if (TruffleOptions.TraceRewrites) { |
313 NodeUtil.traceRewrite(this, newNode, reason); | 317 NodeUtil.traceRewrite(this, newNode, reason); |