Skip to content

Commit c99af94

Browse files
committed
Normalize erased generic statement block results
1 parent 3eb9de4 commit c99af94

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -945,8 +945,11 @@ public static ImExpr translate(ExprStatementsBlock e, ImTranslator translator, I
945945

946946
StmtReturn r = e.getReturnStmt();
947947
if (r != null && r.getReturnedObj() instanceof Expr) {
948-
ImExpr expr = ((Expr) r.getReturnedObj()).imTranslateExpr(translator, f);
949-
return JassIm.ImStatementExpr(statements, expr);
948+
Expr returnedExpr = (Expr) r.getReturnedObj();
949+
ImExpr expr = returnedExpr.imTranslateExpr(translator, f);
950+
expr = wrapTranslation(e, translator, expr, returnedExpr.attrTypRaw(), e.attrExpectedTypRaw());
951+
return wrapTranslation(e, translator, JassIm.ImStatementExpr(statements, expr),
952+
e.attrTypRaw(), e.attrExpectedTypRaw());
950953
} else {
951954
return ImHelper.statementExprVoid(statements);
952955
}

de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaBackendAuditTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2248,6 +2248,28 @@ public void erasedGenericPrimitiveDefaultsAreNormalizedInTypedClosures() throws
22482248
compiled.contains("return __wurst_ensureInt(Box_Box_get("));
22492249
}
22502250

2251+
@Test
2252+
public void erasedGenericPrimitiveDefaultsAreNormalizedInTypedStatementBlocks() throws IOException {
2253+
test().testLua(true).executeProg().lines(
2254+
"package Test",
2255+
"native testSuccess()",
2256+
"class Box<T:>",
2257+
" T value",
2258+
" function get() returns T",
2259+
" return value",
2260+
"init",
2261+
" let box = new Box<int>",
2262+
" int value = begin",
2263+
" return box.get()",
2264+
" end",
2265+
" if value + 1 == 1",
2266+
" testSuccess()"
2267+
);
2268+
String compiled = compiledLua("erasedGenericPrimitiveDefaultsAreNormalizedInTypedStatementBlocks");
2269+
assertTrue("typed statement blocks must normalize erased primitive results",
2270+
compiled.contains("value = __wurst_ensureInt(Box_Box_get(box))"));
2271+
}
2272+
22512273
/**
22522274
* Seeded boundary corpus for the type-assurance change. Each case varies
22532275
* the primitive type, literal value, and array slot while checking the two

0 commit comments

Comments
 (0)