From 3ec4fc9f0be781db8b49b4d475c229ce78539f7e Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Wed, 4 Sep 2024 00:06:57 +0200 Subject: [PATCH] Fixed bug with assign --- hscript/Interp.hx | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/hscript/Interp.hx b/hscript/Interp.hx index 1a05417..d4335ec 100644 --- a/hscript/Interp.hx +++ b/hscript/Interp.hx @@ -343,13 +343,12 @@ class Interp { var v; switch (Tools.expr(e1)) { case EIdent(id): - var l = locals.get(id); v = fop(expr(e1), expr(e2)); - if (l == null) { - if(_hasScriptObject) { + if (!locals.exists(id)) { + if(_hasScriptObject && !varExists(id)) { var instanceHasField = __instanceFields.contains(id); - if(_scriptObjectType == SObject && instanceHasField) { + if (_scriptObjectType == SObject && instanceHasField) { UnsafeReflect.setField(scriptObject, id, v); return v; } else if (_scriptObjectType == SCustomClass && instanceHasField) { @@ -361,7 +360,7 @@ class Interp { return res; } return obj.hset(id, v); - } else if(_scriptObjectType == SBehaviourClass) { + } else if (_scriptObjectType == SBehaviourClass) { var obj = cast(scriptObject, IHScriptCustomBehaviour); return obj.hset(id, v); } @@ -379,10 +378,17 @@ class Interp { } else { setVar(id, v); } + } else { + setVar(id, v); } } - else + else { + var l = locals.get(id); l.r = v; + if (l.depth == 0) { + setVar(id, v); + } + } case EField(e, f, s): var obj = expr(e); if(s && obj == null) return null;