diff options
author | Russ Cox <rsc@golang.org> | 2010-02-21 11:18:09 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-02-21 11:18:09 -0800 |
commit | 536a23e3f6f03def3ea49ac8eb29c3a5232be648 (patch) | |
tree | ea12ec562ff84d3e936cf58de0f49470f64138c3 /src/cmd/gc/const.c | |
parent | 07e3fbd0ef6366efb141f17d5396d8877a8c670d (diff) | |
download | golang-536a23e3f6f03def3ea49ac8eb29c3a5232be648.tar.gz |
gc: minor const simplifications
R=ken2
CC=golang-dev
http://codereview.appspot.com/217069
Diffstat (limited to 'src/cmd/gc/const.c')
-rw-r--r-- | src/cmd/gc/const.c | 47 |
1 files changed, 15 insertions, 32 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index 0cf6922d7..5a5a05966 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -173,6 +173,7 @@ convlit1(Node **np, Type *t, int explicit) if(isint[et]) { switch(ct) { default: + goto bad; case CTCPLX: case CTFLT: n->val = toint(n->val); @@ -185,6 +186,7 @@ convlit1(Node **np, Type *t, int explicit) if(isfloat[et]) { switch(ct) { default: + goto bad; case CTCPLX: case CTINT: n->val = toflt(n->val); @@ -966,43 +968,28 @@ defaultlit(Node **np, Type *t) break; case CTINT: n->type = types[TINT]; - if(t != T) { - if(isint[t->etype]) - n->type = t; - else - if(isfloat[t->etype]) { - n->type = t; - n->val = toflt(n->val); - } - } - overflow(n->val, n->type); - break; + goto num; case CTFLT: n->type = types[TFLOAT]; + goto num; + case CTCPLX: + n->type = types[TCOMPLEX]; + goto num; + num: if(t != T) { - if(isfloat[t->etype]) - n->type = t; - else if(isint[t->etype]) { n->type = t; n->val = toint(n->val); } - } - overflow(n->val, n->type); - break; - case CTCPLX: - n->type = types[TCOMPLEX]; - if(t != T) { - if(iscomplex[t->etype]) - n->type = t; else if(isfloat[t->etype]) { n->type = t; n->val = toflt(n->val); - } else - if(isint[t->etype]) { + } + else + if(iscomplex[t->etype]) { n->type = t; - n->val = toint(n->val); + n->val = tocplx(n->val); } } overflow(n->val, n->type); @@ -1015,6 +1002,7 @@ defaultlit(Node **np, Type *t) * defaultlit on both nodes simultaneously; * if they're both ideal going in they better * get the same type going out. + * force means must assign concrete (non-ideal) type. */ void defaultlit2(Node **lp, Node **rp, int force) @@ -1192,13 +1180,8 @@ convconst(Node *con, Type *t, Val *val) if(isfloat[tt]) { con->val = toflt(con->val); -// if(con->val.ctype == CTINT) { -// con->val.ctype = CTFLT; -// con->val.u.fval = mal(sizeof *con->val.u.fval); -// mpmovefixflt(con->val.u.fval, val->u.xval); -// } -// if(con->val.ctype != CTFLT) -// fatal("convconst ctype=%d %T", con->val.ctype, t); + if(con->val.ctype != CTFLT) + fatal("convconst ctype=%d %T", con->val.ctype, t); if(tt == TFLOAT32) con->val.u.fval = truncfltlit(con->val.u.fval, t); return; |