move zig code writing to own function
This commit is contained in:
+47
-39
@@ -72,11 +72,25 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
else return error.FileNotFound;
|
else return error.FileNotFound;
|
||||||
var buf: [1024]u8 = undefined;
|
var buf: [1024]u8 = undefined;
|
||||||
var out = out_file.writerStreaming(io, &buf);
|
var out = out_file.writerStreaming(io, &buf);
|
||||||
var out_writer = &out.interface;
|
const out_writer = &out.interface;
|
||||||
|
|
||||||
var protocol_opt: ?*EntryNode = output.protocol_first;
|
try write_zig_code(
|
||||||
try out_writer.print(OutputBeginMsg, .{});
|
out_writer,
|
||||||
_ = try out_writer.write(WaylandGeneralTypesCodePaste);
|
&output,
|
||||||
|
debug,
|
||||||
|
);
|
||||||
|
|
||||||
|
try out.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_zig_code(
|
||||||
|
writer: *Io.Writer,
|
||||||
|
code_tree: *Output,
|
||||||
|
debug: bool,
|
||||||
|
) !void {
|
||||||
|
var protocol_opt: ?*EntryNode = code_tree.protocol_first;
|
||||||
|
try writer.print(OutputBeginMsg, .{});
|
||||||
|
_ = try writer.write(WaylandGeneralTypesCodePaste);
|
||||||
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
||||||
if (debug) std.debug.print(
|
if (debug) std.debug.print(
|
||||||
"found {} interfaces in protocol {s}!\n",
|
"found {} interfaces in protocol {s}!\n",
|
||||||
@@ -86,7 +100,7 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
try out_writer.print(
|
try writer.print(
|
||||||
ProtocolBeginFmt,
|
ProtocolBeginFmt,
|
||||||
.{ protocol.name },
|
.{ protocol.name },
|
||||||
);
|
);
|
||||||
@@ -94,13 +108,12 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
var interface_opt: ?*EntryNode = protocol.interface_first;
|
var interface_opt: ?*EntryNode = protocol.interface_first;
|
||||||
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
||||||
try write_wl_interface(
|
try write_wl_interface(
|
||||||
out_writer,
|
writer,
|
||||||
allocator,
|
|
||||||
interface,
|
interface,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
try out_writer.print(
|
try writer.print(
|
||||||
ProtocolEndString,
|
ProtocolEndString,
|
||||||
.{},
|
.{},
|
||||||
);
|
);
|
||||||
@@ -108,88 +121,85 @@ pub fn main(init: std.process.Init) !void {
|
|||||||
|
|
||||||
// Write Combined Enum Union
|
// Write Combined Enum Union
|
||||||
{
|
{
|
||||||
_ = try out_writer.write(CombinedEnumBeginMsg);
|
_ = try writer.write(CombinedEnumBeginMsg);
|
||||||
protocol_opt = output.protocol_first;
|
protocol_opt = code_tree.protocol_first;
|
||||||
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
||||||
var interface_opt: ?*EntryNode = protocol.interface_first;
|
var interface_opt: ?*EntryNode = protocol.interface_first;
|
||||||
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
||||||
var enum_opt: ?*EntryNode = interface.enum_first;
|
var enum_opt: ?*EntryNode = interface.enum_first;
|
||||||
while (enum_opt) |@"enum"| : (enum_opt = @"enum".next) {
|
while (enum_opt) |@"enum"| : (enum_opt = @"enum".next) {
|
||||||
try out_writer.print(
|
try writer.print(
|
||||||
CombinedEnumEntryFmt,
|
CombinedEnumEntryFmt,
|
||||||
.{ interface.name, @"enum".name, interface.name, @"enum".identifier },
|
.{ interface.name, @"enum".name, interface.name, @"enum".identifier },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = try out_writer.write(CombinedEnumEndMsg);
|
_ = try writer.write(CombinedEnumEndMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write Combined Event Union
|
// Write Combined Event Union
|
||||||
{
|
{
|
||||||
_ = try out_writer.write(CombinedEventBeginMsg);
|
_ = try writer.write(CombinedEventBeginMsg);
|
||||||
protocol_opt = output.protocol_first;
|
protocol_opt = code_tree.protocol_first;
|
||||||
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
||||||
var interface_opt: ?*EntryNode = protocol.interface_first;
|
var interface_opt: ?*EntryNode = protocol.interface_first;
|
||||||
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
||||||
var event_opt: ?*EntryNode = interface.event_first;
|
var event_opt: ?*EntryNode = interface.event_first;
|
||||||
while (event_opt) |event| : (event_opt = event.next) {
|
while (event_opt) |event| : (event_opt = event.next) {
|
||||||
try out_writer.print(
|
try writer.print(
|
||||||
CombinedEventEntryFmt,
|
CombinedEventEntryFmt,
|
||||||
.{interface.name, event.name, interface.name, event.identifier},
|
.{interface.name, event.name, interface.name, event.identifier},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = try out_writer.write(CombinedEventEndMsg);
|
_ = try writer.write(CombinedEventEndMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write Combined Object Union
|
// Write Combined Object Union
|
||||||
{
|
{
|
||||||
_ = try out_writer.write(CombinedInterfaceBeginMsg);
|
_ = try writer.write(CombinedInterfaceBeginMsg);
|
||||||
protocol_opt = output.protocol_first;
|
protocol_opt = code_tree.protocol_first;
|
||||||
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
||||||
var interface_opt: ?*EntryNode = protocol.interface_first;
|
var interface_opt: ?*EntryNode = protocol.interface_first;
|
||||||
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
||||||
try out_writer.print(
|
try writer.print(
|
||||||
CombinedInterfaceEntryFmt,
|
CombinedInterfaceEntryFmt,
|
||||||
.{ interface.name, interface.identifier },
|
.{ interface.name, interface.identifier },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = try out_writer.write(
|
_ = try writer.write(
|
||||||
\\
|
\\
|
||||||
\\ pub fn message_decode(o: Object, proxy: *Proxy, op: u16, data: []const u8) Event {
|
\\ pub fn message_decode(o: Object, proxy: *Proxy, op: u16, data: []const u8) Event {
|
||||||
\\ return switch (o) {
|
\\ return switch (o) {
|
||||||
\\
|
\\
|
||||||
);
|
);
|
||||||
protocol_opt = output.protocol_first;
|
protocol_opt = code_tree.protocol_first;
|
||||||
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
while (protocol_opt) |protocol| : (protocol_opt = protocol.next) {
|
||||||
var interface_opt: ?*EntryNode = protocol.interface_first;
|
var interface_opt: ?*EntryNode = protocol.interface_first;
|
||||||
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
while (interface_opt) |interface| : (interface_opt = interface.next) {
|
||||||
if (interface.event_count > 0)
|
if (interface.event_count > 0)
|
||||||
try out_writer.print(" .{s} => |interface_t| @TypeOf(interface_t).message_decode(proxy, op, data),\n", .{ interface.name });
|
try writer.print(" .{s} => |interface| @TypeOf(interface).message_decode(proxy, op, data),\n", .{ interface.name });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = try out_writer.write(
|
_ = try writer.write(
|
||||||
\\ else => .invalid,
|
\\ else => .invalid,
|
||||||
\\ };
|
\\ };
|
||||||
\\ }
|
\\ }
|
||||||
\\
|
\\
|
||||||
);
|
);
|
||||||
_ = try out_writer.write(CombinedInterfaceEndMsg);
|
_ = try writer.write(CombinedInterfaceEndMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add import std for scoped log
|
// add import std for scoped log
|
||||||
_ = try out_writer.write(LogPaste);
|
_ = try writer.write(LogPaste);
|
||||||
|
|
||||||
try out.flush();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_wl_interface(
|
fn write_wl_interface(
|
||||||
writer: *Io.Writer,
|
writer: *Io.Writer,
|
||||||
allocator: std.mem.Allocator,
|
|
||||||
wl_interface: *EntryNode,
|
wl_interface: *EntryNode,
|
||||||
) !void {
|
) !void {
|
||||||
try writer.print(
|
try writer.print(
|
||||||
@@ -206,7 +216,7 @@ fn write_wl_interface(
|
|||||||
|
|
||||||
var message_opt: ?*EntryNode = wl_interface.request_first;
|
var message_opt: ?*EntryNode = wl_interface.request_first;
|
||||||
while (message_opt) |wl_request| : (message_opt = wl_request.next) {
|
while (message_opt) |wl_request| : (message_opt = wl_request.next) {
|
||||||
try write_wl_message(writer, allocator, wl_interface, wl_request);
|
try write_wl_message(writer, wl_interface, wl_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -214,7 +224,7 @@ fn write_wl_interface(
|
|||||||
|
|
||||||
message_opt = wl_interface.event_first;
|
message_opt = wl_interface.event_first;
|
||||||
while (message_opt) |wl_event| : (message_opt = wl_event.next) {
|
while (message_opt) |wl_event| : (message_opt = wl_event.next) {
|
||||||
try write_wl_message(writer, allocator, wl_interface, wl_event);
|
try write_wl_message(writer, wl_interface, wl_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
// write event parse
|
// write event parse
|
||||||
@@ -224,7 +234,7 @@ fn write_wl_interface(
|
|||||||
while (message_opt) |wl_event| : (message_opt = wl_event.next) {
|
while (message_opt) |wl_event| : (message_opt = wl_event.next) {
|
||||||
defer opcode += 1;
|
defer opcode += 1;
|
||||||
try writer.print(" {d} => {{\n", .{opcode});
|
try writer.print(" {d} => {{\n", .{opcode});
|
||||||
try write_wl_message_decode(writer, allocator, wl_interface.name, wl_event);
|
try write_wl_message_decode(writer, wl_interface.name, wl_event);
|
||||||
try writer.print(" }},\n", .{});
|
try writer.print(" }},\n", .{});
|
||||||
}
|
}
|
||||||
_ = try writer.write(MessageDecodeEndMsg);
|
_ = try writer.write(MessageDecodeEndMsg);
|
||||||
@@ -262,11 +272,9 @@ fn write_wl_interface(
|
|||||||
|
|
||||||
fn write_wl_message(
|
fn write_wl_message(
|
||||||
writer: *Io.Writer,
|
writer: *Io.Writer,
|
||||||
arena: std.mem.Allocator,
|
|
||||||
wl_interface: *EntryNode,
|
wl_interface: *EntryNode,
|
||||||
wl_message: *EntryNode,
|
wl_message: *EntryNode,
|
||||||
) !void {
|
) !void {
|
||||||
_ = arena;
|
|
||||||
switch (wl_message.type) {
|
switch (wl_message.type) {
|
||||||
.request => {
|
.request => {
|
||||||
try writer.print(
|
try writer.print(
|
||||||
@@ -516,11 +524,9 @@ fn write_wl_message_encode(
|
|||||||
|
|
||||||
fn write_wl_message_decode(
|
fn write_wl_message_decode(
|
||||||
writer: *Io.Writer,
|
writer: *Io.Writer,
|
||||||
allocator: std.mem.Allocator,
|
|
||||||
wl_interface_name: []const u8,
|
wl_interface_name: []const u8,
|
||||||
wl_message: *EntryNode,
|
wl_message: *EntryNode,
|
||||||
) !void {
|
) !void {
|
||||||
_ = allocator;
|
|
||||||
var arg_opt: ?*EntryNode = wl_message.arg_first;
|
var arg_opt: ?*EntryNode = wl_message.arg_first;
|
||||||
_ = try writer.write(MessageDecodeArgsBeginMsg);
|
_ = try writer.write(MessageDecodeArgsBeginMsg);
|
||||||
while (arg_opt) |arg| : (arg_opt = arg.next) {
|
while (arg_opt) |arg| : (arg_opt = arg.next) {
|
||||||
@@ -532,10 +538,12 @@ fn write_wl_message_decode(
|
|||||||
_ = try writer.write(MessageDecodeArgsEndMsg);
|
_ = try writer.write(MessageDecodeArgsEndMsg);
|
||||||
_ = try writer.write(" proxy.message_decode(&args_in, data);\n");
|
_ = try writer.write(" proxy.message_decode(&args_in, data);\n");
|
||||||
|
|
||||||
_ = try writer.print(" break :event .{{\n", .{});
|
_ = try writer.print(
|
||||||
_ = try writer.print(" .{s}_{s} = ", .{ wl_interface_name, wl_message.name });
|
" break :event .{{\n .{s}_{s} = ",
|
||||||
|
.{ wl_interface_name, wl_message.name },
|
||||||
|
);
|
||||||
if (wl_message.arg_count == 0) {
|
if (wl_message.arg_count == 0) {
|
||||||
_ = try writer.print("{{\n", .{});
|
_ = try writer.print("{{}},\n", .{});
|
||||||
} else {
|
} else {
|
||||||
_ = try writer.print(".{{\n", .{});
|
_ = try writer.print(".{{\n", .{});
|
||||||
arg_opt = wl_message.arg_first;
|
arg_opt = wl_message.arg_first;
|
||||||
@@ -550,8 +558,8 @@ fn write_wl_message_decode(
|
|||||||
_ = try writer.print(" .{s} = args_in[{d}].{s},\n", .{ arg.name, arg_no, @tagName(arg.data_type) });
|
_ = try writer.print(" .{s} = args_in[{d}].{s},\n", .{ arg.name, arg_no, @tagName(arg.data_type) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_ = try writer.print(" }},\n", .{});
|
||||||
}
|
}
|
||||||
_ = try writer.print(" }}\n", .{});
|
|
||||||
_ = try writer.print(" }};\n", .{});
|
_ = try writer.print(" }};\n", .{});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user