diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-10-04 14:29:09 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-04 14:29:09 -0400 |
| commit | a28f2e0dd2d7b78464115bca4968f7c0befa6b28 (patch) | |
| tree | 1953c90e0c488588495abce1e76d35e3d98557b8 /src/type.zig | |
| parent | 2454459ef5435081abe82724e873a74bd33a79af (diff) | |
| parent | 95fe86e3dbd3826ca0971853b275a409ac215c83 (diff) | |
| download | zig-a28f2e0dd2d7b78464115bca4968f7c0befa6b28.tar.gz zig-a28f2e0dd2d7b78464115bca4968f7c0befa6b28.zip | |
Merge pull request #9885 from Snektron/big-int-wrapping
Big int wrapping/saturating
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/src/type.zig b/src/type.zig index 6d27eeaadb..fdaa445041 100644 --- a/src/type.zig +++ b/src/type.zig @@ -3101,9 +3101,8 @@ pub const Type = extern union { return Value.Tag.int_i64.create(arena, n); } - var res = try std.math.big.int.Managed.initSet(arena, 1); - try res.shiftLeft(res, info.bits - 1); - res.negate(); + var res = try std.math.big.int.Managed.init(arena); + try res.setTwosCompIntLimit(.min, info.signedness, info.bits); const res_const = res.toConst(); if (res_const.positive) { @@ -3126,13 +3125,8 @@ pub const Type = extern union { return Value.Tag.int_u64.create(arena, n); } - var res = try std.math.big.int.Managed.initSet(arena, 1); - try res.shiftLeft(res, info.bits - @boolToInt(info.signedness == .signed)); - const one = std.math.big.int.Const{ - .limbs = &[_]std.math.big.Limb{1}, - .positive = true, - }; - res.sub(res.toConst(), one) catch unreachable; + var res = try std.math.big.int.Managed.init(arena); + try res.setTwosCompIntLimit(.max, info.signedness, info.bits); const res_const = res.toConst(); if (res_const.positive) { |
