Implemented Super
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package hscript;
|
||||
|
||||
class CustomClassHandler implements IHScriptCustomConstructor {
|
||||
public static var staticHandler = new StaticHandler();
|
||||
|
||||
public var ogInterp:Interp;
|
||||
public var name:String;
|
||||
public var fields:Array<Expr>;
|
||||
@@ -28,6 +30,8 @@ class CustomClassHandler implements IHScriptCustomConstructor {
|
||||
var cl = extend == null ? TemplateClass : Type.resolveClass('${extend}_HSX');
|
||||
var _class = Type.createInstance(cl, args);
|
||||
|
||||
interp.variables.set("super", staticHandler);
|
||||
|
||||
_class.__interp = interp;
|
||||
interp.scriptObject = _class;
|
||||
|
||||
@@ -68,4 +72,8 @@ class TemplateClass implements IHScriptCustomBehaviour {
|
||||
}
|
||||
return this.__interp.variables.get(name);
|
||||
}
|
||||
}
|
||||
|
||||
class StaticHandler {
|
||||
public function new() {}
|
||||
}
|
||||
@@ -955,10 +955,16 @@ class Interp {
|
||||
}
|
||||
|
||||
function fcall(o:Dynamic, f:String, args:Array<Dynamic>):Dynamic {
|
||||
if(o == CustomClassHandler.staticHandler && scriptObject != null) {
|
||||
return Reflect.callMethod(scriptObject, Reflect.field(scriptObject, "_HX_SUPER__" + f), args);
|
||||
}
|
||||
return call(o, get(o, f), args);
|
||||
}
|
||||
|
||||
function call(o:Dynamic, f:Dynamic, args:Array<Dynamic>):Dynamic {
|
||||
if(f == CustomClassHandler.staticHandler) {
|
||||
return null;
|
||||
}
|
||||
return Reflect.callMethod(o, f, args);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user