diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java @ 8310:89006c76f737

Final fields of base node can be optionally passed to builtin specialization method. And a few fixes.
author Christian Humer <christian.humer@gmail.com>
date Fri, 15 Mar 2013 21:18:33 +0100
parents 4dc7034317ec
children b1dff27a1da6
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java	Thu Mar 14 13:13:59 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java	Fri Mar 15 21:18:33 2013 +0100
@@ -298,14 +298,14 @@
                 ParameterSpec parameterSpec = specification.findParameterSpec(specializationParameter.getSpecification().getName());
                 NodeFieldData field = node.findField(parameterSpec.getName());
                 TypeMirror actualType;
-                if (field == null) {
+                if (field == null || field.getKind() == FieldKind.FIELD) {
                     actualType = specializationParameter.getActualType();
                 } else {
                     ExecutableTypeData paramType = field.getNodeData().findAnyGenericExecutableType(context);
                     assert paramType != null;
                     actualType = paramType.getType().getPrimitiveType();
                 }
-                parameters.add(new ActualParameter(parameterSpec, actualType, specializationParameter.getIndex(), specializationParameter.isHidden()));
+                parameters.add(new ActualParameter(parameterSpec, actualType, specializationParameter.getIndex(), specializationParameter.isImplicit()));
             }
             TemplateMethod genericMethod = new TemplateMethod("Generic", node, specification, null, null, returnType, parameters);
             genericSpecialization = new SpecializationData(genericMethod, true, false);
@@ -628,9 +628,7 @@
             }
 
             NodeFieldData field = parseField(nodeData, var, shortCircuits);
-            if (field.getExecutionKind() != ExecutionKind.IGNORE) {
-                fields.add(field);
-            }
+            fields.add(field);
         }
         sortByExecutionOrder(fields, executionDefinition == null ? Collections.<String> emptyList() : executionDefinition, typeHierarchy);
         return fields;
@@ -650,32 +648,32 @@
         }
 
         AnnotationMirror mirror;
-        TypeMirror nodeType;
+        TypeMirror type;
 
         if (childMirror != null) {
             mirror = childMirror;
-            nodeType = var.asType();
+            type = var.asType();
             kind = FieldKind.CHILD;
         } else if (childrenMirror != null) {
             mirror = childrenMirror;
-            nodeType = getComponentType(var.asType());
+            type = getComponentType(var.asType());
             kind = FieldKind.CHILDREN;
         } else {
             execution = ExecutionKind.IGNORE;
-            nodeType = null;
+            type = var.asType();
             mirror = null;
-            kind = null;
+            kind = FieldKind.FIELD;
         }
 
         NodeFieldData fieldData = new NodeFieldData(var, findAccessElement(var), mirror, kind, execution);
-        if (nodeType != null) {
-            NodeData fieldNodeData = resolveNode(Utils.fromTypeMirror(nodeType));
+        if (type != null && mirror != null) {
+            NodeData fieldNodeData = resolveNode(Utils.fromTypeMirror(type));
             fieldData.setNode(fieldNodeData);
 
             if (fieldNodeData == null) {
-                fieldData.addError("Node type '%s' is invalid.", Utils.getQualifiedName(nodeType));
+                fieldData.addError("Node type '%s' is invalid.", Utils.getQualifiedName(type));
             } else if (fieldNodeData.findGenericExecutableTypes(context).isEmpty()) {
-                fieldData.addError("No executable generic types found for node '%s'.", Utils.getQualifiedName(nodeType));
+                fieldData.addError("No executable generic types found for node '%s'.", Utils.getQualifiedName(type));
             }
 
             // TODO correct handling of access elements
@@ -830,7 +828,7 @@
     private boolean isGenericShortCutMethod(NodeData node, TemplateMethod method) {
         for (ActualParameter parameter : method.getParameters()) {
             NodeFieldData field = node.findField(parameter.getSpecification().getName());
-            if (field == null) {
+            if (field == null || field.getKind() == FieldKind.FIELD) {
                 continue;
             }
             ExecutableTypeData found = null;