Skip to content

Commit 68fb4bc

Browse files
committed
Fixed #860 - abstract static function in module was called instead of using the real implementation
1 parent 0b3cd2d commit 68fb4bc

File tree

4 files changed

+23
-4
lines changed

4 files changed

+23
-4
lines changed

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/attributes/OverriddenFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private static FunctionDefinition getRealFuncDef(FuncDef f, WScope scope) {
4949
if (nl.getLevel() == c.attrLevel()
5050
&& nl.getDef() instanceof FunctionDefinition
5151
&& nl instanceof FuncLink
52-
&& WurstValidator.canOverride((FuncLink) nl, fNameLink)
52+
&& WurstValidator.canOverride((FuncLink) nl, fNameLink, true)
5353
) {
5454
return ((FuncLink) nl).getDef().attrRealFuncDef();
5555
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1084,7 +1084,7 @@ public Map<ClassDef, FuncDef> getClassesWithImplementation(Collection<ClassDef>
10841084
FuncLink funcLink = (FuncLink) nameLink;
10851085
FuncDef f = (FuncDef) funcLink.getDef();
10861086
// check if function f overrides func
1087-
if (WurstValidator.canOverride(funcLink, funcNameLink)) {
1087+
if (WurstValidator.canOverride(funcLink, funcNameLink, false)) {
10881088
result.put(c, f);
10891089
}
10901090
}

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/WurstValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2063,8 +2063,8 @@ private void checkCodeArrays(TypeExprArray e) {
20632063
/**
20642064
* checks if func1 can override func2
20652065
*/
2066-
public static boolean canOverride(FuncLink func1, FuncLink func2) {
2067-
return checkOverride(func1, func2, false) == null;
2066+
public static boolean canOverride(FuncLink func1, FuncLink func2, boolean allowStaticOverride) {
2067+
return checkOverride(func1, func2, allowStaticOverride) == null;
20682068
}
20692069

20702070
/**

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,25 @@ public void overrideStatic() {
294294
);
295295
}
296296

297+
@Test
298+
public void overrideStaticAndActuallyDoStuff() {
299+
testAssertOkLines(true,
300+
"package Test",
301+
"native testSuccess()",
302+
"module Test",
303+
" abstract static function foo() returns int",
304+
" static function bar() returns int",
305+
" return foo() * foo()",
306+
"class A",
307+
" use Test",
308+
" override static function foo() returns int",
309+
" return 3",
310+
"init",
311+
" if A.bar() == 9",
312+
" testSuccess()"
313+
);
314+
}
315+
297316
@Test
298317
public void localInModuleConstructor() {
299318
testAssertOkLines(false,

0 commit comments

Comments
 (0)