export large constants
R=r
DELTA=37 (31 added, 4 deleted, 2 changed)
OCL=14089
CL=14089
diff --git a/src/cmd/gc/export.c b/src/cmd/gc/export.c
index 427f649..aaa32a1 100644
--- a/src/cmd/gc/export.c
+++ b/src/cmd/gc/export.c
@@ -78,7 +78,7 @@
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);
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index af50d48..16efdc9 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -487,6 +487,7 @@
void mpatoflt(Mpflt *a, char *s);
void mpmovefltfix(Mpint *a, Mpflt *b);
void mpmovefixflt(Mpflt *a, Mpint *b);
+int Bconv(Fmt*);
/*
* mparith2.c
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index a1859b6..200960d 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -52,6 +52,7 @@
fmtinstall('N', Nconv); // node pointer
fmtinstall('Z', Zconv); // escaped string
fmtinstall('L', Lconv); // line number
+ fmtinstall('B', Bconv); // big numbers
lexinit();
lineno = 1;
diff --git a/src/cmd/gc/mparith1.c b/src/cmd/gc/mparith1.c
index 6c625f3..189e43a 100644
--- a/src/cmd/gc/mparith1.c
+++ b/src/cmd/gc/mparith1.c
@@ -348,3 +348,32 @@
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);
+}
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 1f9043a..11cb870 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -1053,13 +1053,9 @@
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));