]> git.draconx.ca Git - cdecl99.git/blobdiff - src/scan.l
libcdecl: Simplify loop in cdecl__normalize_specs.
[cdecl99.git] / src / scan.l
index 8a6572ef2444d267ff565b58a402804b5c969b94..7549e6f7baee99cafb40a46d72f2211f10d511ce 100644 (file)
@@ -19,6 +19,9 @@
 
 #include <config.h>
 #include "parse.h"
+
+#define YY_NO_INPUT 1
+#define YY_NO_UNPUT 1
 }
 
 %option nodefault noyywrap bison-locations reentrant never-interactive
 #define STRTOUMAX strtoul
 #endif
 
-#define dup_token() do { \
-       yylval->strval = malloc(yyleng+1); \
-       if (!yylval->strval) { \
-               cdecl__errmsg(CDECL__ENOMEM); \
-               return T_LEX_ERROR; \
-       } \
-       memcpy(yylval->strval, yytext, yyleng); \
-       yylval->strval[yyleng] = 0; \
-} while(0)
-
 static char *to_octal(char *dst, unsigned val)
 {
        unsigned i;
@@ -185,7 +178,9 @@ INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+
 #else
                yyless(strcspn(yytext, "-"));
 #endif
-               dup_token();
+               if (!(yylval->item = cdecl__alloc_item(yyleng+1)))
+                       return T_LEX_ERROR; \
+               memcpy(yylval->item->s, yytext, yyleng+1);
        }
        return UNPACK_TOKEN(tok);
 }