aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-02-21 11:18:09 -0800
committerRuss Cox <rsc@golang.org>2010-02-21 11:18:09 -0800
commited13d39972b0fa04512aba5f2c404a17f2b2f771 (patch)
tree4c9d3f3ba4184f8cd20f7dee1eae070982cc6bcd
parentf59cb49a5a6959cf84c7af32c871e45d5efd0641 (diff)
downloadgo-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.c47
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;