]> granicus.if.org Git - postgresql/commitdiff
Fix ecpg parsing of sizeof().
authorMichael Meskes <meskes@postgresql.org>
Mon, 25 Nov 2013 14:11:39 +0000 (15:11 +0100)
committerMichael Meskes <meskes@postgresql.org>
Mon, 25 Nov 2013 14:11:39 +0000 (15:11 +0100)
The last fix used the wrong non-terminal to define valid types.

src/interfaces/ecpg/preproc/ecpg.trailer

index 6ef9f1ab9d80c7996a33bed1f1cf5659fd013086..da378ebd27ed94e2d71017ccd60842836f181ce1 100644 (file)
@@ -1856,20 +1856,20 @@ DeallocateStmt: DEALLOCATE prepared_name                { $$ = $2; }
                 | DEALLOCATE PREPARE ALL                { $$ = mm_strdup("all"); }
                 ;
 
-Iresult:        Iconst                 { $$ = $1; }
-                | '(' Iresult ')'       { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); }
-                | Iresult '+' Iresult   { $$ = cat_str(3, $1, mm_strdup("+"), $3); }
-                | Iresult '-' Iresult   { $$ = cat_str(3, $1, mm_strdup("-"), $3); }
-                | Iresult '*' Iresult   { $$ = cat_str(3, $1, mm_strdup("*"), $3); }
-                | Iresult '/' Iresult   { $$ = cat_str(3, $1, mm_strdup("/"), $3); }
-                | Iresult '%' Iresult   { $$ = cat_str(3, $1, mm_strdup("%"), $3); }
-                | ecpg_sconst          { $$ = $1; }
-                | ColId                 { $$ = $1; }
-               | ColId '(' ColId ')'   { if (pg_strcasecmp($1, "sizeof") != 0)
-                                               mmerror(PARSE_ERROR, ET_ERROR, "operator not allowed in variable definition");
-                                        else
-                                               $$ = cat_str(4,$1, mm_strdup("("), $3, mm_strdup(")"));
-                                       }
+Iresult:        Iconst                         { $$ = $1; }
+                | '(' Iresult ')'              { $$ = cat_str(3, mm_strdup("("), $2, mm_strdup(")")); }
+                | Iresult '+' Iresult          { $$ = cat_str(3, $1, mm_strdup("+"), $3); }
+                | Iresult '-' Iresult          { $$ = cat_str(3, $1, mm_strdup("-"), $3); }
+                | Iresult '*' Iresult          { $$ = cat_str(3, $1, mm_strdup("*"), $3); }
+                | Iresult '/' Iresult          { $$ = cat_str(3, $1, mm_strdup("/"), $3); }
+                | Iresult '%' Iresult          { $$ = cat_str(3, $1, mm_strdup("%"), $3); }
+                | ecpg_sconst                  { $$ = $1; }
+                | ColId                                { $$ = $1; }
+               | ColId '(' var_type ')'        { if (pg_strcasecmp($1, "sizeof") != 0)
+                                                       mmerror(PARSE_ERROR, ET_ERROR, "operator not allowed in variable definition");
+                                                 else
+                                                       $$ = cat_str(4, $1, mm_strdup("("), $3.type_str, mm_strdup(")"));
+                                               }
                 ;
 
 execute_rest: /* EMPTY */      { $$ = EMPTY; }