diff --git a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprExpectedType.java b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprExpectedType.java index 822301048..53e90a6d7 100644 --- a/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprExpectedType.java +++ b/de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/AttrExprExpectedType.java @@ -37,7 +37,7 @@ public class AttrExprExpectedType { } else if (parent instanceof StmtSet) { StmtSet stmtSet = (StmtSet) parent; if (stmtSet.getRight() == expr) { - return stmtSet.getUpdatedExpr().attrTyp(); + return stmtSet.getUpdatedExpr().attrTypRaw(); } else if (stmtSet.getUpdatedExpr() == expr) { return WurstTypeUnknown.instance(); } diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java index 1c71d5868..9fc21b2ef 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/GenericsTests.java @@ -958,6 +958,25 @@ public void genericFunctionOverload() { // #628 ); } + @Test + public void genericToIndexFieldAssignment() { // #647 + testAssertOkLines(true, + "package test", + "native testSuccess()", + "class C", + " T x", + "function stringToIndex(string s) returns int", + " return 42", + "function stringFromIndex(int i) returns string", + " return \"42\"", + "init", + " C c = new C", + " c.x = \"42\"", + " if c.x == \"42\"", + " testSuccess()" + ); + } + @Test public void extensionFunc() { // #718 testAssertOkLines(false, diff --git a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java index 8a6d6b14c..014a3d9ce 100644 --- a/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java +++ b/de.peeeq.wurstscript/src/test/java/tests/wurstscript/tests/LuaTranslationTests.java @@ -1373,6 +1373,25 @@ public void newGenericsStringFieldAssignmentRoundTripsInLua() throws IOException assertFunctionBodyContains(compiled, "testGenericStringField", "__wurst_stringFromIndex", false); } + @Test + public void legacyGenericToIndexFieldAssignmentRoundTripsInLua() { + test().testLua(true).executeProg().lines( + "package test", + "native testSuccess()", + "class C", + " T x", + "function stringToIndex(string s) returns int", + " return 42", + "function stringFromIndex(int i) returns string", + " return \"42\"", + "init", + " C c = new C", + " c.x = \"42\"", + " if c.x == \"42\"", + " testSuccess()" + ); + } + @Test public void genericOverrideChainBindsRootSlotToMostSpecificImplInLua() throws IOException { test().testLua(true).compilationUnits(genericOverrideReproUnits());