]> Cypherpunks repositories - gostls13.git/commitdiff
export large constants
authorKen Thompson <ken@golang.org>
Mon, 11 Aug 2008 20:22:04 +0000 (13:22 -0700)
committerKen Thompson <ken@golang.org>
Mon, 11 Aug 2008 20:22:04 +0000 (13:22 -0700)
R=r
DELTA=37  (31 added, 4 deleted, 2 changed)
OCL=14089
CL=14089

src/cmd/gc/export.c
src/cmd/gc/go.h
src/cmd/gc/lex.c
src/cmd/gc/mparith1.c
src/cmd/gc/subr.c

index 427f649f2c2cffe431450e1df184503ceda707aa..aaa32a11b2afa2747e8627f2f53a2741e05f29ac 100644 (file)
@@ -78,7 +78,7 @@ dumpexportconst(Sym *s)
        case CTINT:
        case CTSINT:
        case CTUINT:
-               Bprint(bout, "0x%llux\n", mpgetfix(n->val.u.xval));
+               Bprint(bout, "%B\n", n->val.u.xval);
                break;
        case CTBOOL:
                Bprint(bout, "0x%llux\n", n->val.u.bval);
index af50d48bd361ea8ea3ee5831546c67febe35a935..16efdc9cb9438e7dc9c7872fe29b3ff767bd0431 100644 (file)
@@ -487,6 +487,7 @@ void        mpatofix(Mpint *a, char *s);
 void   mpatoflt(Mpflt *a, char *s);
 void   mpmovefltfix(Mpint *a, Mpflt *b);
 void   mpmovefixflt(Mpflt *a, Mpint *b);
+int    Bconv(Fmt*);
 
 /*
  *     mparith2.c
index a1859b6e91b1df85f03454332a214b60dea05a21..200960dff9a6ee632b68b5825afe7c56f5f67b92 100644 (file)
@@ -52,6 +52,7 @@ mainlex(int argc, char *argv[])
        fmtinstall('N', Nconv);         // node pointer
        fmtinstall('Z', Zconv);         // escaped string
        fmtinstall('L', Lconv);         // line number
+       fmtinstall('B', Bconv);         // big numbers
        
        lexinit();
        lineno = 1;
index 6c625f3fd9f6ec0a531a12eebf8086666f7d258a..189e43af6fb4be2962d1a961a1eda344f33ad955 100644 (file)
@@ -348,3 +348,32 @@ bad:
        warn("set ovf in mpatov: %s", as);
        mpmovecfix(a, 0);
 }
+
+int
+Bconv(Fmt *fp)
+{
+       char buf[500], *p;
+       Mpint *xval, q, r, ten;
+       int f;
+
+       xval = va_arg(fp->args, Mpint*);
+       mpmovefixfix(&q, xval);
+       f = 0;
+       if(mptestfix(&q) < 0) {
+               f = 1;
+               mpnegfix(&q);
+       }
+       mpmovecfix(&ten, 10);
+
+       p = &buf[sizeof(buf)];
+       *--p = 0;
+       for(;;) {
+               mpdivmodfixfix(&q, &r, &q, &ten);
+               *--p = mpgetfix(&r) + '0';
+               if(mptestfix(&q) <= 0)
+                       break;
+       }
+       if(f)
+               *--p = '-';
+       return fmtstrcpy(fp, p);
+}
index 1f9043a442701855f0fe6c0f8a0fa67abbf19bb5..11cb870f9a42c902769b9560717ddd229b9b9ba2 100644 (file)
@@ -1053,13 +1053,9 @@ Nconv(Fmt *fp)
                        snprint(buf1, sizeof(buf1), "LITERAL-ctype=%d", n->val.ctype);
                        break;
                case CTINT:
-                       snprint(buf1, sizeof(buf1), "I%lld", mpgetfix(n->val.u.xval));
-                       break;
                case CTSINT:
-                       snprint(buf1, sizeof(buf1), "S%lld", mpgetfix(n->val.u.xval));
-                       break;
                case CTUINT:
-                       snprint(buf1, sizeof(buf1), "U%lld", mpgetfix(n->val.u.xval));
+                       snprint(buf1, sizeof(buf1), "I%B", n->val.u.xval);
                        break;
                case CTFLT:
                        snprint(buf1, sizeof(buf1), "F%g", mpgetflt(n->val.u.fval));