MyCustomClass.new + Optimization

You can now pass the custom class constructor as a field.
This commit is contained in:
Jaime Humberto Macias Bustamante
2025-08-03 00:08:43 -07:00
parent 7f087eab03
commit f936877339
2 changed files with 15 additions and 5 deletions
+8 -5
View File
@@ -141,11 +141,14 @@ class CustomClass implements IHScriptCustomClassBehaviour {
}
public function call(name:String, ?args:Array<Dynamic>, ?toSuper:Bool = false):Dynamic {
// TODO: optimize this
var fnName = toSuper ? '_HX_SUPER__$name' : name;
var fn:Dynamic = __interp.variables.get(fnName);
if(toSuper && fn == null)
fn = __interp.variables.get(name);
var superFnName:Null<String> = toSuper ? '_HX_SUPER__$name' : null;
var fn:Dynamic = {
if(toSuper && __interp.variables.exists(superFnName)) {
__interp.variables.get(superFnName);
}
else
__interp.variables.get(name);
};
if (fn != null && Reflect.isFunction(fn))
return UnsafeReflect.callMethodUnsafe(null, fn, (args == null) ? [] : args);
+7
View File
@@ -118,6 +118,13 @@ class CustomClassHandler implements IHScriptCustomConstructor implements IHScrip
}
public function hget(name:String):Dynamic {
if(name == 'new') {
var __constructor = Reflect.makeVarArgs(function(args:Array<Dynamic>) {
return this.hnew(args);
});
return __constructor;
}
if(hasField(name)) {
return getField(name);
}