aboutsummaryrefslogtreecommitdiff
path: root/lib/std/build/CheckObjectStep.zig
diff options
context:
space:
mode:
authorLuuk de Gram <luuk@degram.dev>2022-10-02 18:38:52 +0200
committerLuuk de Gram <luuk@degram.dev>2022-10-08 09:43:40 +0200
commit3beef5a94f0bb15e39dff7c817c6c98f2b87010e (patch)
treeca2003dbc121748d7689cebdca925be201db7032 /lib/std/build/CheckObjectStep.zig
parent43b55ea9f4a5a05c9ff295ea00aab687141e24c3 (diff)
downloadzig-3beef5a94f0bb15e39dff7c817c6c98f2b87010e.tar.gz
zig-3beef5a94f0bb15e39dff7c817c6c98f2b87010e.zip
CheckObjectStep: parsing and dumping producers
Diffstat (limited to 'lib/std/build/CheckObjectStep.zig')
-rw-r--r--lib/std/build/CheckObjectStep.zig36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/std/build/CheckObjectStep.zig b/lib/std/build/CheckObjectStep.zig
index 0acc659d20..09a8d3c148 100644
--- a/lib/std/build/CheckObjectStep.zig
+++ b/lib/std/build/CheckObjectStep.zig
@@ -644,6 +644,8 @@ const WasmDumper = struct {
if (mem.eql(u8, name, "name")) {
try parseDumpNames(reader, writer, data);
+ } else if (mem.eql(u8, name, "producers")) {
+ try parseDumpProducers(reader, writer, data);
}
// TODO: Implement parsing and dumping other custom sections (such as relocations)
},
@@ -863,4 +865,38 @@ const WasmDumper = struct {
}
}
}
+
+ fn parseDumpProducers(reader: anytype, writer: anytype, data: []const u8) !void {
+ const field_count = try std.leb.readULEB128(u32, reader);
+ try writer.print("fields {d}\n", .{field_count});
+ var current_field: u32 = 0;
+ while (current_field < field_count) : (current_field += 1) {
+ const field_name_length = try std.leb.readULEB128(u32, reader);
+ const field_name = data[reader.context.pos..][0..field_name_length];
+ reader.context.pos += field_name_length;
+
+ const value_count = try std.leb.readULEB128(u32, reader);
+ try writer.print(
+ \\field_name {s}
+ \\values {d}
+ , .{ field_name, value_count });
+ try writer.writeByte('\n');
+ var current_value: u32 = 0;
+ while (current_value < value_count) : (current_value += 1) {
+ const value_length = try std.leb.readULEB128(u32, reader);
+ const value = data[reader.context.pos..][0..value_length];
+ reader.context.pos += value_length;
+
+ const version_length = try std.leb.readULEB128(u32, reader);
+ const version = data[reader.context.pos..][0..version_length];
+ reader.context.pos += version_length;
+
+ try writer.print(
+ \\value_name {s}
+ \\version {s}
+ , .{ value, version });
+ try writer.writeByte('\n');
+ }
+ }
+ }
};