robustness++
authorken <ken@mihrtec.com>
Fri, 21 Oct 2016 21:49:56 +0000 (14:49 -0700)
committerken <ken@mihrtec.com>
Fri, 21 Oct 2016 21:49:56 +0000 (14:49 -0700)
src/bin/tools/testapc.c

index 1aca9b3..c51ba41 100644 (file)
@@ -91,45 +91,36 @@ int test_yyparse
 #define PASSES 1000
 ()
 { int i, tok;
-  static char tok_pattern[] = "[" RED " %5i " CLRC "][" CYAN " %-12i " CLRC "]";
+  static char* tok_string;
+  static char  tok_pattern[] = "[" RED " %9s " CLRC "][" CYAN " %-12i " CLRC "]";
   for (i = 0; i < PASSES; i++)
     { switch (tok = lexer())
-    #define OFFS 27
-       { case STR:
-         case NAME:
-           tok_pattern[OFFS] = 's';
-           break;
-         case REF:
-         case FPTR:
-           tok_pattern[OFFS] = 'x';
-           break;
-          case NUM:
-          case SS:
-         case SSD:
-           tok_pattern[OFFS] = 'i';
-           break;
-         case CLOPEN:
-          case CLCLOSE:
-         case SOPEN:
-         case SCLOSE:
-         case EOPEN:
-         case ECLOSE:
-         case VOPEN:
-         case VCLOSE:
-         case QOPEN:
-         case QCLOSE:
-         case RT:
-         case HB:
-           tok_pattern[OFFS] = 'i';
+      #define TOFFS 9
+      #define LOFFS 27
+      #define $($)#$
+      #define TOK_CASE(T,C)                    \
+       case T:                                 \
+         tok_string = $(T);                    \
+         tok_pattern[LOFFS] = C;               \
+         break
+       { TOK_CASE(STR,'s');
+         TOK_CASE(NAME,'s');
+         TOK_CASE(REF,'x');
+         TOK_CASE(FPTR,'x');
+         TOK_CASE(NUM,'i');
+         TOK_CASE(SS,'i');
+         TOK_CASE(SSD,'i');
+         TOK_CASE(CLOPEN,'i');
+         TOK_CASE(CLCLOSE,'i');
+         default:
+           tok_string = "UNKNOWN";
+           tok_pattern[LOFFS] = 'i';
            break;
           case 0:
            goto done;
-          default:
-           printf(YELLOW "test_yyparse" CLRC ", unknown token [" RED " %5i " CLRC "]",tok);
-           goto error;
        }
-      printf(tok_pattern, tok, yylval.val);
-      if (i % 4 == 0 || yylval.val == 1)
+      printf(tok_pattern, tok_string, yylval.val);
+      if (i % 4 == 0 || yylval.val == 0)
        printf(";\n");
     }
  done: