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