comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/MethodParser.java @ 8593:54e227b2e199

Refactored ParameterSpec constructors.
author Christian Humer <christian.humer@gmail.com>
date Mon, 01 Apr 2013 12:14:54 +0200
parents a80bf36c6a1e
children
comparison
equal deleted inserted replaced
8592:a80bf36c6a1e 8593:54e227b2e199
41 public NodeData getNode() { 41 public NodeData getNode() {
42 return template; 42 return template;
43 } 43 }
44 44
45 protected ParameterSpec createValueParameterSpec(String valueName, NodeData nodeData, boolean optional) { 45 protected ParameterSpec createValueParameterSpec(String valueName, NodeData nodeData, boolean optional) {
46 return new ParameterSpec(valueName, nodeData, optional, Cardinality.ONE, true); 46 ParameterSpec spec = new ParameterSpec(valueName, nodeTypeMirrors(nodeData));
47 spec.setOptional(optional);
48 spec.setSignature(true);
49 return spec;
50 }
51
52 private static List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
53 Set<TypeMirror> typeMirrors = new LinkedHashSet<>();
54
55 for (ExecutableTypeData typeData : nodeData.getExecutableTypes()) {
56 typeMirrors.add(typeData.getType().getPrimitiveType());
57 }
58
59 typeMirrors.add(nodeData.getTypeSystem().getGenericType());
60
61 return new ArrayList<>(typeMirrors);
47 } 62 }
48 63
49 protected ParameterSpec createReturnParameterSpec() { 64 protected ParameterSpec createReturnParameterSpec() {
50 return createValueParameterSpec("operation", getNode(), false); 65 return createValueParameterSpec("operation", getNode(), false);
51 } 66 }
58 @SuppressWarnings("unused") 73 @SuppressWarnings("unused")
59 protected final MethodSpec createDefaultMethodSpec(ExecutableElement method, AnnotationMirror mirror, String shortCircuitName) { 74 protected final MethodSpec createDefaultMethodSpec(ExecutableElement method, AnnotationMirror mirror, String shortCircuitName) {
60 List<ParameterSpec> defaultParameters = new ArrayList<>(); 75 List<ParameterSpec> defaultParameters = new ArrayList<>();
61 76
62 if (getNode().supportsFrame()) { 77 if (getNode().supportsFrame()) {
63 defaultParameters.add(new ParameterSpec("frame", getContext().getTruffleTypes().getFrame(), true, false)); 78 ParameterSpec frameSpec = new ParameterSpec("frame", getContext().getTruffleTypes().getFrame());
79 frameSpec.setOptional(true);
80 defaultParameters.add(frameSpec);
64 } 81 }
65 82
66 TypeMirror declaredType = Utils.findNearestEnclosingType(method).asType(); 83 TypeMirror declaredType = Utils.findNearestEnclosingType(method).asType();
67 84
68 List<TypeMirror> prefixTypes = new ArrayList<>(); 85 List<TypeMirror> prefixTypes = new ArrayList<>();
71 prefixTypes.add(getNode().getTemplateType().asType()); 88 prefixTypes.add(getNode().getTemplateType().asType());
72 } 89 }
73 90
74 for (NodeFieldData field : getNode().getFields()) { 91 for (NodeFieldData field : getNode().getFields()) {
75 if (field.getKind() == FieldKind.FIELD) { 92 if (field.getKind() == FieldKind.FIELD) {
76 ParameterSpec spec = new ParameterSpec(field.getName(), field.getType(), true, false); 93 ParameterSpec spec = new ParameterSpec(field.getName(), field.getType());
94 spec.setOptional(true);
77 spec.setLocal(true); 95 spec.setLocal(true);
78 defaultParameters.add(spec); 96 defaultParameters.add(spec);
79 } 97 }
80 } 98 }
81 99
95 String valueName = field.getName(); 113 String valueName = field.getName();
96 if (shortCircuitName != null && valueName.equals(shortCircuitName)) { 114 if (shortCircuitName != null && valueName.equals(shortCircuitName)) {
97 break; 115 break;
98 } 116 }
99 117
100 defaultParameters.add(new ParameterSpec(shortCircuitValueName(valueName), getContext().getType(boolean.class), false, false)); 118 defaultParameters.add(new ParameterSpec(shortCircuitValueName(valueName), getContext().getType(boolean.class)));
101 defaultParameters.add(createValueParameterSpec(valueName, field.getNodeData(), false)); 119 defaultParameters.add(createValueParameterSpec(valueName, field.getNodeData(), false));
102 } else { 120 } else {
103 assert false; 121 assert false;
104 } 122 }
105 } 123 }