Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java @ 18771:15fe16c45d64
Truffle-DSL: changed specialization class naming scheme to use method name. This usually leads to shorter specialization class names.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 05 Jan 2015 01:31:07 +0100 |
parents | a665483c3881 |
children | 7382bbcac3a3 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Fri Jan 02 14:31:51 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Mon Jan 05 01:31:07 2015 +0100 @@ -597,27 +597,8 @@ } } - List<SpecializationData> needsId = new ArrayList<>(); - for (SpecializationData specialization : node.getSpecializations()) { - if (specialization.isFallback()) { - specialization.setId("Generic"); - } else if (specialization.isUninitialized()) { - specialization.setId("Uninitialized"); - } else if (specialization.isPolymorphic()) { - specialization.setId("Polymorphic"); - } else if (specialization.isSpecialized()) { - needsId.add(specialization); - } else { - throw new AssertionError(); - } - } - // verify specialization parameter length - List<String> ids = initializeSpecializationIds(needsId); - for (int i = 0; i < ids.size(); i++) { - needsId.get(i).setId(ids.get(i)); - } - + initializeSpecializationIdsWithMethodNames(node.getSpecializations()); } private static void initializeOrder(NodeData node) { @@ -806,91 +787,34 @@ } } - private static List<String> initializeSpecializationIds(List<SpecializationData> specializations) { - int lastSize = -1; - List<List<String>> signatureChunks = new ArrayList<>(); - for (SpecializationData other : specializations) { - if (!other.isSpecialized()) { - continue; - } - List<String> paramIds = new LinkedList<>(); - paramIds.add(ElementUtils.getTypeId(other.getReturnType().getType())); - for (Parameter param : other.getParameters()) { - if (param.getSpecification().getExecution() == null) { - continue; + private static void initializeSpecializationIdsWithMethodNames(List<SpecializationData> specializations) { + List<String> signatures = new ArrayList<>(); + for (SpecializationData specialization : specializations) { + if (specialization.isFallback()) { + signatures.add("Fallback"); + } else if (specialization.isUninitialized()) { + signatures.add("Uninitialized"); + } else if (specialization.isPolymorphic()) { + signatures.add("Polymorphic"); + } else { + String name = specialization.getMethodName(); + + // hack for name clashes with BaseNode. + if (name.equalsIgnoreCase("base")) { + name = name + "0"; } - paramIds.add(ElementUtils.getTypeId(param.getType())); - } - assert lastSize == -1 || lastSize == paramIds.size(); - if (lastSize != -1 && lastSize != paramIds.size()) { - throw new AssertionError(); - } - signatureChunks.add(paramIds); - lastSize = paramIds.size(); - } - // reduce id vertically - for (int i = 0; i < lastSize; i++) { - String prev = null; - boolean allSame = true; - for (List<String> signature : signatureChunks) { - String arg = signature.get(i); - if (prev == null) { - prev = arg; - continue; - } else if (!prev.equals(arg)) { - allSame = false; - break; - } - prev = arg; - } - - if (allSame) { - for (List<String> signature : signatureChunks) { - signature.remove(i); - } - lastSize--; + signatures.add(ElementUtils.firstLetterUpperCase(name)); } } - // reduce id horizontally - for (List<String> signature : signatureChunks) { - if (signature.isEmpty()) { - continue; - } - String prev = null; - boolean allSame = true; - for (String arg : signature) { - if (prev == null) { - prev = arg; - continue; - } else if (!prev.equals(arg)) { - allSame = false; - break; - } - prev = arg; - } + renameDuplicateIds(signatures); + for (int i = 0; i < specializations.size(); i++) { + specializations.get(i).setId(signatures.get(i)); + } + } - if (allSame) { - signature.clear(); - signature.add(prev); - } - } - - // create signatures - List<String> signatures = new ArrayList<>(); - for (List<String> signatureChunk : signatureChunks) { - StringBuilder b = new StringBuilder(); - if (signatureChunk.isEmpty()) { - b.append("Default"); - } else { - for (String s : signatureChunk) { - b.append(s); - } - } - signatures.add(b.toString()); - } - + private static void renameDuplicateIds(List<String> signatures) { Map<String, Integer> counts = new HashMap<>(); for (String s1 : signatures) { Integer count = counts.get(s1); @@ -914,8 +838,6 @@ } } } - - return signatures; } private void initializeGuards(List<? extends Element> elements, NodeData node) {