@@ -152,6 +152,16 @@ makeItemUnary(int type, JsQueryParseItem* a)
152
152
return v;
153
153
}
154
154
155
+ static JsQueryParseItem*
156
+ makeItemIs (int isType)
157
+ {
158
+ JsQueryParseItem *v = makeItemType (jqiIs);
159
+
160
+ v->isType = isType;
161
+
162
+ return v;
163
+ }
164
+
155
165
static JsQueryParseItem*
156
166
makeItemList (List *list) {
157
167
JsQueryParseItem *head, *end;
@@ -183,21 +193,23 @@ makeItemList(List *list) {
183
193
184
194
%union {
185
195
string str;
186
- Numeric numeric;
187
196
List *elems; /* list of JsQueryParseItem */
188
197
189
198
JsQueryParseItem *value;
190
199
}
191
200
192
- %token <str> NULL_P STRING_P TRUE_P FALSE_P
193
- NUMERIC_P IN_P
201
+ %token <str> IN_P IS_P NULL_P TRUE_P ARRAY_P
202
+ FALSE_P NUMBER_P OBJECT_P TEXT_P
203
+ BOOLEAN_P
204
+
205
+ %token <str> STRING_P NUMERIC_P
194
206
195
- %type <value> result scalar_value
196
- %type <str> key
207
+ %type <value> result scalar_value
208
+ %type <str> key
197
209
198
- %type <elems> path value_list
210
+ %type <elems> path value_list
199
211
200
- %type <value> path_elem right_expr expr array
212
+ %type <value> path_elem right_expr expr array
201
213
202
214
%left ' |'
203
215
%left ' &'
@@ -216,11 +228,17 @@ array:
216
228
;
217
229
218
230
scalar_value :
219
- NULL_P { $$ = makeItemString(NULL ); }
220
- | STRING_P { $$ = makeItemString(&$1 ); }
231
+ STRING_P { $$ = makeItemString(&$1 ); }
221
232
| IN_P { $$ = makeItemString(&$1 ); }
233
+ | IS_P { $$ = makeItemString(&$1 ); }
234
+ | NULL_P { $$ = makeItemString(NULL ); }
222
235
| TRUE_P { $$ = makeItemBool(true ); }
236
+ | ARRAY_P { $$ = makeItemString(&$1 ); }
223
237
| FALSE_P { $$ = makeItemBool(false ); }
238
+ | NUMBER_P { $$ = makeItemString(&$1 ); }
239
+ | OBJECT_P { $$ = makeItemString(&$1 ); }
240
+ | TEXT_P { $$ = makeItemString(&$1 ); }
241
+ | BOOLEAN_P { $$ = makeItemString(&$1 ); }
224
242
| NUMERIC_P { $$ = makeItemNumeric(&$1 ); }
225
243
;
226
244
@@ -241,6 +259,11 @@ right_expr:
241
259
| ' @' ' >' array { $$ = makeItemUnary(jqiContains, $3 ); }
242
260
| ' <' ' @' array { $$ = makeItemUnary(jqiContained, $3 ); }
243
261
| ' &' ' &' array { $$ = makeItemUnary(jqiOverlap, $3 ); }
262
+ | IS_P ARRAY_P { $$ = makeItemIs(jbvArray); }
263
+ | IS_P NUMBER_P { $$ = makeItemIs(jbvNumeric); }
264
+ | IS_P OBJECT_P { $$ = makeItemIs(jbvObject); }
265
+ | IS_P TEXT_P { $$ = makeItemIs(jbvString); }
266
+ | IS_P BOOLEAN_P { $$ = makeItemIs(jbvBool); }
244
267
;
245
268
246
269
expr :
@@ -257,11 +280,17 @@ expr:
257
280
*/
258
281
key :
259
282
STRING_P { $$ = $1 ; }
283
+ | IN_P { $$ = $1 ; }
284
+ | IS_P { $$ = $1 ; }
285
+ | NULL_P { $$ = $1 ; }
260
286
| TRUE_P { $$ = $1 ; }
287
+ | ARRAY_P { $$ = $1 ; }
261
288
| FALSE_P { $$ = $1 ; }
289
+ | NUMBER_P { $$ = $1 ; }
290
+ | OBJECT_P { $$ = $1 ; }
291
+ | TEXT_P { $$ = $1 ; }
292
+ | BOOLEAN_P { $$ = $1 ; }
262
293
| NUMERIC_P { $$ = $1 ; }
263
- | NULL_P { $$ = $1 ; }
264
- | IN_P { $$ = $1 ; }
265
294
;
266
295
267
296
path_elem :
0 commit comments