'main_state' fix

Dont' confuse the state we're pushing the registry value for the main state to
with the main state itself, pop from the correct state.
This commit is contained in:
kyren 2017-07-27 16:47:06 -04:00
parent 3adacd5589
commit a2b77f37a2
2 changed files with 13 additions and 2 deletions

View File

@ -882,3 +882,14 @@ fn string_views() {
assert!(err.to_str().is_err()); assert!(err.to_str().is_err());
assert_eq!(err.as_bytes(), &b"but \xff isn't :("[..]); assert_eq!(err.as_bytes(), &b"but \xff isn't :("[..]);
} }
#[test]
fn coroutine_from_closure() {
let lua = Lua::new();
let thrd_main = lua.create_function(|lua, _| {
lua.pack(())
});
lua.globals().set("main", thrd_main).unwrap();
let thrd: Thread = lua.eval("coroutine.create(main)", None).unwrap();
thrd.resume::<_, ()>(()).unwrap();
}

View File

@ -478,9 +478,9 @@ pub unsafe extern "C" fn safe_xpcall(state: *mut ffi::lua_State) -> c_int {
/// Does not call checkstack, uses 1 stack space /// Does not call checkstack, uses 1 stack space
pub unsafe fn main_state(state: *mut ffi::lua_State) -> *mut ffi::lua_State { pub unsafe fn main_state(state: *mut ffi::lua_State) -> *mut ffi::lua_State {
ffi::lua_rawgeti(state, ffi::LUA_REGISTRYINDEX, ffi::LUA_RIDX_MAINTHREAD); ffi::lua_rawgeti(state, ffi::LUA_REGISTRYINDEX, ffi::LUA_RIDX_MAINTHREAD);
let state = ffi::lua_tothread(state, -1); let main_state = ffi::lua_tothread(state, -1);
ffi::lua_pop(state, 1); ffi::lua_pop(state, 1);
state main_state
} }
pub struct WrappedError(pub Error); pub struct WrappedError(pub Error);