forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
65
Kha/Tools/linux_x64/std/jvm/Closure.hx
Normal file
65
Kha/Tools/linux_x64/std/jvm/Closure.hx
Normal file
@ -0,0 +1,65 @@
|
||||
package jvm;
|
||||
|
||||
import java.NativeArray;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@:native("haxe.jvm.Closure")
|
||||
@:nativeGen
|
||||
@:keep
|
||||
class Closure extends ClosureDispatch {
|
||||
public var context:Dynamic;
|
||||
public var method:Method;
|
||||
|
||||
var isStatic:Bool;
|
||||
var params:NativeArray<java.lang.Class<Dynamic>>;
|
||||
|
||||
public function new(context:Null<Dynamic>, method:Method) {
|
||||
super();
|
||||
this.context = context;
|
||||
this.method = method;
|
||||
isStatic = method.getModifiers() & java.lang.reflect.Modifier.STATIC != 0;
|
||||
params = method.getParameterTypes();
|
||||
}
|
||||
|
||||
public function bindTo(context:Dynamic) {
|
||||
return new Closure(context, method);
|
||||
}
|
||||
|
||||
override public function equals(other:java.lang.Object) {
|
||||
if (!Jvm.instanceof(other, Closure)) {
|
||||
return false;
|
||||
}
|
||||
var other:Closure = cast other;
|
||||
return context == other.context && method == other.method;
|
||||
}
|
||||
|
||||
public override function invokeDynamic(args:NativeArray<Dynamic>):Dynamic {
|
||||
if (isStatic && context != null) {
|
||||
var newArgs = new NativeArray(args.length + 1);
|
||||
haxe.ds.Vector.blit(cast args, 0, cast newArgs, 1, args.length);
|
||||
newArgs[0] = context;
|
||||
args = newArgs;
|
||||
}
|
||||
var args = switch (jvm.Jvm.unifyCallArguments(args, params, true)) {
|
||||
case Some(args):
|
||||
args;
|
||||
case None:
|
||||
args;
|
||||
};
|
||||
try {
|
||||
return method.invoke(context, args);
|
||||
} catch (e:java.lang.reflect.InvocationTargetException) {
|
||||
throw e.getCause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@:native("haxe.jvm.ClosureDispatch")
|
||||
extern class ClosureDispatch extends Function {}
|
||||
|
||||
@:native("haxe.jvm.VarArgs")
|
||||
extern class VarArgs extends Function {
|
||||
var func:Function;
|
||||
|
||||
public function new(func:Function):Void;
|
||||
}
|
Reference in New Issue
Block a user