Mercurial > hg > truffle
changeset 19705:2f5d4df2af90
Truffle-DSL: fixed implementation of execute methods without unexpected value for null values.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 09 Mar 2015 00:41:43 +0100 |
parents | e9e99d8dca54 |
children | dc7189b2bb5f ff556250415e |
files | graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java |
diffstat | 1 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Mon Mar 09 00:41:42 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Mon Mar 09 00:41:43 2015 +0100 @@ -867,18 +867,27 @@ locals.addReferencesTo(executeBuilder); executeBuilder.end(); + boolean hasExecutedUnexpected = executedType != null && !executedType.isGeneric() && !executedType.isVoid(); + CodeTreeBuilder contentBuilder = builder.create(); contentBuilder.startReturn(); - contentBuilder.tree(TypeSystemCodeGenerator.expect(executedType, returnType, executeBuilder.build())); + if (!hasExecutedUnexpected) { + if (executedType == null || executedType.needsCastTo(returnType)) { + contentBuilder.cast(returnType.getPrimitiveType(), executeBuilder.build()); + } else { + contentBuilder.tree(executeBuilder.build()); + } + } else { + contentBuilder.tree(TypeSystemCodeGenerator.expect(executedType, returnType, executeBuilder.build())); + } contentBuilder.end(); // try catch assert if unexpected value is not expected CodeTree content = contentBuilder.build(); - if (!execType.hasUnexpectedValue(context) && !returnType.isGeneric() && !returnType.isVoid()) { + if (!execType.hasUnexpectedValue(context) && hasExecutedUnexpected) { content = wrapTryCatchUnexpected(content); } builder.tree(content); } - return method; }