On 5/15/08, Marko Kreen <[EMAIL PROTECTED]> wrote:
> On 5/15/08, Tom Lane <[EMAIL PROTECTED]> wrote:
>  > "Marko Kreen" <[EMAIL PROTECTED]> writes:
>  >  > Hmm.. Now that I think about it, in my effort to remove malloc() calls
>  >  > in both scanner and parser I told bison to use alloca().  Is it 
> portability
>  >  > concern?
>  >
>  > Yes.
>
>
> How about following patch?  I have bison 2.3 and it seems not to do
>  global allocation, so it should be fine.  There may be early exit
>  with elog(ERRROR) inside so I'd like to avoid malloc() itself.
>
>  Is there some older bison that keeps allocations around?
>  They would need bit more work...
>
>  --- src/parser.y        14 May 2008 12:25:00 -0000      1.7
>  +++ src/parser.y        15 May 2008 07:34:53 -0000
>  @@ -24,7 +24,9 @@
>   void plproxy_yy_scan_bytes(const char *bytes, int len);
>
>   /* avoid permanent allocations */
>  -#define YYSTACK_USE_ALLOCA 1
>  +#define YYMALLOC palloc
>  +#define YYFREE pfree
>  +
>   /* remove unused code */
>   #define YY_LOCATION_PRINT(File, Loc) (0)
>   #define YY_(x) (x)
>
>  I will roll new full patch when more comments have appeared.

Checked bison 1.875, and it does not use YYMALLOC/YYFREE.
But luckily its allocation pattern seems sane, so following should work:

--- src/parser.y        14 May 2008 12:25:00 -0000      1.7
+++ src/parser.y        15 May 2008 08:18:14 -0000
@@ -24,7 +24,9 @@
 void plproxy_yy_scan_bytes(const char *bytes, int len);

 /* avoid permanent allocations */
-#define YYSTACK_USE_ALLOCA 1
+#define malloc palloc
+#define free pfree
+
 /* remove unused code */
 #define YY_LOCATION_PRINT(File, Loc) (0)
 #define YY_(x) (x)

-- 
marko

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to