Mercurial > hg > graal-compiler
changeset 13536:419b3ea1bdd1
Truffle-DSL: removed try-catch hack for polymorphic invocations.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 07 Jan 2014 22:26:53 +0100 |
parents | e8ef44830b50 |
children | 93068303f856 |
files | graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java |
diffstat | 1 files changed, 6 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Tue Jan 07 22:06:37 2014 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java Tue Jan 07 22:26:53 2014 +0100 @@ -1163,7 +1163,7 @@ NodeChildData child = node.findChild(var.getSimpleName().toString()); if (child != null) { - method.getParameters().add(new CodeVariableElement(child.getNodeType(), child.getName())); + method.getParameters().add(new CodeVariableElement(child.getOriginalType(), child.getName())); } else { method.getParameters().add(new CodeVariableElement(var.asType(), var.getSimpleName().toString())); } @@ -2914,38 +2914,22 @@ } if (!returnBuilder.isEmpty()) { - ExecutableTypeData sourceExecutableType = node.findExecutableType(specialization.getReturnType().getTypeSystemType(), 0); - boolean sourceThrowsUnexpected = sourceExecutableType != null && sourceExecutableType.hasUnexpectedValue(getContext()); - boolean targetSupportsUnexpected = executable.hasUnexpectedValue(getContext()); - TypeData targetType = node.getTypeSystem().findTypeData(builder.findMethod().getReturnType()); TypeData sourceType = specialization.getReturnType().getTypeSystemType(); - if (specialization.isPolymorphic() && sourceThrowsUnexpected && !targetSupportsUnexpected) { - builder.startTryBlock(); - } builder.startReturn(); if (targetType == null || sourceType == null) { builder.tree(returnBuilder.getRoot()); } else if (sourceType.needsCastTo(getContext(), targetType)) { - builder.tree(createCallTypeSystemMethod(context, parent, node, TypeSystemCodeGenerator.expectTypeMethodName(targetType), returnBuilder.getRoot())); + String castMethodName = TypeSystemCodeGenerator.expectTypeMethodName(targetType); + if (!executable.hasUnexpectedValue(context)) { + castMethodName = TypeSystemCodeGenerator.asTypeMethodName(targetType); + } + builder.tree(createCallTypeSystemMethod(context, parent, node, castMethodName, returnBuilder.getRoot())); } else { builder.tree(returnBuilder.getRoot()); } builder.end(); - if (specialization.isPolymorphic() && sourceThrowsUnexpected && !targetSupportsUnexpected) { - builder.end(); - builder.startCatchBlock(getUnexpectedValueException(), "ex"); - builder.startReturn(); - CodeTree returns = CodeTreeBuilder.singleString("ex.getResult()"); - if (sourceType.needsCastTo(getContext(), targetType)) { - builder.tree(createCallTypeSystemMethod(context, parent, node, TypeSystemCodeGenerator.asTypeMethodName(targetType), returns)); - } else { - builder.tree(returns); - } - builder.end(); - builder.end(); - } } if (!specialization.getExceptions().isEmpty()) {