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);