preproc: make $ and $$ TOKEN_OTHER
authorH. Peter Anvin <hpa@linux.intel.com>
Fri, 17 Apr 2009 21:20:44 +0000 (14:20 -0700)
committerH. Peter Anvin <hpa@linux.intel.com>
Fri, 17 Apr 2009 21:22:49 +0000 (14:22 -0700)
Recognize $ and $$ as TOKEN_OTHER; they aren't really either
TOK_NUMBER nor TOK_ID, even though we have traditionally considered
them TOK_NUMBER.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
preproc.c

index 9a03f02..c6e0fb6 100644 (file)
--- a/preproc.c
+++ b/preproc.c
@@ -874,7 +874,7 @@ static Token *tokenize(char *line)
                 /* type = -1; */
             }
         } else if (p[0] == '$' && p[1] == '$') {
-            type = TOK_NUMBER;
+            type = TOK_OTHER;  /* TOKEN_BASE */
             p += 2;
         } else if (isnumstart(*p)) {
            bool is_hex = false;
@@ -935,12 +935,16 @@ static Token *tokenize(char *line)
            }
            p--;        /* Point to first character beyond number */
 
-           if (has_e && !is_hex) {
-               /* 1e13 is floating-point, but 1e13h is not */
-               is_float = true;
+           if (p == line+1 && *line == '$') {
+               type = TOK_OTHER; /* TOKEN_HERE */
+           } else {
+               if (has_e && !is_hex) {
+                   /* 1e13 is floating-point, but 1e13h is not */
+                   is_float = true;
+               }
+               
+               type = is_float ? TOK_FLOAT : TOK_NUMBER;
            }
-
-           type = is_float ? TOK_FLOAT : TOK_NUMBER;
         } else if (nasm_isspace(*p)) {
             type = TOK_WHITESPACE;
             p++;