From 62faed57a5bc13e14ee55aef32c210c713b315da Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 29 Nov 2005 05:12:48 +0000 Subject: handling of C++ names. --- src/cmd/acid/acid.h | 2 +- src/cmd/acid/lex.c | 16 ++++++++++++++-- src/cmd/acid/util.c | 15 ++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) (limited to 'src/cmd/acid') diff --git a/src/cmd/acid/acid.h b/src/cmd/acid/acid.h index 9ac983b3..266175e2 100644 --- a/src/cmd/acid/acid.h +++ b/src/cmd/acid/acid.h @@ -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 index f265d6c9..b9b99762 100644 --- a/src/cmd/acid/lex.c +++ b/src/cmd/acid/lex.c @@ -348,7 +348,6 @@ bqsymbol(void) char *p; Lsym *s; - symbol[0] = 0; p = symbol; while((c = lexc()) != '`'){ if(c == Eof) @@ -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); @@ -601,7 +601,19 @@ numsym(char first) error("%d 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; } diff --git a/src/cmd/acid/util.c b/src/cmd/acid/util.c index 15859dbb..a0ae47fb 100644 --- a/src/cmd/acid/util.c +++ b/src/cmd/acid/util.c @@ -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)) @@ -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; } @@ -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; -- cgit v1.2.3