From 6df0261c5cec232d3b37c553d62d148b3d8805e5 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Tue, 15 Mar 2016 17:25:22 +0100 Subject: parser_bison: simplify hook_spec rule Consolidate this rule by introducing the dev_spec and prio_spec, we save 50 LOC with this patch. Signed-off-by: Pablo Neira Ayuso --- src/parser_bison.y | 66 +++++++++++++----------------------------------------- 1 file changed, 15 insertions(+), 51 deletions(-) (limited to 'src/parser_bison.y') diff --git a/src/parser_bison.y b/src/parser_bison.y index 90978ab6..24c09698 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -423,7 +423,10 @@ static void location_update(struct location *loc, struct location *rhs, int n) %destructor { handle_free(&$$); } table_spec chain_spec chain_identifier ruleid_spec ruleset_spec %type set_spec set_identifier %destructor { handle_free(&$$); } set_spec set_identifier -%type handle_spec family_spec family_spec_explicit position_spec chain_policy +%type handle_spec family_spec family_spec_explicit position_spec chain_policy prio_spec + +%type dev_spec +%destructor { xfree($$); } dev_spec %type table_block_alloc table_block %destructor { close_scope(state); table_free($$); } table_block_alloc @@ -1096,41 +1099,7 @@ type_identifier : STRING { $$ = $1; } | MARK { $$ = xstrdup("mark"); } ; -hook_spec : TYPE STRING HOOK STRING PRIORITY NUM - { - $0->type = chain_type_name_lookup($2); - if ($0->type == NULL) { - erec_queue(error(&@2, "unknown chain type %s", $2), - state->msgs); - YYERROR; - } - $0->hookstr = chain_hookname_lookup($4); - if ($0->hookstr == NULL) { - erec_queue(error(&@4, "unknown chain hook %s", $4), - state->msgs); - YYERROR; - } - $0->priority = $6; - $0->flags |= CHAIN_F_BASECHAIN; - } - | TYPE STRING HOOK STRING PRIORITY DASH NUM - { - $0->type = chain_type_name_lookup($2); - if ($0->type == NULL) { - erec_queue(error(&@2, "unknown type name %s", $2), - state->msgs); - YYERROR; - } - $0->hookstr = chain_hookname_lookup($4); - if ($0->hookstr == NULL) { - erec_queue(error(&@4, "unknown hook name %s", $4), - state->msgs); - YYERROR; - } - $0->priority = -$7; - $0->flags |= CHAIN_F_BASECHAIN; - } - | TYPE STRING HOOK STRING DEVICE STRING PRIORITY NUM +hook_spec : TYPE STRING HOOK STRING dev_spec PRIORITY prio_spec { $0->type = chain_type_name_lookup($2); if ($0->type == NULL) { @@ -1144,25 +1113,20 @@ hook_spec : TYPE STRING HOOK STRING PRIORITY NUM state->msgs); YYERROR; } - $0->dev = $6; - $0->priority = $8; - $0->flags |= CHAIN_F_BASECHAIN; - } - | TYPE STRING HOOK STRING DEVICE STRING PRIORITY DASH NUM - { - $0->type = chain_type_name_lookup($2); - if ($0->type == NULL) { - erec_queue(error(&@2, "unknown type name %s", $2), - state->msgs); - YYERROR; - } - $0->hookstr = chain_hookname_lookup($4); - $0->dev = $6; - $0->priority = -$9; + $0->dev = $5; + $0->priority = $7; $0->flags |= CHAIN_F_BASECHAIN; } ; +prio_spec : NUM { $$ = $1; } + | DASH NUM { $$ = -$2; } + ; + +dev_spec : DEVICE STRING { $$ = $2; } + | /* empty */ { $$ = NULL; } + ; + policy_spec : POLICY chain_policy { if ($0->policy != -1) { -- cgit v1.2.3