Mercurial > hg > qcc
changeset 580:7ddeaeed4e94
Simplify ld_next() a bit, removing gotos and case 'a' ... 'z' construct.
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 21 Mar 2008 20:25:14 -0500 |
parents | 53f0a143f244 |
children | 8595fe33590f |
files | tccelf.c |
diffstat | 1 files changed, 22 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/tccelf.c Fri Mar 21 20:21:49 2008 -0500 +++ b/tccelf.c Fri Mar 21 20:25:14 2008 -0500 @@ -2239,37 +2239,31 @@ int c; char *q; - redo: - switch(fch) { - case ' ': - case '\t': - case '\f': - case '\v': - case '\r': - case '\n': - inp(); - goto redo; - case '/': - minp(); - if (fch == '*') { - file->buf_ptr = parse_comment(file->buf_ptr); - fch = file->buf_ptr[0]; - goto redo; - } else { + for(;;) { + if (fch==CH_EOF) { + c = LD_TOK_EOF; + break; + } + if (is_space(fch) || fch=='\n') { + inp(); + continue; + } + if (fch=='/') { + minp(); + if (fch=='*') { + fch = *(file->buf_ptr = parse_comment(file->buf_ptr)); + continue; + } q = name; *q++ = '/'; - goto parse_name; + } else if ((fch>='a' && fch<='z') || (fch>='A' && fch<='Z') + || strchr("_\\.$~",fch)) q = name; + else { + c = fch; + inp(); + break; } - break; - case 'a' ... 'z': - case 'A' ... 'Z': - case '_': - case '\\': - case '.': - case '$': - case '~': - q = name; - parse_name: + for(;;) { if (!((fch >= 'a' && fch <= 'z') || (fch >= 'A' && fch <= 'Z') || @@ -2284,13 +2278,6 @@ *q = '\0'; c = LD_TOK_NAME; break; - case CH_EOF: - c = LD_TOK_EOF; - break; - default: - c = fch; - inp(); - break; } #if 0 printf("tok=%c %d\n", c, c);