changeset 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 3d840eec7f2b
children 5981ea5996e8
files graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Sat Mar 16 21:55:55 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Tue Mar 19 11:30:58 2013 +0100
@@ -1193,11 +1193,11 @@
 
             builder.tree(createExecuteChildren(builder, specialization));
 
+            CodeTree executeNode;
             if (specialization.isUninitialized()) {
                 builder.tree(createSpecializeCall(builder, specialization));
             }
-
-            CodeTree executeNode = createExecute(builder, specialization);
+            executeNode = createExecute(builder, specialization);
 
             SpecializationData next = specialization.findNextSpecialization();
             CodeTree returnSpecialized = null;
@@ -1243,9 +1243,15 @@
                 builder.startTryBlock();
             }
 
-            if (specialization.getMethod() == null && !node.needsRewrites(context)) {
+            if (specialization.isUninitialized()) {
+                String genericMethodName = generatedGenericMethodName(null);
+                builder.startReturn().startCall(factoryClassName(node), genericMethodName);
+                builder.string("this");
+                addInternalValueParameterNames(builder, specialization, null, true, true);
+                builder.end().end();
+            } else if (specialization.getMethod() == null && !node.needsRewrites(context)) {
                 emitEncounteredSynthetic(builder);
-            } else if (specialization.isUninitialized() || specialization.isGeneric()) {
+            } else if (specialization.isGeneric()) {
                 String genericMethodName;
                 if (!specialization.isUseSpecializationsForGeneric()) {
                     genericMethodName = generatedGenericMethodName(specialization);