Mercurial > hg > truffle
changeset 22101:ce5495c70de4
Create ForeignAccess lazily
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 21 Aug 2015 11:17:40 -0700 |
parents | 2a22cec84114 |
children | 04b13488da2a |
files | truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunction.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLFunctionForeignAccess.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java |
diffstat | 3 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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(); } }
--- 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() { }
--- 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(); } }