changeset 14080:cd4595e8a685

Truffle: added notification from callee to callers in the CallNode.
author Christian Humer <christian.humer@gmail.com>
date Wed, 05 Mar 2014 23:33:36 +0100
parents ca92db718c74
children a5fe04acc81a
files graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java
diffstat 2 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java	Wed Mar 05 23:33:25 2014 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java	Wed Mar 05 23:33:36 2014 +0100
@@ -114,13 +114,17 @@
         registerCallTarget((CallNode) newNode);
     }
 
-    protected final void registerCallTarget(CallNode newNode) {
+    protected static final void registerCallTarget(CallNode newNode) {
         RootNode newRoot = newNode.getCurrentRootNode();
         if (newRoot != null) {
             newRoot.addCachedCallNode(newNode);
         }
     }
 
+    protected void notifyCallNodeAdded() {
+
+    }
+
     /**
      * Returns the {@link RootNode} associated with {@link CallTarget} returned by
      * {@link #getCurrentCallTarget()}.
@@ -140,7 +144,7 @@
      * @deprecated always returns <code>true</code> now.
      */
     @Deprecated
-    public final boolean isInlinable() {
+    public boolean isInlinable() {
         return true;
     }
 
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Wed Mar 05 23:33:25 2014 +0100
+++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java	Wed Mar 05 23:33:36 2014 +0100
@@ -128,7 +128,13 @@
 
     /* Internal API. Do not use. */
     void addCachedCallNode(CallNode callSite) {
-        this.cachedCallNodes.add(callSite);
+        if (cachedCallNodes.add(callSite)) {
+            for (CallNode callNode : cachedCallNodes) {
+                if (callSite != callNode) {
+                    callNode.notifyCallNodeAdded();
+                }
+            }
+        }
     }
 
     /* Internal API. Do not use. */