Mercurial > hg > graal-compiler
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;