* Don't use ATerms to represent integers in the lexer.

This commit is contained in:
Eelco Dolstra 2010-04-12 10:38:18 +00:00
parent db90b88e65
commit ed711f73bc
2 changed files with 5 additions and 3 deletions

View file

@ -107,7 +107,7 @@ inherit { return INHERIT; }
{ID} { yylval->t = toATerm(yytext); return ID; /* !!! alloc */ } {ID} { yylval->t = toATerm(yytext); return ID; /* !!! alloc */ }
{INT} { int n = atoi(yytext); /* !!! overflow */ {INT} { int n = atoi(yytext); /* !!! overflow */
yylval->t = ATmake("<int>", n); yylval->n = n;
return INT; return INT;
} }

View file

@ -317,6 +317,7 @@ static void freeAndUnprotect(void * p)
ATermList formals; ATermList formals;
bool ellipsis; bool ellipsis;
} formals; } formals;
int n;
} }
%type <t> start expr expr_function expr_if expr_op %type <t> start expr expr_function expr_if expr_op
@ -324,7 +325,8 @@ static void freeAndUnprotect(void * p)
%type <t> pattern %type <t> pattern
%type <ts> binds ids attrpath expr_list string_parts ind_string_parts %type <ts> binds ids attrpath expr_list string_parts ind_string_parts
%type <formals> formals %type <formals> formals
%token <t> ID INT STR IND_STR PATH URI %token <t> ID STR IND_STR PATH URI
%token <n> INT
%token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL %token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL
%token DOLLAR_CURLY /* == ${ */ %token DOLLAR_CURLY /* == ${ */
%token IND_STRING_OPEN IND_STRING_CLOSE %token IND_STRING_OPEN IND_STRING_CLOSE
@ -393,7 +395,7 @@ expr_select
expr_simple expr_simple
: ID { $$ = makeVar($1); } : ID { $$ = makeVar($1); }
| INT { $$ = makeInt(ATgetInt((ATermInt) $1)); } | INT { $$ = makeInt($1); }
| '"' string_parts '"' { | '"' string_parts '"' {
/* For efficiency, and to simplify parse trees a bit. */ /* For efficiency, and to simplify parse trees a bit. */
if ($2 == ATempty) $$ = makeStr(toATerm(""), ATempty); if ($2 == ATempty) $$ = makeStr(toATerm(""), ATempty);