Skip to content

Commit b56720f

Browse files
authored
Fix function calling and improve error with single list params (SkriptLang#8096)
1 parent eed9e4f commit b56720f

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

src/main/java/ch/njol/skript/lang/function/FunctionReference.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import ch.njol.skript.lang.*;
88
import ch.njol.skript.lang.function.FunctionRegistry.Retrieval;
99
import ch.njol.skript.lang.function.FunctionRegistry.RetrievalResult;
10+
import ch.njol.skript.lang.parser.ParserInstance;
1011
import ch.njol.skript.log.RetainingLogHandler;
1112
import ch.njol.skript.log.SkriptLogger;
1213
import ch.njol.skript.registrations.Classes;
@@ -323,6 +324,7 @@ private Function<?> getRegisteredFunction() {
323324
}
324325

325326
Retrieval<Function<?>> attempt = FunctionRegistry.getRegistry().getFunction(script, functionName, parameterTypes);
327+
326328
if (attempt.result() == RetrievalResult.EXACT) {
327329
return attempt.retrieved();
328330
}

src/main/java/ch/njol/skript/lang/function/FunctionRegistry.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,8 @@ private Retrieval<Signature<?>> getSignature(@NotNull NamespaceIdentifier namesp
475475
}
476476
}
477477

478-
return Set.of(candidate);
478+
candidates.add(candidate);
479+
continue;
479480
}
480481

481482
// if argument counts are not possible, skip

src/test/skript/tests/misc/function overloading.sk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,19 @@ parse:
8585
test "function overloading with supertype":
8686
assert {FunctionOverloadingSupertype1::parse::*} is not set
8787
assert {FunctionOverloadingSupertype2::parse::*} is not set
88+
89+
function overloading_listarg(x: int, y: int) :: int:
90+
return 1
91+
92+
function overloading_listarg(x: int, y: int, z: int) :: int:
93+
return 2
94+
95+
function overloading_listarg(x: ints) :: int:
96+
return 3
97+
98+
test "function overloading with single param lists":
99+
assert overloading_listarg(1) = 3
100+
assert overloading_listarg(1, 2) = 1
101+
assert overloading_listarg(1, 2, 3) = 2
102+
assert overloading_listarg(1, 2, 3, 4) = 3
103+
assert overloading_listarg(1, 2, 3, 4, 5) = 3

0 commit comments

Comments
 (0)