changeset 8280:2ddf84436009

Merge.
author Christian Humer <christian.humer@gmail.com>
date Thu, 14 Mar 2013 13:13:59 +0100
parents cc83fc474fd5 (diff) 0269ef50021f (current diff)
children 8fde1be81b2d 89006c76f737
files
diffstat 4 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Thu Mar 14 12:19:01 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeCodeGenerator.java	Thu Mar 14 13:13:59 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.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Thu Mar 14 12:19:01 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeData.java	Thu Mar 14 13:13:59 2013 +0100
@@ -211,8 +211,16 @@
 
     public ExecutableTypeData findAnyGenericExecutableType(ProcessorContext context) {
         List<ExecutableTypeData> types = findGenericExecutableTypes(context);
-        if (!types.isEmpty()) {
-            return types.get(0);
+        for (ExecutableTypeData type : types) {
+            if (type.getType().isGeneric()) {
+                return type;
+            }
+        }
+
+        for (ExecutableTypeData type : types) {
+            if (!type.getType().isVoid()) {
+                return type;
+            }
         }
         return null;
     }
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethodParser.java	Thu Mar 14 12:19:01 2013 +0100
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/template/TemplateMethodParser.java	Thu Mar 14 13:13:59 2013 +0100
@@ -110,6 +110,14 @@
                 valid = false;
             }
         }
+        Collections.sort(parsedMethods, new Comparator<TemplateMethod>() {
+
+            @Override
+            public int compare(TemplateMethod o1, TemplateMethod o2) {
+                return o1.getMethodName().compareTo(o2.getMethodName());
+            }
+        });
+
         if (!valid && parseNullOnError) {
             return null;
         }
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WriteLocalNode.java	Thu Mar 14 12:19:01 2013 +0100
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WriteLocalNode.java	Thu Mar 14 13:13:59 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;