]> Cypherpunks repositories - gostls13.git/commitdiff
rename various magic names.
authorRuss Cox <rsc@golang.org>
Mon, 3 Nov 2008 23:36:08 +0000 (15:36 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 3 Nov 2008 23:36:08 +0000 (15:36 -0800)
sigi and sigt:
sys·sigi_inter -> sigi·inter
sys·sigt_int -> sigt·int
Package·sigt_Type -> sigt·Package.Type

local type T in file x.go T_x -> T·x
second one T_x_1 -> T·x·1

method names M on T  T_M -> T·M

correctly handle local embedded types

init functions are the only place left that use underscores

R=ken
OCL=18377
CL=18377

src/cmd/6g/obj.c
src/cmd/gc/dcl.c
src/cmd/gc/go.h
src/cmd/gc/subr.c
src/runtime/iface.c
test/golden.out

index 6c5973ed657cc75d4db63f1abcedf34c20372c2a..8b2a47c24e73fe9268578d507156429f81cfffd4 100644 (file)
@@ -516,6 +516,7 @@ gentramp(Type *t, Sig *b)
        int c, d, o;
        Prog *p;
        Type *f;
+       Sym *msym;
 
        e = lookup(b->name);
        for(d=0; d<nelem(dotlist); d++) {
@@ -585,14 +586,12 @@ out:
 
        f = dotlist[0].field;
        //JMP   main·Sub_test2(SB)
-       snprint(namebuf, sizeof(namebuf), "%s_%s",
-               f->sym->name, b->name);
        if(isptr[f->type->etype])
                f = f->type;
        p = pc;
        gins(AJMP, N, N);
        p->to.type = D_EXTERN;
-       p->to.sym = pkglookup(namebuf, f->type->sym->opackage);
+       p->to.sym = methodsym(lookup(b->name), f->type);
 //print("6. %P\n", p);
 }
 
@@ -661,9 +660,7 @@ dumpsigt(void)
                        a->name = s1->name;
                        a->hash = PRIME8*stringhash(a->name) + PRIME9*typehash(f->type, 0);
                        a->perm = o;
-                       snprint(namebuf, sizeof(namebuf), "%s_%s",
-                               at.sym->name+5, f->sym->name);
-                       a->sym = lookup(namebuf);
+                       a->sym = methodsym(f->sym, t);
                        a->offset = f->embedded;        // need trampoline
 
                        o++;
@@ -813,9 +810,7 @@ dumpsigi(void)
 
                        a->hash = PRIME8*stringhash(a->name) + PRIME9*typehash(f->type, 0);
                        a->perm = o;
-                       snprint(namebuf, sizeof(namebuf), "%s_%s",
-                               at.sym->name+5, f->sym->name);
-                       a->sym = lookup(namebuf);
+                       a->sym = methodsym(f->sym, t);
                        a->offset = 0;
 
                        o++;
index f88d2ab942ac163e54b813e73d525926c0abe623..3fb7710195e692713c94a1dca9f059396512fd6b 100644 (file)
@@ -200,8 +200,8 @@ methcmp(Type *t1, Type *t2)
        return 1;
 }
 
-Node*
-methodname(Node *n, Type *t)
+Sym*
+methodsym(Sym *nsym, Type *t)
 {
        Sym *s;
        char buf[NSYMB];
@@ -213,12 +213,24 @@ methodname(Node *n, Type *t)
        if(s == S)
                goto bad;
 
-       snprint(buf, sizeof(buf), "%s_%s", s->name, n->sym->name);
-       return newname(pkglookup(buf, s->opackage));
+       snprint(buf, sizeof(buf), "%#hT·%s", t, nsym->name);
+//print("methodname %s\n", buf);
+       return pkglookup(buf, s->opackage);
 
 bad:
        yyerror("illegal <this> type: %T", t);
-       return n;
+       return S;
+}
+
+Node*
+methodname(Node *n, Type *t)
+{
+       Sym *s;
+       
+       s = methodsym(n->sym, t);
+       if(s == S)
+               return n;
+       return newname(s);
 }
 
 /*
@@ -449,7 +461,6 @@ stotype(Node *n, Type **t)
 {
        Type *f;
        Iter save;
-       char buf[100];
        String *note;
 
        n = listfirst(&save, &n);
@@ -740,7 +751,6 @@ addtyp(Type *n, int ctxt)
 {
        Dcl *r, *d;
        Sym *s;
-       char *p;
        static int typgen;
 
        if(n==T || n->sym == S)
@@ -753,9 +763,7 @@ addtyp(Type *n, int ctxt)
        else {
                r = autodcl;
                pushdcl(s);
-               p = smprint("%s_%d", s->name, ++typgen);
-               n->xsym = lookup(p);
-               free(p);
+               n->vargen = ++typgen;
        }
 
        if(s->tblock == block)
@@ -1168,8 +1176,19 @@ Node*
 embedded(Sym *s)
 {
        Node *n;
+       char *name;
+       
+       // Names sometimes have disambiguation junk
+       // appended after a center dot.  Discard it when
+       // making the name for the embedded struct field.
+       enum { CenterDot = 0xB7 };
+       name = s->name;
+       if(utfrune(s->name, CenterDot)) {
+               name = strdup(s->name);
+               *utfrune(name, CenterDot) = 0;
+       }
 
-       n = newname(lookup(s->name));
+       n = newname(lookup(name));
        n = nod(ODCLFIELD, n, N);
        n->embedded = 1;
        if(s == S)
index 314333f741593a3e7a87e61defc77c598c1b5797..025edaad7f4ff7d2c779d47dfd79769341038fff 100644 (file)
@@ -135,7 +135,6 @@ struct      Type
        Type*   method;
 
        Sym*    sym;
-       Sym*    xsym;           // export sym
        int32   vargen;         // unique name for OTYPE/ONAME
 
        Node*   nname;
@@ -190,7 +189,6 @@ struct      Node
        Val     val;
 
        Sym*    osym;           // import
-       Sym*    fsym;           // import
        Sym*    psym;           // import
        Sym*    sym;            // various
        int32   vargen;         // unique name for OTYPE/ONAME
@@ -665,6 +663,7 @@ void        defaultlit(Node*);
 int    listcount(Node*);
 void   addmethod(Node*, Type*, int);
 Node*  methodname(Node*, Type*);
+Sym*   methodsym(Sym*, Type*);
 Type*  functype(Node*, Node*, Node*);
 char*  thistypenam(Node*);
 void   funcnam(Type*, char*);
index 9da4738292dc228ed90787409fb38ea02f414c74..15650c8be405fd910e84138ff2619125bf67eda4 100644 (file)
@@ -984,12 +984,17 @@ Tpretty(Fmt *fp, Type *t)
                if(t == types[t->etype] || t == types[TSTRING])
                        return fmtprint(fp, "%s", s->name);
                if(exporting) {
-                       if(t->xsym != S)
-                               s = t->xsym;
+                       if(fp->flags & FmtShort)
+                               fmtprint(fp, "%hS", s);
+                       else
+                               fmtprint(fp, "%lS", s);
                        if(strcmp(s->opackage, package) == 0)
-                       if(s->otype != t || !s->export)
-                               return fmtprint(fp, "%lS_%s", s, filename);
-                       return fmtprint(fp, "%lS", s);
+                       if(s->otype != t || !s->export) {
+                               fmtprint(fp, "·%s", filename);
+                               if(t->vargen)
+                                       fmtprint(fp, "·%d", t->vargen);
+                       }
+                       return 0;
                }
                return fmtprint(fp, "%S", s);
        }
@@ -1606,12 +1611,11 @@ globalsig(Type *t)
        int et;
        Sym *s;
        char buf[NSYMB];
-       char *glob;
+       char *sigx;
 
        if(t == T)
                return S;
 
-       glob = "sys";
        et = t->etype;
        switch(et) {
        default:
@@ -1620,7 +1624,8 @@ globalsig(Type *t)
        case TINTER:
        case TDDD:
                if(isnilinter(t)) {
-                       snprint(buf, sizeof(buf), "%s_%s", "sigi", "inter");
+                       sigx = "sigi";
+                       strcpy(buf, "inter");
                        goto out;
                }
                return S;
@@ -1660,10 +1665,11 @@ globalsig(Type *t)
                return S;
        if(strcmp(t->sym->name, types[et]->sym->name) != 0)
                return S;
-       snprint(buf, sizeof(buf), "%s_%S", "sigt", t->sym);
+       sigx = "sigt";
+       snprint(buf, sizeof(buf), "%#T", t);
 
 out:
-       s = pkglookup(buf, glob);
+       s = pkglookup(buf, sigx);
        if(s->oname == N) {
                s->oname = newname(s);
                s->oname->type = types[TUINT8];
@@ -1709,8 +1715,6 @@ signame(Type *t, int block)
                block = s->tblock;
 
        if(block > 1) {
-               snprint(buf, sizeof(buf), "%s_%d%s", e, block, s->name);
-
                // record internal type for signature generation
                x = mal(sizeof(*x));
                x->op = OTYPE;
@@ -1719,10 +1723,9 @@ signame(Type *t, int block)
                x->forw = signatlist;
                x->block = block;
                signatlist = x;
-       } else
-               snprint(buf, sizeof(buf), "%s_%s", e, s->name);
-
-       ss = pkglookup(buf, s->opackage);
+       }
+       snprint(buf, sizeof(buf), "%#T", t);
+       ss = pkglookup(buf, e);
        if(ss->oname == N) {
                ss->oname = newname(ss);
                ss->oname->type = types[TUINT8];
@@ -2494,7 +2497,6 @@ adddot(Node *n)
 {
        Type *t;
        Sym *s;
-       Node *l;
        int c, d;
 
        walktype(n->left, Erv);
index 19f55e8d05625784aac6009d6aded392dc70ff12..bd54ce7aa3b40e40de206d7ce76a0c342aa4fde7 100644 (file)
@@ -47,29 +47,29 @@ static      Map*    hash[1009];
 
 #define        END     nil,0,0,nil
 
-Sigi   sys·sigi_inter[2] =    { (byte*)"interface {}", 0, 0, nil, 0, 0 };
+Sigi   sigi·inter[2] =        { (byte*)"interface {}", 0, 0, nil, 0, 0 };
 
-Sigt   sys·sigt_int8[2] =     { (byte*)"int8", ASIMP, 1, nil, END };
-Sigt   sys·sigt_int16[2] =    { (byte*)"int16", ASIMP, 2, nil, END };
-Sigt   sys·sigt_int32[2] =    { (byte*)"int32", ASIMP, 4, nil, END };
-Sigt   sys·sigt_int64[2] =    { (byte*)"int64", ASIMP, 8, nil, END };
+Sigt   sigt·int8[2] = { (byte*)"int8", ASIMP, 1, nil, END };
+Sigt   sigt·int16[2] =        { (byte*)"int16", ASIMP, 2, nil, END };
+Sigt   sigt·int32[2] =        { (byte*)"int32", ASIMP, 4, nil, END };
+Sigt   sigt·int64[2] =        { (byte*)"int64", ASIMP, 8, nil, END };
 
-Sigt   sys·sigt_uint8[2] =    { (byte*)"uint8", ASIMP, 1, nil, END };
-Sigt   sys·sigt_uint16[2] =   { (byte*)"uint16", ASIMP, 2, nil, END };
-Sigt   sys·sigt_uint32[2] =   { (byte*)"uint32", ASIMP, 4, nil, END };
-Sigt   sys·sigt_uint64[2] =   { (byte*)"uint64", ASIMP, 8, nil, END };
+Sigt   sigt·uint8[2] =        { (byte*)"uint8", ASIMP, 1, nil, END };
+Sigt   sigt·uint16[2] =       { (byte*)"uint16", ASIMP, 2, nil, END };
+Sigt   sigt·uint32[2] =       { (byte*)"uint32", ASIMP, 4, nil, END };
+Sigt   sigt·uint64[2] =       { (byte*)"uint64", ASIMP, 8, nil, END };
 
-Sigt   sys·sigt_float32[2] =  { (byte*)"float32", ASIMP, 4, nil, END };
-Sigt   sys·sigt_float64[2] =  { (byte*)"float64", ASIMP, 8, nil, END };
-//Sigt sys·sigt_float80[2] =  { (byte*)"float80", ASIMP, 0, nil, END };
+Sigt   sigt·float32[2] =      { (byte*)"float32", ASIMP, 4, nil, END };
+Sigt   sigt·float64[2] =      { (byte*)"float64", ASIMP, 8, nil, END };
+//Sigt sigt·float80[2] =      { (byte*)"float80", ASIMP, 0, nil, END };
 
-Sigt   sys·sigt_bool[2] =     { (byte*)"bool", ASIMP, 1, nil, END };
-Sigt   sys·sigt_string[2] =   { (byte*)"string", ASTRING, 8, nil, END };
+Sigt   sigt·bool[2] = { (byte*)"bool", ASIMP, 1, nil, END };
+Sigt   sigt·string[2] =       { (byte*)"string", ASTRING, 8, nil, END };
 
-Sigt   sys·sigt_int[2] =      { (byte*)"int", ASIMP, 4, nil, END };
-Sigt   sys·sigt_uint[2] =     { (byte*)"uint", ASIMP, 4, nil, END };
-Sigt   sys·sigt_uintptr[2] =  { (byte*)"uintptr", ASIMP, 8, nil, END };
-Sigt   sys·sigt_float[2] =    { (byte*)"float", ASIMP, 4, nil, END };
+Sigt   sigt·int[2] =  { (byte*)"int", ASIMP, 4, nil, END };
+Sigt   sigt·uint[2] = { (byte*)"uint", ASIMP, 4, nil, END };
+Sigt   sigt·uintptr[2] =      { (byte*)"uintptr", ASIMP, 8, nil, END };
+Sigt   sigt·float[2] =        { (byte*)"float", ASIMP, 4, nil, END };
 
 static void
 printsigi(Sigi *si)
index 6592b178506113d7c97dd401a4b37f70111064f1..3f3e5de165b5923eaac874f3abe5cd99784fae77 100644 (file)
@@ -22,7 +22,7 @@ errchk: ./convlit.go: unmatched error messages:
 hello, world
 
 =========== ./interface2.go
-cannot convert type *main.S_interface2 to interface main.I_interface2: missing method Foo
+cannot convert type *main.S·interface2 to interface main.I·interface2: missing method Foo
 throw: interface conversion
 SIGSEGV: segmentation violation
 Faulting address: 0x0
@@ -30,7 +30,7 @@ pc: xxx
 
 
 =========== ./interface3.go
-cannot convert type *main.S_interface3 to interface main.I2_interface3: missing method Name
+cannot convert type *main.S·interface3 to interface main.I2·interface3: missing method Name
 throw: interface conversion
 SIGSEGV: segmentation violation
 Faulting address: 0x0