Get rid of redundant production in plpgsql grammar.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Nov 2014 20:31:32 +0000 (15:31 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 23 Nov 2014 20:31:36 +0000 (15:31 -0500)
There may once have been a reason for the intermediate proc_stmts
production in the plpgsql grammar, but it isn't doing anything useful
anymore, so let's collapse it into proc_sect.  Saves some code and
probably a small number of nanoseconds per statement list.

In passing, correctly alphabetize keyword lists to match pl_scanner.c;
note that for "rowtype" vs "row_count", pl_scanner.c must sort on the
basis of the lower-case spelling.

Noted while fooling with a patch to de-reserve more plpgsql keywords.

src/pl/plpgsql/src/pl_gram.y

index 893f3a486f52366af9302cf31c4cf132977cb695..82378c7d5fa04596056092ea5f2cd92aec8974f1 100644 (file)
@@ -188,7 +188,7 @@ static      void                    check_raise_parameters(PLpgSQL_stmt_raise *stmt);
 
 %type <str>            any_identifier opt_block_label opt_label option_value
 
-%type <list>   proc_sect proc_stmts stmt_elsifs stmt_else
+%type <list>   proc_sect stmt_elsifs stmt_else
 %type <loop_body>      loop_body
 %type <stmt>   proc_stmt pl_block
 %type <stmt>   stmt_assign stmt_if stmt_loop stmt_while stmt_exit
@@ -318,8 +318,8 @@ static      void                    check_raise_parameters(PLpgSQL_stmt_raise *stmt);
 %token <keyword>       K_RETURN
 %token <keyword>       K_RETURNED_SQLSTATE
 %token <keyword>       K_REVERSE
-%token <keyword>       K_ROWTYPE
 %token <keyword>       K_ROW_COUNT
+%token <keyword>       K_ROWTYPE
 %token <keyword>       K_SCHEMA
 %token <keyword>       K_SCHEMA_NAME
 %token <keyword>       K_SCROLL
@@ -838,24 +838,14 @@ assign_operator   : '='
 
 proc_sect              :
                                        { $$ = NIL; }
-                               | proc_stmts
-                                       { $$ = $1; }
-                               ;
-
-proc_stmts             : proc_stmts proc_stmt
-                                               {
-                                                       if ($2 == NULL)
-                                                               $$ = $1;
-                                                       else
-                                                               $$ = lappend($1, $2);
-                                               }
-                               | proc_stmt
-                                               {
-                                                       if ($1 == NULL)
-                                                               $$ = NIL;
-                                                       else
-                                                               $$ = list_make1($1);
-                                               }
+                               | proc_sect proc_stmt
+                                       {
+                                               /* don't bother linking null statements into list */
+                                               if ($2 == NULL)
+                                                       $$ = $1;
+                                               else
+                                                       $$ = lappend($1, $2);
+                                       }
                                ;
 
 proc_stmt              : pl_block ';'
@@ -2356,8 +2346,8 @@ unreserved_keyword        :
                                | K_PG_EXCEPTION_CONTEXT
                                | K_PG_EXCEPTION_DETAIL
                                | K_PG_EXCEPTION_HINT
-                               | K_PRIOR
                                | K_PRINT_STRICT_PARAMS
+                               | K_PRIOR
                                | K_QUERY
                                | K_RELATIVE
                                | K_RESULT_OID