comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java @ 8277:97ee911c4c74

Fixed behaviour of useSpecializations for Generic specializations.
author Christian Humer <christian.humer@gmail.com>
date Thu, 14 Mar 2013 13:10:29 +0100
parents 4dc7034317ec
children 89006c76f737
comparison
equal deleted inserted replaced
8260:b81f42160093 8277:97ee911c4c74
187 187
188 if (specialization == null) { 188 if (specialization == null) {
189 return prefix; 189 return prefix;
190 } 190 }
191 191
192 if (!specialization.getNode().getGenericSpecialization().isUseSpecializationsForGeneric() || !specialization.getNode().needsRewrites(context)) { 192 if (!specialization.getNode().needsRewrites(context)) {
193 return prefix; 193 return prefix;
194 } 194 }
195 195
196 SpecializationData prev = null; 196 SpecializationData prev = null;
197 for (SpecializationData current : specialization.getNode().getSpecializations()) { 197 for (SpecializationData current : specialization.getNode().getSpecializations()) {
937 return method; 937 return method;
938 } 938 }
939 939
940 private List<CodeExecutableElement> createGeneratedGenericMethod(NodeData node) { 940 private List<CodeExecutableElement> createGeneratedGenericMethod(NodeData node) {
941 TypeMirror genericReturnType = node.getGenericSpecialization().getReturnType().getActualType(); 941 TypeMirror genericReturnType = node.getGenericSpecialization().getReturnType().getActualType();
942 if (node.getGenericSpecialization().isUseSpecializationsForGeneric() && node.needsRewrites(context)) { 942 if (node.needsRewrites(context)) {
943 List<CodeExecutableElement> methods = new ArrayList<>(); 943 List<CodeExecutableElement> methods = new ArrayList<>();
944 944
945 List<SpecializationData> specializations = node.getSpecializations(); 945 List<SpecializationData> specializations = node.getSpecializations();
946 SpecializationData prev = null; 946 SpecializationData prev = null;
947 for (int i = 0; i < specializations.size(); i++) { 947 for (int i = 0; i < specializations.size(); i++) {
1217 } 1217 }
1218 1218
1219 if (specialization.getMethod() == null && !node.needsRewrites(context)) { 1219 if (specialization.getMethod() == null && !node.needsRewrites(context)) {
1220 emitEncounteredSynthetic(builder); 1220 emitEncounteredSynthetic(builder);
1221 } else if (specialization.isUninitialized() || specialization.isGeneric()) { 1221 } else if (specialization.isUninitialized() || specialization.isGeneric()) {
1222 builder.startReturn().startCall(factoryClassName(node), generatedGenericMethodName(null)); 1222 String genericMethodName;
1223 if (!specialization.isUseSpecializationsForGeneric()) {
1224 genericMethodName = generatedGenericMethodName(specialization);
1225 } else {
1226 genericMethodName = generatedGenericMethodName(null);
1227 }
1228
1229 builder.startReturn().startCall(factoryClassName(node), genericMethodName);
1223 builder.string("this"); 1230 builder.string("this");
1224 addValueParameterNames(builder, specialization, null, true, true); 1231 addValueParameterNames(builder, specialization, null, true, true);
1225 builder.end().end(); 1232 builder.end().end();
1226 } else { 1233 } else {
1227 builder.startReturn(); 1234 builder.startReturn();