summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tests.rs11
-rw-r--r--src/util.rs4
2 files changed, 13 insertions, 2 deletions
diff --git a/src/tests.rs b/src/tests.rs
index 3a19d05..b5a7ca0 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -882,3 +882,14 @@ fn string_views() {
assert!(err.to_str().is_err());
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();
+}
diff --git a/src/util.rs b/src/util.rs
index a29a8c9..7808fd2 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -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
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);
- let state = ffi::lua_tothread(state, -1);
+ let main_state = ffi::lua_tothread(state, -1);
ffi::lua_pop(state, 1);
- state
+ main_state
}
pub struct WrappedError(pub Error);