authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-11-21 20:44:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-11-22 11:33:34-07:00
log46af8bd2ba723e4dbcff07e457d2786cd7c74440
tree5951651893bdc45332dca250f468dfdbad3d378c
parent49d6dd3ecb0b5d0547f8a70b764e38af2f24f475

resinator: use ArrayList instead of BoundedArray

In this case it improved maintainability because magic number `4` is no longer repeated 3 times, and there is no longer a redundant branch in the loop.

1 files changed, 7 insertions(+), 4 deletions(-)

src/resinator/parse.zig+7-4
...@@ -1246,13 +1246,16 @@ pub const Parser = struct {...@@ -1246,13 +1246,16 @@ pub const Parser = struct {
1246 self.nextToken(.normal) catch unreachable;1246 self.nextToken(.normal) catch unreachable;
1247 switch (statement_type) {1247 switch (statement_type) {
1248 .file_version, .product_version => {1248 .file_version, .product_version => {
1249 var parts = std.BoundedArray(*Node, 4){};1249 var parts_buffer: [4]*Node = undefined;
1250 var parts = std.ArrayListUnmanaged(*Node).initBuffer(&parts_buffer);
12501251
1251 while (parts.len < 4) {1252 while (true) {
1252 const value = try self.parseExpression(.{ .allowed_types = .{ .number = true } });1253 const value = try self.parseExpression(.{ .allowed_types = .{ .number = true } });
1253 parts.addOneAssumeCapacity().* = value;1254 parts.addOneAssumeCapacity().* = value;
12541255
1255 if (parts.len == 4 or !(try self.parseOptionalToken(.comma))) {1256 if (parts.unusedCapacitySlice().len == 0 or
1257 !(try self.parseOptionalToken(.comma)))
1258 {
1256 break;1259 break;
1257 }1260 }
1258 }1261 }
...@@ -1260,7 +1263,7 @@ pub const Parser = struct {...@@ -1260,7 +1263,7 @@ pub const Parser = struct {
1260 const node = try self.state.arena.create(Node.VersionStatement);1263 const node = try self.state.arena.create(Node.VersionStatement);
1261 node.* = .{1264 node.* = .{
1262 .type = type_token,1265 .type = type_token,
1263 .parts = try self.state.arena.dupe(*Node, parts.slice()),1266 .parts = try self.state.arena.dupe(*Node, parts.items),
1264 };1267 };
1265 return &node.base;1268 return &node.base;
1266 },1269 },