Mercurial > hg > truffle
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java @ 18761:a665483c3881
Truffle-DSL: new node layout implementation.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 29 Dec 2014 23:38:54 +0100 |
parents | 59bf50cc5a32 |
children | 674c8a6d5e6c |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Mon Dec 29 23:38:50 2014 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeCodeGenerator.java Mon Dec 29 23:38:54 2014 +0100 @@ -95,19 +95,21 @@ } else { // wrap all types into the first node CodeTypeElement first = generatedNodes.get(0); - CodeTypeElement last = generatedNodes.get(1); - - for (CodeTypeElement generatedNode : generatedNodes) { - if (first != generatedNode) { - first.add(makeInnerClass(generatedNode)); + CodeTypeElement second = first; + if (generatedNodes.size() > 1) { + second = generatedNodes.get(1); + for (CodeTypeElement generatedNode : generatedNodes) { + if (first != generatedNode) { + first.add(makeInnerClass(generatedNode)); + } } } + new NodeFactoryFactory(context, node, second).createFactoryMethods(first, ElementUtils.getVisibility(node.getTemplateType().getModifiers())); ElementUtils.setVisibility(first.getModifiers(), ElementUtils.getVisibility(node.getTemplateType().getModifiers())); for (ExecutableElement constructor : ElementFilter.constructorsIn(first.getEnclosedElements())) { ElementUtils.setVisibility(((CodeExecutableElement) constructor).getModifiers(), Modifier.PRIVATE); } - NodeFactoryFactory.createFactoryMethods(context, node, first, last, ElementUtils.getVisibility(node.getTemplateType().getModifiers())); return first; } } @@ -116,7 +118,7 @@ CodeTypeElement container; Modifier visibility = ElementUtils.getVisibility(node.getTemplateType().getModifiers()); String containerName = NodeFactoryFactory.factoryClassName(node); - container = GeneratorUtils.createClass(node, modifiers(), containerName, null, false); + container = GeneratorUtils.createClass(node, null, modifiers(), containerName, null); if (visibility != null) { container.getModifiers().add(visibility); } @@ -133,13 +135,21 @@ if (!node.needsFactory()) { return Collections.emptyList(); } + if (node.getTypeSystem().getOptions().useNewLayout()) { + return Arrays.asList(new NodeGenFactory(context, node).create()); + } else { + return generateNodesOld(context, node); + } + } + + private static List<CodeTypeElement> generateNodesOld(ProcessorContext context, NodeData node) { List<CodeTypeElement> nodeTypes = new ArrayList<>(); SpecializationData generic = node.getGenericSpecialization() == null ? node.getSpecializations().get(0) : node.getGenericSpecialization(); CodeTypeElement baseNode = new NodeBaseFactory(context, node, generic).create(); nodeTypes.add(baseNode); for (SpecializationData specialization : node.getSpecializations()) { - if (!specialization.isReachable() || specialization.isGeneric()) { + if (!specialization.isReachable() || specialization.isFallback()) { continue; } if (specialization.isPolymorphic() && node.isPolymorphic(context)) {