From 138feede1b1ffc9133931a1bb02de50a671fa1ed Mon Sep 17 00:00:00 2001 From: Nathan Craddock Date: Mon, 26 Oct 2026 17:15:02 -0600 Subject: [PATCH 1/2] Rename xMove to moveToThread --- src/lib.zig | 2 +- src/tests.zig | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.zig b/src/lib.zig index d7ef8808..7fac9cbc 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -3099,7 +3099,7 @@ pub const Lua = opaque { /// * Lua Runtime Errors: `none` /// /// See https://www.lua.org/manual/5.4/manual.html#lua_xmove - pub fn xMove(lua: *Lua, to: *Lua, num: i32) void { + pub fn moveToThread(lua: *Lua, to: *Lua, num: i32) void { c.lua_xmove(@ptrCast(lua), @ptrCast(to), num); } diff --git a/src/tests.zig b/src/tests.zig index 382ee0f8..d0f44b5b 100644 --- a/src/tests.zig +++ b/src/tests.zig @@ -939,7 +939,7 @@ test "threads" { lua.pushInteger(10); lua.pushNil(); - lua.xMove(new_thread, 2); + lua.moveToThread(new_thread, 2); try expectEqual(2, new_thread.getTop()); } From 62a5dfb239ef6787a96518a6257ced2a42374411 Mon Sep 17 00:00:00 2001 From: Nathan Craddock Date: Mon, 26 Oct 2026 17:30:35 -0600 Subject: [PATCH 2/2] Return tuple from resumeThread Lua 5.4 and 5.5 accept an out-parameter for the number of results returned from lua_resume. Instead of using an out-parameter, return a tuple and use destructuring. --- src/lib.zig | 7 ++++--- src/tests.zig | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/lib.zig b/src/lib.zig index 7fac9cbc..e07f8644 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -2521,14 +2521,15 @@ pub const Lua = opaque { /// Starts and resumes a coroutine in the given thread /// See https://www.lua.org/manual/5.4/manual.html#lua_resume - fn resumeThread54(lua: *Lua, from: ?*Lua, num_args: i32, num_results: *i32) CallError!ResumeStatus { + fn resumeThread54(lua: *Lua, from: ?*Lua, num_args: i32) CallError!struct { ResumeStatus, i32 } { + var num_results: i32 = undefined; const from_state: ?*LuaState = if (from) |from_val| @ptrCast(from_val) else null; - const thread_status = c.lua_resume(@ptrCast(lua), from_state, num_args, num_results); + const thread_status = c.lua_resume(@ptrCast(lua), from_state, num_args, &num_results); switch (thread_status) { StatusCode.err_runtime => return error.LuaRuntime, StatusCode.err_memory => return error.OutOfMemory, StatusCode.err_error => return error.LuaMsgHandler, - else => return @enumFromInt(thread_status), + else => return .{ @enumFromInt(thread_status), num_results }, } } diff --git a/src/tests.zig b/src/tests.zig index d0f44b5b..e6f1aff3 100644 --- a/src/tests.zig +++ b/src/tests.zig @@ -1148,14 +1148,15 @@ test "yielding" { if (zlua.lang == .lua54 or zlua.lang == .lua55) { try expect(thread.isYieldable()); - var results: i32 = undefined; while (i < 5) : (i += 1) { - try expectEqual(.yield, try thread.resumeThread(lua, 0, &results)); + const status, const num_results = try thread.resumeThread(lua, 0); + try expectEqual(.yield, status); + try expectEqual(1, num_results); try expectEqual(i, try thread.toInteger(-1)); - thread.pop(results); + thread.pop(num_results); } - try expectEqual(.ok, try thread.resumeThread(lua, 0, &results)); + try expectEqual(.ok, (try thread.resumeThread(lua, 0))[0]); } else { // Lua 5.3 try expect(!thread.isYieldable()); @@ -1258,12 +1259,11 @@ test "resuming" { ); _ = thread.getGlobal("counter"); - var num_results: i32 = 0; var i: i32 = 1; while (i <= 5) : (i += 1) { try expectEqual(.yield, switch (zlua.lang) { .lua51, .luajit => thread.resumeThread(0), - .lua54, .lua55 => thread.resumeThread(lua, 0, &num_results), + .lua54, .lua55 => (try thread.resumeThread(lua, 0))[0], else => thread.resumeThread(lua, 0), }); @@ -1273,7 +1273,7 @@ test "resuming" { try expectEqual(.ok, switch (zlua.lang) { .lua51, .luajit => thread.resumeThread(0), - .lua54, .lua55 => thread.resumeThread(lua, 0, &num_results), + .lua54, .lua55 => (try thread.resumeThread(lua, 0))[0], else => thread.resumeThread(lua, 0), });