diff --git a/hscript/CustomClass.hx b/hscript/CustomClass.hx index f9caee0..b46404b 100644 --- a/hscript/CustomClass.hx +++ b/hscript/CustomClass.hx @@ -141,11 +141,14 @@ class CustomClass implements IHScriptCustomClassBehaviour { } public function call(name:String, ?args:Array, ?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 = 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); diff --git a/hscript/CustomClassHandler.hx b/hscript/CustomClassHandler.hx index f416a5e..9cb1f94 100644 --- a/hscript/CustomClassHandler.hx +++ b/hscript/CustomClassHandler.hx @@ -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) { + return this.hnew(args); + }); + return __constructor; + } + if(hasField(name)) { return getField(name); }