X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/3a3760ad26782403f6686183be3faa8b22cf849b..05d0ced1aa6c1e685e3228e7c43aab3fbb1d88c3:/src/scan.l diff --git a/src/scan.l b/src/scan.l index 6718381..8a6572e 100644 --- a/src/scan.l +++ b/src/scan.l @@ -124,11 +124,6 @@ INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+ %{ char *c; - - if (yyextra > 0) { - yyextra = -yyextra; - return T_ENGLISH; - } %} "..."|[][;*(),] { @@ -169,8 +164,11 @@ INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+ } {IDENT} { - int ret = cdecl__to_keyword(yytext, yyleng, yyextra); - if (ret == T_IDENT) { + unsigned x = cdecl__to_keyword(yytext, yyleng, yyextra); + int tok; + + yylval->spectype = UNPACK_SPEC(x & 0xff); + if ((tok = (x >> 8)) == PACK_TOKEN(T_IDENT)) { /* * Our IDENT pattern includes hyphens so we can match * "variable-length" as a keyword. In all other cases a @@ -189,7 +187,7 @@ INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+ #endif dup_token(); } - return ret; + return UNPACK_TOKEN(tok); } [[:space:]]+