Skip to content

Commit 9722c40

Browse files
committed
fix: use overloads for pcall and xpcall types
1 parent f0f59fb commit 9722c40

2 files changed

Lines changed: 19 additions & 44 deletions

File tree

core/global.d.ts

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -116,28 +116,15 @@ declare function pairs<T>(t: T): [(t: T, index?: any) => [any, any], T];
116116
* Calls function f with the given arguments in protected mode. This means that any error inside f is not propagated; instead, pcall catches the error and returns a status code. Its first result is the status code (a boolean), which is true if the call succeeds without errors. In such case, pcall also returns all results from the call, after this first result. In case of any error, pcall returns false plus the error message.
117117
* @tupleReturn
118118
*/
119-
declare function pcall<T extends (...args: any[]) => any>(
120-
f: T,
121-
...args: T extends (this: infer This, ...args: infer Args) => any
122-
? void extends This
123-
? Args
124-
: Args extends [infer T1]
125-
? [{} extends This ? any : This, T1]
126-
: Args extends [infer T1, infer T2]
127-
? [{} extends This ? any : This, T1, T2]
128-
: Args extends [infer T1, infer T2, infer T3]
129-
? [{} extends This ? any : This, T1, T2, T3]
130-
: Args extends [infer T1, infer T2, infer T3, infer T4]
131-
? [{} extends This ? any : This, T1, T2, T3, T4]
132-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5]
133-
? [{} extends This ? any : This, T1, T2, T3, T4, T5]
134-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5, infer T6]
135-
? [{} extends This ? any : This, T1, T2, T3, T4, T5, T6]
136-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7]
137-
? [{} extends This ? any : This, T1, T2, T3, T4, T5, T6, T7]
138-
: [{} extends This ? any : This, ...Args[number][]]
139-
: never
140-
): [true, ReturnType<T>] | [false, string];
119+
declare function pcall<This, Args extends any[], R>(
120+
f: (this: This, ...args: Args) => R,
121+
context: This,
122+
...args: Args
123+
): [true, R] | [false, string];
124+
declare function pcall<A extends any[], R>(
125+
f: (this: void, ...args: A) => R,
126+
...args: A
127+
): [true, R] | [false, string];
141128

142129
/**
143130
* Receives any number of arguments and prints their values to stdout, using the tostring function to convert each argument to a string. print is not intended for formatted output, but only as a quick way to show a value, for instance for debugging. For complete control over the output, use string.format and io.write.

special/5.2-plus-or-jit.d.ts

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,29 +37,17 @@ declare function loadfile(
3737
* This function is similar to pcall, except that it sets a new message handler msgh.
3838
* @tupleReturn
3939
*/
40-
declare function xpcall<T extends (...args: any[]) => any, E>(
41-
f: T,
40+
declare function xpcall<This, Args extends any[], R, E>(
41+
f: (this: This, ...args: Args) => R,
4242
msgh: (err: any) => E,
43-
...args: T extends (this: infer This, ...args: infer Args) => any
44-
? void extends This
45-
? Args
46-
: Args extends [infer T1]
47-
? [{} extends This ? any : This, T1]
48-
: Args extends [infer T1, infer T2]
49-
? [{} extends This ? any : This, T1, T2]
50-
: Args extends [infer T1, infer T2, infer T3]
51-
? [{} extends This ? any : This, T1, T2, T3]
52-
: Args extends [infer T1, infer T2, infer T3, infer T4]
53-
? [{} extends This ? any : This, T1, T2, T3, T4]
54-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5]
55-
? [{} extends This ? any : This, T1, T2, T3, T4, T5]
56-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5, infer T6]
57-
? [{} extends This ? any : This, T1, T2, T3, T4, T5, T6]
58-
: Args extends [infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7]
59-
? [{} extends This ? any : This, T1, T2, T3, T4, T5, T6, T7]
60-
: [{} extends This ? any : This, ...Args[number][]]
61-
: never
62-
): [true, ReturnType<T>] | [false, E];
43+
context: This,
44+
...args: Args
45+
): [true, R] | [false, E];
46+
declare function xpcall<A extends any[], R, E>(
47+
f: (this: void, ...args: A) => R,
48+
msgh: (err: any) => E,
49+
...args: A
50+
): [true, R] | [false, E];
6351

6452
declare namespace debug {
6553
interface FunctionInfo<T extends Function> {

0 commit comments

Comments
 (0)