changeset 22118:31eb066d75ac

Usage of CompilerDirectives in ForeignAccess is wrong, as calls to ForeignAccess can only happen on slow path as shown by 7646278cca8a
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Mon, 31 Aug 2015 09:01:36 +0200
parents fab555eab36e
children fe5df1f36fec
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, 6 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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();
     }
 }
--- 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() {
--- 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();
     }
 }