aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/value.zig b/src/value.zig
index 10f58fa44f..11c385b446 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -330,11 +330,14 @@ pub const Value = extern union {
.int_type => return self.copyPayloadShallow(allocator, Payload.IntType),
.int_u64 => return self.copyPayloadShallow(allocator, Payload.U64),
.int_i64 => return self.copyPayloadShallow(allocator, Payload.I64),
- .int_big_positive => {
- @panic("TODO implement copying of big ints");
- },
- .int_big_negative => {
- @panic("TODO implement copying of big ints");
+ .int_big_positive, .int_big_negative => {
+ const old_payload = self.cast(Payload.BigInt).?;
+ const new_payload = try allocator.create(Payload.BigInt);
+ new_payload.* = .{
+ .base = .{ .tag = self.ptr_otherwise.tag },
+ .data = try allocator.dupe(std.math.big.Limb, old_payload.data),
+ };
+ return Value{ .ptr_otherwise = &new_payload.base };
},
.function => return self.copyPayloadShallow(allocator, Payload.Function),
.extern_fn => return self.copyPayloadShallow(allocator, Payload.Decl),