comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java @ 7794:b891ec348f8a

Made the usage of generic types more flexible for short circuits and generic specializations.
author Christian Humer <christian.humer@gmail.com>
date Fri, 15 Feb 2013 19:32:58 +0100
parents f81be78f15a5
children c6c3515bea8e f4be7a2e783c
comparison
equal deleted inserted replaced
7793:8b48c8ebdff4 7794:b891ec348f8a
433 433
434 if (fieldNodeData == null) { 434 if (fieldNodeData == null) {
435 // TODO redirect errors from resolve. 435 // TODO redirect errors from resolve.
436 context.getLog().error(errorElement, "Node type '%s' is invalid.", Utils.getQualifiedName(nodeType)); 436 context.getLog().error(errorElement, "Node type '%s' is invalid.", Utils.getQualifiedName(nodeType));
437 return null; 437 return null;
438 } else if (fieldNodeData.findGenericExecutableType(context) == null) { 438 } else if (fieldNodeData.findGenericExecutableTypes(context).isEmpty()) {
439 // TODO better error handling for (no or multiple?) 439 // TODO better error handling for (no or multiple?)
440 context.getLog().error(errorElement, "No or multiple executable generic types found for node '%s'.", Utils.getQualifiedName(nodeType)); 440 context.getLog().error(errorElement, "No executable generic types found for node '%s'.", Utils.getQualifiedName(nodeType));
441 return null; 441 return null;
442 } 442 }
443 } 443 }
444 444
445 // TODO correct handling of access elements 445 // TODO correct handling of access elements
610 } 610 }
611 } 611 }
612 return valid; 612 return valid;
613 } 613 }
614 614
615 private static boolean isGenericShortCutMethod(NodeData node, TemplateMethod method) { 615 private boolean isGenericShortCutMethod(NodeData node, TemplateMethod method) {
616 for (NodeFieldData field : node.getFields()) { 616 for (NodeFieldData field : node.getFields()) {
617 ActualParameter parameter = method.findParameter(field.getName()); 617 ActualParameter parameter = method.findParameter(field.getName());
618 if (parameter == null) { 618 if (parameter == null) {
619 continue; 619 continue;
620 } 620 }
621 if (!Utils.typeEquals(node.getTypeSystem().getGenericType(), parameter.getActualType())) { 621 ExecutableTypeData found = null;
622 List<ExecutableTypeData> executableElements = field.getNodeData().findGenericExecutableTypes(context);
623 for (ExecutableTypeData executable : executableElements) {
624 if (executable.getType().equalsType(parameter.getActualTypeData(node.getTypeSystem()))) {
625 found = executable;
626 break;
627 }
628 }
629 if (found == null) {
622 return false; 630 return false;
623 } 631 }
624 } 632 }
625 return true; 633 return true;
626 } 634 }