Mercurial > hg > graal-compiler
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 11445:5fbd1ba4a5f3
Truffle-DSL: execute evaluated methods can now be declared using any type in the typesystem as parameters.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 28 Aug 2013 18:45:32 +0200 |
parents | b33783cbd8ce |
children | e6645c18d154 |
comparison
equal
deleted
inserted
replaced
11444:89febfdb81d2 | 11445:5fbd1ba4a5f3 |
---|---|
1763 if (targetParameter != null) { | 1763 if (targetParameter != null) { |
1764 executeParameters.add(targetParameter); | 1764 executeParameters.add(targetParameter); |
1765 } | 1765 } |
1766 } | 1766 } |
1767 | 1767 |
1768 // execute names are enforced no cast | |
1769 String[] executeParameterNames = new String[executeParameters.size()]; | |
1770 for (int i = 0; i < executeParameterNames.length; i++) { | |
1771 executeParameterNames[i] = valueName(executeParameters.get(i)); | |
1772 } | |
1773 | |
1768 builder.tree(createExecuteChildren(builder, executable, specialization, executeParameters, null, true)); | 1774 builder.tree(createExecuteChildren(builder, executable, specialization, executeParameters, null, true)); |
1769 | 1775 |
1770 CodeTree primaryExecuteCall = createTemplateMethodCall(builder, null, executable, castExecutable, null); | 1776 CodeTree primaryExecuteCall = createTemplateMethodCall(builder, null, executable, castExecutable, null, executeParameterNames); |
1771 if (needsTry) { | 1777 if (needsTry) { |
1772 if (!returnVoid) { | 1778 if (!returnVoid) { |
1773 builder.declaration(primaryType.getPrimitiveType(), "value"); | 1779 builder.declaration(primaryType.getPrimitiveType(), "value"); |
1774 } | 1780 } |
1775 builder.startTryBlock(); | 1781 builder.startTryBlock(); |
1856 } | 1862 } |
1857 | 1863 |
1858 ActualParameter sourceParameter = sourceExecutable.findParameter(targetParameter.getLocalName()); | 1864 ActualParameter sourceParameter = sourceExecutable.findParameter(targetParameter.getLocalName()); |
1859 | 1865 |
1860 String targetVariableName = valueName(targetParameter); | 1866 String targetVariableName = valueName(targetParameter); |
1867 | |
1861 CodeTree executionExpression = null; | 1868 CodeTree executionExpression = null; |
1862 if ((sourceParameter != null && cast) || sourceParameter != null) { | 1869 if ((sourceParameter != null && cast) || sourceParameter != null) { |
1863 TypeData sourceType = sourceParameter.getTypeSystemType(); | 1870 TypeData sourceType = sourceParameter.getTypeSystemType(); |
1864 if (targetExecutable == null || !sourceType.needsCastTo(getContext(), targetType)) { | 1871 if (targetExecutable == null || !sourceType.needsCastTo(getContext(), targetType)) { |
1865 if (field != null && field.isShortCircuit() && sourceParameter != null) { | 1872 if (field != null && field.isShortCircuit() && sourceParameter != null) { |
1866 builder.tree(createShortCircuitValue(builder, specialization, field, targetParameter.getPreviousParameter(), unexpectedParameter)); | 1873 builder.tree(createShortCircuitValue(builder, specialization, field, targetParameter.getPreviousParameter(), unexpectedParameter)); |
1867 } | 1874 } |
1868 builder.startStatement(); | 1875 builder.startStatement(); |
1869 builder.type(targetParameter.getType()).string(" "); | 1876 builder.type(targetParameter.getType()).string(" "); |
1870 builder.string(valueName(targetParameter)).string(" = "); | 1877 builder.string(targetVariableName).string(" = "); |
1871 builder.tree(CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter))); | 1878 builder.tree(CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter))); |
1872 builder.end(); | 1879 builder.end(); |
1873 continue; | 1880 continue; |
1874 } else { | 1881 } else { |
1875 CodeTree valueTree = CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter)); | 1882 CodeTree valueTree = CodeTreeBuilder.singleString(valueNameEvaluated(targetParameter)); |
1898 boolean unexpected = targetExecutable.hasUnexpectedValue(getContext()); | 1905 boolean unexpected = targetExecutable.hasUnexpectedValue(getContext()); |
1899 boolean cast = false; | 1906 boolean cast = false; |
1900 if (targetExecutable.getType().needsCastTo(getContext(), param.getTypeSystemType())) { | 1907 if (targetExecutable.getType().needsCastTo(getContext(), param.getTypeSystemType())) { |
1901 unexpected = true; | 1908 unexpected = true; |
1902 cast = true; | 1909 cast = true; |
1903 } | |
1904 | |
1905 if (specialization.isGeneric() && unexpected) { | |
1906 throw new AssertionError("Generic has unexpected parameters. " + specialization.toString()); | |
1907 } | 1910 } |
1908 | 1911 |
1909 builder.startStatement(); | 1912 builder.startStatement(); |
1910 | 1913 |
1911 if (!shortCircuit) { | 1914 if (!shortCircuit) { |