comparison graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java @ 8361:676fa31bd3f0

Uninitialized cases produced wrong call to throw new UnsuportedOperationException.
author Christian Humer <christian.humer@gmail.com>
date Tue, 19 Mar 2013 11:30:58 +0100
parents 89006c76f737
children a80bf36c6a1e
comparison
equal deleted inserted replaced
8321:3d840eec7f2b 8361:676fa31bd3f0
1191 builder.tree(createDeoptimize(builder)); 1191 builder.tree(createDeoptimize(builder));
1192 } 1192 }
1193 1193
1194 builder.tree(createExecuteChildren(builder, specialization)); 1194 builder.tree(createExecuteChildren(builder, specialization));
1195 1195
1196 CodeTree executeNode;
1196 if (specialization.isUninitialized()) { 1197 if (specialization.isUninitialized()) {
1197 builder.tree(createSpecializeCall(builder, specialization)); 1198 builder.tree(createSpecializeCall(builder, specialization));
1198 } 1199 }
1199 1200 executeNode = createExecute(builder, specialization);
1200 CodeTree executeNode = createExecute(builder, specialization);
1201 1201
1202 SpecializationData next = specialization.findNextSpecialization(); 1202 SpecializationData next = specialization.findNextSpecialization();
1203 CodeTree returnSpecialized = null; 1203 CodeTree returnSpecialized = null;
1204 if (next != null) { 1204 if (next != null) {
1205 returnSpecialized = createReturnSpecializeAndExecute(builder, next, null); 1205 returnSpecialized = createReturnSpecializeAndExecute(builder, next, null);
1241 CodeTreeBuilder builder = new CodeTreeBuilder(parent); 1241 CodeTreeBuilder builder = new CodeTreeBuilder(parent);
1242 if (!specialization.getExceptions().isEmpty()) { 1242 if (!specialization.getExceptions().isEmpty()) {
1243 builder.startTryBlock(); 1243 builder.startTryBlock();
1244 } 1244 }
1245 1245
1246 if (specialization.getMethod() == null && !node.needsRewrites(context)) { 1246 if (specialization.isUninitialized()) {
1247 String genericMethodName = generatedGenericMethodName(null);
1248 builder.startReturn().startCall(factoryClassName(node), genericMethodName);
1249 builder.string("this");
1250 addInternalValueParameterNames(builder, specialization, null, true, true);
1251 builder.end().end();
1252 } else if (specialization.getMethod() == null && !node.needsRewrites(context)) {
1247 emitEncounteredSynthetic(builder); 1253 emitEncounteredSynthetic(builder);
1248 } else if (specialization.isUninitialized() || specialization.isGeneric()) { 1254 } else if (specialization.isGeneric()) {
1249 String genericMethodName; 1255 String genericMethodName;
1250 if (!specialization.isUseSpecializationsForGeneric()) { 1256 if (!specialization.isUseSpecializationsForGeneric()) {
1251 genericMethodName = generatedGenericMethodName(specialization); 1257 genericMethodName = generatedGenericMethodName(specialization);
1252 } else { 1258 } else {
1253 genericMethodName = generatedGenericMethodName(null); 1259 genericMethodName = generatedGenericMethodName(null);