aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/cube/cube.c8
-rw-r--r--contrib/cube/cubeparse.y18
-rw-r--r--contrib/cube/cubescan.l2
-rw-r--r--contrib/seg/seg.c6
-rw-r--r--contrib/seg/segparse.y69
-rw-r--r--contrib/seg/segscan.l2
6 files changed, 53 insertions, 52 deletions
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 4a207ccb988..2d3f5bc8e33 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -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();
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index 9e7c87e9036..eda5ba9604d 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -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);
}
;
diff --git a/contrib/cube/cubescan.l b/contrib/cube/cubescan.l
index eb71b11adff..3c3df88b92a 100644
--- a/contrib/cube/cubescan.l
+++ b/contrib/cube/cubescan.l
@@ -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)
{
diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c
index 0a787ff9462..41a18077404 100644
--- a/contrib/seg/seg.c
+++ b/contrib/seg/seg.c
@@ -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();
diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y
index 1f5f0affe8b..538d06e5339 100644
--- a/contrib/seg/segparse.y
+++ b/contrib/seg/segparse.y
@@ -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"
@@ -65,55 +66,55 @@
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' );
}
;
diff --git a/contrib/seg/segscan.l b/contrib/seg/segscan.l
index c2b5ca87896..cadac5e9f2b 100644
--- a/contrib/seg/segscan.l
+++ b/contrib/seg/segscan.l
@@ -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)
{