Mercurial > hg > truffle
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;