# HG changeset patch # User Christian Humer # Date 1429032213 -7200 # Node ID a778fbcb8d8e1677d6ac75036a98ed6ace25f2f5 # Parent 9a83732f97ebc116b875c23b21f6741faf48ccf7 Truffle-DSL: fix polymorphic return type was always object if type had implicit casts. diff -r 9a83732f97eb -r a778fbcb8d8e graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java Tue Apr 14 19:23:33 2015 +0200 @@ -1355,6 +1355,7 @@ if (genericParameter.getLocalName().equals(TemplateMethod.FRAME_NAME)) { continue; } + boolean isReturnParameter = genericParameter == generic.getReturnType(); if (!genericParameter.getSpecification().isSignature()) { polymorphicType = genericParameter.getType(); } else { @@ -1376,18 +1377,14 @@ if (usedTypes.size() == 1) { polymorphicType = usedTypes.iterator().next(); - if (node.getTypeSystem().hasImplicitSourceTypes(polymorphicType)) { + if (!isReturnParameter && node.getTypeSystem().hasImplicitSourceTypes(polymorphicType)) { polymorphicType = context.getType(Object.class); } } else { - if (generic.getFrame() == genericParameter) { - polymorphicType = context.getType(Frame.class); - } else { - polymorphicType = context.getType(Object.class); - } + polymorphicType = context.getType(Object.class); } } - if (genericParameter == generic.getReturnType()) { + if (isReturnParameter) { returnType = polymorphicType; } else { types.add(new CodeVariableElement(polymorphicType, "param" + index));