Mercurial > hg > graal-jvmci-8
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 |