diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java @ 20951:a77b760a0307

Truffle-DSL: fixed on-demand generation of getNext.
author Christian Humer <christian.humer@gmail.com>
date Tue, 14 Apr 2015 19:23:33 +0200
parents 9a83732f97eb
children ec1dca6d288a
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java	Tue Apr 14 19:23:33 2015 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java	Tue Apr 14 19:23:33 2015 +0200
@@ -375,11 +375,10 @@
             generated.put(specialization, clazz.add(createSpecialization(specialization, baseSpecializationType)));
         }
 
-        if (nextUsed) {
-            baseSpecialization.addOptional(createCreateNext(generated));
-        }
+        baseSpecialization.addOptional(createCreateNext(generated));
         baseSpecialization.addOptional(createCreateFallback(generated));
         baseSpecialization.addOptional(createCreatePolymorphic(generated));
+        baseSpecialization.addOptional(createGetNext(baseSpecialization));
 
         return node.getUninitializedSpecialization();
     }
@@ -413,7 +412,6 @@
 
         clazz.addOptional(createUnsupported());
         clazz.add(createGetSuppliedChildrenMethod());
-        clazz.add(createGetNext(clazz));
         clazz.add(createAcceptAndExecute());
 
         for (ExecutableTypeData type : usedTypes) {
@@ -1249,7 +1247,10 @@
         return false;
     }
 
-    private static Element createGetNext(CodeTypeElement type) {
+    private Element createGetNext(CodeTypeElement type) {
+        if (!nextUsed) {
+            return null;
+        }
         CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED, FINAL), type.asType(), "getNext");
         CodeTreeBuilder builder = method.createBuilder();
         builder.startReturn().cast(type.asType(), CodeTreeBuilder.singleString("this.next")).end();