mojoshader_preprocessor.c
changeset 587 202354e004fc
parent 586 321a19a62989
child 597 832dbfa63509
--- a/mojoshader_preprocessor.c	Thu Feb 12 17:12:46 2009 -0500
+++ b/mojoshader_preprocessor.c	Thu Feb 12 17:25:49 2009 -0500
@@ -10,7 +10,12 @@
 #define __MOJOSHADER_INTERNAL__ 1
 #include "mojoshader_internal.h"
 
-#define DEBUG_TOKENIZER 0
+#if DEBUG_PREPROCESSOR
+    #define print_debug_token(token, len, val) \
+        MOJOSHADER_print_debug_token("PREPROCESSOR", token, len, val)
+#else
+    #define print_debug_token(token, len, val)
+#endif
 
 typedef struct DefineHash
 {
@@ -81,6 +86,77 @@
 } // fail
 
 
+#if DEBUG_TOKENIZER
+void MOJOSHADER_print_debug_token(const char *subsystem, const char *token,
+                                  const unsigned int tokenlen,
+                                  const Token tokenval)
+{
+    printf("%s TOKEN: \"", subsystem);
+    unsigned int i;
+    for (i = 0; i < tokenlen; i++)
+    {
+        if (token[i] == '\n')
+            printf("\\n");
+        else
+            printf("%c", token[i]);
+    } // for
+    printf("\" (");
+    switch (tokenval)
+    {
+        #define TOKENCASE(x) case x: printf("%s", #x); break
+        TOKENCASE(TOKEN_UNKNOWN);
+        TOKENCASE(TOKEN_IDENTIFIER);
+        TOKENCASE(TOKEN_INT_LITERAL);
+        TOKENCASE(TOKEN_FLOAT_LITERAL);
+        TOKENCASE(TOKEN_STRING_LITERAL);
+        TOKENCASE(TOKEN_ADDASSIGN);
+        TOKENCASE(TOKEN_SUBASSIGN);
+        TOKENCASE(TOKEN_MULTASSIGN);
+        TOKENCASE(TOKEN_DIVASSIGN);
+        TOKENCASE(TOKEN_MODASSIGN);
+        TOKENCASE(TOKEN_XORASSIGN);
+        TOKENCASE(TOKEN_ANDASSIGN);
+        TOKENCASE(TOKEN_ORASSIGN);
+        TOKENCASE(TOKEN_INCREMENT);
+        TOKENCASE(TOKEN_DECREMENT);
+        TOKENCASE(TOKEN_RSHIFT);
+        TOKENCASE(TOKEN_LSHIFT);
+        TOKENCASE(TOKEN_ANDAND);
+        TOKENCASE(TOKEN_OROR);
+        TOKENCASE(TOKEN_LEQ);
+        TOKENCASE(TOKEN_GEQ);
+        TOKENCASE(TOKEN_EQL);
+        TOKENCASE(TOKEN_NEQ);
+        TOKENCASE(TOKEN_HASHHASH);
+        TOKENCASE(TOKEN_PP_INCLUDE);
+        TOKENCASE(TOKEN_PP_LINE);
+        TOKENCASE(TOKEN_PP_DEFINE);
+        TOKENCASE(TOKEN_PP_UNDEF);
+        TOKENCASE(TOKEN_PP_IF);
+        TOKENCASE(TOKEN_PP_IFDEF);
+        TOKENCASE(TOKEN_PP_IFNDEF);
+        TOKENCASE(TOKEN_PP_ELSE);
+        TOKENCASE(TOKEN_PP_ELIF);
+        TOKENCASE(TOKEN_PP_ENDIF);
+        TOKENCASE(TOKEN_PP_ERROR);
+        TOKENCASE(TOKEN_PP_INCOMPLETE_COMMENT);
+        TOKENCASE(TOKEN_EOI);
+        #undef TOKENCASE
+
+        case ((Token) '\n'):
+            printf("'\\n'");
+            break;
+
+        default:
+            assert(((int)tokenval) < 256);
+            printf("'%c'", (char) tokenval);
+            break;
+    } // switch
+    printf(")\n");
+} // MOJOSHADER_print_debug_token
+#endif
+
+
 // Preprocessor define hashtable stuff...
 
 static unsigned char hash_define(const char *sym)
@@ -372,74 +448,7 @@
                                    Token *token)
 {
     const char *retval = _preprocessor_nexttoken(ctx, len, token);
-
-    #if DEBUG_TOKENIZER
-    printf("PREPROCESSOR TOKEN: \"");
-    unsigned int i;
-    for (i = 0; i < *len; i++)
-    {
-        if (retval[i] == '\n')
-            printf("\\n");
-        else
-            printf("%c", retval[i]);
-    } // for
-    printf("\" (");
-    switch (*token)
-    {
-        #define TOKENCASE(x) case x: printf("%s", #x); break
-        TOKENCASE(TOKEN_UNKNOWN);
-        TOKENCASE(TOKEN_IDENTIFIER);
-        TOKENCASE(TOKEN_INT_LITERAL);
-        TOKENCASE(TOKEN_FLOAT_LITERAL);
-        TOKENCASE(TOKEN_STRING_LITERAL);
-        TOKENCASE(TOKEN_RSHIFTASSIGN);
-        TOKENCASE(TOKEN_LSHIFTASSIGN);
-        TOKENCASE(TOKEN_ADDASSIGN);
-        TOKENCASE(TOKEN_SUBASSIGN);
-        TOKENCASE(TOKEN_MULTASSIGN);
-        TOKENCASE(TOKEN_DIVASSIGN);
-        TOKENCASE(TOKEN_MODASSIGN);
-        TOKENCASE(TOKEN_XORASSIGN);
-        TOKENCASE(TOKEN_ANDASSIGN);
-        TOKENCASE(TOKEN_ORASSIGN);
-        TOKENCASE(TOKEN_INCREMENT);
-        TOKENCASE(TOKEN_DECREMENT);
-        TOKENCASE(TOKEN_RSHIFT);
-        TOKENCASE(TOKEN_LSHIFT);
-        TOKENCASE(TOKEN_ANDAND);
-        TOKENCASE(TOKEN_OROR);
-        TOKENCASE(TOKEN_LEQ);
-        TOKENCASE(TOKEN_GEQ);
-        TOKENCASE(TOKEN_EQL);
-        TOKENCASE(TOKEN_NEQ);
-        TOKENCASE(TOKEN_HASHHASH);
-        TOKENCASE(TOKEN_PP_INCLUDE);
-        TOKENCASE(TOKEN_PP_LINE);
-        TOKENCASE(TOKEN_PP_DEFINE);
-        TOKENCASE(TOKEN_PP_UNDEF);
-        TOKENCASE(TOKEN_PP_IF);
-        TOKENCASE(TOKEN_PP_IFDEF);
-        TOKENCASE(TOKEN_PP_IFNDEF);
-        TOKENCASE(TOKEN_PP_ELSE);
-        TOKENCASE(TOKEN_PP_ELIF);
-        TOKENCASE(TOKEN_PP_ENDIF);
-        TOKENCASE(TOKEN_PP_ERROR);
-        TOKENCASE(TOKEN_PP_INCOMPLETE_COMMENT);
-        TOKENCASE(TOKEN_EOI);
-        #undef TOKENCASE
-
-        case ((Token) '\n'):
-            printf("'\\n'");
-            break;
-
-        default:
-            assert(((int)*token) < 256);
-            printf("'%c'", (char) *token);
-            break;
-    } // switch
-    printf(")\n");
-    #endif
-
+    print_debug_token(retval, *len, *token);
     return retval;
 } // preprocessor_nexttoken