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();
     }
 }