From 5d58ea56c9f0a2be4f197bbe0b3c26d08c675ac2 Mon Sep 17 00:00:00 2001 From: lunarcleint <88809950+lunarcleint@users.noreply.github.com> Date: Sun, 28 Apr 2024 03:10:06 -0700 Subject: [PATCH] RELIEF --- hscript/Interp.hx | 44 ++++++++++--------------------------- tests/src/tests/TestCase.hx | 2 -- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/hscript/Interp.hx b/hscript/Interp.hx index a77acab..4778bbb 100644 --- a/hscript/Interp.hx +++ b/hscript/Interp.hx @@ -436,6 +436,7 @@ class Interp { _locals = cast new haxe.ds.Vector(_variablesNames.length); setDefualtVariables(); + variables.loadDefaults(); return exprReturn(expr); } @@ -507,38 +508,6 @@ class Interp { #end } - public function iresolve(id:String, doException:Bool = true):Dynamic { - if (id == null) - return null; - id = StringTools.trim(id); - var l = locals.get(id); - if (l != null) - return l.r; - - for(map in [variables, publicVariables, staticVariables, customClasses]) - if (map.exists(id)) - return map.get(id); - - if (_hasScriptObject) { - // search in object - if (id == "this") { - return scriptObject; - } else if (_scriptObjectType == SObject && UnsafeReflect.hasField(scriptObject, id)) { - return UnsafeReflect.field(scriptObject, id); - } else { - if (__instanceFields.contains(id)) { - return UnsafeReflect.getProperty(scriptObject, id); - } else if (__instanceFields.contains('get_$id')) { // getter - return UnsafeReflect.getProperty(scriptObject, 'get_$id')(); - } - } - } - if (doException) - error(EUnknownVariable(id)); - //var v = variables.get(id); - return null; - } - public function resolve(id:String, doException:Bool = true):Dynamic { if (id == null) return null; @@ -1201,11 +1170,22 @@ class Interp { } class HScriptVariables { + public var defaults:Map = []; + public var usedefaults:Bool = true; + + public function loadDefaults() { + usedefaults = false; + for (key => value in defaults) + set(key, value); + defaults.clear(); + } + public var parent:Interp; public function new(parent:Interp) this.parent = parent; public inline function set(key:String, value:Dynamic) { + if (usedefaults) defaults.set(key, value); if (parent._variablesNames.contains(key)) parent._variables[parent._variablesNames.indexOf(key)] = value; } diff --git a/tests/src/tests/TestCase.hx b/tests/src/tests/TestCase.hx index fdd7df2..8619cfe 100644 --- a/tests/src/tests/TestCase.hx +++ b/tests/src/tests/TestCase.hx @@ -16,8 +16,6 @@ class TestCase extends HScriptRunner { execute(script); if(!Util.assertEq(result, expected, message, pos)) { Sys.println("> " + Printer.convertExprToString(lastExpr)); - Sys.println("> " + interp._variablesNames); - Sys.println("> " + interp._variables); return false; } return true;