diff options
| author | Luuk de Gram <luuk@degram.dev> | 2022-10-02 18:38:52 +0200 |
|---|---|---|
| committer | Luuk de Gram <luuk@degram.dev> | 2022-10-08 09:43:40 +0200 |
| commit | 3beef5a94f0bb15e39dff7c817c6c98f2b87010e (patch) | |
| tree | ca2003dbc121748d7689cebdca925be201db7032 /lib/std/build/CheckObjectStep.zig | |
| parent | 43b55ea9f4a5a05c9ff295ea00aab687141e24c3 (diff) | |
| download | zig-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.zig | 36 |
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'); + } + } + } }; |
