Commit 531e6b77 authored by Russ Cox's avatar Russ Cox

eliminate package global name space

R=ken2
CC=golang-dev
https://golang.org/cl/194071
parent 19126320
...@@ -237,14 +237,13 @@ import_package: ...@@ -237,14 +237,13 @@ import_package:
importpkg->name = $2->name; importpkg->name = $2->name;
importpkg->direct = 1; importpkg->direct = 1;
// PGNS: fixme // NOTE(rsc): This is no longer a technical restriction:
// the 6g tool chain would work just fine without giving
// special meaning to a package being named main.
// Other implementations might need the restriction
// (gccgo does), so it stays in the language and the compiler.
if(strcmp($2->name, "main") == 0) if(strcmp($2->name, "main") == 0)
yyerror("cannot import package main"); yyerror("cannot import package main");
// PGNS: This should go away once we get
// rid of the global package name space.
if(localpkg->name && strcmp($2->name, localpkg->name) == 0 && !compiling_runtime)
yyerror("package cannot import itself");
} }
import_there: import_there:
......
...@@ -285,9 +285,7 @@ importfile(Val *f, int line) ...@@ -285,9 +285,7 @@ importfile(Val *f, int line)
Strlit *path; Strlit *path;
char cleanbuf[1024]; char cleanbuf[1024];
// TODO(rsc): don't bother reloading imports more than once // TODO(rsc): don't bother reloading imports more than once?
// PGNS: canonicalize import path for ./ imports in findpkg.
if(f->ctype != CTSTR) { if(f->ctype != CTSTR) {
yyerror("import statement not a string"); yyerror("import statement not a string");
......
...@@ -73,7 +73,7 @@ static int parsepkgdata(char*, char*, char**, char*, char**, char**, char**); ...@@ -73,7 +73,7 @@ static int parsepkgdata(char*, char*, char**, char*, char**, char**, char**);
void void
ldpkg(Biobuf *f, char *pkg, int64 len, char *filename) ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
{ {
char *data, *p0, *p1; char *data, *p0, *p1, *name;
if(debug['g']) if(debug['g'])
return; return;
...@@ -111,10 +111,18 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename) ...@@ -111,10 +111,18 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
return; return;
} }
p0 += 8; p0 += 8;
while(*p0 == ' ' || *p0 == '\t' || *p0 == '\n') while(p0 < p1 && *p0 == ' ' || *p0 == '\t' || *p0 == '\n')
p0++; p0++;
while(*p0 != ' ' && *p0 != '\t' && *p0 != '\n') name = p0;
while(p0 < p1 && *p0 != ' ' && *p0 != '\t' && *p0 != '\n')
p0++; p0++;
if(p0 < p1) {
*p0++ = '\0';
if(strcmp(pkg, "main") == 0 && strcmp(name, "main") != 0)
fprint(2, "%s: %s: not package main (package %s)\n", argv0, filename, name);
else if(strcmp(pkg, "main") != 0 && strcmp(name, "main") == 0)
fprint(2, "%s: %s: importing %s, found package main", argv0, filename, pkg);
}
loadpkgdata(filename, pkg, p0, p1 - p0); loadpkgdata(filename, pkg, p0, p1 - p0);
} }
...@@ -131,7 +139,6 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename) ...@@ -131,7 +139,6 @@ ldpkg(Biobuf *f, char *pkg, int64 len, char *filename)
return; return;
} }
// PGNS: Should be using import path, not pkg.
loadpkgdata(filename, pkg, p0, p1 - p0); loadpkgdata(filename, pkg, p0, p1 - p0);
// look for dynld section // look for dynld section
......
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