From 54ebd4b7515b165a56595a1898979a8e4a069fec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 31 Jan 2019 15:30:44 +0100
Subject: [PATCH] [integer] restore unlimited two_power_of_int

---
 src/libraries/stdlib/integer.ml  | 10 ++++++----
 src/libraries/stdlib/integer.mli |  4 ++--
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/libraries/stdlib/integer.ml b/src/libraries/stdlib/integer.ml
index 00fe1fc795d..b0fef64641f 100644
--- a/src/libraries/stdlib/integer.ml
+++ b/src/libraries/stdlib/integer.ml
@@ -27,12 +27,16 @@ let equal = Z.equal
 let compare = Z.compare
 
 let two_power_of_int k =
+  Z.shift_left Z.one k
+
+let two_power n =
+  let k = Z.to_int n in
   if k > 1024 then
     raise Z.Overflow
   else
-    Z.shift_left Z.one k
+    two_power_of_int k
 
-let two_power n = two_power_of_int (Z.to_int n)
+let power_int_positive_int = Big_int_Z.power_int_positive_int
 
 let popcount = Z.popcount
 
@@ -279,5 +283,3 @@ let round_up_to_r ~min:m ~r ~modu =
 
 let round_down_to_r ~max:m ~r ~modu =
   add (round_down_to_zero (sub m r) modu) r
-
-let power_int_positive_int = Big_int_Z.power_int_positive_int
diff --git a/src/libraries/stdlib/integer.mli b/src/libraries/stdlib/integer.mli
index 3b9e69a8fd2..1e8202750a9 100644
--- a/src/libraries/stdlib/integer.mli
+++ b/src/libraries/stdlib/integer.mli
@@ -137,11 +137,11 @@ val round_down_to_r : max:t -> r:t -> modu:t -> t
     [n]<=[m] and [n] = [r] modulo [modu] *)
 
 val two_power : t -> t
-(** [two_power x] computes 2^x.
+(** Computes [2^n]
     @raise Z.Overflow for exponents greater than 1024 *)
 
 val two_power_of_int : int -> t
-(** Similar to [two_power x], but x is an OCaml int. *)
+(** Computes [2^n] *)
 
 val power_int_positive_int: int -> int -> t
 (** Exponentiation *)
-- 
GitLab