Commit 83bdbb2abb

Robin Voetter <robin@voetter.nl>
2021-10-24 02:44:47
big ints: Make calcLimbLen always work at comptime, even if parameter is runtime
1 parent c905ceb
Changed files (1)
lib
std
math
lib/std/math/big/int.zig
@@ -18,11 +18,14 @@ const debug_safety = false;
 /// Returns the number of limbs needed to store `scalar`, which must be a
 /// primitive integer value.
 pub fn calcLimbLen(scalar: anytype) usize {
-    if (scalar == 0) {
-        return 1;
-    }
+    const T = @TypeOf(scalar);
+    const max_scalar = switch (@typeInfo(T)) {
+        .Int => maxInt(T),
+        .ComptimeInt => scalar,
+        else => @compileError("parameter must be a primitive integer type"),
+    };
 
-    const w_value = std.math.absCast(scalar);
+    const w_value = std.math.absCast(max_scalar);
     return @divFloor(@intCast(Limb, math.log2(w_value)), limb_bits) + 1;
 }