@@ -152,6 +152,16 @@ makeItemUnary(int type, JsQueryParseItem* a)
152152return v;
153153}
154154
155+ static JsQueryParseItem*
156+ makeItemIs (int isType)
157+ {
158+ JsQueryParseItem *v =makeItemType (jqiIs);
159+
160+ v->isType = isType;
161+
162+ return v;
163+ }
164+
155165static JsQueryParseItem*
156166makeItemList (List *list) {
157167JsQueryParseItem*head, *end;
@@ -183,21 +193,23 @@ makeItemList(List *list) {
183193
184194%union {
185195string str;
186- Numericnumeric;
187196List*elems;/* list of JsQueryParseItem*/
188197
189198JsQueryParseItem*value;
190199}
191200
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
194206
195- %type <value> result scalar_value
196- %type <str> key
207+ %type <value> result scalar_value
208+ %type <str> key
197209
198- %type <elems> path value_list
210+ %type <elems> path value_list
199211
200- %type <value> path_elem right_expr expr array
212+ %type <value> path_elem right_expr expr array
201213
202214%left ' |'
203215%left ' &'
@@ -216,11 +228,17 @@ array:
216228;
217229
218230scalar_value :
219- NULL_P {$$ = makeItemString(NULL ); }
220- | STRING_P {$$ = makeItemString(&$1 ); }
231+ STRING_P {$$ = makeItemString(&$1 ); }
221232| IN_P {$$ = makeItemString(&$1 ); }
233+ | IS_P {$$ = makeItemString(&$1 ); }
234+ | NULL_P {$$ = makeItemString(NULL ); }
222235| TRUE_P {$$ = makeItemBool(true ); }
236+ | ARRAY_P {$$ = makeItemString(&$1 ); }
223237| FALSE_P {$$ = makeItemBool(false ); }
238+ | NUMBER_P {$$ = makeItemString(&$1 ); }
239+ | OBJECT_P {$$ = makeItemString(&$1 ); }
240+ | TEXT_P {$$ = makeItemString(&$1 ); }
241+ | BOOLEAN_P {$$ = makeItemString(&$1 ); }
224242| NUMERIC_P {$$ = makeItemNumeric(&$1 ); }
225243;
226244
@@ -241,6 +259,11 @@ right_expr:
241259| ' @' ' >' array {$$ = makeItemUnary(jqiContains,$3 ); }
242260| ' <' ' @' array {$$ = makeItemUnary(jqiContained,$3 ); }
243261| ' &' ' &' 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); }
244267;
245268
246269expr :
@@ -257,11 +280,17 @@ expr:
257280*/
258281key :
259282STRING_P {$$ =$1 ; }
283+ | IN_P {$$ =$1 ; }
284+ | IS_P {$$ =$1 ; }
285+ | NULL_P {$$ =$1 ; }
260286| TRUE_P {$$ =$1 ; }
287+ | ARRAY_P {$$ =$1 ; }
261288| FALSE_P {$$ =$1 ; }
289+ | NUMBER_P {$$ =$1 ; }
290+ | OBJECT_P {$$ =$1 ; }
291+ | TEXT_P {$$ =$1 ; }
292+ | BOOLEAN_P {$$ =$1 ; }
262293| NUMERIC_P {$$ =$1 ; }
263- | NULL_P {$$ =$1 ; }
264- | IN_P {$$ =$1 ; }
265294;
266295
267296path_elem :