From 44217caa0d41884cc9a21b447fbfa43cceb1d2eb Mon Sep 17 00:00:00 2001 From: Mark Puha Date: Sat, 8 Feb 2025 13:37:52 +0100 Subject: [PATCH] successfully call lua function from Go --- adapter/Makefile | 2 ++ adapter/lua.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ 4 files changed, 50 insertions(+) create mode 100644 adapter/Makefile create mode 100644 adapter/lua.go diff --git a/adapter/Makefile b/adapter/Makefile new file mode 100644 index 0000000..41bc7aa --- /dev/null +++ b/adapter/Makefile @@ -0,0 +1,2 @@ +all: + go run -tags lua54 lua.go diff --git a/adapter/lua.go b/adapter/lua.go new file mode 100644 index 0000000..8c56d4a --- /dev/null +++ b/adapter/lua.go @@ -0,0 +1,45 @@ +package main + +import ( + "encoding/base64" + "fmt" + + "github.com/aarzilli/golua/lua" +) + +func main() { + // luaB64 := `bG9jYWwgZnVuY3Rpb24gZF9nZW4oZGF0YSwgY291bnRlcikKCUhlYWRlciA9IHN0cmluZy5jaGFyKDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgpCgktLSBsb2NhbCB0cyA9IG9zLnRpbWUoKQoJcmV0dXJuIEhlYWRlciAuLiBkYXRhCmVuZAoKbG9jYWwgZnVuY3Rpb24gZF9wYXJzZShkYXRhKQoJcmV0dXJuIHN0cmluZy5zdWIoZGF0YSwgI0hlYWRlcikKZW5kCg==` + // only d_gen + // luaB64 := `ZnVuY3Rpb24gRF9nZW4oZGF0YSkKCS0tIEhlYWRlciA9IHN0cmluZy5jaGFyKDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgpCglsb2NhbCBIZWFkZXIgPSAiXHgxMlx4MzRceDU2XHg3OCIKCS0tIGxvY2FsIHRzID0gb3MudGltZSgpCglyZXR1cm4gSGVhZGVyIC4uIGRhdGEKZW5kCg==` + luaB64 := `ZnVuY3Rpb24gRF9nZW4oZGF0YSkKCS0tIEhlYWRlciA9IHN0cmluZy5jaGFyKDB4MTIsIDB4MzQsIDB4NTYsIDB4NzgpCglsb2NhbCBIZWFkZXIgPSAiXHgxMlx4MzRceDU2XHg3OCIKCWxvY2FsIHRzID0gb3MudGltZSgpCglyZXR1cm4gSGVhZGVyIC4uIGRhdGEKZW5kCg==` + sDec, _ := base64.StdEncoding.DecodeString(luaB64) + fmt.Println(string(sDec)) + luaCode := sDec + L := lua.NewState() + L.OpenLibs() + defer L.Close() + + // Load and execute the Lua code + if err := L.DoString(string(luaCode)); err != nil { + fmt.Printf("Error loading Lua code: %v\n", err) + return + } + + // Push the function onto the stack + L.GetGlobal("D_gen") + + // Push the argument + L.PushString("data") + + if err := L.Call(1, 1); err != nil { + fmt.Printf("Error calling Lua function: %v\n", err) + return + } + + result := L.ToString(-1) + L.Pop(1) + + // Print the result + // fmt.Printf("Result: %x\n", []byte(result)) + fmt.Printf("Result: %s\n", result) +} diff --git a/go.mod b/go.mod index b03acb0..8511642 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( ) require ( + github.com/aarzilli/golua v0.0.0-20241229084300-cd31ab23902e // indirect github.com/google/btree v1.0.1 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect ) diff --git a/go.sum b/go.sum index 7b53725..119ba05 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/aarzilli/golua v0.0.0-20241229084300-cd31ab23902e h1:ibMKBskN7uMCz9TJgfaIVYVdPyckXm0UjFDRSNV7XB0= +github.com/aarzilli/golua v0.0.0-20241229084300-cd31ab23902e/go.mod h1:hMjfaJVSqVnxenMlsxrq3Ni+vrm9Hs64tU4M7dhUoO4= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/tevino/abool/v2 v2.1.0 h1:7w+Vf9f/5gmKT4m4qkayb33/92M+Um45F2BkHOR+L/c=