Mercurial > hg > graal-jvmci-8
changeset 13272:0b8335a4fb13
Truffle-DSL: more testing for generating execute methods with varargs.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 02 Dec 2013 10:45:37 +0100 |
parents | 2b9fcffd6f36 |
children | 17b116b80aba |
files | graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java |
diffstat | 2 files changed, 40 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java Sun Dec 01 18:18:33 2013 +0100 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/ExecuteEvaluatedTest.java Mon Dec 02 10:45:37 2013 +0100 @@ -32,6 +32,8 @@ import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs0Factory; import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs1Factory; import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs2Factory; +import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs3Factory; +import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.TestEvaluatedVarArgs4Factory; import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseDoubleEvaluatedNodeFactory; import com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTestFactory.UseEvaluatedNodeFactory; import com.oracle.truffle.api.dsl.test.TypeSystemTest.ArgumentNode; @@ -203,4 +205,38 @@ } } + @Test + public void test3VarArgs1() { + TestRootNode<TestEvaluatedVarArgs3> root = TestHelper.createRoot(TestEvaluatedVarArgs3Factory.getInstance()); + Assert.assertEquals(42, root.getNode().execute1(null, 42)); + } + + @NodeChild + abstract static class TestEvaluatedVarArgs3 extends ValueNode { + + public abstract Object execute1(VirtualFrame frame, Object... value); + + @Specialization + int call(int exp0) { + return exp0; + } + } + + @Test + public void test4VarArgs1() { + TestRootNode<TestEvaluatedVarArgs4> root = TestHelper.createRoot(TestEvaluatedVarArgs4Factory.getInstance()); + Assert.assertEquals(42, root.getNode().execute1(null, 21, 21)); + } + + @NodeChildren({@NodeChild, @NodeChild}) + abstract static class TestEvaluatedVarArgs4 extends ValueNode { + + public abstract Object execute1(VirtualFrame frame, Object... value); + + @Specialization + int call(int exp0, int exp1) { + return exp0 + exp1; + } + } + }
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Sun Dec 01 18:18:33 2013 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Mon Dec 02 10:45:37 2013 +0100 @@ -2877,13 +2877,16 @@ builder.startAssert().string(name).string(".length == ").string(String.valueOf(varArgCount)).end(); if (varArgCount > 0) { List<ActualParameter> varArgsParameter = execType.getParameters().subList(i, execType.getParameters().size()); - for (ActualParameter varArg : varArgsParameter) { + if (varArgCount <= 0) { + break; + } TypeMirror type = baseVarArgs.getType(); if (type.getKind() == TypeKind.ARRAY) { type = ((ArrayType) type).getComponentType(); } builder.declaration(type, valueNameEvaluated(varArg), name + "[" + varArg.getVarArgsIndex() + "]"); + varArgCount--; } } }