changeset 22502:d2b4fe945c23

Add missing Truffle boundary
author Christian Wimmer <christian.wimmer@oracle.com>
date Wed, 16 Dec 2015 15:32:23 -0800
parents a63bda98cfdb
children 828c67903db2
files truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java
diffstat 3 files changed, 12 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java	Wed Dec 16 16:38:13 2015 +0100
+++ b/truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java	Wed Dec 16 15:32:23 2015 -0800
@@ -26,6 +26,7 @@
 
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerDirectives;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.nodes.IndirectCallNode;
@@ -47,12 +48,18 @@
 
     @Override
     public Object executeWith(VirtualFrame frame, TruffleObject truffleObject, Object[] arguments) {
+        final CallTarget ct = findCallTarget(truffleObject);
+        return indirectCallNode.call(frame, ct, accessArguments.executeCreate(truffleObject, arguments));
+    }
+
+    @TruffleBoundary
+    protected CallTarget findCallTarget(TruffleObject truffleObject) {
         final ForeignAccess fa = truffleObject.getForeignAccess();
         final CallTarget ct = fa.access(access);
         if (ct == null) {
             throw messageNotRecognizedException(fa);
         }
-        return indirectCallNode.call(frame, ct, accessArguments.executeCreate(truffleObject, arguments));
+        return ct;
     }
 
     @CompilerDirectives.TruffleBoundary
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java	Wed Dec 16 16:38:13 2015 +0100
+++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java	Wed Dec 16 15:32:23 2015 -0800
@@ -25,6 +25,7 @@
 package com.oracle.truffle.api.vm;
 
 import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.frame.VirtualFrame;
@@ -77,6 +78,7 @@
         public Object execute(VirtualFrame frame) {
             final Object[] args = frame.getArguments();
             if (args.length != argumentLength) {
+                CompilerDirectives.transferToInterpreterAndInvalidate();
                 throw new ArgumentsMishmashException();
             }
             Object tmp = ForeignAccess.execute(foreignAccess, frame, function, args);
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Wed Dec 16 16:38:13 2015 +0100
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Wed Dec 16 15:32:23 2015 -0800
@@ -41,6 +41,7 @@
 package com.oracle.truffle.sl.runtime;
 
 import com.oracle.truffle.api.CallTarget;
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.ExecutionContext;
 import com.oracle.truffle.api.TruffleLanguage;
 import com.oracle.truffle.api.dsl.NodeFactory;
@@ -258,6 +259,7 @@
      * @param name the name of the symbol to search for
      * @return object representing the symbol or <code>null</code>
      */
+    @TruffleBoundary
     public Object importSymbol(String name) {
         Object object = env.importSymbol(name);
         Object slValue = fromForeignValue(object);