# HG changeset patch # User Christian Wimmer # Date 1435011907 25200 # Node ID 112aba5e3e12f931f118bf8621cca1e61fa6c24b # Parent 08db96a633b975fdc89de95270171dd6b5997f48 SimpleLanguage: Fix Truffle compilation boundaries diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.object/src/com/oracle/truffle/object/Locations.java --- 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(); } } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLTypes.java --- 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); } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLReadPropertyNode.java --- 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"); } } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/access/SLWritePropertyNode.java --- 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; diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLDivNode.java --- 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); } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLEqualNode.java --- 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); } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessOrEqualNode.java --- 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; } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLLessThanNode.java --- 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; } diff -r 08db96a633b9 -r 112aba5e3e12 truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/expression/SLSubNode.java --- 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); }