]> git.draconx.ca Git - cdecl99.git/commitdiff
libcdecl: Factor out toplevel parser actions.
authorNick Bowler <nbowler@draconx.ca>
Mon, 24 Jul 2023 04:10:22 +0000 (00:10 -0400)
committerNick Bowler <nbowler@draconx.ca>
Fri, 28 Jul 2023 04:20:58 +0000 (00:20 -0400)
Using a separate rule so there is just one semantic action for the
start symbol seems to give a slight code size improvement.

src/parse.y

index ba9bf220f95513df509afca3610ccd4f8adedf92..f8c960817a31a671ba3e5bd34b462ed452ed4234 100644 (file)
@@ -256,16 +256,14 @@ static struct cdecl_declarator *nulldecl(void)
 %type <declspec>   declspecs declspecs_noid
 %type <declarator> direct_declarator declarator pointer array parens postfix
 %type <declarator> direct_declarator_ish declarator_ish parameter_type_list
-%type <decl>       declaration declarators declarator_wrap
-%type <decl>       parameter
+%type <decl>       cdecl declaration declarators declarator_wrap parameter
 
 %type <item>       english_vla
 %type <declspec>   storage_func_specs post_specs
 %type <declspec>   type_qual_spec type_qual_specs typedef_name_qual
 %type <declarator> english_declarator english_array english_function
 %type <declarator> english_parameter_list null_decl
-%type <decl>       english english_declaration
-%type <decl>       english_parameter
+%type <decl>       english english_declaration english_parameter
 
 /* Precedence declaration to avoid conflict in english_parameter; see below. */
 %right T_TYPE
@@ -273,14 +271,10 @@ static struct cdecl_declarator *nulldecl(void)
 
 %%
 
-input: english {
-       *out = $1;
-} | declaration {
-       *out = $1;
-};
+input: cdecl { *out = $1; }
+cdecl: english | declaration
 
 semi: | T_SEMICOLON
-
 declaration: declspecs declarators semi {
        $$ = $2;
        $$->specifiers = $1;