@@ -39,17 +39,19 @@ fprintf_to_ereport(const char *fmt, const char *msg)
39
39
ereport (ERROR, (errmsg_internal (" %s" , msg)));
40
40
}
41
41
42
-
43
- static int yyline = 1 ; /* line number for error reporting */
44
-
45
42
%}
46
43
44
+ %option reentrant
45
+ %option bison-bridge
47
46
%option 8bit
48
47
%option never-interactive
49
48
%option nodefault
50
49
%option noinput
51
50
%option nounput
52
51
%option noyywrap
52
+ %option noyyalloc
53
+ %option noyyrealloc
54
+ %option noyyfree
53
55
%option warn
54
56
%option prefix="boot_yy"
55
57
@@ -58,31 +60,31 @@ id [-A-Za-z0-9_]+
58
60
sid \' ([^ ' ]| \'\' )* \'
59
61
60
62
/*
61
- * Keyword tokens return the keyword text (as a constant string) in boot_yylval. kw,
63
+ * Keyword tokens return the keyword text (as a constant string) in yylval-> kw,
62
64
* just in case that's needed because we want to treat the keyword as an
63
65
* unreserved identifier. Note that _null_ is not treated as a keyword
64
66
* for this purpose; it's the one "reserved word" in the bootstrap syntax.
65
67
*
66
68
* Notice that all the keywords are case-sensitive, and for historical
67
69
* reasons some must be upper case.
68
70
*
69
- * String tokens return a palloc'd string in boot_yylval. str.
71
+ * String tokens return a palloc'd string in yylval-> str.
70
72
*/
71
73
72
74
%%
73
75
74
- open { boot_yylval. kw = " open" ; return OPEN; }
76
+ open { yylval-> kw = " open" ; return OPEN; }
75
77
76
- close { boot_yylval. kw = " close" ; return XCLOSE; }
78
+ close { yylval-> kw = " close" ; return XCLOSE; }
77
79
78
- create { boot_yylval. kw = " create" ; return XCREATE; }
80
+ create { yylval-> kw = " create" ; return XCREATE; }
79
81
80
- OID { boot_yylval. kw = " OID" ; return OBJ_ID; }
81
- bootstrap { boot_yylval. kw = " bootstrap" ; return XBOOTSTRAP; }
82
- shared_relation { boot_yylval. kw = " shared_relation" ; return XSHARED_RELATION; }
83
- rowtype_oid { boot_yylval. kw = " rowtype_oid" ; return XROWTYPE_OID; }
82
+ OID { yylval-> kw = " OID" ; return OBJ_ID; }
83
+ bootstrap { yylval-> kw = " bootstrap" ; return XBOOTSTRAP; }
84
+ shared_relation { yylval-> kw = " shared_relation" ; return XSHARED_RELATION; }
85
+ rowtype_oid { yylval-> kw = " rowtype_oid" ; return XROWTYPE_OID; }
84
86
85
- insert { boot_yylval. kw = " insert" ; return INSERT_TUPLE; }
87
+ insert { yylval-> kw = " insert" ; return INSERT_TUPLE; }
86
88
87
89
_null_ { return NULLVAL; }
88
90
@@ -91,43 +93,72 @@ _null_ { return NULLVAL; }
91
93
" (" { return LPAREN; }
92
94
" )" { return RPAREN; }
93
95
94
- [\n ] { yyline ++; }
96
+ [\n ] { yylineno ++; }
95
97
[\r\t ] ;
96
98
97
99
^ \# [^ \n ]* ; /* drop everything after "#" for comments */
98
100
99
- declare { boot_yylval. kw = " declare" ; return XDECLARE; }
100
- build { boot_yylval. kw = " build" ; return XBUILD; }
101
- indices { boot_yylval. kw = " indices" ; return INDICES; }
102
- unique { boot_yylval. kw = " unique" ; return UNIQUE; }
103
- index { boot_yylval. kw = " index" ; return INDEX; }
104
- on { boot_yylval. kw = " on" ; return ON; }
105
- using { boot_yylval. kw = " using" ; return USING; }
106
- toast { boot_yylval. kw = " toast" ; return XTOAST; }
107
- FORCE { boot_yylval. kw = " FORCE" ; return XFORCE; }
108
- NOT { boot_yylval. kw = " NOT" ; return XNOT; }
109
- NULL { boot_yylval. kw = " NULL" ; return XNULL; }
101
+ declare { yylval-> kw = " declare" ; return XDECLARE; }
102
+ build { yylval-> kw = " build" ; return XBUILD; }
103
+ indices { yylval-> kw = " indices" ; return INDICES; }
104
+ unique { yylval-> kw = " unique" ; return UNIQUE; }
105
+ index { yylval-> kw = " index" ; return INDEX; }
106
+ on { yylval-> kw = " on" ; return ON; }
107
+ using { yylval-> kw = " using" ; return USING; }
108
+ toast { yylval-> kw = " toast" ; return XTOAST; }
109
+ FORCE { yylval-> kw = " FORCE" ; return XFORCE; }
110
+ NOT { yylval-> kw = " NOT" ; return XNOT; }
111
+ NULL { yylval-> kw = " NULL" ; return XNULL; }
110
112
111
113
{id } {
112
- boot_yylval. str = pstrdup (yytext);
114
+ yylval-> str = pstrdup (yytext);
113
115
return ID;
114
116
}
115
117
{sid } {
116
118
/* strip quotes and escapes */
117
- boot_yylval. str = DeescapeQuotedString (yytext);
119
+ yylval-> str = DeescapeQuotedString (yytext);
118
120
return ID;
119
121
}
120
122
121
123
. {
122
- elog (ERROR, " syntax error at line %d: unexpected character \" %s\" " , yyline , yytext);
124
+ elog (ERROR, " syntax error at line %d: unexpected character \" %s\" " , yylineno , yytext);
123
125
}
124
126
125
127
%%
126
128
127
129
/* LCOV_EXCL_STOP */
128
130
129
131
void
130
- boot_yyerror (const char *message)
132
+ boot_yyerror (yyscan_t yyscanner, const char *message)
133
+ {
134
+ struct yyguts_t * yyg = (struct yyguts_t *) yyscanner; /* needed for yylineno macro */
135
+
136
+ elog (ERROR, " %s at line %d" , message, yylineno);
137
+ }
138
+
139
+ /*
140
+ * Interface functions to make flex use palloc() instead of malloc().
141
+ * It'd be better to make these static, but flex insists otherwise.
142
+ */
143
+
144
+ void *
145
+ yyalloc (yy_size_t size, yyscan_t yyscanner)
146
+ {
147
+ return palloc (size);
148
+ }
149
+
150
+ void *
151
+ yyrealloc (void *ptr, yy_size_t size, yyscan_t yyscanner)
152
+ {
153
+ if (ptr)
154
+ return repalloc (ptr, size);
155
+ else
156
+ return palloc (size);
157
+ }
158
+
159
+ void
160
+ yyfree (void *ptr, yyscan_t yyscanner)
131
161
{
132
- elog (ERROR, " %s at line %d" , message, yyline);
162
+ if (ptr)
163
+ pfree (ptr);
133
164
}
0 commit comments