summaryrefslogtreecommitdiff
path: root/src/cmd/gc/walk.c
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2010-02-18 17:55:11 -0800
committerKen Thompson <ken@golang.org>2010-02-18 17:55:11 -0800
commit801d06a1a2e3e5030c3b95f9c83ec3c7e1731d61 (patch)
tree8e48f03cba9d1407132102bb10745653ca4cd8a6 /src/cmd/gc/walk.c
parent1310f6f87b6f9c30baaf31b3afd3a3dd2f8ff698 (diff)
downloadgolang-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.c12
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,