# HG changeset patch # User Christian Humer # Date 1375193468 -7200 # Node ID 5daaa08214066d5e6fcbe771654c0353b3bf1650 # Parent b7f90ff38d4b99ecc85e62f7ea576741ad352458 Truffle-DSL: Changed executeAndSpecialize to use an int as minimumState instead of a class. diff -r b7f90ff38d4b -r 5daaa0821406 graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Mon Jul 29 19:20:33 2013 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Tue Jul 30 16:11:08 2013 +0200 @@ -1439,7 +1439,7 @@ TypeMirror genericReturnType = node.getGenericSpecialization().getReturnType().getType(); CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED), genericReturnType, EXECUTE_SPECIALIZE_NAME); - method.addParameter(new CodeVariableElement(getContext().getType(Class.class), "minimumState")); + method.addParameter(new CodeVariableElement(getContext().getType(int.class), "minimumState")); addInternalValueParameters(method, node.getGenericSpecialization(), true, false); method.addParameter(new CodeVariableElement(getContext().getType(String.class), "reason")); @@ -1453,8 +1453,6 @@ builder.defaultDeclaration(getContext().getType(Class.class), "resultClass"); - builder.startStatement().string("boolean allowed = (minimumState == ").string(nodeSpecializationClassName(node.getSpecializations().get(0))).string(".class)").end(); - builder.startStatement().string("String message = ").startCall("createInfo0").string("reason"); addInternalValueParameterNames(builder, node.getGenericSpecialization(), node.getGenericSpecialization(), null, false, true); builder.end().end(); @@ -1473,10 +1471,6 @@ if (current.isReachable()) { CodeTree execute = createGenericInvokeAndSpecialize(builder, node.getGenericSpecialization(), current); - if (!current.isGeneric()) { - builder.startStatement().string("allowed = allowed || (minimumState == ").string(nodeSpecializationClassName(current)).string(".class)").end(); - } - builder.tree(createGuardAndCast(builder, prefix, current.getNode().getGenericSpecialization(), current, true, execute, null, true, false)); } else { if (firstUnreachable) { @@ -1559,7 +1553,9 @@ boolean ifAllowed = current.hasRewrite(getContext()); if (ifAllowed) { - builder.startIf().string("allowed").end().startBlock(); + builder.startIf(); + builder.string("minimumState < ").string(String.valueOf(node.getSpecializations().indexOf(current))); + builder.end().startBlock(); } if (!current.isGeneric() || !node.isPolymorphic()) { @@ -1571,13 +1567,13 @@ builder.startIf().string("resultClass == ").string(nodeSpecializationClassName(node.getGenericSpecialization())).string(".class").end(); builder.startBlock(); - boolean maybePolymorphic = node.getPolymorphicDepth() > 1; - if (maybePolymorphic) { + if (node.isPolymorphic()) { builder.startIf().string("next0 == null").end(); builder.startBlock(); } builder.tree(createRewriteGeneric(builder, current)); - if (maybePolymorphic) { + + if (node.isPolymorphic()) { builder.end().startElseBlock(); builder.statement("Node searchNode = super.getParent()"); builder.startWhile().string("searchNode != null").end(); @@ -2037,10 +2033,11 @@ } protected CodeTree createReturnExecuteAndSpecialize(CodeTreeBuilder parent, ExecutableTypeData executable, SpecializationData nextSpecialization, ActualParameter exceptionParam, String reason) { - SpecializationData generic = getModel().getNode().getGenericSpecialization(); + NodeData node = getModel().getNode(); + SpecializationData generic = node.getGenericSpecialization(); CodeTreeBuilder specializeCall = new CodeTreeBuilder(parent); specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); - specializeCall.string(nodeSpecializationClassName(nextSpecialization) + ".class"); + specializeCall.string(String.valueOf(node.getSpecializations().indexOf(nextSpecialization))); addInternalValueParameterNames(specializeCall, generic, nextSpecialization.getNode().getGenericSpecialization(), exceptionParam != null ? exceptionParam.getLocalName() : null, true, true); specializeCall.doubleQuote(reason); specializeCall.end().end(); @@ -2321,7 +2318,7 @@ CodeTreeBuilder specializeCall = new CodeTreeBuilder(builder); specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); - specializeCall.string(nodeSpecializationClassName(node.getUninitializedSpecialization()) + ".class"); + specializeCall.string("0"); addInternalValueParameterNames(specializeCall, specialization, node.getGenericSpecialization(), null, true, true); specializeCall.startGroup().doubleQuote("Uninitialized polymorphic (").string(" + depth + ").doubleQuote("/" + node.getPolymorphicDepth() + ")").end(); specializeCall.end().end(); @@ -2469,7 +2466,7 @@ returnBuilder.end(); } else if (specialization.isUninitialized()) { returnBuilder.startCall("super", EXECUTE_SPECIALIZE_NAME); - returnBuilder.startGroup().string(nodeSpecializationClassName(specialization)).string(".class").end(); + returnBuilder.string("0"); addInternalValueParameterNames(returnBuilder, specialization, specialization, null, true, true); returnBuilder.doubleQuote("Uninitialized monomorphic"); returnBuilder.end();