changeset 21968:112aba5e3e12

SimpleLanguage: Fix Truffle compilation boundaries
author Christian Wimmer <christian.wimmer@oracle.com>
date Mon, 22 Jun 2015 15:25:07 -0700
parents 08db96a633b9
children 9124ca6c46b0
files truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java
diffstat 9 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java	Mon Jun 22 15:25:07 2015 -0700
@@ -268,6 +268,7 @@
             } else if (type == Object.class) {
                 return true;
             } else {
+                CompilerDirectives.transferToInterpreter();
                 throw new IllegalStateException();
             }
         }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java	Mon Jun 22 15:25:07 2015 -0700
@@ -24,6 +24,7 @@
 
 import java.math.*;
 
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.dsl.internal.*;
 import com.oracle.truffle.sl.*;
@@ -69,6 +70,7 @@
      * {@link BigInteger} arithmetic for values that fit into a 64-bit primitive value.
      */
     @ImplicitCast
+    @TruffleBoundary
     public static BigInteger castBigInteger(long value) {
         return BigInteger.valueOf(value);
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.sl.nodes.access;
 
+import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.source.*;
@@ -57,6 +58,7 @@
         if (receiverTypeCondition.profile(SLContext.isSLObject(object))) {
             return cacheNode.executeObject(SLContext.castSLObject(object));
         } else {
+            CompilerDirectives.transferToInterpreter();
             throw new SLException("unexpected receiver type");
         }
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.sl.nodes.access;
 
+import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.source.*;
@@ -64,6 +65,7 @@
         if (receiverTypeCondition.profile(SLContext.isSLObject(object))) {
             cacheNode.executeObject(SLContext.castSLObject(object), value);
         } else {
+            CompilerDirectives.transferToInterpreter();
             throw new SLException("unexpected receiver type");
         }
         return value;
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -24,6 +24,7 @@
 
 import java.math.*;
 
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.source.*;
@@ -54,6 +55,7 @@
     }
 
     @Specialization
+    @TruffleBoundary
     protected BigInteger div(BigInteger left, BigInteger right) {
         return left.divide(right);
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -24,6 +24,7 @@
 
 import java.math.*;
 
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
@@ -57,6 +58,7 @@
     }
 
     @Specialization
+    @TruffleBoundary
     protected boolean equal(BigInteger left, BigInteger right) {
         return left.equals(right);
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -24,6 +24,7 @@
 
 import java.math.*;
 
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
@@ -49,6 +50,7 @@
     }
 
     @Specialization
+    @TruffleBoundary
     protected boolean lessOrEqual(BigInteger left, BigInteger right) {
         return left.compareTo(right) <= 0;
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -24,6 +24,7 @@
 
 import java.math.*;
 
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
@@ -50,6 +51,7 @@
     }
 
     @Specialization
+    @TruffleBoundary
     protected boolean lessThan(BigInteger left, BigInteger right) {
         return left.compareTo(right) < 0;
     }
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java	Mon Jun 22 10:34:54 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java	Mon Jun 22 15:25:07 2015 -0700
@@ -25,6 +25,7 @@
 import java.math.*;
 
 import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.api.source.*;
@@ -46,6 +47,7 @@
     }
 
     @Specialization
+    @TruffleBoundary
     protected BigInteger sub(BigInteger left, BigInteger right) {
         return left.subtract(right);
     }