]> Cypherpunks repositories - gostls13.git/commitdiff
new builtin.c.boot from arm.
authorRuss Cox <rsc@golang.org>
Mon, 12 Oct 2009 17:12:37 +0000 (10:12 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 12 Oct 2009 17:12:37 +0000 (10:12 -0700)
node printing fixes.
silence incorrect redeclaration error.

R=ken
OCL=35602
CL=35602

src/cmd/gc/builtin.c.boot
src/cmd/gc/go.y
src/cmd/gc/print.c

index 408fdde028d88676a887e249d8e2767af8ae6c36..ed2bea22ac141e2fc310f3d6642e999ffffe2e82 100644 (file)
@@ -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 =
index 93d25674cb7cb3ed2a480c44e80a81151c5dcb84..45e029205990683e8aebb5666da0a252b5bd6a49 100644 (file)
@@ -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");
                }
index 70d80c5e6a0cad7640d9298976ef03b026c2c28c..2960f2a11e366fb5e8761695773745e479dc7df6 100644 (file)
@@ -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)