c/lua:userdata
This commit is contained in:
43
c/lua/_demo/userdata/userdata.go
Normal file
43
c/lua/_demo/userdata/userdata.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/c/lua"
|
||||
)
|
||||
|
||||
type lightdata struct {
|
||||
value int
|
||||
}
|
||||
|
||||
func main() {
|
||||
L := lua.Newstate()
|
||||
defer L.Close()
|
||||
L.Openlibs()
|
||||
|
||||
data := L.Newuserdata(unsafe.Sizeof(0))
|
||||
*((*int)(data)) = 42
|
||||
L.Setglobal(c.Str("data"))
|
||||
|
||||
light := &lightdata{value: 24}
|
||||
L.Pushlightuserdata(unsafe.Pointer(light))
|
||||
L.Setglobal(c.Str("lightdata"))
|
||||
|
||||
L.Getglobal(c.Str("data"))
|
||||
if L.Isuserdata(-1) != 0 {
|
||||
data := L.Touserdata(-1)
|
||||
c.Printf(c.Str("userdata %d\n"), *(*int)(data))
|
||||
}
|
||||
|
||||
L.Getglobal(c.Str("lightdata"))
|
||||
if L.Islightuserdata(-1) {
|
||||
light := (*lightdata)(L.Touserdata(-1))
|
||||
c.Printf(c.Str("lightdata %d\n"), light.value)
|
||||
}
|
||||
}
|
||||
|
||||
/* Expected output:
|
||||
userdata 42
|
||||
lightdata 24
|
||||
*/
|
||||
Reference in New Issue
Block a user