From 0601b8def68a8700d3f2ee6420afb9cc07d73b4a Mon Sep 17 00:00:00 2001 From: Yoshman29 Date: Wed, 29 Jun 2022 00:53:51 +0200 Subject: [PATCH] natural import & static access from vars for YCE --- hscript/Interp.hx | 37 +++++++++++++++++++++++-------------- hscript/Parser.hx | 3 --- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/hscript/Interp.hx b/hscript/Interp.hx index 4542ab4..4c63905 100644 --- a/hscript/Interp.hx +++ b/hscript/Interp.hx @@ -25,7 +25,8 @@ * - Added Error handler */ package hscript; - import haxe.PosInfos; + import haxe.display.Protocol.InitializeResult; +import haxe.PosInfos; import hscript.Expr; import haxe.Constraints.IMap; @@ -700,26 +701,34 @@ cast(map, haxe.Constraints.IMap).set(key, value); } + public var getRedirects:MapString->Dynamic> = []; + public var setRedirects:MapString->Dynamic->Dynamic> = []; + function get( o : Dynamic, f : String ) : Dynamic { if ( o == null ) error(EInvalidAccess(f)); return { - #if php - // https://github.com/HaxeFoundation/haxe/issues/4915 - try { - Reflect.getProperty(o, f); - } catch (e:Dynamic) { - Reflect.field(o, f); - } - #else - Reflect.getProperty(o, f); - #end + var redirect:Dynamic->String->Dynamic = null; + var cl:String; + if (getRedirects.exists(cl = Type.getClassName(Type.getClass(o))) && (redirect = getRedirects[cl]) != null) { + return redirect(o, f); + } else { + var v = null; + if ((v = Reflect.getProperty(o, f)) == null) v = Reflect.getProperty(Type.getClass(o), f); + return v; + } } } function set( o : Dynamic, f : String, v : Dynamic ) : Dynamic { - if( o == null ) error(EInvalidAccess(f)); - Reflect.setProperty(o,f,v); - return v; + if( o == null ) error(EInvalidAccess(f)); + + var redirect:Dynamic->String->Dynamic->Dynamic = null; + var cl:String; + if (setRedirects.exists(cl = Type.getClassName(Type.getClass(o))) && (redirect = setRedirects[cl]) != null) + return redirect(o, f, v); + + Reflect.setProperty(o,f,v); + return v; } function fcall( o : Dynamic, f : String, args : Array ) : Dynamic { diff --git a/hscript/Parser.hx b/hscript/Parser.hx index d6cd0e7..2f1e646 100644 --- a/hscript/Parser.hx +++ b/hscript/Parser.hx @@ -661,7 +661,6 @@ class Parser { var tk = token(); switch( tk ) { case TPOpen: - trace("using base thing shit"); var tok = token(); switch(tok) { case TConst(c): @@ -692,8 +691,6 @@ class Parser { switch( t ) { case TId(id): path.push(id); - // case TOp("*"): - // star = true; default: unexpected(t); }