67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/goplus/llgo/c"
|
|
"github.com/goplus/llgo/c/lua"
|
|
)
|
|
|
|
func triggerError(L *lua.State) c.Int {
|
|
L.Pushstring(c.Str("This is an error triggered"))
|
|
return L.Error()
|
|
}
|
|
|
|
func triggerFormatError(L *lua.State) c.Int {
|
|
return L.LError(c.Str("This is an error code:(%d)"), 42)
|
|
}
|
|
|
|
func customPanic(L *lua.State) c.Int {
|
|
msg := L.Tostring(-1)
|
|
c.Printf(c.Str("Pani'c: %s\n"), msg)
|
|
os.Exit(1)
|
|
return 0
|
|
}
|
|
|
|
func main() {
|
|
L := lua.Newstate()
|
|
defer L.Close()
|
|
|
|
L.Openlibs()
|
|
|
|
L.Atpanic(customPanic)
|
|
|
|
L.Pushcfunction(triggerError)
|
|
L.Setglobal(c.Str("trigger_error"))
|
|
L.Pushcfunction(triggerFormatError)
|
|
L.Setglobal(c.Str("trigger_format_error"))
|
|
|
|
c.Printf(c.Str("1. error (protected):\n"))
|
|
L.Getglobal(c.Str("trigger_error"))
|
|
if L.Pcall(0, 0, 0) != lua.OK {
|
|
c.Printf(c.Str("Error: %s\n"), L.Tostring(-1))
|
|
L.Pop(1)
|
|
}
|
|
|
|
c.Printf(c.Str("2. format_error (protected):\n"))
|
|
L.Getglobal(c.Str("trigger_format_error"))
|
|
if L.Pcall(0, 0, 0) != lua.OK {
|
|
c.Printf(c.Str("Error: %s\n"), L.Tostring(-1))
|
|
L.Pop(1)
|
|
}
|
|
|
|
c.Printf(c.Str("3. Unprotected call (panic):\n"))
|
|
L.Getglobal(c.Str("trigger_error"))
|
|
// This will trigger unprotected panic and catch by customPanic
|
|
L.Call(0, 0)
|
|
}
|
|
|
|
/* Expected output:
|
|
1. error (protected):
|
|
Error: This is an error triggered
|
|
2. format_error (protected):
|
|
Error: This is an error code:(42)
|
|
3. Unprotected call (panic):
|
|
Panic: This is an error triggered
|
|
*/
|