core: reader: Support 64 bit.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 Oct 2018 22:58:31 +0000 (00:58 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 6 Oct 2018 22:58:31 +0000 (00:58 +0200)
* src/reader.c (reader_read_identifier_or_number): Support 64 bit.
(reader_read_binary): Likewise.
(reader_read_octal): Likewise.
(reader_read_hex): Likewise.

src/reader.c

index 3d9355a028db0e7fdb46810f358f9cf94176c2f8..b85c35bc18d2052273a7a9c2a1e65e276f157bb2 100644 (file)
@@ -72,7 +72,7 @@ reader_read_identifier_or_number (int c)
 {
   char buf[MAX_STRING];
   int i = 0;
-  int n = 0;
+  long n = 0;
   int negative_p = 0;
   if (c == '+' && isdigit (peekchar ()))
     c = readchar ();
@@ -338,12 +338,12 @@ reader_read_character ()
 SCM
 reader_read_binary ()
 {
-  int n = 0;
+  long n = 0;
   int c = peekchar ();
-  int s = 1;
+  int negative_p = 0;
   if (c == '-')
     {
-      s = -1;
+      negative_p = 1;
       readchar ();
       c = peekchar ();
     }
@@ -354,18 +354,20 @@ reader_read_binary ()
       readchar ();
       c = peekchar ();
     }
-  return MAKE_NUMBER (s*n);
+  if (negative_p)
+    n = 0 - n;
+  return MAKE_NUMBER (n);
 }
 
 SCM
 reader_read_octal ()
 {
-  int n = 0;
+  long n = 0;
   int c = peekchar ();
-  int s = 1;
+  int negative_p = 0;
   if (c == '-')
     {
-      s = -1;
+      negative_p = 1;
       readchar ();
       c = peekchar ();
     }
@@ -376,18 +378,20 @@ reader_read_octal ()
       readchar ();
       c = peekchar ();
     }
-  return MAKE_NUMBER (s*n);
+  if (negative_p)
+    n = 0 - n;
+  return MAKE_NUMBER (n);
 }
 
 SCM
 reader_read_hex ()
 {
-  int n = 0;
+  long n = 0;
   int c = peekchar ();
-  int s = 1;
+  int negative_p = 0;
   if (c == '-')
     {
-      s = -1;
+      negative_p = 1;
       readchar ();
       c = peekchar ();
     }
@@ -405,7 +409,9 @@ reader_read_hex ()
       readchar ();
       c = peekchar ();
     }
-  return MAKE_NUMBER (s*n);
+  if (negative_p)
+    n = 0 - n;
+  return MAKE_NUMBER (n);
 }
 
 SCM