thandling of C++ names. - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 62faed57a5bc13e14ee55aef32c210c713b315da (DIR) parent e3de25fea4065d017fc344c3c7d757738a922c17 (HTM) 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(-) --- (DIR) 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, (DIR) 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)) { /* checking against ~ lets UTF names through */ + /* 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; } (DIR) 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;