diff options
Diffstat (limited to 'src/cmd/cc/godefs.c')
-rw-r--r-- | src/cmd/cc/godefs.c | 67 |
1 files changed, 23 insertions, 44 deletions
diff --git a/src/cmd/cc/godefs.c b/src/cmd/cc/godefs.c index 7457bd000..d9f67f0ae 100644 --- a/src/cmd/cc/godefs.c +++ b/src/cmd/cc/godefs.c @@ -154,7 +154,6 @@ static void printtypename(Type *t) { Sym *s; - Type *t1; int w; char *n; @@ -188,40 +187,27 @@ printtypename(Type *t) switch(t->etype) { case TINT: - Bprint(&outbuf, "int32"); - break; case TUINT: - Bprint(&outbuf, "uint32"); - break; case TCHAR: - Bprint(&outbuf, "int8"); - break; case TUCHAR: - Bprint(&outbuf, "uint8"); - break; case TSHORT: - Bprint(&outbuf, "int16"); - break; case TUSHORT: - Bprint(&outbuf, "uint16"); - break; case TLONG: - Bprint(&outbuf, "int32"); - break; case TULONG: - Bprint(&outbuf, "uint32"); - break; case TVLONG: - Bprint(&outbuf, "int64"); - break; case TUVLONG: - Bprint(&outbuf, "uint64"); - break; case TFLOAT: - Bprint(&outbuf, "float32"); - break; case TDOUBLE: - Bprint(&outbuf, "float64"); + // All names used in the runtime code should be typedefs. + if(t->tag != nil) { + if(strcmp(t->tag->name, "intgo") == 0) + Bprint(&outbuf, "int"); + else if(strcmp(t->tag->name, "uintgo") == 0) + Bprint(&outbuf, "uint"); + else + Bprint(&outbuf, "%s", t->tag->name); + } else + Bprint(&outbuf, "C.%T", t); break; case TUNION: case TSTRUCT: @@ -231,27 +217,18 @@ printtypename(Type *t) n = s->name; else if(t->tag) n = t->tag->name; - if(strcmp(n, "String") == 0){ + if(strcmp(n, "String") == 0) Bprint(&outbuf, "string"); - } else if(strcmp(n, "Slice") == 0){ + else if(strcmp(n, "Slice") == 0) Bprint(&outbuf, "[]byte"); - } else + else if(strcmp(n, "Eface") == 0) + Bprint(&outbuf, "interface{}"); + else Bprint(&outbuf, "%U", n); break; case TFUNC: - Bprint(&outbuf, "func("); - for(t1 = t->down; t1 != T; t1 = t1->down) { - if(t1->etype == TVOID) - break; - if(t1 != t->down) - Bprint(&outbuf, ", "); - printtypename(t1); - } - Bprint(&outbuf, ")"); - if(t->link && t->link->etype != TVOID) { - Bprint(&outbuf, " "); - printtypename(t->link); - } + // There's no equivalent to a C function in the Go world. + Bprint(&outbuf, "unsafe.Pointer"); break; case TDOT: Bprint(&outbuf, "...interface{}"); @@ -340,9 +317,9 @@ godefvar(Sym *s) switch(t->etype) { case TENUM: if(!typefd[t->etype]) - Bprint(&outbuf, "const %U = %lld\n", s->name, s->vconst); + Bprint(&outbuf, "const %s = %lld\n", s->name, s->vconst); else - Bprint(&outbuf, "const %U = %f\n;", s->name, s->fconst); + Bprint(&outbuf, "const %s = %f\n;", s->name, s->fconst); break; case TFUNC: @@ -376,8 +353,10 @@ godefvar(Sym *s) case CSTATIC: case CEXTERN: case CGLOBL: - if(strchr(s->name, '$') != nil) // TODO(lvd) - break; + if(strchr(s->name, '$') != nil) + break; + if(strncmp(s->name, "go.weak.", 8) == 0) + break; Bprint(&outbuf, "var %U\t", s->name); printtypename(t); Bprint(&outbuf, "\n"); |