Commit a6736fa4 authored by Russ Cox's avatar Russ Cox

cleanup toward eliminating package global name space

  * switch to real dot (.) instead of center dot (·) everywhere in object files.
    before it was half and half depending on where in the name it appeared.
  * in 6c/6a/etc identifiers, · can still be used but turns into . immediately.
  * in export metadata, replace package identifiers with quoted strings
    (still package names, not paths).

R=ken2, r
CC=golang-dev
https://golang.org/cl/190076
parent 0365b989
......@@ -33,18 +33,11 @@
void
zname(Biobuf *b, Sym *s, int t)
{
char *n;
Bputc(b, ANAME); /* as */
Bputc(b, t); /* type */
Bputc(b, s->sym); /* sym */
for(n=s->package; *n; n++)
Bputc(b, *n);
Bputdot(b);
for(n=s->name; *n; n++)
Bputc(b, *n);
Bputc(b, 0);
Bputname(b, s);
}
void
......
......@@ -128,7 +128,7 @@ noops(void)
Bflush(&bso);
pmorestack = P;
symmorestack = lookup("runtime·morestack", 0);
symmorestack = lookup("runtime.morestack", 0);
if(symmorestack->type == STEXT)
for(p = firstp; p != P; p = p->link) {
......@@ -361,7 +361,7 @@ noops(void)
// MOVW.LO $autosize, R1
// MOVW.LO $args, R2
// MOVW.LO R14, R3
// BL.LO runtime·morestack(SB) // modifies LR
// BL.LO runtime.morestack(SB) // modifies LR
// MOVW.W R14,$-autosize(SP)
// TODO(kaib): add more trampolines
......@@ -412,7 +412,7 @@ noops(void)
p->to.type = D_REG;
p->to.reg = 3;
// BL.LO runtime·morestack(SB) // modifies LR
// BL.LO runtime.morestack(SB) // modifies LR
p = appendp(p);
p->as = ABL;
p->scond = C_SCOND_LO;
......@@ -433,7 +433,7 @@ noops(void)
// MOVW $autosize, R1
// MOVW $args, R2
// MOVW R14, R3
// BL runtime·morestack(SB) // modifies LR
// BL runtime.morestack(SB) // modifies LR
// MOVW.W R14,$-autosize(SP)
// MOVW $autosize, R1
......@@ -461,7 +461,7 @@ noops(void)
p->to.type = D_REG;
p->to.reg = 3;
// BL runtime·morestack(SB) // modifies LR
// BL runtime.morestack(SB) // modifies LR
p = appendp(p);
p->as = ABL;
p->to.type = D_BRANCH;
......
......@@ -74,7 +74,7 @@ isobjfile(char *f)
static char*
linkername[] =
{
"runtime·softfloat",
"runtime.softfloat",
};
void
......
......@@ -33,19 +33,12 @@
void
zname(Biobuf *b, Sym *s, int t)
{
char *n;
Bputc(b, ANAME); /* as */
Bputc(b, ANAME>>8); /* as */
Bputc(b, t); /* type */
Bputc(b, s->sym); /* sym */
for(n=s->package; *n; n++)
Bputc(b, *n);
Bputdot(b);
for(n=s->name; *n; n++)
Bputc(b, *n);
Bputc(b, 0);
Bputname(b, s);
}
void
......
......@@ -513,17 +513,17 @@ brloop(Prog *p)
static char*
morename[] =
{
"runtime·morestack00",
"runtime·morestack10",
"runtime·morestack01",
"runtime·morestack11",
"runtime·morestack8",
"runtime·morestack16",
"runtime·morestack24",
"runtime·morestack32",
"runtime·morestack40",
"runtime·morestack48",
"runtime.morestack00",
"runtime.morestack10",
"runtime.morestack01",
"runtime.morestack11",
"runtime.morestack8",
"runtime.morestack16",
"runtime.morestack24",
"runtime.morestack32",
"runtime.morestack40",
"runtime.morestack48",
};
Prog* pmorestack[nelem(morename)];
Sym* symmorestack[nelem(morename)];
......
......@@ -33,19 +33,12 @@
void
zname(Biobuf *b, Sym *s, int t)
{
char *n;
Bputc(b, ANAME); /* as */
Bputc(b, ANAME>>8); /* as */
Bputc(b, t); /* type */
Bputc(b, s->sym); /* sym */
for(n=s->package; *n; n++)
Bputc(b, *n);
Bputdot(b);
for(n=s->name; *n; n++)
Bputc(b, *n);
Bputc(b, 0);
Bputname(b, s);
}
void
......
......@@ -498,7 +498,7 @@ dostkoff(void)
Sym *symmorestack;
pmorestack = P;
symmorestack = lookup("runtime·morestack", 0);
symmorestack = lookup("runtime.morestack", 0);
if(symmorestack->type == STEXT)
for(p = firstp; p != P; p = p->link) {
......@@ -511,7 +511,7 @@ dostkoff(void)
}
}
if(pmorestack == P)
diag("runtime·morestack not defined");
diag("runtime.morestack not defined");
curframe = 0;
curbecome = 0;
......
......@@ -403,6 +403,17 @@ lookup(void)
uint32 h;
char *p;
int c, n;
char *r, *w;
// turn · into .
for(r=w=symb; *r; r++) {
if((uchar)*r == 0xc2 && (uchar)*(r+1) == 0xb7) {
*w++ = '.';
r++;
}else
*w++ = *r;
}
*w = '\0';
h = 0;
for(p=symb; *p;) {
......
......@@ -221,6 +221,17 @@ lookup(void)
int32 h;
char *p;
int c, l;
char *r, *w;
// turn · into .
for(r=w=symb; *r; r++) {
if((uchar)*r == 0xc2 && (uchar)*(r+1) == 0xb7) {
*w++ = '.';
r++;
}else
*w++ = *r;
}
*w = '\0';
h = 0;
for(p=symb; c = *p; p++)
......
char *runtimeimport =
"package runtime\n"
"func runtime.mal (? int32) (? *any)\n"
"func runtime.throwindex ()\n"
"func runtime.throwreturn ()\n"
"func runtime.throwinit ()\n"
"func runtime.panicl ()\n"
"func runtime.printbool (? bool)\n"
"func runtime.printfloat (? float64)\n"
"func runtime.printint (? int64)\n"
"func runtime.printuint (? uint64)\n"
"func runtime.printstring (? string)\n"
"func runtime.printpointer (? any)\n"
"func runtime.printiface (? any)\n"
"func runtime.printeface (? any)\n"
"func runtime.printslice (? any)\n"
"func runtime.printnl ()\n"
"func runtime.printsp ()\n"
"func runtime.catstring (? string, ? string) (? string)\n"
"func runtime.cmpstring (? string, ? string) (? int)\n"
"func runtime.slicestring (? string, ? int, ? int) (? string)\n"
"func runtime.slicestring1 (? string, ? int) (? string)\n"
"func runtime.indexstring (? string, ? int) (? uint8)\n"
"func runtime.intstring (? int64) (? string)\n"
"func runtime.slicebytetostring (? []uint8) (? string)\n"
"func runtime.sliceinttostring (? []int) (? string)\n"
"func runtime.stringiter (? string, ? int) (? int)\n"
"func runtime.stringiter2 (? string, ? int) (retk int, retv int)\n"
"func runtime.slicecopy (to any, fr any, wid uint32) (? int)\n"
"func runtime.ifaceI2E (iface any) (ret any)\n"
"func runtime.ifaceE2I (typ *uint8, iface any) (ret any)\n"
"func runtime.ifaceT2E (typ *uint8, elem any) (ret any)\n"
"func runtime.ifaceE2T (typ *uint8, elem any) (ret any)\n"
"func runtime.ifaceE2I2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func runtime.ifaceE2T2 (typ *uint8, elem any) (ret any, ok bool)\n"
"func runtime.ifaceT2I (typ1 *uint8, typ2 *uint8, elem any) (ret any)\n"
"func runtime.ifaceI2T (typ *uint8, iface any) (ret any)\n"
"func runtime.ifaceI2T2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func runtime.ifaceI2I (typ *uint8, iface any) (ret any)\n"
"func runtime.ifaceI2Ix (typ *uint8, iface any) (ret any)\n"
"func runtime.ifaceI2I2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func runtime.ifaceeq (i1 any, i2 any) (ret bool)\n"
"func runtime.efaceeq (i1 any, i2 any) (ret bool)\n"
"func runtime.ifacethash (i1 any) (ret uint32)\n"
"func runtime.efacethash (i1 any) (ret uint32)\n"
"func runtime.makemap (key *uint8, val *uint8, hint int) (hmap map[any] any)\n"
"func runtime.mapaccess1 (hmap map[any] any, key any) (val any)\n"
"func runtime.mapaccess2 (hmap map[any] any, key any) (val any, pres bool)\n"
"func runtime.mapassign1 (hmap map[any] any, key any, val any)\n"
"func runtime.mapassign2 (hmap map[any] any, key any, val any, pres bool)\n"
"func runtime.mapiterinit (hmap map[any] any, hiter *any)\n"
"func runtime.mapiternext (hiter *any)\n"
"func runtime.mapiter1 (hiter *any) (key any)\n"
"func runtime.mapiter2 (hiter *any) (key any, val any)\n"
"func runtime.makechan (elem *uint8, hint int) (hchan chan any)\n"
"func runtime.chanrecv1 (hchan <-chan any) (elem any)\n"
"func runtime.chanrecv2 (hchan <-chan any) (elem any, pres bool)\n"
"func runtime.chansend1 (hchan chan<- any, elem any)\n"
"func runtime.chansend2 (hchan chan<- any, elem any) (pres bool)\n"
"func runtime.closechan (hchan any)\n"
"func runtime.closedchan (hchan any) (? bool)\n"
"func runtime.newselect (size int) (sel *uint8)\n"
"func runtime.selectsend (sel *uint8, hchan chan<- any, elem any) (selected bool)\n"
"func runtime.selectrecv (sel *uint8, hchan <-chan any, elem *any) (selected bool)\n"
"func runtime.selectdefault (sel *uint8) (selected bool)\n"
"func runtime.selectgo (sel *uint8)\n"
"func runtime.makeslice (typ *uint8, nel int, cap int) (ary []any)\n"
"func runtime.sliceslice1 (old []any, lb int, width int) (ary []any)\n"
"func runtime.sliceslice (old []any, lb int, hb int, width int) (ary []any)\n"
"func runtime.slicearray (old *any, nel int, lb int, hb int, width int) (ary []any)\n"
"func runtime.closure ()\n"
"func runtime.int64div (? int64, ? int64) (? int64)\n"
"func runtime.uint64div (? uint64, ? uint64) (? uint64)\n"
"func runtime.int64mod (? int64, ? int64) (? int64)\n"
"func runtime.uint64mod (? uint64, ? uint64) (? uint64)\n"
"func runtime.float64toint64 (? float64) (? int64)\n"
"func runtime.int64tofloat64 (? int64) (? float64)\n"
"func \"runtime\".mal (? int32) (? *any)\n"
"func \"runtime\".throwindex ()\n"
"func \"runtime\".throwreturn ()\n"
"func \"runtime\".throwinit ()\n"
"func \"runtime\".panicl ()\n"
"func \"runtime\".printbool (? bool)\n"
"func \"runtime\".printfloat (? float64)\n"
"func \"runtime\".printint (? int64)\n"
"func \"runtime\".printuint (? uint64)\n"
"func \"runtime\".printstring (? string)\n"
"func \"runtime\".printpointer (? any)\n"
"func \"runtime\".printiface (? any)\n"
"func \"runtime\".printeface (? any)\n"
"func \"runtime\".printslice (? any)\n"
"func \"runtime\".printnl ()\n"
"func \"runtime\".printsp ()\n"
"func \"runtime\".catstring (? string, ? string) (? string)\n"
"func \"runtime\".cmpstring (? string, ? string) (? int)\n"
"func \"runtime\".slicestring (? string, ? int, ? int) (? string)\n"
"func \"runtime\".slicestring1 (? string, ? int) (? string)\n"
"func \"runtime\".indexstring (? string, ? int) (? uint8)\n"
"func \"runtime\".intstring (? int64) (? string)\n"
"func \"runtime\".slicebytetostring (? []uint8) (? string)\n"
"func \"runtime\".sliceinttostring (? []int) (? string)\n"
"func \"runtime\".stringiter (? string, ? int) (? int)\n"
"func \"runtime\".stringiter2 (? string, ? int) (retk int, retv int)\n"
"func \"runtime\".slicecopy (to any, fr any, wid uint32) (? int)\n"
"func \"runtime\".ifaceI2E (iface any) (ret any)\n"
"func \"runtime\".ifaceE2I (typ *uint8, iface any) (ret any)\n"
"func \"runtime\".ifaceT2E (typ *uint8, elem any) (ret any)\n"
"func \"runtime\".ifaceE2T (typ *uint8, elem any) (ret any)\n"
"func \"runtime\".ifaceE2I2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func \"runtime\".ifaceE2T2 (typ *uint8, elem any) (ret any, ok bool)\n"
"func \"runtime\".ifaceT2I (typ1 *uint8, typ2 *uint8, elem any) (ret any)\n"
"func \"runtime\".ifaceI2T (typ *uint8, iface any) (ret any)\n"
"func \"runtime\".ifaceI2T2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func \"runtime\".ifaceI2I (typ *uint8, iface any) (ret any)\n"
"func \"runtime\".ifaceI2Ix (typ *uint8, iface any) (ret any)\n"
"func \"runtime\".ifaceI2I2 (typ *uint8, iface any) (ret any, ok bool)\n"
"func \"runtime\".ifaceeq (i1 any, i2 any) (ret bool)\n"
"func \"runtime\".efaceeq (i1 any, i2 any) (ret bool)\n"
"func \"runtime\".ifacethash (i1 any) (ret uint32)\n"
"func \"runtime\".efacethash (i1 any) (ret uint32)\n"
"func \"runtime\".makemap (key *uint8, val *uint8, hint int) (hmap map[any] any)\n"
"func \"runtime\".mapaccess1 (hmap map[any] any, key any) (val any)\n"
"func \"runtime\".mapaccess2 (hmap map[any] any, key any) (val any, pres bool)\n"
"func \"runtime\".mapassign1 (hmap map[any] any, key any, val any)\n"
"func \"runtime\".mapassign2 (hmap map[any] any, key any, val any, pres bool)\n"
"func \"runtime\".mapiterinit (hmap map[any] any, hiter *any)\n"
"func \"runtime\".mapiternext (hiter *any)\n"
"func \"runtime\".mapiter1 (hiter *any) (key any)\n"
"func \"runtime\".mapiter2 (hiter *any) (key any, val any)\n"
"func \"runtime\".makechan (elem *uint8, hint int) (hchan chan any)\n"
"func \"runtime\".chanrecv1 (hchan <-chan any) (elem any)\n"
"func \"runtime\".chanrecv2 (hchan <-chan any) (elem any, pres bool)\n"
"func \"runtime\".chansend1 (hchan chan<- any, elem any)\n"
"func \"runtime\".chansend2 (hchan chan<- any, elem any) (pres bool)\n"
"func \"runtime\".closechan (hchan any)\n"
"func \"runtime\".closedchan (hchan any) (? bool)\n"
"func \"runtime\".newselect (size int) (sel *uint8)\n"
"func \"runtime\".selectsend (sel *uint8, hchan chan<- any, elem any) (selected bool)\n"
"func \"runtime\".selectrecv (sel *uint8, hchan <-chan any, elem *any) (selected bool)\n"
"func \"runtime\".selectdefault (sel *uint8) (selected bool)\n"
"func \"runtime\".selectgo (sel *uint8)\n"
"func \"runtime\".makeslice (typ *uint8, nel int, cap int) (ary []any)\n"
"func \"runtime\".sliceslice1 (old []any, lb int, width int) (ary []any)\n"
"func \"runtime\".sliceslice (old []any, lb int, hb int, width int) (ary []any)\n"
"func \"runtime\".slicearray (old *any, nel int, lb int, hb int, width int) (ary []any)\n"
"func \"runtime\".closure ()\n"
"func \"runtime\".int64div (? int64, ? int64) (? int64)\n"
"func \"runtime\".uint64div (? uint64, ? uint64) (? uint64)\n"
"func \"runtime\".int64mod (? int64, ? int64) (? int64)\n"
"func \"runtime\".uint64mod (? uint64, ? uint64) (? uint64)\n"
"func \"runtime\".float64toint64 (? float64) (? int64)\n"
"func \"runtime\".int64tofloat64 (? int64) (? float64)\n"
"\n"
"$$\n";
char *unsafeimport =
"package unsafe\n"
"type unsafe.Pointer *any\n"
"func unsafe.Offsetof (? any) (? int)\n"
"func unsafe.Sizeof (? any) (? int)\n"
"func unsafe.Alignof (? any) (? int)\n"
"func unsafe.Typeof (i interface { }) (typ interface { })\n"
"func unsafe.Reflect (i interface { }) (typ interface { }, addr unsafe.Pointer)\n"
"func unsafe.Unreflect (typ interface { }, addr unsafe.Pointer) (ret interface { })\n"
"func unsafe.New (typ interface { }) (? unsafe.Pointer)\n"
"func unsafe.NewArray (typ interface { }, n int) (? unsafe.Pointer)\n"
"type \"unsafe\".Pointer *any\n"
"func \"unsafe\".Offsetof (? any) (? int)\n"
"func \"unsafe\".Sizeof (? any) (? int)\n"
"func \"unsafe\".Alignof (? any) (? int)\n"
"func \"unsafe\".Typeof (i interface { }) (typ interface { })\n"
"func \"unsafe\".Reflect (i interface { }) (typ interface { }, addr \"unsafe\".Pointer)\n"
"func \"unsafe\".Unreflect (typ interface { }, addr \"unsafe\".Pointer) (ret interface { })\n"
"func \"unsafe\".New (typ interface { }) (? \"unsafe\".Pointer)\n"
"func \"unsafe\".NewArray (typ interface { }, n int) (? \"unsafe\".Pointer)\n"
"\n"
"$$\n";
......@@ -27,6 +27,7 @@ static Sym* dclstack;
void
dcopy(Sym *a, Sym *b)
{
a->packagename = b->packagename;
a->package = b->package;
a->name = b->name;
a->def = b->def;
......
......@@ -226,6 +226,7 @@ dumpexport(void)
lno = lineno;
packagequotes = 1;
Bprint(bout, " import\n");
Bprint(bout, "\n$$ // exports\n");
......@@ -244,6 +245,7 @@ dumpexport(void)
}
Bprint(bout, "\n$$\n");
packagequotes = 0;
lineno = lno;
}
......
......@@ -291,7 +291,8 @@ struct Sym
Sym* link;
// saved and restored by dcopy
char* package; // package name
char* packagename; // package name
char* package; // import path
char* name; // variable name
Node* def; // definition: ONAME OTYPE OPACK or OLITERAL
int32 block; // blocknumber to catch redeclaration
......@@ -712,6 +713,7 @@ EXTERN int noargnames;
EXTERN int funcdepth;
EXTERN int typecheckok;
EXTERN int packagequotes;
/*
* y.tab.c
......@@ -913,6 +915,8 @@ void umagic(Magic*);
void redeclare(Sym*, char*);
Sym* ngotype(Node*);
char* toimportpath(Strlit*);
/*
* dcl.c
*/
......@@ -1144,7 +1148,7 @@ Plist* newplist(void);
/*
* obj.c
*/
void Bputdot(Biobuf *b);
void Bputname(Biobuf*, Sym*);
void dumpglobls(void);
void dumpobj(void);
void ieeedtod(uint64 *ieee, double native);
......
......@@ -142,6 +142,9 @@ package:
*/
loadsys:
{
if(debug['A'])
cannedimports("runtime.builtin", "package runtime\n\n$$\n\n");
else
cannedimports("runtime.builtin", runtimeimport);
}
import_package
......@@ -1546,8 +1549,17 @@ oliteral:
* an output package
*/
hidden_import:
LPACKAGE sym ';'
/* variables */
LIMPORT sym LLITERAL
{
// Informational: record package name
// associated with import path, for use in
// human-readable messages.
Sym *s;
s = pkglookup("", toimportpath($3.u.sval));
s->packagename = $2->name;
}
| LVAR hidden_pkg_importsym hidden_type ';'
{
importvar($2, $3, PEXTERN);
......@@ -1753,9 +1765,9 @@ hidden_constant:
}
hidden_importsym:
sym '.' sym
LLITERAL '.' sym
{
$$ = pkglookup($3->name, $1->name);
$$ = pkglookup($3->name, toimportpath($1.u.sval));
}
hidden_pkg_importsym:
......
......@@ -10,6 +10,8 @@
#include <ctype.h>
#include <errno.h>
void esc(char*);
int
main(int argc, char **argv)
{
......@@ -61,12 +63,13 @@ begin:
printf("\t\"");
while(q = strstr(p, "PACKAGE")) {
*q = 0;
printf("%s", p); // up to the substitution
esc(p); // up to the substitution
printf("%s", name); // the sub name
p = q+7; // continue with rest
}
printf("%s\\n\"\n", p);
esc(p);
printf("\\n\"\n", p);
}
fprintf(stderr, "did not find end of imports\n");
exit(1);
......@@ -75,3 +78,13 @@ end:
printf("\t\"$$\\n\";\n");
return 0;
}
void
esc(char *p)
{
for(; *p; p++) {
if(*p == '\\' || *p == '\"')
printf("\\");
putchar(*p);
}
}
......@@ -61,11 +61,13 @@ dumpglobls(void)
}
void
Bputdot(Biobuf *b)
Bputname(Biobuf *b, Sym *s)
{
// put out middle dot ·
Bputc(b, 0xc2);
Bputc(b, 0xb7);
// PGNS: Uncomment next line.
// if(strcmp(s->package, package) != 0)
Bwrite(b, s->package, strlen(s->package));
Bputc(b, '.');
Bwrite(b, s->name, strlen(s->name)+1);
}
void
......
......@@ -254,34 +254,9 @@ stringhash(char *p)
}
Sym*
lookup(char *p)
lookup(char *name)
{
Sym *s;
uint32 h;
int c;
h = stringhash(p) % NHASH;
c = p[0];
for(s = hash[h]; s != S; s = s->link) {
if(s->name[0] != c)
continue;
if(strcmp(s->name, p) == 0)
if(s->package && strcmp(s->package, package) == 0)
return s;
}
s = mal(sizeof(*s));
s->name = mal(strlen(p)+1);
s->package = package;
s->lexical = LNAME;
strcpy(s->name, p);
s->link = hash[h];
hash[h] = s;
return s;
return pkglookup(name, package);
}
Sym*
......@@ -306,8 +281,14 @@ pkglookup(char *name, char *pkg)
strcpy(s->name, name);
// botch - should probably try to reuse the pkg string
if(pkg == package)
s->package = package;
else {
s->package = mal(strlen(pkg)+1);
strcpy(s->package, pkg);
}
s->packagename = s->package;
s->link = hash[h];
hash[h] = s;
......@@ -1013,16 +994,23 @@ Sconv(Fmt *fp)
pkg = "<nil>";
nam = pkg;
if(s->package != nil)
pkg = s->package;
if(s->packagename != nil)
pkg = s->packagename;
else
abort();
if(s->name != nil)
nam = s->name;
if(!(fp->flags & FmtShort))
if(strcmp(pkg, package) != 0 || (fp->flags & FmtLong)) {
if(!(fp->flags & FmtShort)) {
if((fp->flags & FmtLong) && packagequotes) {
fmtprint(fp, "\"%s\".%s", s->package, nam);
return 0;
}
if((fp->flags & FmtLong) || strcmp(s->package, package) != 0) {
fmtprint(fp, "%s.%s", pkg, nam);
return 0;
}
}
fmtstrcpy(fp, nam);
return 0;
}
......@@ -3390,3 +3378,16 @@ ngotype(Node *n)
return typename(n->type)->left->sym;
return S;
}
char*
toimportpath(Strlit *s)
{
char *p;
//PGNS: Do better once these are import paths
// rather than package names in disguise.
p = mal(s->len+1);
memmove(p, s->s, s->len);
p[s->len] = '\0';
return p;
}
......@@ -8,7 +8,7 @@
# tests.
# If files are named on the command line, use them instead of test*.go.
# Makes egrep,grep work better with · if we put them
# Makes egrep,grep work better in general if we put them
# in ordinary C mode instead of what the current language is.
unset LANG
export LC_ALL=C
......@@ -115,14 +115,14 @@ importpath=$("$GOBIN"/gomake -s importpath)
# the grep -v eliminates methods and other special names
# that have multiple dots.
pattern='Test([^a-z].*)?'
tests=$("$GOBIN"/6nm -s _test/$importpath.a $xofile | egrep ' T .*·'$pattern'$' | grep -v '·.*[.·]' | sed 's/.* //; s/·/./')
tests=$("$GOBIN"/6nm -s _test/$importpath.a $xofile | egrep ' T .*\.'$pattern'$' | sed 's/.* //; /\..*\./d')
if [ "x$tests" = x ]; then
echo 'gotest: error: no tests matching '$pattern in _test/$importpath.a $xofile 1>&2
exit 2
fi
# benchmarks are named BenchmarkFoo.
pattern='Benchmark([^a-z].*)?'
benchmarks=$("$GOBIN"/6nm -s _test/$importpath.a $xofile | egrep ' T .*·'$pattern'$' | grep -v '·.*[.·]' | sed 's/.* //; s/·/./')
benchmarks=$("$GOBIN"/6nm -s _test/$importpath.a $xofile | egrep ' T .*\.'$pattern'$' | sed 's/.* //; /\..*\./d')
# package spec
echo 'package main'
......
......@@ -454,20 +454,20 @@ sweeplist(Prog **first, Prog **last)
static char*
morename[] =
{
"runtime·morestack",
"runtime·morestackx",
"runtime·morestack00",
"runtime·morestack10",
"runtime·morestack01",
"runtime·morestack11",
"runtime·morestack8",
"runtime·morestack16",
"runtime·morestack24",
"runtime·morestack32",
"runtime·morestack40",
"runtime·morestack48",
"runtime.morestack",
"runtime.morestackx",
"runtime.morestack00",
"runtime.morestack10",
"runtime.morestack01",
"runtime.morestack11",
"runtime.morestack8",
"runtime.morestack16",
"runtime.morestack24",
"runtime.morestack32",
"runtime.morestack40",
"runtime.morestack48",
};
void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment