From 461a64cc1abfde48db38f93c39a2681a2012de48 Mon Sep 17 00:00:00 2001 From: LarryFrosty Date: Sat, 1 Feb 2025 06:09:24 +0800 Subject: [PATCH] Remove executeFunction and override call and show function name in runHaxeCode and runHaxeFunction errors --- source/psychlua/HScript.hx | 51 ++++++++++++++++++++++---------------- source/states/PlayState.hx | 6 ++--- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/source/psychlua/HScript.hx b/source/psychlua/HScript.hx index 49a4c2c40b2..3fad0a0664b 100644 --- a/source/psychlua/HScript.hx +++ b/source/psychlua/HScript.hx @@ -346,33 +346,13 @@ class HScript extends Iris set('Function_StopAll', LuaUtils.Function_StopAll); } - public function executeFunction(?funcToRun:String = null, ?funcArgs:Array = null):IrisCall { - if (funcToRun == null) return null; - - if(!exists(funcToRun)) { - Iris.error('No function named: $funcToRun', this.interp.posInfos()); - return null; - } - - try { - final callValue:IrisCall = call(funcToRun, funcArgs); - return callValue; - } - catch(e:IrisError) { - var pos:HScriptInfos = cast this.interp.posInfos(); - pos.funcName = funcToRun; - Iris.error(Printer.errorToString(e, false), pos); - } - return null; - } - #if LUA_ALLOWED public static function implement(funk:FunkinLua) { funk.addLocalCallback("runHaxeCode", function(codeToRun:String, ?varsToBring:Any = null, ?funcToRun:String = null, ?funcArgs:Array = null):Dynamic { initHaxeModuleCode(funk, codeToRun, varsToBring); if (funk.hscript != null) { - final retVal:IrisCall = funk.hscript.executeFunction(funcToRun, funcArgs); + final retVal:IrisCall = funk.hscript.call(funcToRun, funcArgs); if (retVal != null) { return (retVal.returnValue == null || LuaUtils.isOfTypes(retVal.returnValue, [Bool, Int, Float, String, Array])) ? retVal.returnValue : null; @@ -388,7 +368,7 @@ class HScript extends Iris funk.addLocalCallback("runHaxeFunction", function(funcToRun:String, ?funcArgs:Array = null) { if (funk.hscript != null) { - final retVal:IrisCall = funk.hscript.executeFunction(funcToRun, funcArgs); + final retVal:IrisCall = funk.hscript.call(funcToRun, funcArgs); if (retVal != null) { return (retVal.returnValue == null || LuaUtils.isOfTypes(retVal.returnValue, [Bool, Int, Float, String, Array])) ? retVal.returnValue : null; @@ -397,6 +377,7 @@ class HScript extends Iris else { var pos:HScriptInfos = cast {fileName: funk.scriptName, showLine: false}; + if (funk.lastCalledFunction != '') pos.funcName = funk.lastCalledFunction; Iris.error("runHaxeFunction: HScript has not been initialized yet! Use \"runHaxeCode\" to initialize it", pos); } return null; @@ -435,6 +416,32 @@ class HScript extends Iris } #end + override function call(funcToRun:String, ?args:Array):IrisCall { + if (funcToRun == null || interp == null) return null; + + if (!exists(funcToRun)) { + Iris.error('No function named: $funcToRun', this.interp.posInfos()); + return null; + } + + try { + var func:Dynamic = interp.variables.get(funcToRun); // function signature + final ret = Reflect.callMethod(null, func, args ?? []); + return {funName: funcToRun, signature: func, returnValue: ret}; + } + catch(e:IrisError) { + var pos:HScriptInfos = cast this.interp.posInfos(); + pos.funcName = funcToRun; + if (parentLua != null) + { + pos.isLua = true; + if (parentLua.lastCalledFunction != '') pos.funcName = parentLua.lastCalledFunction; + } + Iris.error(Printer.errorToString(e, false), pos); + } + return null; + } + override public function destroy() { origin = null; diff --git a/source/states/PlayState.hx b/source/states/PlayState.hx index 1a480d10a36..d7b228c865f 100644 --- a/source/states/PlayState.hx +++ b/source/states/PlayState.hx @@ -3155,7 +3155,7 @@ class PlayState extends MusicBeatState for (script in hscriptArray) if(script != null) { - if(script.exists('onDestroy')) script.executeFunction('onDestroy'); + if(script.exists('onDestroy')) script.call('onDestroy'); script.destroy(); } @@ -3324,7 +3324,7 @@ class PlayState extends MusicBeatState try { newScript = new HScript(null, file); - if (newScript.exists('onCreate')) newScript.executeFunction('onCreate'); + if (newScript.exists('onCreate')) newScript.call('onCreate'); trace('initialized hscript interp successfully: $file'); hscriptArray.push(newScript); } @@ -3407,7 +3407,7 @@ class PlayState extends MusicBeatState if(script == null || !script.exists(funcToCall) || exclusions.contains(script.origin)) continue; - var callValue = script.executeFunction(funcToCall, args); + var callValue = script.call(funcToCall, args); if(callValue != null) { var myValue:Dynamic = callValue.returnValue;