diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-25 15:47:26 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-25 15:47:26 +0900 |
| commit | 4c654156403c9660f0973605afa8d7b3645055c4 (patch) | |
| tree | 4d3d5137ed6456f02ac6b7ae2549cdb7c176ec18 /src/jq/parse.zig | |
| parent | 45f6c28a2e085da2a9d5d2331533e4cfdc0c0492 (diff) | |
| download | zgjq-4c654156403c9660f0973605afa8d7b3645055c4.tar.gz zgjq-4c654156403c9660f0973605afa8d7b3645055c4.tar.zst zgjq-4c654156403c9660f0973605afa8d7b3645055c4.zip | |
implement tokenization of floating-point numbers
Diffstat (limited to 'src/jq/parse.zig')
| -rw-r--r-- | src/jq/parse.zig | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/jq/parse.zig b/src/jq/parse.zig index 60ba89c..3ec9520 100644 --- a/src/jq/parse.zig +++ b/src/jq/parse.zig @@ -163,7 +163,13 @@ fn parseTerm(allocator: std.mem.Allocator, parse_allocator: std.mem.Allocator, t if (first_token.kind() == .number) { _ = try tokens.next(); const number_value = try allocator.create(jv.Value); - number_value.* = .{ .integer = first_token.number }; + const f = first_token.number; + const i: i64 = @intFromFloat(f); + if (@as(f64, @floatFromInt(i)) == f) { + number_value.* = .{ .integer = i }; + } else { + number_value.* = .{ .float = f }; + } const number_node = try parse_allocator.create(Ast); number_node.* = .{ .literal = number_value }; return number_node; @@ -205,7 +211,7 @@ fn parseIndexAccess(allocator: std.mem.Allocator, parse_allocator: std.mem.Alloc _ = try tokens.expect(.bracket_right); const index_value = try allocator.create(jv.Value); - index_value.* = .{ .integer = index_token.number }; + index_value.* = .{ .integer = @intFromFloat(index_token.number) }; const index_node = try parse_allocator.create(Ast); index_node.* = .{ .literal = index_value }; const ast = try parse_allocator.create(Ast); |
