# HG changeset patch # User Jaroslav Tulach # Date 1441004496 -7200 # Node ID 31eb066d75ac8bc08fb056ea934a6dd14761d7fd # Parent fab555eab36e16a843f7dfd743abbb512b82e4c1 Usage of CompilerDirectives in ForeignAccess is wrong, as calls to ForeignAccess can only happen on slow path as shown by 7646278cca8a diff -r fab555eab36e -r 31eb066d75ac truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java --- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java Sat Aug 29 01:34:41 2015 +0200 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java Mon Aug 31 09:01:36 2015 +0200 @@ -117,6 +117,6 @@ */ @Override public ForeignAccess getForeignAccess() { - return SLFunctionForeignAccess.getSingleton(); + return SLFunctionForeignAccess.create(); } } diff -r fab555eab36e -r 31eb066d75ac truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java --- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java Sat Aug 29 01:34:41 2015 +0200 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java Mon Aug 31 09:01:36 2015 +0200 @@ -41,16 +41,14 @@ package com.oracle.truffle.sl.runtime; import com.oracle.truffle.api.*; -import com.oracle.truffle.api.CompilerDirectives.*; import com.oracle.truffle.api.frame.VirtualFrame; -import com.oracle.truffle.api.nodes.RootNode; -import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.api.interop.ForeignAccess; import com.oracle.truffle.api.interop.Message; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.sl.SLLanguage; import com.oracle.truffle.sl.nodes.call.SLDispatchNode; import com.oracle.truffle.sl.nodes.call.SLDispatchNodeGen; - import java.math.BigInteger; import java.util.List; @@ -58,14 +56,8 @@ * Implementation of foreign access for {@link SLFunction}. */ final class SLFunctionForeignAccess implements ForeignAccess.Factory { - @CompilationFinal private static ForeignAccess singleton; - - public static ForeignAccess getSingleton() { - if (singleton == null) { - CompilerDirectives.transferToInterpreterAndInvalidate(); - singleton = ForeignAccess.create(new SLFunctionForeignAccess()); - } - return singleton; + public static ForeignAccess create() { + return ForeignAccess.create(new SLFunctionForeignAccess()); } private SLFunctionForeignAccess() { diff -r fab555eab36e -r 31eb066d75ac truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java --- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java Sat Aug 29 01:34:41 2015 +0200 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java Mon Aug 31 09:01:36 2015 +0200 @@ -76,6 +76,6 @@ @Override public ForeignAccess getForeignAccess() { - return SLFunctionForeignAccess.getSingleton(); + return SLFunctionForeignAccess.create(); } }