# HG changeset patch # User Christian Humer # Date 1409132159 -7200 # Node ID c5db657d93c1bf096d121326b35f2efe4ad37387 # Parent e92bc7d8e2ddbe42b562e0f28d35050179cc3813 Truffle-DSL: added test for source sections in @CreateCast methods. diff -r e92bc7d8e2dd -r c5db657d93c1 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java Wed Aug 27 11:35:59 2014 +0200 @@ -26,12 +26,16 @@ import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import org.junit.*; import org.junit.experimental.theories.*; import org.junit.runner.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection0Factory; -import com.oracle.truffle.api.dsl.test.TypeSystemTest.*; +import com.oracle.truffle.api.dsl.test.SourceSectionTestFactory.SourceSection1Factory; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.TestRootNode; +import com.oracle.truffle.api.dsl.test.TypeSystemTest.ValueNode; import com.oracle.truffle.api.nodes.*; import com.oracle.truffle.api.source.*; @@ -54,7 +58,7 @@ expectSourceSection(root.getNode(), section); } - private void expectSourceSection(Node root, SourceSection section) { + private static void expectSourceSection(Node root, SourceSection section) { assertThat(root.getSourceSection(), is(sameInstance(section))); for (Node child : root.getChildren()) { if (child instanceof ArgumentNode) { @@ -101,4 +105,33 @@ return a; // the generic answer to all questions } } + + @Test + public void testCreateCast() { + SourceSection section = new NullSourceSection("a", "b"); + TestRootNode root = createRootPrefix(SourceSection1Factory.getInstance(), true, section); + expectSourceSection(root.getNode(), section); + assertThat((int) executeWith(root, 1), is(1)); + expectSourceSection(root.getNode(), section); + } + + @NodeChild("a") + static class SourceSection1 extends ValueNode { + + public SourceSection1(SourceSection section) { + super(section); + } + + @CreateCast("a") + public ValueNode cast(ValueNode node) { + assert getSourceSection() != null; + return node; + } + + @Specialization + int do0(int a) { + return a; + } + + } } diff -r e92bc7d8e2dd -r c5db657d93c1 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 27 11:35:59 2014 +0200 @@ -24,7 +24,6 @@ import static org.junit.Assert.*; -import java.lang.reflect.*; import java.util.*; import com.oracle.truffle.api.*; @@ -47,41 +46,32 @@ return nodes; } - static E createNode(NodeFactory factory, Object... constants) { + static E createNode(NodeFactory factory, boolean prefixConstants, Object... constants) { ArgumentNode[] argumentNodes = arguments(factory.getExecutionSignature().size()); List argumentList = new ArrayList<>(); + if (prefixConstants) { + argumentList.addAll(Arrays.asList(constants)); + } if (ChildrenNode.class.isAssignableFrom(factory.getNodeClass())) { argumentList.add(argumentNodes); } else { argumentList.addAll(Arrays.asList(argumentNodes)); } - argumentList.addAll(Arrays.asList(constants)); + if (!prefixConstants) { + argumentList.addAll(Arrays.asList(constants)); + } return factory.createNode(argumentList.toArray(new Object[argumentList.size()])); } - static E createGenericNode(NodeFactory factory, Object... constants) { - Method createGenericMethod; - try { - createGenericMethod = factory.getClass().getMethod("createGeneric", factory.getNodeClass()); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - try { - return factory.getNodeClass().cast(createGenericMethod.invoke(null, createNode(factory, constants))); - } catch (IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } - } - static TestRootNode createRoot(NodeFactory factory, Object... constants) { - TestRootNode rootNode = new TestRootNode<>(createNode(factory, constants)); + TestRootNode rootNode = new TestRootNode<>(createNode(factory, false, constants)); rootNode.adoptChildren(); return rootNode; } - static TestRootNode createGenericRoot(NodeFactory factory, Object... constants) { - TestRootNode rootNode = new TestRootNode<>(createGenericNode(factory, constants)); + static TestRootNode createRootPrefix(NodeFactory factory, boolean prefixConstants, Object... constants) { + TestRootNode rootNode = new TestRootNode<>(createNode(factory, prefixConstants, constants)); rootNode.adoptChildren(); return rootNode; } diff -r e92bc7d8e2dd -r c5db657d93c1 graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java Wed Aug 27 09:14:19 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java Wed Aug 27 11:35:59 2014 +0200 @@ -28,6 +28,7 @@ import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.api.source.*; public class TypeSystemTest { @@ -69,6 +70,10 @@ super(null); } + public ValueNode(SourceSection sourceSection) { + super(sourceSection); + } + public int executeInt(VirtualFrame frame) throws UnexpectedResultException { return SimpleTypesGen.SIMPLETYPES.expectInteger(execute(frame)); }