aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jq/parse.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/jq/parse.zig')
-rw-r--r--src/jq/parse.zig10
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);