mirror of https://github.com/postgres/postgres
Fix contrib/cube and contrib/seg to build with bison 3.0.
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.
This commit is contained in:
parent
626092a2e1
commit
55cbfa5366
|
@ -26,8 +26,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);
|
||||
|
||||
|
@ -156,12 +156,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();
|
||||
|
||||
|
|
|
@ -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: O_BRACKET paren_list COMMA paren_list C_BRACKET
|
|||
YYABORT;
|
||||
}
|
||||
|
||||
*((void **)result) = write_box( dim, $2, $4 );
|
||||
*result = write_box( dim, $2, $4 );
|
||||
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ box: O_BRACKET paren_list COMMA paren_list C_BRACKET
|
|||
YYABORT;
|
||||
}
|
||||
|
||||
*((void **)result) = write_box( dim, $1, $3 );
|
||||
*result = write_box( dim, $1, $3 );
|
||||
}
|
||||
|
||||
| paren_list
|
||||
|
@ -114,7 +114,7 @@ box: O_BRACKET paren_list COMMA paren_list C_BRACKET
|
|||
YYABORT;
|
||||
}
|
||||
|
||||
*((void **)result) = write_point_as_box($1, dim);
|
||||
*result = write_point_as_box($1, dim);
|
||||
}
|
||||
|
||||
| list
|
||||
|
@ -130,7 +130,7 @@ box: O_BRACKET paren_list COMMA paren_list C_BRACKET
|
|||
CUBE_MAX_DIM)));
|
||||
YYABORT;
|
||||
}
|
||||
*((void **)result) = write_point_as_box($1, dim);
|
||||
*result = write_point_as_box($1, dim);
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ float ({integer}|{real})([eE]{integer})?
|
|||
%%
|
||||
|
||||
void __attribute__((noreturn))
|
||||
yyerror(const char *message)
|
||||
yyerror(NDBOX **result, const char *message)
|
||||
{
|
||||
if (*yytext == YY_END_OF_BUFFER_CHAR)
|
||||
{
|
||||
|
|
|
@ -23,8 +23,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);
|
||||
|
||||
|
@ -126,7 +126,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();
|
||||
|
||||
|
|
|
@ -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 seg_yylex(void);
|
|||
|
||||
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 @@ static char strbuf[25] = {
|
|||
%}
|
||||
|
||||
/* BISON Declarations */
|
||||
%parse-param {SEG *result}
|
||||
%expect 0
|
||||
%name-prefix="seg_yy"
|
||||
|
||||
|
@ -65,59 +66,59 @@ static char strbuf[25] = {
|
|||
|
||||
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' );
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ float ({integer}|{real})([eE]{integer})?
|
|||
%%
|
||||
|
||||
void __attribute__((noreturn))
|
||||
yyerror(const char *message)
|
||||
yyerror(SEG *result, const char *message)
|
||||
{
|
||||
if (*yytext == YY_END_OF_BUFFER_CHAR)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue