src/Pure/Syntax/lexicon.ML
changeset 15965 f422f8283491
parent 15570 8d8c70b41bab
child 15991 670f8e4b5a98
--- a/src/Pure/Syntax/lexicon.ML	Mon May 16 09:35:05 2005 +0200
+++ b/src/Pure/Syntax/lexicon.ML	Mon May 16 10:29:15 2005 +0200
@@ -30,7 +30,7 @@
   val skolem: string -> string
   val dest_skolem: string -> string
   val read_nat: string -> int option
-  val read_xnum: string -> int
+  val read_xnum: string -> IntInf.int
   val read_idents: string -> string list
 end;
 
@@ -365,6 +365,16 @@
 
 (* read_xnum *)
 
+fun read_intinf cs : IntInf.int * string list =
+  let val zero = ord"0"
+      val limit = zero+10
+      fun scan (num,[]) = (num,[])
+        | scan (num, c::cs) =
+              if  zero <= ord c  andalso  ord c < limit
+              then scan(10*num + IntInf.fromInt (ord c - zero), cs)
+              else (num, c::cs)
+  in  scan(0,cs)  end;
+
 fun read_xnum str =
   let
     val (sign, digs) =
@@ -373,7 +383,7 @@
       | "#" :: cs => (1, cs)
       | "-" :: cs => (~1, cs)
       | cs => (1, cs));
-  in sign * #1 (Library.read_int digs) end;
+  in sign * #1 (read_intinf digs) end;
 
 
 (* read_ident(s) *)