]> granicus.if.org Git - postgresql/commitdiff
Fix contrib/cube and contrib/seg to build with bison 3.0.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 Jul 2013 14:42:47 +0000 (10:42 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 29 Jul 2013 14:42:47 +0000 (10:42 -0400)
These modules used the YYPARSE_PARAM macro, which has been deprecated
by the bison folk since 1.875, and which they finally removed in 3.0.
Adjust the code to use the replacement facility, %parse-param, which
is a much better solution anyway since it allows specification of the
type of the extra parser parameter.  We can thus get rid of a lot of
unsightly casting.

Back-patch to all active branches, since somebody might try to build
a back branch with up-to-date tools.

contrib/cube/cube.c
contrib/cube/cubeparse.y
contrib/cube/cubescan.l
contrib/seg/seg.c
contrib/seg/segparse.y
contrib/seg/segscan.l

index 4a207ccb9880a307d69e6d43ca38beae21661751..2d3f5bc8e338c7cebd6fd640e91b116256c347d6 100644 (file)
@@ -27,8 +27,8 @@ PG_MODULE_MAGIC;
 #define ARRPTR(x)  ( (double *) ARR_DATA_PTR(x) )
 #define ARRNELEMS(x)  ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
 
-extern int     cube_yyparse();
-extern void cube_yyerror(const char *message);
+extern int     cube_yyparse(NDBOX **result);
+extern void cube_yyerror(NDBOX **result, const char *message);
 extern void cube_scanner_init(const char *str);
 extern void cube_scanner_finish(void);
 
@@ -159,12 +159,12 @@ Datum
 cube_in(PG_FUNCTION_ARGS)
 {
        char       *str = PG_GETARG_CSTRING(0);
-       void       *result;
+       NDBOX      *result;
 
        cube_scanner_init(str);
 
        if (cube_yyparse(&result) != 0)
-               cube_yyerror("bogus input");
+               cube_yyerror(&result, "bogus input");
 
        cube_scanner_finish();
 
index 9e7c87e90363d48c0101ebb3bd2c4fe9e5f52c4b..eda5ba9604d01504cc240ea96572456d717ead1a 100644 (file)
@@ -1,10 +1,9 @@
 %{
+/* contrib/cube/cubeparse.y */
+
 /* NdBox = [(lowerleft),(upperright)] */
 /* [(xLL(1)...xLL(N)),(xUR(1)...xUR(n))] */
 
-/* contrib/cube/cubeparse.y */
-
-#define YYPARSE_PARAM result  /* need this to pass a pointer (void *) to yyparse */
 #define YYSTYPE char *
 #define YYDEBUG 1
 
@@ -28,8 +27,8 @@ extern int cube_yylex(void);
 static char *scanbuf;
 static int     scanbuflen;
 
-void cube_yyerror(const char *message);
-int cube_yyparse(void *result);
+extern int     cube_yyparse(NDBOX **result);
+extern void cube_yyerror(NDBOX **result, const char *message);
 
 static int delim_count(char *s, char delim);
 static NDBOX * write_box(unsigned int dim, char *str1, char *str2);
@@ -38,6 +37,7 @@ static NDBOX * write_point_as_box(char *s, int dim);
 %}
 
 /* BISON Declarations */
+%parse-param {NDBOX **result}
 %expect 0
 %name-prefix="cube_yy"
 
@@ -70,7 +70,7 @@ box:
               YYABORT;
             }
 
-           *((void **)result) = write_box( dim, $2, $4 );
+           *result = write_box( dim, $2, $4 );
 
           }
       |
@@ -96,7 +96,7 @@ box:
               YYABORT;
             }
 
-           *((void **)result) = write_box( dim, $1, $3 );
+           *result = write_box( dim, $1, $3 );
           }
       |
 
@@ -113,7 +113,7 @@ box:
               YYABORT;
             }
 
-           *((void **)result) = write_point_as_box($1, dim);
+           *result = write_point_as_box($1, dim);
           }
 
       |
@@ -130,7 +130,7 @@ box:
                                  CUBE_MAX_DIM)));
               YYABORT;
             }
-           *((void **)result) = write_point_as_box($1, dim);
+           *result = write_point_as_box($1, dim);
           }
       ;
 
index eb71b11adffd64bfe52bc5c3a4b3acb4ea5fcd2a..3c3df88b92a4bb8ebcbe5b6c38411b6c1cd96952 100644 (file)
@@ -54,7 +54,7 @@ float        ({integer}|{real})([eE]{integer})?
 %%
 
 void
-yyerror(const char *message)
+yyerror(NDBOX **result, const char *message)
 {
        if (*yytext == YY_END_OF_BUFFER_CHAR)
        {
index 0a787ff94620241e4596e30c393ab1b142f34f07..41a18077404144a6a546df423ce6fc0180add33f 100644 (file)
@@ -24,8 +24,8 @@
 
 PG_MODULE_MAGIC;
 
-extern int     seg_yyparse();
-extern void seg_yyerror(const char *message);
+extern int     seg_yyparse(SEG *result);
+extern void seg_yyerror(SEG *result, const char *message);
 extern void seg_scanner_init(const char *str);
 extern void seg_scanner_finish(void);
 
@@ -127,7 +127,7 @@ seg_in(PG_FUNCTION_ARGS)
        seg_scanner_init(str);
 
        if (seg_yyparse(result) != 0)
-               seg_yyerror("bogus input");
+               seg_yyerror(result, "bogus input");
 
        seg_scanner_finish();
 
index 1f5f0affe8b35fb6b2238016fdafa6a07dd19453..538d06e5339b7b57c038c283c2c83cd292627749 100644 (file)
@@ -1,5 +1,5 @@
 %{
-#define YYPARSE_PARAM result  /* need this to pass a pointer (void *) to yyparse */
+/* contrib/seg/segparse.y */
 
 #include "postgres.h"
 
@@ -24,8 +24,8 @@
 
   extern int significant_digits(char *str);            /* defined in seg.c */
 
-  void seg_yyerror(const char *message);
-  int seg_yyparse(void *result);
+  extern int   seg_yyparse(SEG *result);
+  extern void seg_yyerror(SEG *result, const char *message);
 
   static float seg_atof(char *value);
 
@@ -40,6 +40,7 @@
 %}
 
 /* BISON Declarations */
+%parse-param {SEG *result}
 %expect 0
 %name-prefix="seg_yy"
 
 
 range:
           boundary PLUMIN deviation {
-           ((SEG *)result)->lower = $1.val - $3.val;
-           ((SEG *)result)->upper = $1.val + $3.val;
-           sprintf(strbuf, "%g", ((SEG *)result)->lower);
-           ((SEG *)result)->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd));
-           sprintf(strbuf, "%g", ((SEG *)result)->upper);
-           ((SEG *)result)->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd));
-           ((SEG *)result)->l_ext = '\0';
-           ((SEG *)result)->u_ext = '\0';
+           result->lower = $1.val - $3.val;
+           result->upper = $1.val + $3.val;
+           sprintf(strbuf, "%g", result->lower);
+           result->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd));
+           sprintf(strbuf, "%g", result->upper);
+           result->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd));
+           result->l_ext = '\0';
+           result->u_ext = '\0';
           }
       |
           boundary RANGE boundary {
-           ((SEG *)result)->lower = $1.val;
-           ((SEG *)result)->upper = $3.val;
-           if ( ((SEG *)result)->lower > ((SEG *)result)->upper ) {
+           result->lower = $1.val;
+           result->upper = $3.val;
+           if ( result->lower > result->upper ) {
              ereport(ERROR,
                                  (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
                                   errmsg("swapped boundaries: %g is greater than %g",
-                                                 ((SEG *)result)->lower, ((SEG *)result)->upper)));
+                                                 result->lower, result->upper)));
 
              YYERROR;
            }
-           ((SEG *)result)->l_sigd = $1.sigd;
-           ((SEG *)result)->u_sigd = $3.sigd;
-           ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' );
-           ((SEG *)result)->u_ext = ( $3.ext ? $3.ext : '\0' );
+           result->l_sigd = $1.sigd;
+           result->u_sigd = $3.sigd;
+           result->l_ext = ( $1.ext ? $1.ext : '\0' );
+           result->u_ext = ( $3.ext ? $3.ext : '\0' );
           }
       |
           boundary RANGE {
-           ((SEG *)result)->lower = $1.val;
-           ((SEG *)result)->upper = HUGE_VAL;
-           ((SEG *)result)->l_sigd = $1.sigd;
-           ((SEG *)result)->u_sigd = 0;
-           ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' );
-           ((SEG *)result)->u_ext = '-';
+           result->lower = $1.val;
+           result->upper = HUGE_VAL;
+           result->l_sigd = $1.sigd;
+           result->u_sigd = 0;
+           result->l_ext = ( $1.ext ? $1.ext : '\0' );
+           result->u_ext = '-';
           }
       |
           RANGE boundary {
-           ((SEG *)result)->lower = -HUGE_VAL;
-           ((SEG *)result)->upper = $2.val;
-           ((SEG *)result)->l_sigd = 0;
-           ((SEG *)result)->u_sigd = $2.sigd;
-           ((SEG *)result)->l_ext = '-';
-           ((SEG *)result)->u_ext = ( $2.ext ? $2.ext : '\0' );
+           result->lower = -HUGE_VAL;
+           result->upper = $2.val;
+           result->l_sigd = 0;
+           result->u_sigd = $2.sigd;
+           result->l_ext = '-';
+           result->u_ext = ( $2.ext ? $2.ext : '\0' );
           }
       |
           boundary {
-           ((SEG *)result)->lower = ((SEG *)result)->upper = $1.val;
-           ((SEG *)result)->l_sigd = ((SEG *)result)->u_sigd = $1.sigd;
-           ((SEG *)result)->l_ext = ((SEG *)result)->u_ext = ( $1.ext ? $1.ext : '\0' );
+           result->lower = result->upper = $1.val;
+           result->l_sigd = result->u_sigd = $1.sigd;
+           result->l_ext = result->u_ext = ( $1.ext ? $1.ext : '\0' );
           }
       ;
 
index c2b5ca878962e26f4f31d131180fdcc5226a5165..cadac5e9f2bc962a5afa77a1443be7a7acc54ec6 100644 (file)
@@ -53,7 +53,7 @@ float        ({integer}|{real})([eE]{integer})?
 %%
 
 void
-yyerror(const char *message)
+yyerror(SEG *result, const char *message)
 {
        if (*yytext == YY_END_OF_BUFFER_CHAR)
        {