X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/93f0fff49d45d0cb36d7f7d9109c4fb56e6ebeab..1ef30936f5fdb253b397347b91521455d0c39172:/src/scan.l diff --git a/src/scan.l b/src/scan.l index 29dd33d..7549e6f 100644 --- a/src/scan.l +++ b/src/scan.l @@ -48,16 +48,6 @@ #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; @@ -188,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); }