// lua_newthread func (L *State) NewThread() *State { //TODO: call newState with result from C.lua_newthread and return it //TODO: should have same lists as parent // but may complicate gc s := C.lua_newthread(L.s) return &State{s, nil, nil} }
// Creates a new thread, pushes it on the stack, and returns a pointer // to a State that represents this new thread. The new state returned by // this function shares with the original state all global objects (such // as tables), but has an independent execution stack. // // There is no explicit function to close or to destroy a thread. Threads // are subject to garbage collection, like any Lua object. func (this *State) Newthread() *State { if !this.Checkstack(1) { panic("STATE: unable to grow lua_state stack") } newstate := &State{ luastate: C.lua_newthread(this.luastate), } return newstate }
// Creates a new thread, pushes it on the stack, and returns a pointer // to a State that represents this new thread. The new state returned by // this function shares with the original state all global objects (such // as tables), but has an independent execution stack. // // There is no explicit function to close or to destroy a thread. Threads // are subject to garbage collection, like any Lua object. func (s *State) Newthread() *State { l := C.lua_newthread(s.l) return &State{l} }
// Creates a new thread, pushes it on the stack, and returns a pointer // to a State that represents this new thread. The new state returned by // this function shares with the original state all global objects (such // as tables), but has an independent execution stack. // // There is no explicit function to close or to destroy a thread. Threads // are subject to garbage collection, like any Lua object. func (s *State) Newthread() *State { l := C.lua_newthread(s.l) return &State{l: l, gfregistry: make(map[int]interface{})} }