# HG changeset patch # User Michael Haupt # Date 1409136704 -7200 # Node ID 7bb9b9f567990ccd9136454fa64bdae663338861 # Parent 818844f7224dc1e62348420ebc8cc9336f9cf1e8# Parent 865628e59c55e492236e2e72989b04db678d7af6 merge diff -r 818844f7224d -r 7bb9b9f56799 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedLoopNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedLoopNode.java Wed Aug 27 11:56:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedLoopNode.java Wed Aug 27 12:51:44 2014 +0200 @@ -23,7 +23,6 @@ package com.oracle.graal.truffle; import com.oracle.truffle.api.*; -import com.oracle.truffle.api.CompilerDirectives.*; import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; @@ -33,36 +32,24 @@ */ public final class OptimizedLoopNode extends LoopNode { - @CompilationFinal private int loopCount; - public OptimizedLoopNode(RepeatingNode body) { super(body); } @Override public void executeLoop(VirtualFrame frame) { + int loopCount = 0; try { - do { - } while (executeBody(frame)); + while (executeRepeatingNode(frame)) { + if (CompilerDirectives.inInterpreter()) { + loopCount++; + } + } } finally { - loopDone(); + if (CompilerDirectives.inInterpreter()) { + getRootNode().reportLoopCount(loopCount); + } } } - private final boolean executeBody(VirtualFrame frame) { - boolean result = executeRepeatNode(frame); - if (CompilerDirectives.inInterpreter()) { - if (result) { - loopCount++; - } - } - return result; - } - - private void loopDone() { - if (CompilerDirectives.inInterpreter()) { - getRootNode().reportLoopCount(loopCount); - loopCount = 0; - } - } -} \ No newline at end of file +} diff -r 818844f7224d -r 7bb9b9f56799 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 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/SourceSectionTest.java Wed Aug 27 12:51:44 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 818844f7224d -r 7bb9b9f56799 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 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 27 12:51:44 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 818844f7224d -r 7bb9b9f56799 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 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TypeSystemTest.java Wed Aug 27 12:51:44 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)); } diff -r 818844f7224d -r 7bb9b9f56799 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java Wed Aug 27 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultLoopNode.java Wed Aug 27 12:51:44 2014 +0200 @@ -35,7 +35,7 @@ @Override public void executeLoop(VirtualFrame frame) { - do { - } while (executeRepeatNode(frame)); + while (executeRepeatingNode(frame)) { + } } } diff -r 818844f7224d -r 7bb9b9f56799 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java Wed Aug 27 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/LoopNode.java Wed Aug 27 12:51:44 2014 +0200 @@ -36,17 +36,17 @@ */ @Child protected Node repeatingNode; - public LoopNode(RepeatingNode repeatintNode) { - this.repeatingNode = (Node) repeatintNode; + public LoopNode(RepeatingNode repeatingNode) { + this.repeatingNode = (Node) repeatingNode; } public abstract void executeLoop(VirtualFrame frame); - protected final boolean executeRepeatNode(VirtualFrame frame) { - return getRepeatNode().executeRepeating(frame); + protected final boolean executeRepeatingNode(VirtualFrame frame) { + return getRepeatingNode().executeRepeating(frame); } - public final RepeatingNode getRepeatNode() { + public final RepeatingNode getRepeatingNode() { return (RepeatingNode) repeatingNode; } diff -r 818844f7224d -r 7bb9b9f56799 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Wed Aug 27 11:56:35 2014 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Wed Aug 27 12:51:44 2014 +0200 @@ -34,7 +34,6 @@ import com.oracle.truffle.dsl.processor.*; import com.oracle.truffle.dsl.processor.java.model.*; import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror; -import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.WildcardTypeMirror; /** * THIS IS NOT PUBLIC API. @@ -217,7 +216,7 @@ } public static boolean isSubtype(TypeMirror type1, TypeMirror type2) { - if (type1 instanceof CodeTypeMirror && type2 instanceof CodeTypeMirror) { + if (type1 instanceof CodeTypeMirror || type2 instanceof CodeTypeMirror) { throw new UnsupportedOperationException(); } return ProcessorContext.getInstance().getEnvironment().getTypeUtils().isSubtype(type1, type2); @@ -1046,11 +1045,7 @@ } int typeParameters = element.getTypeParameters().size(); if (typeParameters > 0 && declaredType.getTypeArguments().size() != typeParameters) { - List genericTypes = new ArrayList<>(); - for (int i = 0; i < typeParameters; i++) { - genericTypes.add(new WildcardTypeMirror(null, null)); - } - return new DeclaredCodeTypeMirror(element, genericTypes); + return ProcessorContext.getInstance().getEnvironment().getTypeUtils().erasure(type); } return type; }