fix: Function.bind now passess this argument, instead of the function itself

This commit is contained in:
TopchetoEU 2024-01-06 17:46:39 +02:00
parent 918f2623cd
commit 4aa757e625
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4

View File

@ -24,17 +24,20 @@ public class FunctionLib {
} }
@Expose public static FunctionValue __bind(Arguments args) { @Expose public static FunctionValue __bind(Arguments args) {
var self = args.self(FunctionValue.class); var self = args.self(FunctionValue.class);
var thisArg = args.get(0);
var bindArgs = args.slice(1).args;
return new NativeFunction(self.name + " (bound)", callArgs -> { return new NativeFunction(self.name + " (bound)", callArgs -> {
Object[] resArgs; Object[] resArgs;
if (args.n() == 0) resArgs = callArgs.args; if (args.n() == 0) resArgs = bindArgs;
else { else {
resArgs = new Object[args.n() + callArgs.n()]; resArgs = new Object[bindArgs.length + callArgs.n()];
System.arraycopy(args.args, 0, resArgs, 0, args.n()); System.arraycopy(bindArgs, 0, resArgs, 0, bindArgs.length);
System.arraycopy(callArgs.args, 0, resArgs, args.n(), callArgs.n()); System.arraycopy(callArgs.args, 0, resArgs, bindArgs.length, callArgs.n());
} }
return self.call(callArgs.ctx, self, resArgs); return self.call(callArgs.ctx, thisArg, resArgs);
}); });
} }
@Expose public static String __toString(Arguments args) { @Expose public static String __toString(Arguments args) {