@@ -88,6 +88,9 @@ pub const CompareOperator = enum(u2) {
8888/// Type for C userdata destructors
8989pub const CUserdataDtorFn = * const fn (userdata : * anyopaque ) callconv (.C ) void ;
9090
91+ /// Type for C interrupt callback
92+ pub const CInterruptCallbackFn = * const fn (state : ? * LuaState , gc : c_int ) callconv (.C ) void ;
93+
9194/// Type for C useratom callback
9295pub const CUserAtomCallbackFn = * const fn (str : [* c ]const u8 , len : usize ) callconv (.C ) i16 ;
9396
@@ -2340,6 +2343,12 @@ pub const Lua = opaque {
23402343 return error .Fail ;
23412344 }
23422345
2346+ pub fn setInterruptCallbackFn (lua : * Lua , cb : ? CInterruptCallbackFn ) void {
2347+ if (c .lua_callbacks (@ptrCast (lua ))) | cb_struct | {
2348+ cb_struct .* .interrupt = cb ;
2349+ }
2350+ }
2351+
23432352 pub fn setUserAtomCallbackFn (lua : * Lua , cb : CUserAtomCallbackFn ) void {
23442353 if (c .lua_callbacks (@ptrCast (lua ))) | cb_struct | {
23452354 cb_struct .* .useratom = cb ;
@@ -3581,6 +3590,7 @@ pub const ZigHookFn = fn (lua: *Lua, event: Event, info: *DebugInfo) void;
35813590pub const ZigContFn = fn (lua : * Lua , status : Status , ctx : Context ) i32 ;
35823591pub const ZigReaderFn = fn (lua : * Lua , data : * anyopaque ) ? []const u8 ;
35833592pub const ZigUserdataDtorFn = fn (data : * anyopaque ) void ;
3593+ pub const ZigInterruptCallbackFn = fn (lua : * Lua , gc : i32 ) void ;
35843594pub const ZigUserAtomCallbackFn = fn (str : []const u8 ) i16 ;
35853595pub const ZigWarnFn = fn (data : ? * anyopaque , msg : []const u8 , to_cont : bool ) void ;
35863596pub const ZigWriterFn = fn (lua : * Lua , buf : []const u8 , data : * anyopaque ) bool ;
@@ -3593,6 +3603,7 @@ fn TypeOfWrap(comptime T: type) type {
35933603 ZigContFn = > CContFn ,
35943604 ZigReaderFn = > CReaderFn ,
35953605 ZigUserdataDtorFn = > CUserdataDtorFn ,
3606+ ZigInterruptCallbackFn = > CInterruptCallbackFn ,
35963607 ZigUserAtomCallbackFn = > CUserAtomCallbackFn ,
35973608 ZigWarnFn = > CWarnFn ,
35983609 ZigWriterFn = > CWriterFn ,
@@ -3611,6 +3622,7 @@ pub fn wrap(comptime value: anytype) TypeOfWrap(@TypeOf(value)) {
36113622 ZigContFn = > wrapZigContFn (value ),
36123623 ZigReaderFn = > wrapZigReaderFn (value ),
36133624 ZigUserdataDtorFn = > wrapZigUserdataDtorFn (value ),
3625+ ZigInterruptCallbackFn = > wrapZigInterruptCallbackFn (value ),
36143626 ZigUserAtomCallbackFn = > wrapZigUserAtomCallbackFn (value ),
36153627 ZigWarnFn = > wrapZigWarnFn (value ),
36163628 ZigWriterFn = > wrapZigWriterFn (value ),
@@ -3679,6 +3691,15 @@ fn wrapZigUserdataDtorFn(comptime f: ZigUserdataDtorFn) CUserdataDtorFn {
36793691 }.inner ;
36803692}
36813693
3694+ /// Wrap a ZigFn in a CFn for passing to the API
3695+ fn wrapZigInterruptCallbackFn (comptime f : ZigInterruptCallbackFn ) CInterruptCallbackFn {
3696+ return struct {
3697+ fn inner (lua : ? * LuaState , gc : c_int ) callconv (.C ) void {
3698+ @call (.always_inline , f , .{ @as (* Lua , @ptrCast (lua .? )), gc });
3699+ }
3700+ }.inner ;
3701+ }
3702+
36823703/// Wrap a ZigFn in a CFn for passing to the API
36833704fn wrapZigUserAtomCallbackFn (comptime f : ZigUserAtomCallbackFn ) CUserAtomCallbackFn {
36843705 return struct {
0 commit comments