c/lua:dump & load demo use go file operate
This commit is contained in:
@@ -1,15 +1,23 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/c/lua"
|
||||
)
|
||||
|
||||
func writer(L *lua.State, p c.Pointer, sz c.Ulong, ud c.Pointer) c.Int {
|
||||
if c.Fwrite(p, uintptr(sz), 1, ud) == 1 {
|
||||
return lua.OK
|
||||
file := (*os.File)(ud)
|
||||
data := unsafe.Slice((*byte)(p), sz)
|
||||
|
||||
n, err := file.Write(data)
|
||||
if err != nil || n != int(sz) {
|
||||
return 1
|
||||
}
|
||||
return 1
|
||||
|
||||
return lua.OK
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -19,7 +27,7 @@ func main() {
|
||||
|
||||
if res := L.Loadstring(c.Str(`
|
||||
function greet(name)
|
||||
return 'Hello, ' .. name .. '!'
|
||||
return 'Hello, ' .. name .. '!'
|
||||
end
|
||||
return greet
|
||||
`)); res != lua.OK {
|
||||
@@ -34,19 +42,15 @@ func main() {
|
||||
c.Printf(c.Str("Expected a function, but got %s"), L.Typename(L.Type(-1)))
|
||||
}
|
||||
|
||||
file := c.Fopen(c.Str("../llgofunc.luac"), c.Str("wb"))
|
||||
if file == nil {
|
||||
file, err := os.Create("../llgofunc.luac")
|
||||
if err != nil {
|
||||
c.Printf(c.Str("Failed to open file for writing\n"))
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
if L.Dump(writer, file, 0) != lua.OK {
|
||||
if L.Dump(writer, c.Pointer(file), 0) != lua.OK {
|
||||
c.Printf(c.Str("Failed to dump Lua function\n"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* Expected output:
|
||||
Stack size before call: 1
|
||||
Top element type after call: function
|
||||
Result: Hello, World!
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user