Mercurial > hg > truffle
changeset 22300:c53c4de22c4f
Truffle/DSL: fix and tests for multiple assumptions expressions
author | Benoit Daloze <benoit.daloze@jku.at> |
---|---|
date | Sat, 10 Oct 2015 14:48:47 +0200 |
parents | 93904485c5a5 |
children | 26e79a4358fe |
files | truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java |
diffstat | 2 files changed, 80 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java Sat Oct 10 13:22:36 2015 +0200 +++ b/truffle/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/AssumptionsTest.java Sat Oct 10 14:48:47 2015 +0200 @@ -44,6 +44,8 @@ import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.CacheAssumptionTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.FieldTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MethodTestFactory; +import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MultipleAssumptionArraysTestFactory; +import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.MultipleAssumptionsTestFactory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.NodeFieldTest2Factory; import com.oracle.truffle.api.dsl.test.AssumptionsTestFactory.StaticFieldTestFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; @@ -206,6 +208,46 @@ } @Test + public void testMultipleAssumptions() { + CallTarget root = createCallTarget(MultipleAssumptionsTestFactory.getInstance()); + MultipleAssumptionsTest node = getNode(root); + node.assumption1 = Truffle.getRuntime().createAssumption(); + node.assumption2 = Truffle.getRuntime().createAssumption(); + + assertEquals("do1", root.call(42)); + node.assumption1.invalidate(); + assertEquals("do2", root.call(42)); + + CallTarget root2 = createCallTarget(MultipleAssumptionsTestFactory.getInstance()); + MultipleAssumptionsTest node2 = getNode(root2); + node2.assumption1 = Truffle.getRuntime().createAssumption(); + node2.assumption2 = Truffle.getRuntime().createAssumption(); + + assertEquals("do1", root2.call(42)); + node2.assumption2.invalidate(); + assertEquals("do2", root2.call(42)); + } + + @NodeChild + @SuppressWarnings("unused") + static class MultipleAssumptionsTest extends ValueNode { + + Assumption assumption1; + Assumption assumption2; + + @Specialization(assumptions = {"assumption1", "assumption2"}) + static String do1(int value) { + return "do1"; + } + + @Specialization + static String do2(int value) { + return "do2"; + } + + } + + @Test public void testAssumptionArrays() { CallTarget root = createCallTarget(AssumptionArrayTestFactory.getInstance()); AssumptionArrayTest node = getNode(root); @@ -240,6 +282,43 @@ } + @Test + public void testMultipleAssumptionArrays() { + CallTarget root = createCallTarget(MultipleAssumptionArraysTestFactory.getInstance()); + MultipleAssumptionArraysTest node = getNode(root); + + Assumption a1 = Truffle.getRuntime().createAssumption(); + Assumption a2 = Truffle.getRuntime().createAssumption(); + + node.assumptions1 = new Assumption[]{a1}; + node.assumptions2 = new Assumption[]{a2}; + + assertEquals("do1", root.call(42)); + + a2.invalidate(); + + assertEquals("do2", root.call(42)); + } + + @NodeChild + @SuppressWarnings("unused") + static class MultipleAssumptionArraysTest extends ValueNode { + + Assumption[] assumptions1; + Assumption[] assumptions2; + + @Specialization(assumptions = {"assumptions1", "assumptions2"}) + static String do1(int value) { + return "do1"; + } + + @Specialization + static String do2(int value) { + return "do2"; + } + + } + @NodeChild static class ErrorIncompatibleReturnType extends ValueNode { @ExpectError("Incompatible return type int. Assumptions must be assignable to Assumption or Assumption[].")
--- a/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Sat Oct 10 13:22:36 2015 +0200 +++ b/truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Sat Oct 10 14:48:47 2015 +0200 @@ -1159,6 +1159,7 @@ assumptionExpression.addError("Error parsing expression '%s': %s", assumption, e.getMessage()); } assumptionExpressions.add(assumptionExpression); + assumptionId++; } specialization.setAssumptionExpressions(assumptionExpressions); }