summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2015-01-11 23:59:10 +0000
committerPatrick McHardy <kaber@trash.net>2015-01-11 23:59:10 +0000
commit69a54250650b9566470e62f39296ecb2b5010f84 (patch)
treeee80944c766fee8182084ae395989095d81f6673 /src
parentb17e27f472adc2e82582d90df0111d5b95c8afe0 (diff)
parser: properly fix handling of large integer values
Introduction of the ERROR symbol is an ugly hack. There's no reason to special case large integer values, the NUM token only exists for small values that are needed immediately, everything else is passed as EXPR_SYMBOL to evaluation anyways. Additionally the error reporting is different from what we'd usually report, the token is easy to confuse with the bison internal error token and it even has a name, messing up bison internal diagnostics. Simply return values to large to be handled by strtoull as STRING. Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'src')
-rw-r--r--src/parser_bison.y15
-rw-r--r--src/scanner.l4
2 files changed, 3 insertions, 16 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 6c46d098..fd2407c8 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -211,8 +211,7 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%token <val> NUM "number"
%token <string> STRING "string"
%token <string> QUOTED_STRING
-%token <string> ERROR "error"
-%destructor { xfree($$); } STRING QUOTED_STRING ERROR
+%destructor { xfree($$); } STRING QUOTED_STRING
%token LL_HDR "ll"
%token NETWORK_HDR "nh"
@@ -471,8 +470,6 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%destructor { expr_free($$); } list_expr
%type <expr> concat_expr map_lhs_expr
%destructor { expr_free($$); } concat_expr map_lhs_expr
-%type <expr> error_expr
-%destructor { expr_free($$); } error_expr
%type <expr> map_expr
%destructor { expr_free($$); } map_expr
@@ -1690,16 +1687,6 @@ expr : concat_expr
| set_expr
| map_expr
| multiton_expr
- | error_expr
- ;
-
-error_expr : ERROR
- {
- $$ = NULL;
- erec_queue(error(&@1, "bad value '%s'", $1),
- state->msgs);
- YYERROR;
- }
;
set_expr : '{' set_list_expr '}'
diff --git a/src/scanner.l b/src/scanner.l
index 52b00783..73c4f8b1 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -462,7 +462,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
yylval->val = strtoull(yytext, NULL, 0);
if (errno != 0) {
yylval->string = xstrdup(yytext);
- return ERROR;
+ return STRING;
}
return NUM;
}
@@ -472,7 +472,7 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
yylval->val = strtoull(yytext, NULL, 0);
if (errno != 0) {
yylval->string = xstrdup(yytext);
- return ERROR;
+ return STRING;
}
return NUM;
}