summaryrefslogtreecommitdiff
path: root/src/cmd/gc/const.c
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2008-08-09 17:29:26 -0700
committerKen Thompson <ken@golang.org>2008-08-09 17:29:26 -0700
commita3933f0a22b62afc74a72e2baf31c84a75764df7 (patch)
tree14dcdb4b5e7599344af571ca8e89c3d71196f165 /src/cmd/gc/const.c
parent7969258dda2efeaef4f3c6b833f6084d1d8d3ede (diff)
downloadgolang-a3933f0a22b62afc74a72e2baf31c84a75764df7.tar.gz
mp fixed arith
R=r DELTA=149 (80 added, 62 deleted, 7 changed) OCL=14029 CL=14029
Diffstat (limited to 'src/cmd/gc/const.c')
-rw-r--r--src/cmd/gc/const.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c
index fff0e0c4a..2188178a6 100644
--- a/src/cmd/gc/const.c
+++ b/src/cmd/gc/const.c
@@ -323,16 +323,7 @@ evconst(Node *n)
goto settrue;
goto setfalse;
}
- *n = *nl;
-
- // second half of dance
- if(wl == Wlitint) {
- n->val.u.xval = xval;
- } else
- if(wl == Wlitfloat) {
- n->val.u.fval = fval;
- }
- return;
+ goto ret;
settrue:
*n = *booltrue;
@@ -343,6 +334,15 @@ setfalse:
return;
unary:
+ if(wl == Wlitint) {
+ xval = mal(sizeof(*xval));
+ mpmovefixfix(xval, nl->val.u.xval);
+ } else
+ if(wl == Wlitfloat) {
+ fval = mal(sizeof(*fval));
+ mpmovefltflt(fval, nl->val.u.fval);
+ }
+
switch(TUP(n->op, wl)) {
default:
yyerror("illegal combination of literals %O %d", n->op, wl);
@@ -351,16 +351,16 @@ unary:
case TUP(OPLUS, Wlitint):
break;
case TUP(OMINUS, Wlitint):
- mpnegfix(nl->val.u.xval);
+ mpnegfix(xval);
break;
case TUP(OCOM, Wlitint):
- mpcomfix(nl->val.u.xval);
+ mpcomfix(xval);
break;
case TUP(OPLUS, Wlitfloat):
break;
case TUP(OMINUS, Wlitfloat):
- mpnegflt(nl->val.u.fval);
+ mpnegflt(fval);
break;
case TUP(ONOT, Wlitbool):
@@ -368,7 +368,17 @@ unary:
goto settrue;
goto setfalse;
}
+
+ret:
*n = *nl;
+
+ // second half of dance
+ if(wl == Wlitint) {
+ n->val.u.xval = xval;
+ } else
+ if(wl == Wlitfloat) {
+ n->val.u.fval = fval;
+ }
}
void