| ... | @@ -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); |
| 1250 | | 1251 | |
| 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; |
| 1254 | | 1255 | |
| 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 | }, |