From 7fe3e778de5d01addcfca8a350e78073f36bc050 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 20 Sep 2025 16:44:04 -0400 Subject: [PATCH 01/12] Allow resetting variables from access. --- rulescript/RuleScriptAccess.hx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rulescript/RuleScriptAccess.hx b/rulescript/RuleScriptAccess.hx index 91ab7c4..2f10ef7 100644 --- a/rulescript/RuleScriptAccess.hx +++ b/rulescript/RuleScriptAccess.hx @@ -24,6 +24,14 @@ class RuleScriptAccess return null; } + /** + * Resets the interpreters variables. + */ + public function resetVariables():Void + { + + } + /** * Returns `true` if variable with identifier `name` exists. * From 23ea7bdc517468f5a2224619cd061320109c3dcf Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 20 Sep 2025 16:45:43 -0400 Subject: [PATCH 02/12] Allow resetting variables in RuleScriptInterpAccess --- rulescript/interps/RuleScriptInterp.hx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index e64e64c..e5ad473 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -893,6 +893,11 @@ class RuleScriptInterpAccess extends RuleScriptAccess { return interp.variables = newVariables; } + + override function resetVariables():Void + { + interp.resetVariables(); + } override function variableExists(name:String):Bool { From a1490b63c507af89c8ccf15a99b9d4f373e7405a Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 20 Sep 2025 16:49:55 -0400 Subject: [PATCH 03/12] Allow resetting variables in NeoInterpAccess --- rulescript/interps/neo/NeoCompiler.hx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rulescript/interps/neo/NeoCompiler.hx b/rulescript/interps/neo/NeoCompiler.hx index 1d2d4b5..ded9057 100644 --- a/rulescript/interps/neo/NeoCompiler.hx +++ b/rulescript/interps/neo/NeoCompiler.hx @@ -477,6 +477,11 @@ class NeoInterpAccess extends RuleScriptAccess return interp.variables = newVariables; } + override function resetVariables():Void + { + interp.reset(); + } + override function variableExists(name:String):Bool { return interp.variables.exists(name); From 4d4f86a59848c5e2f776576675b162f7c24f693a Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 16:34:03 -0500 Subject: [PATCH 04/12] Testing --- rulescript/Tools.hx | 14 ++++++------ rulescript/interps/RuleScriptInterp.hx | 31 ++++++++++++++++++-------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/rulescript/Tools.hx b/rulescript/Tools.hx index 536f721..d7d8b7d 100644 --- a/rulescript/Tools.hx +++ b/rulescript/Tools.hx @@ -40,14 +40,14 @@ class Tools return _printer.typeToString(type); } - @:noCompletion public static function usingFunction(?o:Dynamic, f:Function, ?a1:Dynamic, ?a2:Dynamic, ?a3:Dynamic, ?a4:Dynamic, ?a5:Dynamic, ?a6:Dynamic, - ?a7:Dynamic, ?a8:Dynamic) + @:noCompletion public static function usingFunction(?o:Dynamic, f:Function, ?args:Array) { #if interp - var args:Array = [o, a1, a2, a3, a4, a5, a6, a7, a8]; - var i:Int = 8; + var args:Array = [o].concat(args); + var i:Int = 0; + i = args.length; - while (i >= 0) + while (i != 1) { if (args[i] == null) args.pop(); @@ -57,9 +57,9 @@ class Tools } return Reflect.callMethod(o, f, args); #elseif hl - return __hl_callMethod(f, [o, a1, a2, a3, a4, a5, a6, a7, a8]); + return __hl_callMethod(f, [o].concat(args)); #else - return Reflect.callMethod(o, f, [o, a1, a2, a3, a4, a5, a6, a7, a8]); + return Reflect.callMethod(o, f, [o].concat(args)); #end } diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index dadc1c0..23e7081 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -367,6 +367,7 @@ class RuleScriptInterp extends hscript.Interp implements IInterp } case EUsing(path): var t:Dynamic = resolveType(path); + trace(path); if (t == null) error(ECustom('Type not found : $path')); @@ -773,17 +774,9 @@ class RuleScriptInterp extends hscript.Interp implements IInterp } var prop:Dynamic = super.get(o, f); - if (prop != null) return getScriptProp(prop); - for (cl in usings) - { - var prop:Dynamic = Reflect.getProperty(cl, f); - if (prop != null) - return Tools.usingFunction.bind(o, prop, _, _, _, _, _, _, _, _); - } - return null; } @@ -844,7 +837,27 @@ class RuleScriptInterp extends hscript.Interp implements IInterp { var func = ((o == superInstance && (locals.exists('__super_$f') || variables.exists('__super_$f'))) ? (resolve('__super_$f')) : get(o, f)); - return call(o, func, args); + if (func != null) + return call(o, func, args); + + // var prop = get(o, f); + // try + // { + // for (cl in usings) + // { + // var prop:Dynamic = Reflect.getProperty(cl, f); + // if (prop != null) + // return Tools.usingFunction(o, prop, args); + // } + + // for (cl in usings) { + + // } + // } + // catch(e:Dynamic) { + // prop = o; + // } + return null; } override function cnew(cl:String, args:Array):Dynamic From 5d181153fbdd202992f0f08c67c6d535bbfc75e4 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 19:01:31 -0500 Subject: [PATCH 05/12] Update RuleScriptInterp.hx --- rulescript/interps/RuleScriptInterp.hx | 52 ++++++++++++++++---------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 23e7081..7a0bac0 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -20,6 +20,12 @@ using rulescript.Tools; import haxe.ds.StringMap; #end +@:publicFields +typedef Using = { + var cls:Class; + var val:Dynamic; +} + class RuleScriptInterp extends hscript.Interp implements IInterp { public var scriptName:String; @@ -28,7 +34,7 @@ class RuleScriptInterp extends hscript.Interp implements IInterp public var access:RuleScriptAccess; public var imports:Map = []; - public var usings:Map = []; + public var usings:Map = []; public var superInstance(default, set):Dynamic; @@ -57,6 +63,7 @@ class RuleScriptInterp extends hscript.Interp implements IInterp imports = []; usings = []; + usingsCache = []; typePaths = []; } @@ -372,7 +379,23 @@ class RuleScriptInterp extends hscript.Interp implements IInterp if (t == null) error(ECustom('Type not found : $path')); - usings.set(path, t); + usings.set(path, {val: t, cls: Type.resolveClass(path)}); + + var fields = Type.getClassFields(usings.get(path).cls); + if (fields.length == 0) continue; + + for (fld in fields) + { + var field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); + if (!Reflect.isFunction(field)) continue; + + var func:Dynamic = function(params:Array) { + return Reflect.callMethod(usings.get(path).cls, field, params); + } + + usingCache.set(fld, func); + } + case ETypeVarPath(path): return resolveTypeOrValue(path); case EMeta(n, args, e): @@ -833,6 +856,10 @@ class RuleScriptInterp extends hscript.Interp implements IInterp return result; } + + + public var usingsCache:Map->Dynamic> = []; + override function fcall(o:Dynamic, f:String, args:Array):Dynamic { var func = ((o == superInstance @@ -840,23 +867,10 @@ class RuleScriptInterp extends hscript.Interp implements IInterp if (func != null) return call(o, func, args); - // var prop = get(o, f); - // try - // { - // for (cl in usings) - // { - // var prop:Dynamic = Reflect.getProperty(cl, f); - // if (prop != null) - // return Tools.usingFunction(o, prop, args); - // } - - // for (cl in usings) { - - // } - // } - // catch(e:Dynamic) { - // prop = o; - // } + if (usingsCache.exists(f)) { + trace(f, o, args, usingsCache[f]([o].concat(args))); + return usingsCache[f]([o].concat(args)); + } return null; } From 189b003a5780db606245997e847b65d22fcb95e7 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 19:03:27 -0500 Subject: [PATCH 06/12] Update RuleScriptInterp.hx --- rulescript/interps/RuleScriptInterp.hx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 7a0bac0..076c42d 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -382,18 +382,18 @@ class RuleScriptInterp extends hscript.Interp implements IInterp usings.set(path, {val: t, cls: Type.resolveClass(path)}); var fields = Type.getClassFields(usings.get(path).cls); - if (fields.length == 0) continue; + if (fields.length > 0) { + for (fld in fields) + { + var field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); + if (!Reflect.isFunction(field)) continue; - for (fld in fields) - { - var field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); - if (!Reflect.isFunction(field)) continue; + var func:Dynamic = function(params:Array) { + return Reflect.callMethod(usings.get(path).cls, field, params); + } - var func:Dynamic = function(params:Array) { - return Reflect.callMethod(usings.get(path).cls, field, params); + usingsCache.set(fld, func); } - - usingCache.set(fld, func); } case ETypeVarPath(path): From fcf84229e8b5b9c861a60e366d9685d4f7a2c67d Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 19:57:41 -0500 Subject: [PATCH 07/12] Rewrote this to not LOOP again and again for using's --- rulescript/Tools.hx | 37 +++------- rulescript/interps/NeoInterp.hx | 6 +- rulescript/interps/RuleScriptInterp.hx | 46 +++++-------- rulescript/macro/AbstractMacro.hx | 6 +- rulescript/macro/CallMethodMacro.hx | 69 ------------------- rulescript/scriptedClass/RuleScriptedClass.hx | 4 +- rulescript/types/ScriptedEnum.hx | 4 +- 7 files changed, 37 insertions(+), 135 deletions(-) delete mode 100644 rulescript/macro/CallMethodMacro.hx diff --git a/rulescript/Tools.hx b/rulescript/Tools.hx index d7d8b7d..e58bbcb 100644 --- a/rulescript/Tools.hx +++ b/rulescript/Tools.hx @@ -11,14 +11,11 @@ import rulescript.types.ScriptedTypeUtil; import rulescript.types.Typedefs; #end -#if hl -@:build(rulescript.macro.CallMethodMacro.build()) -#end class Tools { - public static function parseTypePath(typePath:String):TypePath + public static function parseTypePath(typePath:String):ImportPath { - return new TypePath(typePath); + return new ImportPath(typePath); } inline public static function startsWithLowerCase(s:String):Bool @@ -393,20 +390,6 @@ class Tools { case 0: () -> f([]); - case 1: - Tools.callMethod1.bind(f, _); - case 2: - Tools.callMethod2.bind(f, _, _); - case 3: - Tools.callMethod3.bind(f, _, _, _); - case 4: - Tools.callMethod4.bind(f, _, _, _, _); - case 5, 6: - Tools.callMethod6.bind(f, _, _, _, _, _, _); - case 7, 8: - Tools.callMethod8.bind(f, _, _, _, _, _, _, _, _); - case 9, 10, 11, 12: - Tools.callMethod12.bind(f, _, _, _, _, _, _, _, _, _, _, _, _); default: Reflect.makeVarArgs(f); } @@ -419,10 +402,6 @@ class Tools throw "Invalid function " + func; final need = ft.getArgsCount(); - - if (need > 8) - return rulescript.macro.CallMethodMacro.__hl_callMethod(); - final args:hl.types.ArrayDyn = cast args; final count = args.length; @@ -482,7 +461,7 @@ enum EnumPattern #end @:forward -abstract TypePath(_TypePath) +abstract ImportPath(_ImportPath) { public var typeName(get, never):String; @@ -506,7 +485,8 @@ abstract TypePath(_TypePath) pack: pack, name: name, sub: typeName, - fullPath: typePath + fullPath: typePath, + cls: Type.resolveClass(typePath) } } @@ -529,9 +509,9 @@ abstract TypePath(_TypePath) return this.sub ?? this.name; } - public static function create(pack:Array, name:String, sub:String):TypePath + public static function create(pack:Array, name:String, sub:String):ImportPath { - return new TypePath(createString(pack, name, sub)); + return new ImportPath(createString(pack, name, sub)); } public static function createString(pack:Array, name:String, ?sub:String):String @@ -560,10 +540,11 @@ abstract TypePath(_TypePath) } } -private typedef _TypePath = +private typedef _ImportPath = { var pack:Array; var name:String; var ?sub:String; + var ?cls:Class; var fullPath:String; } diff --git a/rulescript/interps/NeoInterp.hx b/rulescript/interps/NeoInterp.hx index 3688c7a..2757c80 100644 --- a/rulescript/interps/NeoInterp.hx +++ b/rulescript/interps/NeoInterp.hx @@ -4,7 +4,7 @@ import haxe.Constraints.IMap; import haxe.Exception; import hscript.Expr; import rulescript.RuleScript.IInterp; -import rulescript.Tools.TypePath; +import rulescript.Tools.ImportPath; import rulescript.Tools.getScriptProp; import rulescript.interps.neo.NeoCompiler; import rulescript.interps.neo.NeoInterpAccess; @@ -538,14 +538,14 @@ class NeoInterp implements IInterp { if (!variables.exists(typeName)) { - final type:Dynamic = resolveType(TypePath.createString(path.split('.'), typeName)); + final type:Dynamic = resolveType(ImportPath.createString(path.split('.'), typeName)); variables.set(typeName, type); } } } else { - var name:String = alias ?? func ?? TypePath.getTypeName(path); + var name:String = alias ?? func ?? ImportPath.getTypeName(path); var type:Dynamic = resolveType(path); final value = if (func != null) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 076c42d..3fa7f3f 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -20,12 +20,6 @@ using rulescript.Tools; import haxe.ds.StringMap; #end -@:publicFields -typedef Using = { - var cls:Class; - var val:Dynamic; -} - class RuleScriptInterp extends hscript.Interp implements IInterp { public var scriptName:String; @@ -33,8 +27,11 @@ class RuleScriptInterp extends hscript.Interp implements IInterp public var access:RuleScriptAccess; - public var imports:Map = []; - public var usings:Map = []; + public var imports:Map = []; + public var importsCache:Map = []; + + public var usings:Map = []; + public var usingsCache:Map->Dynamic> = []; public var superInstance(default, set):Dynamic; @@ -356,8 +353,8 @@ class RuleScriptInterp extends hscript.Interp implements IInterp else t; - imports.set(name, value); - + imports.set(name, new ImportPath(path)); + importsCache.set(name, value); variables.set(name, value); } else @@ -366,32 +363,31 @@ class RuleScriptInterp extends hscript.Interp implements IInterp { if (!variables.exists(typeName)) { - final type:Dynamic = resolveType(TypePath.createString(path.split('.'), typeName)); - imports.set(typeName, type); + final type:Dynamic = resolveType(ImportPath.createString(path.split('.'), typeName)); + imports.set(typeName, new ImportPath(path)); + importscache.set(name, type); variables.set(typeName, type); } } } case EUsing(path): var t:Dynamic = resolveType(path); - trace(path); if (t == null) error(ECustom('Type not found : $path')); - usings.set(path, {val: t, cls: Type.resolveClass(path)}); + usings.set(path, new ImportPath(path)); - var fields = Type.getClassFields(usings.get(path).cls); - if (fields.length > 0) { + // Obtain the using's function fields + final fields = Type.getClassFields(usings.get(path).cls); + if (fields.length > 0) + { for (fld in fields) { - var field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); + final field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); if (!Reflect.isFunction(field)) continue; - var func:Dynamic = function(params:Array) { - return Reflect.callMethod(usings.get(path).cls, field, params); - } - + final func:Dynamic = function(params:Array) return Tools.usingFunction(usings.get(path).cls, field, params); usingsCache.set(fld, func); } } @@ -856,10 +852,6 @@ class RuleScriptInterp extends hscript.Interp implements IInterp return result; } - - - public var usingsCache:Map->Dynamic> = []; - override function fcall(o:Dynamic, f:String, args:Array):Dynamic { var func = ((o == superInstance @@ -867,10 +859,8 @@ class RuleScriptInterp extends hscript.Interp implements IInterp if (func != null) return call(o, func, args); - if (usingsCache.exists(f)) { - trace(f, o, args, usingsCache[f]([o].concat(args))); + if (usingsCache.exists(f)) return usingsCache[f]([o].concat(args)); - } return null; } diff --git a/rulescript/macro/AbstractMacro.hx b/rulescript/macro/AbstractMacro.hx index 7fb5903..b9cd7c2 100644 --- a/rulescript/macro/AbstractMacro.hx +++ b/rulescript/macro/AbstractMacro.hx @@ -4,7 +4,7 @@ package rulescript.macro; import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.ExprTools; -import rulescript.Tools.TypePath; +import rulescript.Tools.ImportPath; import sys.FileSystem; import sys.io.File; @@ -38,7 +38,7 @@ class AbstractMacro for (abstractType in abstractsList) { if (!ignoreList.contains('-#$abstractType')) - buildAbstract(new TypePath(abstractType)); + buildAbstract(new ImportPath(abstractType)); } ]; @@ -369,7 +369,7 @@ class AbstractMacro return tokens; } - static function buildAbstract(typePath:TypePath):Expr + static function buildAbstract(typePath:ImportPath):Expr { var type = switch (Context.getType(typePath.fullPath)) { diff --git a/rulescript/macro/CallMethodMacro.hx b/rulescript/macro/CallMethodMacro.hx deleted file mode 100644 index b37978c..0000000 --- a/rulescript/macro/CallMethodMacro.hx +++ /dev/null @@ -1,69 +0,0 @@ -package rulescript.macro; - -#if macro -import haxe.macro.Context; -import haxe.macro.Expr; -#end - -class CallMethodMacro -{ - #if macro - macro public static function build():Array - { - var fields = Context.getBuildFields(); - var pos = Context.currentPos(); - - for (i in [1, 2, 3, 4, 6, 8, 12]) - fields.push({ - name: 'callMethod' + i, - access: [AStatic, APublic], - kind: FFun({ - args: { - var args:Array = [{name: 'f', type: macro :Array->Dynamic}]; - for (argNum in 1...i + 1) - args.push({name: 'a$argNum', type: macro :Dynamic, opt: true}); - - args; - }, - expr: { - var args:Array = [for (argNum in 1...i + 1) macro $i{'a$argNum'}]; - macro return f([$a{args}]); - } - }), - pos: pos, - meta: [{name: ':noCompletion', pos: pos}] - }); - - return fields; - } - #end - - @:allow(rulescript.Tools) macro static function __hl_callMethod():haxe.macro.Expr - { - var e:Expr = { - expr: ESwitch(macro need, [ - for (i in 9...13) - { - var t:haxe.macro.ComplexType = TFunction([for (i in 0...i) macro :Dynamic], macro :Dynamic); - { - values: [macro $v{i}], - guard: null, - expr: macro - { - $e{{expr: EVars([{name: 'f', type: t, expr: macro cast func}]), pos: Context.currentPos()}}; - f($a - { - { - [for (i in 0...i) macro args[$v{i}]]; - } - }); - } - } - } - ], macro throw 'Too many arguments'), - pos: Context.currentPos() - } - - return e; - } -} diff --git a/rulescript/scriptedClass/RuleScriptedClass.hx b/rulescript/scriptedClass/RuleScriptedClass.hx index 7133010..52debc6 100644 --- a/rulescript/scriptedClass/RuleScriptedClass.hx +++ b/rulescript/scriptedClass/RuleScriptedClass.hx @@ -2,7 +2,7 @@ package rulescript.scriptedClass; import hscript.Expr.ClassDecl; import rulescript.RuleScript.IInterp; -import rulescript.Tools.TypePath; +import rulescript.Tools.ImportPath; import rulescript.types.ScriptedModule; import rulescript.types.ScriptedType; @@ -241,7 +241,7 @@ abstract Access(RuleScriptedClass) getVariable('toString')(); else { - TypePath.createString(interp.access.scriptPackage.split('.'), module.name, impl.name); + ImportPath.createString(interp.access.scriptPackage.split('.'), module.name, impl.name); } } } diff --git a/rulescript/types/ScriptedEnum.hx b/rulescript/types/ScriptedEnum.hx index 034a03d..4b5e126 100644 --- a/rulescript/types/ScriptedEnum.hx +++ b/rulescript/types/ScriptedEnum.hx @@ -1,7 +1,7 @@ package rulescript.types; import rulescript.Tools.EnumPattern; -import rulescript.Tools.TypePath; +import rulescript.Tools.ImportPath; import rulescript.types.ScriptedType.TypeID; import rulescript.types.decl.EnumDecl; @@ -74,7 +74,7 @@ class ScriptedEnum implements ScriptedType public function toString():String { - return TypePath.createString(module.pack.split('.'), module.name, impl.name); + return ImportPath.createString(module.pack.split('.'), module.name, impl.name); } } From 8df6c93581bea3af49df903ef79b7683af9d0184 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:07:42 -0500 Subject: [PATCH 08/12] Typo 1 --- rulescript/interps/RuleScriptInterp.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 3fa7f3f..769a47f 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -365,7 +365,7 @@ class RuleScriptInterp extends hscript.Interp implements IInterp { final type:Dynamic = resolveType(ImportPath.createString(path.split('.'), typeName)); imports.set(typeName, new ImportPath(path)); - importscache.set(name, type); + importsCache.set(name, type); variables.set(typeName, type); } } From 0d7eff859f5d0d895a56611283fbe2972130b1f7 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:10:52 -0500 Subject: [PATCH 09/12] Type 2 --- rulescript/interps/RuleScriptInterp.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 769a47f..1e93005 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -365,7 +365,7 @@ class RuleScriptInterp extends hscript.Interp implements IInterp { final type:Dynamic = resolveType(ImportPath.createString(path.split('.'), typeName)); imports.set(typeName, new ImportPath(path)); - importsCache.set(name, type); + importsCache.set(typeName, type); variables.set(typeName, type); } } From 08feacdfbc814852684ce520e477b6deb064e7a2 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:09:31 -0500 Subject: [PATCH 10/12] Testing NeoScript (PLEASE DON'T TOUCH I'M ONLY TESTING! (MIGHT BE REVERTED!))) --- rulescript/interps/NeoInterp.hx | 51 +++++++++++++++++--------- rulescript/interps/RuleScriptInterp.hx | 6 --- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/rulescript/interps/NeoInterp.hx b/rulescript/interps/NeoInterp.hx index 2757c80..cb181eb 100644 --- a/rulescript/interps/NeoInterp.hx +++ b/rulescript/interps/NeoInterp.hx @@ -38,7 +38,8 @@ class NeoInterp implements IInterp public var variables:Map; - public var usings:Array; + public var usings:Map; + public var usingsCache:Map->Dynamic>; var bytes:Array; var pos:Int = 0; @@ -74,6 +75,7 @@ class NeoInterp implements IInterp })); usings = []; + usingsCache = []; bytes = []; @@ -263,7 +265,9 @@ class NeoInterp implements IInterp v; case CALL: - final f:Dynamic = getValue(command()); + final prevCommand:Null = nextCommaned = command(); + final f:Dynamic = getValue(prevCommand); + final str:String = stringBuffer[current()]; if (f == null) error(ENullAccess); @@ -273,6 +277,15 @@ class NeoInterp implements IInterp getValue(command()) ]; + if (prevCommand == FIELD && usingsCache.exists(str)) + { + trace(str, f, args); + setValue(usingsCache[str].concat([f].concat(args))); + trace(dyn); + DYNAMIC; + return; + } + setValue(call(f, args)); DYNAMIC; @@ -563,8 +576,24 @@ class NeoInterp implements IInterp final path:String = nextString(); final type:Dynamic = resolveType(path); - if (!usings.contains(type)) - usings.push(type); + if (!usings.exists(path)) + { + usings.set(path, new ImportPath(path)); + + // Obtain the using's function fields + final fields = Type.getClassFields(usings.get(path).cls); + if (fields.length > 0) + { + for (fld in fields) + { + final field:Dynamic = Reflect.getProperty(usings.get(path).cls, fld); + if (!Reflect.isFunction(field)) continue; + + final func:Dynamic = function(params:Array) return Tools.usingFunction(usings.get(path).cls, field, params); + usingsCache.set(fld, func); + } + } + } VOID; case FUNCTION: @@ -723,7 +752,6 @@ class NeoInterp implements IInterp #else final result:Dynamic = Reflect.callMethod(null, f, args); #end - return result; } @@ -768,20 +796,9 @@ class NeoInterp implements IInterp } var prop:Dynamic = Reflect.getProperty(o, f); - if (prop != null) return getScriptProp(prop); - - if (usings.length > 0) - { - for (cl in usings) - { - var prop:Dynamic = Reflect.getProperty(cl, f); - if (prop != null) - return Tools.usingFunction.bind(o, prop, _, _, _, _, _, _, _, _); - } - } - + return null; } diff --git a/rulescript/interps/RuleScriptInterp.hx b/rulescript/interps/RuleScriptInterp.hx index 1e93005..7394856 100644 --- a/rulescript/interps/RuleScriptInterp.hx +++ b/rulescript/interps/RuleScriptInterp.hx @@ -841,14 +841,8 @@ class RuleScriptInterp extends hscript.Interp implements IInterp if (f == superInstance) return call(o, resolve('__super_new'), args); - #if hl - final result:Dynamic = Tools.__hl_callMethod(f, args); - #else final result:Dynamic = super.call(o, f, args); - #end - isSuperCall = false; - return result; } From 0f0921cd0d68084d2bc31389b5f2437adb73a2f1 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:14:11 -0500 Subject: [PATCH 11/12] Oops --- rulescript/interps/NeoInterp.hx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rulescript/interps/NeoInterp.hx b/rulescript/interps/NeoInterp.hx index cb181eb..59f3c8b 100644 --- a/rulescript/interps/NeoInterp.hx +++ b/rulescript/interps/NeoInterp.hx @@ -265,7 +265,7 @@ class NeoInterp implements IInterp v; case CALL: - final prevCommand:Null = nextCommaned = command(); + final prevCommand:Null = command(); final f:Dynamic = getValue(prevCommand); final str:String = stringBuffer[current()]; @@ -280,10 +280,9 @@ class NeoInterp implements IInterp if (prevCommand == FIELD && usingsCache.exists(str)) { trace(str, f, args); - setValue(usingsCache[str].concat([f].concat(args))); + setValue(usingsCache[str]([f].concat(args))); trace(dyn); - DYNAMIC; - return; + return DYNAMIC; } setValue(call(f, args)); From 87eea2aa63d9a5d86617f69d0054da0b1272fb79 Mon Sep 17 00:00:00 2001 From: glowsoony <84847356+glowsoony@users.noreply.github.com> Date: Sat, 28 Feb 2026 14:22:08 -0500 Subject: [PATCH 12/12] Trace --- rulescript/interps/NeoInterp.hx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rulescript/interps/NeoInterp.hx b/rulescript/interps/NeoInterp.hx index 59f3c8b..d9c6e86 100644 --- a/rulescript/interps/NeoInterp.hx +++ b/rulescript/interps/NeoInterp.hx @@ -269,6 +269,7 @@ class NeoInterp implements IInterp final f:Dynamic = getValue(prevCommand); final str:String = stringBuffer[current()]; + trace(f, prevCommand, str); if (f == null) error(ENullAccess); @@ -575,6 +576,7 @@ class NeoInterp implements IInterp final path:String = nextString(); final type:Dynamic = resolveType(path); + trace(path, type); if (!usings.exists(path)) { usings.set(path, new ImportPath(path));