summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-10-12 10:12:37 -0700
committerRuss Cox <rsc@golang.org>2009-10-12 10:12:37 -0700
commit407480ed58c58d0e334acec1ffd5cf237e61168f (patch)
treefe3031fb1aae7f42f72fd1cf6a6ee3610c0bc184
parentf2fcd2eb6650a2ee092139dfe0faca587576bdcd (diff)
downloadgolang-407480ed58c58d0e334acec1ffd5cf237e61168f.tar.gz
new builtin.c.boot from arm.
node printing fixes. silence incorrect redeclaration error. R=ken OCL=35602 CL=35602
-rw-r--r--src/cmd/gc/builtin.c.boot2
-rw-r--r--src/cmd/gc/go.y6
-rw-r--r--src/cmd/gc/print.c47
3 files changed, 53 insertions, 2 deletions
diff --git a/src/cmd/gc/builtin.c.boot b/src/cmd/gc/builtin.c.boot
index 408fdde02..ed2bea22a 100644
--- a/src/cmd/gc/builtin.c.boot
+++ b/src/cmd/gc/builtin.c.boot
@@ -71,6 +71,8 @@ char *sysimport =
"func sys.uint64div (? uint64, ? uint64) (? uint64)\n"
"func sys.int64mod (? int64, ? int64) (? int64)\n"
"func sys.uint64mod (? uint64, ? uint64) (? uint64)\n"
+ "func sys.float64toint64 (? float64) (? int64)\n"
+ "func sys.int64tofloat64 (? int64) (? float64)\n"
"\n"
"$$\n";
char *unsafeimport =
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 93d25674c..45e029205 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -188,7 +188,11 @@ import_stmt:
if(my->name[0] == '_' && my->name[1] == '\0')
break;
- if(my->def) {
+ // Can end up with my->def->op set to ONONAME
+ // if one package refers to p without importing it.
+ // Don't want to give an error on a good import
+ // in another file.
+ if(my->def && my->def->op != ONONAME) {
lineno = $1;
redeclare(my, "as imported package name");
}
diff --git a/src/cmd/gc/print.c b/src/cmd/gc/print.c
index 70d80c5e6..2960f2a11 100644
--- a/src/cmd/gc/print.c
+++ b/src/cmd/gc/print.c
@@ -36,6 +36,35 @@ exprfmt(Fmt *f, Node *n, int prec)
case ONONAME:
case OPACK:
case OLITERAL:
+ case ODOT:
+ case ODOTPTR:
+ case ODOTINTER:
+ case ODOTMETH:
+ case OARRAYBYTESTR:
+ case OCAP:
+ case OCLOSE:
+ case OCLOSED:
+ case OLEN:
+ case OMAKE:
+ case ONEW:
+ case OPANIC:
+ case OPANICN:
+ case OPRINT:
+ case OPRINTN:
+ case OCALL:
+ case OCONV:
+ case OCONVNOP:
+ case OCONVSLICE:
+ case OCONVIFACE:
+ case OMAKESLICE:
+ case ORUNESTR:
+ case OADDR:
+ case OCOM:
+ case OIND:
+ case OMINUS:
+ case ONOT:
+ case OPLUS:
+ case ORECV:
nprec = 7;
break;
@@ -232,6 +261,7 @@ exprfmt(Fmt *f, Node *n, int prec)
case OINDEX:
case OINDEXMAP:
+ case OINDEXSTR:
exprfmt(f, n->left, 7);
fmtprint(f, "[");
exprfmt(f, n->right, 0);
@@ -261,7 +291,12 @@ exprfmt(Fmt *f, Node *n, int prec)
case OCONVNOP:
case OCONVSLICE:
case OCONVIFACE:
- fmtprint(f, "%T(", n->type);
+ case OARRAYBYTESTR:
+ case ORUNESTR:
+ if(n->type->sym == S)
+ fmtprint(f, "(%T)(", n->type);
+ else
+ fmtprint(f, "%T(", n->type);
exprfmt(f, n->left, 0);
fmtprint(f, ")");
break;
@@ -283,6 +318,16 @@ exprfmt(Fmt *f, Node *n, int prec)
exprlistfmt(f, n->list);
fmtprint(f, ")");
break;
+
+ case OMAKESLICE:
+ fmtprint(f, "make(%#T, ", n->type);
+ exprfmt(f, n->left, 0);
+ if(count(n->list) > 2) {
+ fmtprint(f, ", ");
+ exprfmt(f, n->right, 0);
+ }
+ fmtprint(f, ")");
+ break;
}
if(prec > nprec)