diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java @ 8662:5eeade940236

Fixed user generic signature must not match generated generic signature.
author Christian Humer <christian.humer@gmail.com>
date Sat, 06 Apr 2013 16:26:19 +0200
parents 586b5e117c44
children e2b471ba533a
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java	Sat Apr 06 14:33:39 2013 +0200
+++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/NodeParser.java	Sat Apr 06 16:26:19 2013 +0200
@@ -328,6 +328,23 @@
         }
 
         if (genericSpecialization != null) {
+            if (genericSpecialization.isUseSpecializationsForGeneric()) {
+                for (ActualParameter parameter : genericSpecialization.getReturnTypeAndParameters()) {
+                    if (Utils.isObject(parameter.getActualType())) {
+                        continue;
+                    }
+                    Set<String> types = new HashSet<>();
+                    for (SpecializationData specialization : specializations) {
+                        ActualParameter actualParameter = specialization.findParameter(parameter.getLocalName());
+                        if (actualParameter != null) {
+                            types.add(Utils.getQualifiedName(actualParameter.getActualType()));
+                        }
+                    }
+                    if (types.size() > 1) {
+                        genericSpecialization.replaceParameter(parameter.getLocalName(), new ActualParameter(parameter, node.getTypeSystem().getGenericType()));
+                    }
+                }
+            }
             TemplateMethod uninializedMethod = new TemplateMethod("Uninitialized", node, genericSpecialization.getSpecification(), null, null, genericSpecialization.getReturnType(),
                             genericSpecialization.getParameters());
             // should not use messages from generic specialization