# HG changeset patch # User Christian Wimmer # Date 1440181060 25200 # Node ID ce5495c70de4ab970b2867bd58f489d38ac3df8f # Parent 2a22cec8411458f07732e1ca05468c180fef533b Create ForeignAccess lazily diff -r 2a22cec84114 -r ce5495c70de4 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 Fri Aug 21 11:17:20 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java Fri Aug 21 11:17:40 2015 -0700 @@ -117,6 +117,6 @@ */ @Override public ForeignAccess getForeignAccess() { - return SLFunctionForeignAccess.INSTANCE; + return SLFunctionForeignAccess.getSingleton(); } } diff -r 2a22cec84114 -r ce5495c70de4 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 Fri Aug 21 11:17:20 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java Fri Aug 21 11:17:40 2015 -0700 @@ -40,8 +40,8 @@ */ package com.oracle.truffle.sl.runtime; -import com.oracle.truffle.api.CallTarget; -import com.oracle.truffle.api.Truffle; +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; @@ -50,6 +50,7 @@ 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; @@ -57,7 +58,15 @@ * Implementation of foreign access for {@link SLFunction}. */ final class SLFunctionForeignAccess implements ForeignAccess.Factory { - public static final ForeignAccess INSTANCE = ForeignAccess.create(new SLFunctionForeignAccess()); + @CompilationFinal private static ForeignAccess singleton; + + public static ForeignAccess getSingleton() { + if (singleton == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + singleton = ForeignAccess.create(new SLFunctionForeignAccess()); + } + return singleton; + } private SLFunctionForeignAccess() { } diff -r 2a22cec84114 -r ce5495c70de4 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 Fri Aug 21 11:17:20 2015 -0700 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java Fri Aug 21 11:17:40 2015 -0700 @@ -76,6 +76,6 @@ @Override public ForeignAccess getForeignAccess() { - return SLFunctionForeignAccess.INSTANCE; + return SLFunctionForeignAccess.getSingleton(); } }