Blitzmax + LUA

BlitzMax Forums/BlitzMax Programming/Blitzmax + LUA

Cocopino(Posted 2015) [#1]
Hi!

I am trying to interact with my program by changing a separate LUA file. This example program will load a lua script from a file named "script.lua" once I press F5:



script.lua:
function hello()
	print(Demo.SayHello('Fredward'))
end

function goodbye()
	print(Demo.SayHello('Stingray Sam'))
end


Now, that this even works at all is pretty magical to me :)
But if I create a typo/error in script.lua, I can only see the error in the debugger. Is there a way to catch the error and display it to the user (e.g. in a MessageBox/Notify)?

Thanks!


Cocopino(Posted 2015) [#2]
I "hacked" brl.maxlua to achieve the above:

...
Type TLuaClass
	Method GetLuaState:Byte Ptr()
		Return LuaState()
	End Method
...
End Type


In Method lua_pushchunk() I disabled line
'lua_pop L,1
to keep the error on the stack

Now I can use

If instance = Null
	Local debuginfo:String = lua_tostring(class.GetLuaState(), -1)
	Notify("Error: " + debuginfo, True)




PhotonTom(Posted 2015) [#3]
I've not used brl.maxlua but I find Pub.lua and lugi (http://www.blitzbasic.com/Community/posts.php?topic=85902) to be a very good combination.

For example using Pub.lua you can get compile errors using:
Result = lua_pcall(Lua, Inputs, Outputs, 0)
If (Result <> 0) then
	Print("Lua Runtime Error: ~n" + luaL_checkstring(Lua, - 1) )
EndIf



Cocopino(Posted 2015) [#4]
Thanks, I will look into that!