Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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; }