# HG changeset patch # User Christian Wimmer # Date 1450308743 28800 # Node ID d2b4fe945c23d631fbc3aee565a08282937e3f02 # Parent a63bda98cfdb007bed595e776dff9081b3c0162a Add missing Truffle boundary diff -r a63bda98cfdb -r d2b4fe945c23 truffle/com.oracle.truffle.api.interop/src/com/oracle/truffle/api/interop/GenericObjectAccessNode.java --- 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 diff -r a63bda98cfdb -r d2b4fe945c23 truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/SymbolInvokerImpl.java --- 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); diff -r a63bda98cfdb -r d2b4fe945c23 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java --- 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 null */ + @TruffleBoundary public Object importSymbol(String name) { Object object = env.importSymbol(name); Object slValue = fromForeignValue(object);