#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;
%{
char *c;
-
- if (yyextra > 0) {
- yyextra = -yyextra;
- return T_ENGLISH;
- }
%}
"..."|[][;*(),] {
int tok;
yylval->spectype = UNPACK_SPEC(x & 0xff);
- if ((tok = (x >> 8)) == T_IDENT) {
+ 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
#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);
}