diff options
author | Ken Thompson <ken@golang.org> | 2010-02-18 17:55:11 -0800 |
---|---|---|
committer | Ken Thompson <ken@golang.org> | 2010-02-18 17:55:11 -0800 |
commit | 801d06a1a2e3e5030c3b95f9c83ec3c7e1731d61 (patch) | |
tree | 8e48f03cba9d1407132102bb10745653ca4cd8a6 /src/cmd/gc/walk.c | |
parent | 1310f6f87b6f9c30baaf31b3afd3a3dd2f8ff698 (diff) | |
download | golang-801d06a1a2e3e5030c3b95f9c83ec3c7e1731d61.tar.gz |
complex constant multiply and divide
R=rsc
CC=golang-dev
http://codereview.appspot.com/217041
Diffstat (limited to 'src/cmd/gc/walk.c')
-rw-r--r-- | src/cmd/gc/walk.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index e528e3f6c..e28cf288f 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -794,11 +794,13 @@ walkexpr(Node **np, NodeList **init) case OCONV: case OCONVNOP: if(thechar == '5') { - if(isfloat[n->left->type->etype] && (n->type->etype == TINT64 || n->type->etype == TUINT64)) { + if(isfloat[n->left->type->etype] && + (n->type->etype == TINT64 || n->type->etype == TUINT64)) { n = mkcall("float64toint64", n->type, init, conv(n->left, types[TFLOAT64])); goto ret; } - if((n->left->type->etype == TINT64 || n->left->type->etype == TUINT64) && isfloat[n->type->etype]) { + if((n->left->type->etype == TINT64 || n->left->type->etype == TUINT64) && + isfloat[n->type->etype]) { n = mkcall("int64tofloat64", n->type, init, conv(n->left, types[TINT64])); goto ret; } @@ -1727,7 +1729,7 @@ walkprint(Node *nn, NodeList **init, int defer) } else if(iscomplex[et]) { if(defer) { fmtprint(&fmt, "%%f"); - t = types[TFLOAT64]; + t = types[TCOMPLEX128]; } else on = syslook("printcomplex", 0); } else if(et == TBOOL) { @@ -2036,8 +2038,10 @@ convas(Node *n, NodeList **init) if(lt == T || rt == T) goto out; - if(isblank(n->left)) + if(isblank(n->left)) { + defaultlit(&n->right, T); goto out; + } if(n->left->op == OINDEXMAP) { n = mkcall1(mapfn("mapassign1", n->left->left->type), T, init, |