From 71d21959b4671a848f1d198f6bb919f54d541f41 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Sat, 31 Dec 2022 23:11:50 +0100 Subject: [PATCH] scanner: use destructor event annotations Make use of destructor annotations on events to generate more robust server code. It's now impossible to forget e.g. the required wl.Callback.destroy() call after wl.Callback.sendDone() since now there is no wl.Callback.sendDone(), only wl.Callback.destroySendDone(). --- src/scanner.zig | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/scanner.zig b/src/scanner.zig index cc47fc7..2f78b41 100644 --- a/src/scanner.zig +++ b/src/scanner.zig @@ -866,7 +866,11 @@ const Message = struct { fn emitFn(message: Message, side: Side, writer: anytype, interface: Interface, opcode: usize) !void { try writer.writeAll("pub fn "); if (side == .server) { - try writer.print("send{}", .{titleCase(message.name)}); + if (message.kind == .destructor) { + try writer.print("destroySend{}", .{titleCase(message.name)}); + } else { + try writer.print("send{}", .{titleCase(message.name)}); + } } else { try writer.print("{}", .{camelCase(message.name)}); } @@ -962,6 +966,7 @@ const Message = struct { const args = if (message.args.len > 0) "&_args" else "null"; if (side == .server) { try writer.print("_resource.postEvent({}, {s});", .{ opcode, args }); + if (message.kind == .destructor) try writer.writeAll("_resource.destroy();"); } else switch (message.kind) { .normal, .destructor => { try writer.print("_proxy.marshal({}, {s});", .{ opcode, args });