| ... | ... | @@ -184,7 +184,7 @@ fn parseNumber(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex { |
| 184 | 184 | if (try p.eatByte('0')) |_| { |
| 185 | 185 | return try p.addNumber(alloc, "0"); |
| 186 | 186 | } |
| 187 | | while (try p.eatAnyScalar("0123456789")) |d| { |
| 187 | while (try p.eatRange('0', '9')) |d| { |
| 188 | 188 | try characters.append(d); |
| 189 | 189 | } |
| 190 | 190 | if (characters.items.len == 0) { |
| ... | ... | @@ -193,7 +193,7 @@ fn parseNumber(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex { |
| 193 | 193 | if (try p.eatByte('.')) |c| { |
| 194 | 194 | try characters.append(c); |
| 195 | 195 | const l = characters.items.len; |
| 196 | | while (try p.eatAnyScalar("0123456789")) |d| { |
| 196 | while (try p.eatRange('0', '9')) |d| { |
| 197 | 197 | try characters.append(d); |
| 198 | 198 | } |
| 199 | 199 | if (characters.items.len == l) return error.JsonExpectedTODO; |
| ... | ... | @@ -202,7 +202,7 @@ fn parseNumber(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex { |
| 202 | 202 | try characters.append('e'); |
| 203 | 203 | try characters.append(try p.eatAnyScalar("+-") orelse return error.JsonExpectedTODO); |
| 204 | 204 | const l = characters.items.len; |
| 205 | | while (try p.eatAnyScalar("0123456789")) |d| { |
| 205 | while (try p.eatRange('0', '9')) |d| { |
| 206 | 206 | try characters.append(d); |
| 207 | 207 | } |
| 208 | 208 | if (characters.items.len == l) return error.JsonExpectedTODO; |
| ... | ... | @@ -289,6 +289,18 @@ const Parser = struct { |
| 289 | 289 | return null; |
| 290 | 290 | } |
| 291 | 291 | |
| 292 | pub fn eatRange(p: *Parser, comptime from: u8, comptime to: u8) !?u8 { |
| 293 | const t = tracer.trace(@src(), " ({d},{d})", .{ from, to }); |
| 294 | defer t.end(); |
| 295 | |
| 296 | try p.peekAmt(1); |
| 297 | if (p.slice()[0] >= from and p.slice()[0] <= to) { |
| 298 | defer p.idx += 1; |
| 299 | return p.slice()[0]; |
| 300 | } |
| 301 | return null; |
| 302 | } |
| 303 | |
| 292 | 304 | pub fn eatAnyScalar(p: *Parser, test_s: string) !?u8 { |
| 293 | 305 | const t = tracer.trace(@src(), " ({s})", .{test_s}); |
| 294 | 306 | defer t.end(); |