aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/acid
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-11-29 05:12:48 +0000
committerrsc <devnull@localhost>2005-11-29 05:12:48 +0000
commit62faed57a5bc13e14ee55aef32c210c713b315da (patch)
tree3fb0f577c32b00727c5deabbf403f8d4a11924ee /src/cmd/acid
parente3de25fea4065d017fc344c3c7d757738a922c17 (diff)
downloadplan9port-62faed57a5bc13e14ee55aef32c210c713b315da.tar.gz
plan9port-62faed57a5bc13e14ee55aef32c210c713b315da.tar.bz2
plan9port-62faed57a5bc13e14ee55aef32c210c713b315da.zip
handling of C++ names.
Diffstat (limited to 'src/cmd/acid')
-rw-r--r--src/cmd/acid/acid.h2
-rw-r--r--src/cmd/acid/lex.c16
-rw-r--r--src/cmd/acid/util.c15
3 files changed, 27 insertions, 6 deletions
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 <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;
}
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;