|
1 | 1 | %{
|
2 |
| -#define YYPARSE_PARAM result /* need this to pass a pointer (void *) to yyparse */ |
| 2 | +/* contrib/seg/segparse.y */ |
3 | 3 |
|
4 | 4 | #include "postgres.h"
|
5 | 5 |
|
|
24 | 24 |
|
25 | 25 | extern int significant_digits(char *str); /* defined in seg.c */
|
26 | 26 |
|
27 |
| - void seg_yyerror(const char *message); |
28 |
| - int seg_yyparse(void *result); |
| 27 | + extern int seg_yyparse(SEG *result); |
| 28 | + extern void seg_yyerror(SEG *result, const char *message); |
29 | 29 |
|
30 | 30 | static float seg_atof(char *value);
|
31 | 31 |
|
|
40 | 40 | %}
|
41 | 41 |
|
42 | 42 | /* BISON Declarations */
|
| 43 | +%parse-param {SEG *result} |
43 | 44 | %expect 0
|
44 | 45 | %name-prefix="seg_yy"
|
45 | 46 |
|
|
65 | 66 |
|
66 | 67 | range:
|
67 | 68 | boundary PLUMIN deviation {
|
68 |
| - ((SEG *)result)->lower = $1.val - $3.val; |
69 |
| - ((SEG *)result)->upper = $1.val + $3.val; |
70 |
| - sprintf(strbuf, "%g", ((SEG *)result)->lower); |
71 |
| - ((SEG *)result)->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); |
72 |
| - sprintf(strbuf, "%g", ((SEG *)result)->upper); |
73 |
| - ((SEG *)result)->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); |
74 |
| - ((SEG *)result)->l_ext = '\0'; |
75 |
| - ((SEG *)result)->u_ext = '\0'; |
| 69 | + result->lower = $1.val - $3.val; |
| 70 | + result->upper = $1.val + $3.val; |
| 71 | + sprintf(strbuf, "%g", result->lower); |
| 72 | + result->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); |
| 73 | + sprintf(strbuf, "%g", result->upper); |
| 74 | + result->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); |
| 75 | + result->l_ext = '\0'; |
| 76 | + result->u_ext = '\0'; |
76 | 77 | }
|
77 | 78 | |
|
78 | 79 | boundary RANGE boundary {
|
79 |
| - ((SEG *)result)->lower = $1.val; |
80 |
| - ((SEG *)result)->upper = $3.val; |
81 |
| - if ( ((SEG *)result)->lower > ((SEG *)result)->upper ) { |
| 80 | + result->lower = $1.val; |
| 81 | + result->upper = $3.val; |
| 82 | + if ( result->lower > result->upper ) { |
82 | 83 | ereport(ERROR,
|
83 | 84 | (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
84 | 85 | errmsg("swapped boundaries: %g is greater than %g",
|
85 |
| - ((SEG *)result)->lower, ((SEG *)result)->upper))); |
| 86 | + result->lower, result->upper))); |
86 | 87 |
|
87 | 88 | YYERROR;
|
88 | 89 | }
|
89 |
| - ((SEG *)result)->l_sigd = $1.sigd; |
90 |
| - ((SEG *)result)->u_sigd = $3.sigd; |
91 |
| - ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); |
92 |
| - ((SEG *)result)->u_ext = ( $3.ext ? $3.ext : '\0' ); |
| 90 | + result->l_sigd = $1.sigd; |
| 91 | + result->u_sigd = $3.sigd; |
| 92 | + result->l_ext = ( $1.ext ? $1.ext : '\0' ); |
| 93 | + result->u_ext = ( $3.ext ? $3.ext : '\0' ); |
93 | 94 | }
|
94 | 95 | |
|
95 | 96 | boundary RANGE {
|
96 |
| - ((SEG *)result)->lower = $1.val; |
97 |
| - ((SEG *)result)->upper = HUGE_VAL; |
98 |
| - ((SEG *)result)->l_sigd = $1.sigd; |
99 |
| - ((SEG *)result)->u_sigd = 0; |
100 |
| - ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); |
101 |
| - ((SEG *)result)->u_ext = '-'; |
| 97 | + result->lower = $1.val; |
| 98 | + result->upper = HUGE_VAL; |
| 99 | + result->l_sigd = $1.sigd; |
| 100 | + result->u_sigd = 0; |
| 101 | + result->l_ext = ( $1.ext ? $1.ext : '\0' ); |
| 102 | + result->u_ext = '-'; |
102 | 103 | }
|
103 | 104 | |
|
104 | 105 | RANGE boundary {
|
105 |
| - ((SEG *)result)->lower = -HUGE_VAL; |
106 |
| - ((SEG *)result)->upper = $2.val; |
107 |
| - ((SEG *)result)->l_sigd = 0; |
108 |
| - ((SEG *)result)->u_sigd = $2.sigd; |
109 |
| - ((SEG *)result)->l_ext = '-'; |
110 |
| - ((SEG *)result)->u_ext = ( $2.ext ? $2.ext : '\0' ); |
| 106 | + result->lower = -HUGE_VAL; |
| 107 | + result->upper = $2.val; |
| 108 | + result->l_sigd = 0; |
| 109 | + result->u_sigd = $2.sigd; |
| 110 | + result->l_ext = '-'; |
| 111 | + result->u_ext = ( $2.ext ? $2.ext : '\0' ); |
111 | 112 | }
|
112 | 113 | |
|
113 | 114 | boundary {
|
114 |
| - ((SEG *)result)->lower = ((SEG *)result)->upper = $1.val; |
115 |
| - ((SEG *)result)->l_sigd = ((SEG *)result)->u_sigd = $1.sigd; |
116 |
| - ((SEG *)result)->l_ext = ((SEG *)result)->u_ext = ( $1.ext ? $1.ext : '\0' ); |
| 115 | + result->lower = result->upper = $1.val; |
| 116 | + result->l_sigd = result->u_sigd = $1.sigd; |
| 117 | + result->l_ext = result->u_ext = ( $1.ext ? $1.ext : '\0' ); |
117 | 118 | }
|
118 | 119 | ;
|
119 | 120 |
|
|
0 commit comments