changeset 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 b81f42160093
children a219e2a5a92f
files graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WriteLocalNode.java
diffstat 2 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Wed Mar 13 21:11:03 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Thu Mar 14 13:10:29 2013 +0100
@@ -189,7 +189,7 @@
             return prefix;
         }
 
-        if (!specialization.getNode().getGenericSpecialization().isUseSpecializationsForGeneric() || !specialization.getNode().needsRewrites(context)) {
+        if (!specialization.getNode().needsRewrites(context)) {
             return prefix;
         }
 
@@ -939,7 +939,7 @@
 
         private List<CodeExecutableElement> createGeneratedGenericMethod(NodeData node) {
             TypeMirror genericReturnType = node.getGenericSpecialization().getReturnType().getActualType();
-            if (node.getGenericSpecialization().isUseSpecializationsForGeneric() && node.needsRewrites(context)) {
+            if (node.needsRewrites(context)) {
                 List<CodeExecutableElement> methods = new ArrayList<>();
 
                 List<SpecializationData> specializations = node.getSpecializations();
@@ -1219,7 +1219,14 @@
             if (specialization.getMethod() == null && !node.needsRewrites(context)) {
                 emitEncounteredSynthetic(builder);
             } else if (specialization.isUninitialized() || specialization.isGeneric()) {
-                builder.startReturn().startCall(factoryClassName(node), generatedGenericMethodName(null));
+                String genericMethodName;
+                if (!specialization.isUseSpecializationsForGeneric()) {
+                    genericMethodName = generatedGenericMethodName(specialization);
+                } else {
+                    genericMethodName = generatedGenericMethodName(null);
+                }
+
+                builder.startReturn().startCall(factoryClassName(node), genericMethodName);
                 builder.string("this");
                 addValueParameterNames(builder, specialization, null, true, true);
                 builder.end().end();
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WriteLocalNode.java	Wed Mar 13 21:11:03 2013 +0100
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WriteLocalNode.java	Thu Mar 14 13:10:29 2013 +0100
@@ -64,7 +64,7 @@
         return right;
     }
 
-    @Generic
+    @Generic(useSpecializations = false)
     public Object writeGeneric(VirtualFrame frame, Object right) {
         frame.setObject(slot, right);
         return right;