comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.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 ca51efac4d57
children 5ecf528d4131
comparison
equal deleted inserted replaced
7793:8b48c8ebdff4 7794:b891ec348f8a
745 } 745 }
746 } 746 }
747 747
748 private void buildGenericValueExecute(CodeTreeBuilder builder, SpecializationData specialization, NodeFieldData field, NodeFieldData exceptionSpec) { 748 private void buildGenericValueExecute(CodeTreeBuilder builder, SpecializationData specialization, NodeFieldData field, NodeFieldData exceptionSpec) {
749 ActualParameter specParameter = specialization.findParameter(field.getName()); 749 ActualParameter specParameter = specialization.findParameter(field.getName());
750 750 NodeData node = specialization.getNode();
751 boolean shortCircuit = startShortCircuit(builder, specialization, field, exceptionSpec); 751 boolean shortCircuit = startShortCircuit(builder, specialization, field, exceptionSpec);
752 752
753 builder.startStatement(); 753 builder.startStatement();
754 if (!shortCircuit) { 754 if (!shortCircuit) {
755 builder.type(specialization.getNode().getTypeSystem().getGenericType()); 755 builder.type(specialization.getNode().getTypeSystem().getGenericType());
756 builder.string(" "); 756 builder.string(" ");
757 } 757 }
758 758
759 builder.string(valueName(specialization, specParameter)); 759 builder.string(valueName(specialization, specParameter));
760 builder.string(" = "); 760 builder.string(" = ");
761 ExecutableTypeData genericExecutableType = field.getNodeData().findGenericExecutableType(getContext()); 761 ExecutableTypeData genericExecutableType = field.getNodeData().findGenericExecutableType(getContext(), specParameter.getActualTypeData(node.getTypeSystem()));
762 if (genericExecutableType == null) { 762 if (genericExecutableType == null) {
763 throw new AssertionError("Must have generic executable type. Parser validation most likely failed. " + Arrays.toString(field.getNodeData().getExecutableTypes())); 763 throw new AssertionError("Must have generic executable type. Parser validation most likely failed. " + Arrays.toString(field.getNodeData().getExecutableTypes()));
764 } 764 }
765 buildExecute(builder, field, genericExecutableType); 765 buildExecute(builder, field, genericExecutableType);
766 builder.end(); 766 builder.end();