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 | ed13d39972b0fa04512aba5f2c404a17f2b2f771 (patch) | |
tree | 4c9d3f3ba4184f8cd20f7dee1eae070982cc6bcd | |
parent | f59cb49a5a6959cf84c7af32c871e45d5efd0641 (diff) | |
download | go-ed13d39972b0fa04512aba5f2c404a17f2b2f771.tar.gz go-ed13d39972b0fa04512aba5f2c404a17f2b2f771.zip |
gc: minor const simplifications
R=ken2
CC=golang-dev
https://golang.org/cl/217069
-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 0cf6922d7d..5a5a059668 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; |