as: Fix number parsing - scc - simple c99 compiler
 (HTM) git clone git://git.simple-cc.org/scc
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b4a14737671031ef9d57de428ba3c1a1618c644a
 (DIR) parent 774054fa8b77986acb2fa39f0bfe2a8c642b32c5
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Sat, 10 Feb 2024 22:56:16 +0100
       
       as: Fix number parsing
       
       Parsing numbers had many errors, including ignoring the base
       and wrong conversion from digits to numbers.
       
       Diffstat:
         M src/cmd/as/parser.c                 |      10 +++++++---
       
       1 file changed, 7 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/as/parser.c b/src/cmd/as/parser.c
       @@ -93,6 +93,7 @@ number(void)
                int c, base = 10;
                char *p;
                TUINT n;
       +        static char digits[] = "0123456789ABCDEF";
        
                if (*endp == '0') {
                        base = 8;
       @@ -103,10 +104,13 @@ number(void)
                        }
                }
                for (n = 0; (c = *endp) && isxdigit(c); n += c) {
       -                n *= base;
       -                c -= '0';
       -                if (n >= TUINT_MAX - c*base)
       +                p = strchr(digits, toupper(c));
       +                c = p - digits;
       +                if (c > base)
       +                        error("invalid digit in number");
       +                if (n >= TUINT_MAX/base - c)
                                error("overflow in number");
       +                n *= base;
                        endp++;
                }
                tok2str();