From 416b27548ed2c6ac89c28c192880900cbc2ffa6d Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 2 Apr 2009 18:32:57 -0700 Subject: [PATCH] =?utf8?q?use=20=5Ff007=C2=B7filename=20for=20func=20liter?= =?utf8?q?als.=20this=20avoids=20problems=20people=20have=20run=20into=20w?= =?utf8?q?ith=20multiple=20closures=20in=20the=20same=20package.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit when preparing filename, only cut off .go, not .anything. this fixes a bug tgs ran into with foo.pb.go and foo.go in the same package. also turn bad identifier chars from filename into underscores: a-b.pb.go => a_b_pb R=ken OCL=27050 CL=27050 --- src/cmd/gc/dcl.c | 2 +- src/cmd/gc/lex.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index 2e467249bb..51c76be752 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -583,7 +583,7 @@ funclit1(Type *type, Node *body) // declare function. vargen++; - snprint(namebuf, sizeof(namebuf), "_f%.3ld", vargen); + snprint(namebuf, sizeof(namebuf), "_f%.3ld·%s", vargen, filename); f = newname(lookup(namebuf)); addvar(f, ft, PFUNC); f->funcdepth = 0; diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 3477a2cffc..4e577a63c8 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -138,15 +138,23 @@ void setfilename(char *file) { char *p; + int c; p = strrchr(file, '/'); if(p != nil) file = p+1; strncpy(namebuf, file, sizeof(namebuf)); - p = strchr(namebuf, '.'); - if(p != nil) + p = strrchr(namebuf, '.'); + if(p != nil && strcmp(p, ".go") == 0) *p = 0; filename = strdup(namebuf); + + // turn invalid identifier chars into _ + for(p=filename; *p; p++) { + c = *p & 0xFF; + if(c < 0x80 && !isalpha(c) && !isdigit(c) && c != '_') + *p = '_'; + } } int -- 2.48.1