thandling of C++ names. - plan9port - [fork] Plan 9 from user space | |
git clone git://src.adamsgaard.dk/plan9port | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 62faed57a5bc13e14ee55aef32c210c713b315da | |
parent e3de25fea4065d017fc344c3c7d757738a922c17 | |
Author: rsc <devnull@localhost> | |
Date: Tue, 29 Nov 2005 05:12:48 +0000 | |
handling of C++ names. | |
Diffstat: | |
M src/cmd/acid/acid.h | 2 +- | |
M src/cmd/acid/lex.c | 16 ++++++++++++++-- | |
M src/cmd/acid/util.c | 15 ++++++++++++--- | |
3 files changed, 27 insertions(+), 6 deletions(-) | |
--- | |
diff --git a/src/cmd/acid/acid.h b/src/cmd/acid/acid.h | |
t@@ -4,7 +4,7 @@ | |
enum | |
{ | |
Eof = -1, | |
- Strsize = 4096, | |
+ Strsize = 65536, | |
Hashsize = 128, | |
Maxarg = 512, | |
NFD = 100, | |
diff --git a/src/cmd/acid/lex.c b/src/cmd/acid/lex.c | |
t@@ -348,7 +348,6 @@ bqsymbol(void) | |
char *p; | |
Lsym *s; | |
- symbol[0] = 0; | |
p = symbol; | |
while((c = lexc()) != '`'){ | |
if(c == Eof) | |
t@@ -361,6 +360,7 @@ bqsymbol(void) | |
sysfatal("overflow in bqsymbol"); | |
*p = 0; | |
+fprint(2, "bq: %s\n", symbol); | |
s = look(symbol); | |
if(s == 0) | |
s = enter(symbol, Tid); | |
t@@ -601,7 +601,19 @@ numsym(char first) | |
error("%d <eof> eating symbols", line); | |
if(c == '\n') | |
line++; | |
- if(c != '_' && c != '$' && c <= '~' && !isalnum(c)) { /… | |
+ /* allow :: in name */ | |
+ if(c == ':'){ | |
+ c = lexc(); | |
+ if(c == ':'){ | |
+ *p++ = ':'; | |
+ *p++ = ':'; | |
+ continue; | |
+ } | |
+ unlexc(c); | |
+ unlexc(':'); | |
+ break; | |
+ } | |
+ if(c != '_' && c != '$' && c < Runeself && !isalnum(c)) { | |
unlexc(c); | |
break; | |
} | |
diff --git a/src/cmd/acid/util.c b/src/cmd/acid/util.c | |
t@@ -16,7 +16,7 @@ unique(char *buf, Symbol *s) | |
int i, renamed; | |
renamed = 0; | |
- strcpy(buf, s->name); | |
+ strcpy(buf, s->xname); | |
for(;;) { | |
l = look(buf); | |
if(l == 0 || (l->lexval == Tid && l->v->set == 0)) | |
t@@ -36,9 +36,10 @@ unique(char *buf, Symbol *s) | |
} | |
} | |
if(renamed && !quiet) | |
- print("\t%s=%s %c/%L\n", s->name, buf, s->type, s->loc); | |
+ print("\t%s=%s %c/%L\n", s->xname, buf, s->type, s->loc); | |
if(l == 0) | |
l = enter(buf, Tid); | |
+ s->aux = l; | |
return l; | |
} | |
t@@ -116,23 +117,31 @@ addvarsym(Fhdr *fp) | |
if(l->v->store.comt == 0) | |
l->v->store.fmt = 'X'; | |
- /* Enter as list of { name, type, value, file } */ | |
+ /* Enter as list of { name, type, value, file, xname }… | |
list = al(TSTRING); | |
tl->store.u.l = list; | |
list->store.u.string = strnode(buf); | |
list->store.fmt = 's'; | |
+ | |
list->next = al(TINT); | |
list = list->next; | |
list->store.fmt = 'c'; | |
list->store.u.ival = s.type; | |
+ | |
list->next = al(TINT); | |
list = list->next; | |
list->store.fmt = 'X'; | |
list->store.u.ival = v; | |
+ | |
list->next = al(TSTRING); | |
list = list->next; | |
list->store.fmt = 's'; | |
list->store.u.string = file; | |
+ | |
+ list->next = al(TSTRING); | |
+ list = list->next; | |
+ list->store.fmt = 's'; | |
+ list->store.u.string = strnode(s.xname); | |
} | |
} | |
*tail = nil; |