You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
localExecutor= {
extends="Node",
}
functionExecutor:execute(code)
ifcode==nilorcode=="" thenreturnfalseend-- Code to executelocaltemp_code=loadstring(code)
-- Execute the code and capture the resultslocalsuccess, result=pcall(temp_code)
-- Check if there was an error and print it if necessaryifnotsuccessthenprint("Error executing code:", result)
returnfalseend-- Print the output of the code if there is anyifresult~=nilthenprint("Output:", result)
endreturntrueendfunctionExecutor:_process()
localvalue=self:get_parent():get_parent().playifvalue==truethenlocalcode_to_run=self:get_parent():get_parent():get_node("CoreUI/ScriptEditor/TextEdit").textprint(type(code_to_run))
self:execute(code_to_run)
endendreturnExecutor```itkeepsongivingmeerrorof:
E 0:00:13.272 loadstring: bad argument #1 to 'loadstring' (function expected, got cdata)
stack traceback:
[string "res://Scripts/Core/Scripting/Executor.lua"]:10: in function 'execute'
[string "res://Scripts/Core/Scripting/Executor.lua"]:35: in function <[string "res://Scripts/Core/Scripting/Executor.lua"]:29>
in call _process @ "res://Scripts/Core/Scripting/Executor.lua"
The text was updated successfully, but these errors were encountered:
Hi @OoIks.
This happens because Godot Strings are not translated to Lua strings automatically (cdata is the name LuaJIT gives to any FFI-defined type, which includes anything related to Godot).
I let it be like that because it avoided marshalling (copying/converting data to/from Lua/Godot) and Godot's String class has more functionality than Lua's built-in string type. In hindsight, this was probably a bad design choice, people would expect a string in Lua to be of Lua's string type, regardless if it comes from Godot data.
Now, to fix your problem right now, just call tostring passing your code variable and it will be converted to a Lua string, which loadstring accepts:
functionExecutor:execute(code)
ifcode==nilorcode=="" thenreturnfalseend-- Code to executelocaltemp_code=loadstring(tostring(code))
-- ^ here!-- ... rest of your code ...end
E 0:00:13.272 loadstring: bad argument #1 to 'loadstring' (function expected, got cdata)
stack traceback:
[string "res://Scripts/Core/Scripting/Executor.lua"]:10: in function 'execute'
[string "res://Scripts/Core/Scripting/Executor.lua"]:35: in function <[string "res://Scripts/Core/Scripting/Executor.lua"]:29>
in call _process @ "res://Scripts/Core/Scripting/Executor.lua"
The text was updated successfully, but these errors were encountered: