comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 13532:85b485b1e8e1

Truffle-DSL: removed support for implicit parameters. not needed anymore.
author Christian Humer <christian.humer@gmail.com>
date Tue, 07 Jan 2014 20:06:27 +0100
parents 0576e9a0358e
children b466199f19e1
comparison
equal deleted inserted replaced
13531:1f870eaf1e96 13532:85b485b1e8e1
123 123
124 method.addParameter(new CodeVariableElement(parameter.getType(), name)); 124 method.addParameter(new CodeVariableElement(parameter.getType(), name));
125 } 125 }
126 } 126 }
127 127
128 private void addInternalValueParameterNames(CodeTreeBuilder builder, TemplateMethod source, TemplateMethod specialization, String unexpectedValueName, boolean forceFrame, boolean includeImplicit, 128 private void addInternalValueParameterNames(CodeTreeBuilder builder, TemplateMethod source, TemplateMethod specialization, String unexpectedValueName, boolean forceFrame,
129 Map<String, String> customNames) { 129 Map<String, String> customNames) {
130 if (forceFrame && specialization.getSpecification().findParameterSpec("frame") != null) { 130 if (forceFrame && specialization.getSpecification().findParameterSpec("frame") != null) {
131 builder.string("frameValue"); 131 builder.string("frameValue");
132 } 132 }
133 for (ActualParameter parameter : specialization.getParameters()) { 133 for (ActualParameter parameter : specialization.getParameters()) {
134 ParameterSpec spec = parameter.getSpecification(); 134 ParameterSpec spec = parameter.getSpecification();
135 if (forceFrame && spec.getName().equals("frame")) { 135 if (forceFrame && spec.getName().equals("frame")) {
136 continue; 136 continue;
137 } 137 }
138 138
139 if (!includeImplicit && (parameter.isImplicit())) {
140 continue;
141 }
142 if (parameter.getSpecification().isLocal()) { 139 if (parameter.getSpecification().isLocal()) {
143 continue; 140 continue;
144 } 141 }
145 142
146 ActualParameter sourceParameter = source.findParameter(parameter.getLocalName()); 143 ActualParameter sourceParameter = source.findParameter(parameter.getLocalName());
238 } 235 }
239 if (valueParameter == null) { 236 if (valueParameter == null) {
240 valueParameter = targetParameter; 237 valueParameter = targetParameter;
241 } 238 }
242 TypeMirror targetType = targetParameter.getType(); 239 TypeMirror targetType = targetParameter.getType();
243
244 if (targetParameter.isImplicit() || valueParameter.isImplicit()) {
245 continue;
246 }
247
248 TypeMirror valueType = null; 240 TypeMirror valueType = null;
249 if (valueParameter != null) { 241 if (valueParameter != null) {
250 valueType = valueParameter.getType(); 242 valueType = valueParameter.getType();
251 } 243 }
252 244
340 332
341 protected void emitEncounteredSynthetic(CodeTreeBuilder builder, TemplateMethod current) { 333 protected void emitEncounteredSynthetic(CodeTreeBuilder builder, TemplateMethod current) {
342 builder.startThrow().startNew(getContext().getType(UnsupportedOperationException.class)); 334 builder.startThrow().startNew(getContext().getType(UnsupportedOperationException.class));
343 builder.startCall("createInfo0"); 335 builder.startCall("createInfo0");
344 builder.doubleQuote("Unsupported values"); 336 builder.doubleQuote("Unsupported values");
345 addInternalValueParameterNames(builder, current, current, null, false, true, null); 337 addInternalValueParameterNames(builder, current, current, null, false, null);
346 builder.end().end().end(); 338 builder.end().end().end();
347 } 339 }
348 340
349 private static List<ExecutableElement> findUserConstructors(TypeMirror nodeType) { 341 private static List<ExecutableElement> findUserConstructors(TypeMirror nodeType) {
350 List<ExecutableElement> constructors = new ArrayList<>(); 342 List<ExecutableElement> constructors = new ArrayList<>();
1282 break; 1274 break;
1283 } 1275 }
1284 } 1276 }
1285 1277
1286 builder.startStatement().string("String message = ").startCall("createInfo0").string("reason"); 1278 builder.startStatement().string("String message = ").startCall("createInfo0").string("reason");
1287 addInternalValueParameterNames(builder, node.getGenericSpecialization(), node.getGenericSpecialization(), null, false, true, null); 1279 addInternalValueParameterNames(builder, node.getGenericSpecialization(), node.getGenericSpecialization(), null, false, null);
1288 builder.end().end(); 1280 builder.end().end();
1289 1281
1290 final String currentNodeVar = currentNode; 1282 final String currentNodeVar = currentNode;
1291 builder.tree(createExecuteTree(builder, node.getGenericSpecialization(), rootGroup, true, new CodeBlock<SpecializationData>() { 1283 builder.tree(createExecuteTree(builder, node.getGenericSpecialization(), rootGroup, true, new CodeBlock<SpecializationData>() {
1292 1284
1747 if (replace == null) { 1739 if (replace == null) {
1748 replace = replaceCall; 1740 replace = replaceCall;
1749 } 1741 }
1750 if (current.isGeneric()) { 1742 if (current.isGeneric()) {
1751 builder.startReturn().tree(replace).string(".").startCall(EXECUTE_GENERIC_NAME); 1743 builder.startReturn().tree(replace).string(".").startCall(EXECUTE_GENERIC_NAME);
1752 addInternalValueParameterNames(builder, source, current, null, current.getNode().needsFrame(getContext()), true, null); 1744 addInternalValueParameterNames(builder, source, current, null, current.getNode().needsFrame(getContext()), null);
1753 builder.end().end(); 1745 builder.end().end();
1754 } else if (current.getMethod() == null) { 1746 } else if (current.getMethod() == null) {
1755 if (replaceCall != null) { 1747 if (replaceCall != null) {
1756 builder.statement(replaceCall); 1748 builder.statement(replaceCall);
1757 } 1749 }
1806 builder.startStatement().startCall("polymorphic", "setNext0").string("currentCopy").end().end(); 1798 builder.startStatement().startCall("polymorphic", "setNext0").string("currentCopy").end().end();
1807 builder.startStatement().startCall("currentCopy", "setNext0").startNew(uninitializedName).string(currentNode).end().end().end(); 1799 builder.startStatement().startCall("currentCopy", "setNext0").startNew(uninitializedName).string(currentNode).end().end().end();
1808 1800
1809 builder.startReturn(); 1801 builder.startReturn();
1810 builder.startCall("currentCopy.next0", EXECUTE_POLYMORPHIC_NAME); 1802 builder.startCall("currentCopy.next0", EXECUTE_POLYMORPHIC_NAME);
1811 addInternalValueParameterNames(builder, node.getGenericSpecialization(), node.getGenericSpecialization(), null, true, true, null); 1803 addInternalValueParameterNames(builder, node.getGenericSpecialization(), node.getGenericSpecialization(), null, true, null);
1812 builder.end(); 1804 builder.end();
1813 builder.end(); 1805 builder.end();
1814 1806
1815 return builder.getRoot(); 1807 return builder.getRoot();
1816 } 1808 }
2268 2260
2269 builder.startReturn(); 2261 builder.startReturn();
2270 2262
2271 CodeTreeBuilder execute = new CodeTreeBuilder(builder); 2263 CodeTreeBuilder execute = new CodeTreeBuilder(builder);
2272 execute.startCall("next0", EXECUTE_POLYMORPHIC_NAME); 2264 execute.startCall("next0", EXECUTE_POLYMORPHIC_NAME);
2273 addInternalValueParameterNames(execute, specialization, polymorphic, param.getLocalName(), true, true, null); 2265 addInternalValueParameterNames(execute, specialization, polymorphic, param.getLocalName(), true, null);
2274 execute.end(); 2266 execute.end();
2275 2267
2276 TypeData sourceType = polymorphic.getReturnType().getTypeSystemType(); 2268 TypeData sourceType = polymorphic.getReturnType().getTypeSystemType();
2277 2269
2278 builder.tree(createExpectExecutableType(node, sourceType, currentExecutable, execute.getRoot())); 2270 builder.tree(createExpectExecutableType(node, sourceType, currentExecutable, execute.getRoot()));
2402 NodeData node = current.getNode(); 2394 NodeData node = current.getNode();
2403 SpecializationData generic = node.getGenericSpecialization(); 2395 SpecializationData generic = node.getGenericSpecialization();
2404 CodeTreeBuilder specializeCall = new CodeTreeBuilder(parent); 2396 CodeTreeBuilder specializeCall = new CodeTreeBuilder(parent);
2405 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); 2397 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME);
2406 specializeCall.string(String.valueOf(node.getSpecializations().indexOf(current))); 2398 specializeCall.string(String.valueOf(node.getSpecializations().indexOf(current)));
2407 addInternalValueParameterNames(specializeCall, generic, node.getGenericSpecialization(), exceptionParam != null ? exceptionParam.getLocalName() : null, true, true, null); 2399 addInternalValueParameterNames(specializeCall, generic, node.getGenericSpecialization(), exceptionParam != null ? exceptionParam.getLocalName() : null, true, null);
2408 specializeCall.doubleQuote(reason); 2400 specializeCall.doubleQuote(reason);
2409 specializeCall.end().end(); 2401 specializeCall.end().end();
2410 2402
2411 CodeTreeBuilder builder = new CodeTreeBuilder(parent); 2403 CodeTreeBuilder builder = new CodeTreeBuilder(parent);
2412 2404
2681 } else if (specialization.isUninitialized()) { 2673 } else if (specialization.isUninitialized()) {
2682 builder.tree(createAppendPolymorphic(builder, specialization)); 2674 builder.tree(createAppendPolymorphic(builder, specialization));
2683 } else { 2675 } else {
2684 CodeTreeBuilder elseBuilder = new CodeTreeBuilder(builder); 2676 CodeTreeBuilder elseBuilder = new CodeTreeBuilder(builder);
2685 elseBuilder.startReturn().startCall("this.next0", EXECUTE_POLYMORPHIC_NAME); 2677 elseBuilder.startReturn().startCall("this.next0", EXECUTE_POLYMORPHIC_NAME);
2686 addInternalValueParameterNames(elseBuilder, polymorphic, polymorphic, null, true, true, null); 2678 addInternalValueParameterNames(elseBuilder, polymorphic, polymorphic, null, true, null);
2687 elseBuilder.end().end(); 2679 elseBuilder.end().end();
2688 2680
2689 boolean forceElse = specialization.getExceptions().size() > 0; 2681 boolean forceElse = specialization.getExceptions().size() > 0;
2690 builder.tree(createExecuteTree(builder, polymorphic, SpecializationGroup.create(specialization), false, new CodeBlock<SpecializationData>() { 2682 builder.tree(createExecuteTree(builder, polymorphic, SpecializationGroup.create(specialization), false, new CodeBlock<SpecializationData>() {
2691 2683
2722 builder.end().end(); 2714 builder.end().end();
2723 2715
2724 CodeTreeBuilder specializeCall = new CodeTreeBuilder(builder); 2716 CodeTreeBuilder specializeCall = new CodeTreeBuilder(builder);
2725 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); 2717 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME);
2726 specializeCall.string("0"); 2718 specializeCall.string("0");
2727 addInternalValueParameterNames(specializeCall, specialization, node.getGenericSpecialization(), null, true, true, null); 2719 addInternalValueParameterNames(specializeCall, specialization, node.getGenericSpecialization(), null, true, null);
2728 specializeCall.startGroup().doubleQuote("Uninitialized polymorphic (").string(" + depth + ").doubleQuote("/" + node.getPolymorphicDepth() + ")").end(); 2720 specializeCall.startGroup().doubleQuote("Uninitialized polymorphic (").string(" + depth + ").doubleQuote("/" + node.getPolymorphicDepth() + ")").end();
2729 specializeCall.end().end(); 2721 specializeCall.end().end();
2730 2722
2731 builder.declaration(node.getGenericSpecialization().getReturnType().getType(), "result", specializeCall.getRoot()); 2723 builder.declaration(node.getGenericSpecialization().getReturnType().getType(), "result", specializeCall.getRoot());
2732 2724
2902 } 2894 }
2903 2895
2904 CodeTreeBuilder returnBuilder = new CodeTreeBuilder(parent); 2896 CodeTreeBuilder returnBuilder = new CodeTreeBuilder(parent);
2905 if (specialization.isPolymorphic()) { 2897 if (specialization.isPolymorphic()) {
2906 returnBuilder.startCall("next0", EXECUTE_POLYMORPHIC_NAME); 2898 returnBuilder.startCall("next0", EXECUTE_POLYMORPHIC_NAME);
2907 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, true, true, null); 2899 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, true, null);
2908 returnBuilder.end(); 2900 returnBuilder.end();
2909 } else if (specialization.isUninitialized()) { 2901 } else if (specialization.isUninitialized()) {
2910 returnBuilder.startCall("super", EXECUTE_SPECIALIZE_NAME); 2902 returnBuilder.startCall("super", EXECUTE_SPECIALIZE_NAME);
2911 returnBuilder.string("0"); 2903 returnBuilder.string("0");
2912 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, true, true, null); 2904 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, true, null);
2913 returnBuilder.doubleQuote("Uninitialized monomorphic"); 2905 returnBuilder.doubleQuote("Uninitialized monomorphic");
2914 returnBuilder.end(); 2906 returnBuilder.end();
2915 } else if (specialization.getMethod() == null && !node.needsRewrites(context)) { 2907 } else if (specialization.getMethod() == null && !node.needsRewrites(context)) {
2916 emitEncounteredSynthetic(builder, specialization); 2908 emitEncounteredSynthetic(builder, specialization);
2917 } else if (specialization.isGeneric()) { 2909 } else if (specialization.isGeneric()) {
2918 returnBuilder.startCall("super", EXECUTE_GENERIC_NAME); 2910 returnBuilder.startCall("super", EXECUTE_GENERIC_NAME);
2919 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, node.needsFrame(getContext()), true, null); 2911 addInternalValueParameterNames(returnBuilder, specialization, specialization, null, node.needsFrame(getContext()), null);
2920 returnBuilder.end(); 2912 returnBuilder.end();
2921 } else { 2913 } else {
2922 returnBuilder.tree(createTemplateMethodCall(returnBuilder, null, specialization, specialization, null)); 2914 returnBuilder.tree(createTemplateMethodCall(returnBuilder, null, specialization, specialization, null));
2923 } 2915 }
2924 2916