ferret 0.10.14 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/TODO +3 -0
- data/ext/analysis.c +5 -0
- data/ext/compound_io.c +46 -24
- data/ext/except.c +14 -0
- data/ext/except.h +29 -17
- data/ext/ferret.c +22 -1
- data/ext/ferret.h +2 -1
- data/ext/fs_store.c +9 -12
- data/ext/global.c +80 -0
- data/ext/global.h +10 -0
- data/ext/hash.c +0 -7
- data/ext/hash.h +0 -8
- data/ext/index.c +1289 -625
- data/ext/index.h +59 -14
- data/ext/q_boolean.c +12 -5
- data/ext/q_parser.c +570 -372
- data/ext/r_analysis.c +16 -16
- data/ext/r_index.c +41 -43
- data/ext/r_qparser.c +37 -36
- data/ext/r_search.c +10 -10
- data/ext/r_store.c +7 -7
- data/ext/ram_store.c +4 -3
- data/ext/search.c +3 -2
- data/ext/store.c +35 -19
- data/ext/store.h +3 -5
- data/lib/ferret/index.rb +4 -4
- data/lib/ferret_version.rb +1 -1
- data/test/threading/thread_safety_read_write_test.rb +76 -0
- data/test/threading/thread_safety_test.rb +17 -21
- data/test/unit/index/tc_index.rb +6 -2
- data/test/unit/index/tc_index_writer.rb +2 -2
- data/test/unit/query_parser/tc_query_parser.rb +20 -5
- data/test/unit/search/tc_index_searcher.rb +3 -1
- data/test/unit/search/tm_searcher.rb +3 -1
- metadata +3 -2
data/ext/index.h
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
|
15
15
|
typedef struct IndexReader IndexReader;
|
16
16
|
typedef struct MultiReader MultiReader;
|
17
|
+
typedef struct Deleter Deleter;
|
17
18
|
|
18
19
|
/****************************************************************************
|
19
20
|
*
|
@@ -130,6 +131,7 @@ extern void fi_deref(FieldInfo *fi);
|
|
130
131
|
****************************************************************************/
|
131
132
|
|
132
133
|
#define FIELD_INFOS_INIT_CAPA 4
|
134
|
+
/* carry changes over to dummy_fis in test/test_segments.c */
|
133
135
|
typedef struct FieldInfos
|
134
136
|
{
|
135
137
|
int store;
|
@@ -147,8 +149,8 @@ extern FieldInfo *fis_add_field(FieldInfos *fis, FieldInfo *fi);
|
|
147
149
|
extern FieldInfo *fis_get_field(FieldInfos *fis, const char *name);
|
148
150
|
extern int fis_get_field_num(FieldInfos *fis, const char *name);
|
149
151
|
extern FieldInfo *fis_get_or_add_field(FieldInfos *fis, const char *name);
|
150
|
-
extern void fis_write(FieldInfos *fis,
|
151
|
-
extern FieldInfos *fis_read(
|
152
|
+
extern void fis_write(FieldInfos *fis, OutStream *os);
|
153
|
+
extern FieldInfos *fis_read(InStream *is);
|
152
154
|
extern char *fis_to_s(FieldInfos *fis);
|
153
155
|
extern void fis_deref(FieldInfos *fis);
|
154
156
|
|
@@ -159,19 +161,26 @@ extern void fis_deref(FieldInfos *fis);
|
|
159
161
|
****************************************************************************/
|
160
162
|
|
161
163
|
#define SEGMENT_NAME_MAX_LENGTH 100
|
164
|
+
#define SEGMENTS_FILE_NAME "segments"
|
162
165
|
|
163
166
|
typedef struct SegmentInfo
|
164
167
|
{
|
168
|
+
int ref_cnt;
|
165
169
|
char *name;
|
166
|
-
int doc_cnt;
|
167
170
|
Store *store;
|
171
|
+
int doc_cnt;
|
172
|
+
int del_gen;
|
173
|
+
int *norm_gens;
|
174
|
+
int norm_gens_size;
|
175
|
+
bool use_compound_file;
|
168
176
|
} SegmentInfo;
|
169
177
|
|
170
178
|
extern SegmentInfo *si_new(char *name, int doc_cnt, Store *store);
|
171
|
-
extern void
|
179
|
+
extern void si_deref(SegmentInfo *si);
|
172
180
|
extern bool si_has_deletions(SegmentInfo *si);
|
173
181
|
extern bool si_uses_compound_file(SegmentInfo *si);
|
174
182
|
extern bool si_has_separate_norms(SegmentInfo *si);
|
183
|
+
extern void si_advance_norm_gen(SegmentInfo *si, int field_num);
|
175
184
|
|
176
185
|
/****************************************************************************
|
177
186
|
*
|
@@ -181,25 +190,32 @@ extern bool si_has_separate_norms(SegmentInfo *si);
|
|
181
190
|
|
182
191
|
typedef struct SegmentInfos
|
183
192
|
{
|
193
|
+
FieldInfos *fis;
|
184
194
|
f_u64 counter;
|
185
195
|
f_u64 version;
|
186
|
-
|
196
|
+
f_i64 generation;
|
197
|
+
f_i32 format;
|
187
198
|
Store *store;
|
188
199
|
SegmentInfo **segs;
|
189
200
|
int size;
|
190
201
|
int capa;
|
191
202
|
} SegmentInfos;
|
192
203
|
|
193
|
-
extern
|
204
|
+
extern char *fn_for_generation(char *buf, char *base, char *ext, f_i64 gen);
|
205
|
+
|
206
|
+
extern SegmentInfos *sis_new(FieldInfos *fis);
|
194
207
|
extern SegmentInfo *sis_new_segment(SegmentInfos *sis, int dcnt, Store *store);
|
195
208
|
extern SegmentInfo *sis_add_si(SegmentInfos *sis, SegmentInfo *si);
|
196
209
|
extern void sis_del_at(SegmentInfos *sis, int at);
|
197
210
|
extern void sis_del_from_to(SegmentInfos *sis, int from, int to);
|
198
211
|
extern void sis_clear(SegmentInfos *sis);
|
199
212
|
extern SegmentInfos *sis_read(Store *store);
|
200
|
-
extern void sis_write(SegmentInfos *sis, Store *store);
|
213
|
+
extern void sis_write(SegmentInfos *sis, Store *store, Deleter *deleter);
|
201
214
|
extern f_u64 sis_read_current_version(Store *store);
|
202
215
|
extern void sis_destroy(SegmentInfos *sis);
|
216
|
+
extern f_i64 sis_current_segment_generation(Store *store);
|
217
|
+
extern char *sis_curr_seg_file_name(char *buf, Store *store);
|
218
|
+
extern void sis_put(SegmentInfos *sis, FILE *stream);
|
203
219
|
|
204
220
|
/****************************************************************************
|
205
221
|
*
|
@@ -394,7 +410,7 @@ typedef struct SegmentTermDocEnum SegmentTermDocEnum;
|
|
394
410
|
struct SegmentTermDocEnum
|
395
411
|
{
|
396
412
|
TermDocEnum tde;
|
397
|
-
void (*seek_prox)(SegmentTermDocEnum *stde,
|
413
|
+
void (*seek_prox)(SegmentTermDocEnum *stde, off_t prx_ptr);
|
398
414
|
void (*skip_prox)(SegmentTermDocEnum *stde);
|
399
415
|
TermInfosReader *tir;
|
400
416
|
InStream *frq_in;
|
@@ -409,11 +425,11 @@ struct SegmentTermDocEnum
|
|
409
425
|
int skip_interval;
|
410
426
|
int skip_count;
|
411
427
|
int skip_doc;
|
412
|
-
int frq_ptr;
|
413
|
-
int prx_ptr;
|
414
|
-
int skip_ptr;
|
415
428
|
int prx_cnt;
|
416
429
|
int position;
|
430
|
+
off_t frq_ptr;
|
431
|
+
off_t prx_ptr;
|
432
|
+
off_t skip_ptr;
|
417
433
|
bool have_skipped : 1;
|
418
434
|
};
|
419
435
|
|
@@ -683,6 +699,31 @@ extern void fw_add_postings(FieldsWriter *fw,
|
|
683
699
|
int offset_count);
|
684
700
|
extern void fw_write_tv_index(FieldsWriter *fw);
|
685
701
|
|
702
|
+
/****************************************************************************
|
703
|
+
*
|
704
|
+
* Deleter
|
705
|
+
*
|
706
|
+
* A utility class (used by both IndexReader and IndexWriter) to keep track of
|
707
|
+
* files that need to be deleted because they are no longer referenced by the
|
708
|
+
* index.
|
709
|
+
*
|
710
|
+
****************************************************************************/
|
711
|
+
|
712
|
+
struct Deleter
|
713
|
+
{
|
714
|
+
Store *store;
|
715
|
+
SegmentInfos *sis;
|
716
|
+
HashSet *pending;
|
717
|
+
};
|
718
|
+
|
719
|
+
extern Deleter *deleter_new(SegmentInfos *sis, Store *store);
|
720
|
+
extern void deleter_destroy(Deleter *dlr);
|
721
|
+
extern void deleter_clear_pending_files(Deleter *dlr);
|
722
|
+
extern void deleter_delete_file(Deleter *dlr, char *file_name);
|
723
|
+
extern void deleter_find_deletable_files(Deleter *dlr);
|
724
|
+
extern void deleter_commit_pending_files(Deleter *dlr);
|
725
|
+
extern void deleter_delete_files(Deleter *dlr, char **files, int file_cnt);
|
726
|
+
|
686
727
|
/****************************************************************************
|
687
728
|
*
|
688
729
|
* IndexReader
|
@@ -718,9 +759,11 @@ struct IndexReader
|
|
718
759
|
uchar val);
|
719
760
|
void (*delete_doc_i)(IndexReader *ir, int doc_num);
|
720
761
|
void (*undelete_all_i)(IndexReader *ir);
|
762
|
+
void (*set_deleter_i)(IndexReader *ir, Deleter *dlr);
|
721
763
|
void (*commit_i)(IndexReader *ir);
|
722
764
|
void (*close_i)(IndexReader *ir);
|
723
765
|
int ref_cnt;
|
766
|
+
Deleter *deleter;
|
724
767
|
Store *store;
|
725
768
|
Lock *write_lock;
|
726
769
|
SegmentInfos *sis;
|
@@ -824,7 +867,7 @@ typedef struct IndexWriter IndexWriter;
|
|
824
867
|
typedef struct DocWriter
|
825
868
|
{
|
826
869
|
Store *store;
|
827
|
-
|
870
|
+
SegmentInfo *si;
|
828
871
|
FieldInfos *fis;
|
829
872
|
TermVectorsWriter *tvw;
|
830
873
|
FieldsWriter *fw;
|
@@ -843,10 +886,10 @@ typedef struct DocWriter
|
|
843
886
|
int max_buffered_docs;
|
844
887
|
} DocWriter;
|
845
888
|
|
846
|
-
extern DocWriter *dw_open(IndexWriter *is,
|
889
|
+
extern DocWriter *dw_open(IndexWriter *is, SegmentInfo *si);
|
847
890
|
extern void dw_close(DocWriter *dw);
|
848
891
|
extern void dw_add_doc(DocWriter *dw, Document *doc);
|
849
|
-
extern void dw_new_segment(DocWriter *dw,
|
892
|
+
extern void dw_new_segment(DocWriter *dw, SegmentInfo *si);
|
850
893
|
|
851
894
|
/****************************************************************************
|
852
895
|
*
|
@@ -871,9 +914,11 @@ struct IndexWriter
|
|
871
914
|
DocWriter *dw;
|
872
915
|
Similarity *similarity;
|
873
916
|
Lock *write_lock;
|
917
|
+
Deleter *deleter;
|
874
918
|
};
|
875
919
|
|
876
920
|
extern void index_create(Store *store, FieldInfos *fis);
|
921
|
+
extern bool index_is_locked(Store *store);
|
877
922
|
extern IndexWriter *iw_open(Store *store, volatile Analyzer *analyzer,
|
878
923
|
const Config *config);
|
879
924
|
extern void iw_delete_term(IndexWriter *iw, const char *field,
|
data/ext/q_boolean.c
CHANGED
@@ -1326,10 +1326,11 @@ static MatchVector *bq_get_matchv_i(Query *self, MatchVector *mv,
|
|
1326
1326
|
static Query *bq_rewrite(Query *self, IndexReader *ir)
|
1327
1327
|
{
|
1328
1328
|
int i;
|
1329
|
-
|
1329
|
+
const int clause_cnt = BQ(self)->clause_cnt;
|
1330
1330
|
bool rewritten = false;
|
1331
|
+
bool has_non_prohibited_clause = false;
|
1331
1332
|
|
1332
|
-
if (
|
1333
|
+
if (clause_cnt == 1) {
|
1333
1334
|
/* optimize 1-clause queries */
|
1334
1335
|
BooleanClause *clause = BQ(self)->clauses[0];
|
1335
1336
|
if (! clause->is_prohibited) {
|
@@ -1357,18 +1358,21 @@ static Query *bq_rewrite(Query *self, IndexReader *ir)
|
|
1357
1358
|
|
1358
1359
|
self->ref_cnt++;
|
1359
1360
|
/* replace each clause's query with its rewritten query */
|
1360
|
-
for (i = 0; i <
|
1361
|
+
for (i = 0; i < clause_cnt; i++) {
|
1361
1362
|
BooleanClause *clause = BQ(self)->clauses[i];
|
1362
1363
|
Query *rq = clause->query->rewrite(clause->query, ir);
|
1364
|
+
/* check for at least one non-prohibited clause */
|
1365
|
+
if (clause->is_prohibited == false) has_non_prohibited_clause = true;
|
1363
1366
|
if (rq != clause->query) {
|
1364
1367
|
if (!rewritten) {
|
1365
1368
|
int j;
|
1366
1369
|
Query *new_self = q_new(BooleanQuery);
|
1367
1370
|
memcpy(new_self, self, sizeof(BooleanQuery));
|
1368
|
-
BQ(new_self)->clauses = ALLOC_N(BooleanClause *,
|
1371
|
+
BQ(new_self)->clauses = ALLOC_N(BooleanClause *,
|
1372
|
+
BQ(self)->clause_capa);
|
1369
1373
|
memcpy(BQ(new_self)->clauses, BQ(self)->clauses,
|
1370
1374
|
BQ(self)->clause_capa * sizeof(BooleanClause *));
|
1371
|
-
for (j = 0; j <
|
1375
|
+
for (j = 0; j < clause_cnt; j++) {
|
1372
1376
|
REF(BQ(self)->clauses[j]);
|
1373
1377
|
}
|
1374
1378
|
self->ref_cnt--;
|
@@ -1382,6 +1386,9 @@ static Query *bq_rewrite(Query *self, IndexReader *ir)
|
|
1382
1386
|
DEREF(rq);
|
1383
1387
|
}
|
1384
1388
|
}
|
1389
|
+
if (clause_cnt > 0 && !has_non_prohibited_clause) {
|
1390
|
+
bq_add_query_nr(self, maq_new(), BC_MUST);
|
1391
|
+
}
|
1385
1392
|
|
1386
1393
|
return self;
|
1387
1394
|
}
|
data/ext/q_parser.c
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
/* A Bison parser, made by GNU Bison 2.
|
1
|
+
/* A Bison parser, made by GNU Bison 2.3. */
|
2
2
|
|
3
|
-
/* Skeleton
|
4
|
-
|
3
|
+
/* Skeleton implementation for Bison's Yacc-like parsers in C
|
4
|
+
|
5
|
+
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
6
|
+
Free Software Foundation, Inc.
|
5
7
|
|
6
8
|
This program is free software; you can redistribute it and/or modify
|
7
9
|
it under the terms of the GNU General Public License as published by
|
@@ -18,13 +20,21 @@
|
|
18
20
|
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
19
21
|
Boston, MA 02110-1301, USA. */
|
20
22
|
|
21
|
-
/* As a special exception,
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
/* As a special exception, you may create a larger work that contains
|
24
|
+
part or all of the Bison parser skeleton and distribute that work
|
25
|
+
under terms of your choice, so long as that work isn't itself a
|
26
|
+
parser generator using the skeleton or a modified version thereof
|
27
|
+
as a parser skeleton. Alternatively, if you modify or redistribute
|
28
|
+
the parser skeleton itself, you may (at your option) remove this
|
29
|
+
special exception, which will cause the skeleton and the resulting
|
30
|
+
Bison output files to be licensed under the GNU General Public
|
31
|
+
License without this special exception.
|
32
|
+
|
33
|
+
This special exception was added by the Free Software Foundation in
|
34
|
+
version 2.2 of Bison. */
|
25
35
|
|
26
|
-
/*
|
27
|
-
|
36
|
+
/* C LALR(1) parser skeleton written by Richard Stallman, by
|
37
|
+
simplifying the original so-called "semantic" parser. */
|
28
38
|
|
29
39
|
/* All symbols defined below should begin with yy or YY, to avoid
|
30
40
|
infringing on user name space. This should be done even for local
|
@@ -37,7 +47,7 @@
|
|
37
47
|
#define YYBISON 1
|
38
48
|
|
39
49
|
/* Bison version. */
|
40
|
-
#define YYBISON_VERSION "2.
|
50
|
+
#define YYBISON_VERSION "2.3"
|
41
51
|
|
42
52
|
/* Skeleton name. */
|
43
53
|
#define YYSKELETON_NAME "yacc.c"
|
@@ -125,18 +135,20 @@ int qp_default_fuzzy_pre_len = 0;
|
|
125
135
|
# define YYTOKEN_TABLE 0
|
126
136
|
#endif
|
127
137
|
|
128
|
-
#if ! defined
|
138
|
+
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
139
|
+
typedef union YYSTYPE
|
129
140
|
#line 26 "src/q_parser.y"
|
130
|
-
|
141
|
+
{
|
131
142
|
Query *query;
|
132
143
|
BooleanClause *bcls;
|
133
144
|
BCArray *bclss;
|
134
145
|
HashSet *hashset;
|
135
146
|
Phrase *phrase;
|
136
147
|
char *str;
|
137
|
-
}
|
138
|
-
/* Line
|
139
|
-
#line
|
148
|
+
}
|
149
|
+
/* Line 193 of yacc.c. */
|
150
|
+
#line 151 "y.tab.c"
|
151
|
+
YYSTYPE;
|
140
152
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
141
153
|
# define YYSTYPE_IS_DECLARED 1
|
142
154
|
# define YYSTYPE_IS_TRIVIAL 1
|
@@ -199,23 +211,56 @@ static Query *get_r_q(QParser *qp, char *field, char *from, char *to,
|
|
199
211
|
} while (0)
|
200
212
|
|
201
213
|
|
202
|
-
/* Line
|
203
|
-
#line
|
214
|
+
/* Line 216 of yacc.c. */
|
215
|
+
#line 216 "y.tab.c"
|
204
216
|
|
205
|
-
#
|
206
|
-
#
|
217
|
+
#ifdef short
|
218
|
+
# undef short
|
207
219
|
#endif
|
208
|
-
|
209
|
-
#
|
220
|
+
|
221
|
+
#ifdef YYTYPE_UINT8
|
222
|
+
typedef YYTYPE_UINT8 yytype_uint8;
|
223
|
+
#else
|
224
|
+
typedef unsigned char yytype_uint8;
|
210
225
|
#endif
|
211
|
-
|
212
|
-
#
|
213
|
-
|
226
|
+
|
227
|
+
#ifdef YYTYPE_INT8
|
228
|
+
typedef YYTYPE_INT8 yytype_int8;
|
229
|
+
#elif (defined __STDC__ || defined __C99__FUNC__ \
|
230
|
+
|| defined __cplusplus || defined _MSC_VER)
|
231
|
+
typedef signed char yytype_int8;
|
232
|
+
#else
|
233
|
+
typedef short int yytype_int8;
|
214
234
|
#endif
|
215
|
-
|
216
|
-
#
|
235
|
+
|
236
|
+
#ifdef YYTYPE_UINT16
|
237
|
+
typedef YYTYPE_UINT16 yytype_uint16;
|
238
|
+
#else
|
239
|
+
typedef unsigned short int yytype_uint16;
|
217
240
|
#endif
|
218
241
|
|
242
|
+
#ifdef YYTYPE_INT16
|
243
|
+
typedef YYTYPE_INT16 yytype_int16;
|
244
|
+
#else
|
245
|
+
typedef short int yytype_int16;
|
246
|
+
#endif
|
247
|
+
|
248
|
+
#ifndef YYSIZE_T
|
249
|
+
# ifdef __SIZE_TYPE__
|
250
|
+
# define YYSIZE_T __SIZE_TYPE__
|
251
|
+
# elif defined size_t
|
252
|
+
# define YYSIZE_T size_t
|
253
|
+
# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
|
254
|
+
|| defined __cplusplus || defined _MSC_VER)
|
255
|
+
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
|
256
|
+
# define YYSIZE_T size_t
|
257
|
+
# else
|
258
|
+
# define YYSIZE_T unsigned int
|
259
|
+
# endif
|
260
|
+
#endif
|
261
|
+
|
262
|
+
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
|
263
|
+
|
219
264
|
#ifndef YY_
|
220
265
|
# if YYENABLE_NLS
|
221
266
|
# if ENABLE_NLS
|
@@ -228,7 +273,32 @@ static Query *get_r_q(QParser *qp, char *field, char *from, char *to,
|
|
228
273
|
# endif
|
229
274
|
#endif
|
230
275
|
|
231
|
-
|
276
|
+
/* Suppress unused-variable warnings by "using" E. */
|
277
|
+
#if ! defined lint || defined __GNUC__
|
278
|
+
# define YYUSE(e) ((void) (e))
|
279
|
+
#else
|
280
|
+
# define YYUSE(e) /* empty */
|
281
|
+
#endif
|
282
|
+
|
283
|
+
/* Identity function, used to suppress warnings about constant conditions. */
|
284
|
+
#ifndef lint
|
285
|
+
# define YYID(n) (n)
|
286
|
+
#else
|
287
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
288
|
+
|| defined __cplusplus || defined _MSC_VER)
|
289
|
+
static int
|
290
|
+
YYID (int i)
|
291
|
+
#else
|
292
|
+
static int
|
293
|
+
YYID (i)
|
294
|
+
int i;
|
295
|
+
#endif
|
296
|
+
{
|
297
|
+
return i;
|
298
|
+
}
|
299
|
+
#endif
|
300
|
+
|
301
|
+
#if ! defined yyoverflow || YYERROR_VERBOSE
|
232
302
|
|
233
303
|
/* The parser invokes alloca or malloc; define the necessary symbols. */
|
234
304
|
|
@@ -236,64 +306,76 @@ static Query *get_r_q(QParser *qp, char *field, char *from, char *to,
|
|
236
306
|
# if YYSTACK_USE_ALLOCA
|
237
307
|
# ifdef __GNUC__
|
238
308
|
# define YYSTACK_ALLOC __builtin_alloca
|
309
|
+
# elif defined __BUILTIN_VA_ARG_INCR
|
310
|
+
# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
|
311
|
+
# elif defined _AIX
|
312
|
+
# define YYSTACK_ALLOC __alloca
|
313
|
+
# elif defined _MSC_VER
|
314
|
+
# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
|
315
|
+
# define alloca _alloca
|
239
316
|
# else
|
240
317
|
# define YYSTACK_ALLOC alloca
|
241
|
-
# if defined (__STDC__
|
318
|
+
# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|
319
|
+
|| defined __cplusplus || defined _MSC_VER)
|
242
320
|
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
|
243
|
-
#
|
321
|
+
# ifndef _STDLIB_H
|
322
|
+
# define _STDLIB_H 1
|
323
|
+
# endif
|
244
324
|
# endif
|
245
325
|
# endif
|
246
326
|
# endif
|
247
327
|
# endif
|
248
328
|
|
249
329
|
# ifdef YYSTACK_ALLOC
|
250
|
-
/* Pacify GCC's `empty if-body' warning.
|
251
|
-
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
|
330
|
+
/* Pacify GCC's `empty if-body' warning. */
|
331
|
+
# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
|
252
332
|
# ifndef YYSTACK_ALLOC_MAXIMUM
|
253
333
|
/* The OS might guarantee only one guard page at the bottom of the stack,
|
254
334
|
and a page size can be as small as 4096 bytes. So we cannot safely
|
255
335
|
invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
|
256
336
|
to allow for a few compiler-allocated temporary stack slots. */
|
257
|
-
# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa
|
337
|
+
# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
|
258
338
|
# endif
|
259
339
|
# else
|
260
340
|
# define YYSTACK_ALLOC YYMALLOC
|
261
341
|
# define YYSTACK_FREE YYFREE
|
262
342
|
# ifndef YYSTACK_ALLOC_MAXIMUM
|
263
|
-
# define YYSTACK_ALLOC_MAXIMUM
|
343
|
+
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
|
264
344
|
# endif
|
265
|
-
#
|
266
|
-
|
345
|
+
# if (defined __cplusplus && ! defined _STDLIB_H \
|
346
|
+
&& ! ((defined YYMALLOC || defined malloc) \
|
347
|
+
&& (defined YYFREE || defined free)))
|
348
|
+
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
|
349
|
+
# ifndef _STDLIB_H
|
350
|
+
# define _STDLIB_H 1
|
351
|
+
# endif
|
267
352
|
# endif
|
268
353
|
# ifndef YYMALLOC
|
269
354
|
# define YYMALLOC malloc
|
270
|
-
# if
|
271
|
-
|
355
|
+
# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|
356
|
+
|| defined __cplusplus || defined _MSC_VER)
|
272
357
|
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
|
273
358
|
# endif
|
274
359
|
# endif
|
275
360
|
# ifndef YYFREE
|
276
361
|
# define YYFREE free
|
277
|
-
# if
|
278
|
-
|
362
|
+
# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
|
363
|
+
|| defined __cplusplus || defined _MSC_VER)
|
279
364
|
void free (void *); /* INFRINGES ON USER NAME SPACE */
|
280
365
|
# endif
|
281
366
|
# endif
|
282
|
-
# ifdef __cplusplus
|
283
|
-
}
|
284
|
-
# endif
|
285
367
|
# endif
|
286
|
-
#endif /* ! defined
|
368
|
+
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
|
287
369
|
|
288
370
|
|
289
|
-
#if (! defined
|
290
|
-
&& (! defined
|
291
|
-
|| (defined
|
371
|
+
#if (! defined yyoverflow \
|
372
|
+
&& (! defined __cplusplus \
|
373
|
+
|| (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
|
292
374
|
|
293
375
|
/* A type that is properly aligned for any stack member. */
|
294
376
|
union yyalloc
|
295
377
|
{
|
296
|
-
|
378
|
+
yytype_int16 yyss;
|
297
379
|
YYSTYPE yyvs;
|
298
380
|
};
|
299
381
|
|
@@ -303,13 +385,13 @@ union yyalloc
|
|
303
385
|
/* The size of an array large to enough to hold all stacks, each with
|
304
386
|
N elements. */
|
305
387
|
# define YYSTACK_BYTES(N) \
|
306
|
-
((N) * (sizeof (
|
388
|
+
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
|
307
389
|
+ YYSTACK_GAP_MAXIMUM)
|
308
390
|
|
309
391
|
/* Copy COUNT objects from FROM to TO. The source and destination do
|
310
392
|
not overlap. */
|
311
393
|
# ifndef YYCOPY
|
312
|
-
# if defined
|
394
|
+
# if defined __GNUC__ && 1 < __GNUC__
|
313
395
|
# define YYCOPY(To, From, Count) \
|
314
396
|
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
|
315
397
|
# else
|
@@ -320,7 +402,7 @@ union yyalloc
|
|
320
402
|
for (yyi = 0; yyi < (Count); yyi++) \
|
321
403
|
(To)[yyi] = (From)[yyi]; \
|
322
404
|
} \
|
323
|
-
while (0)
|
405
|
+
while (YYID (0))
|
324
406
|
# endif
|
325
407
|
# endif
|
326
408
|
|
@@ -338,28 +420,22 @@ union yyalloc
|
|
338
420
|
yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
|
339
421
|
yyptr += yynewbytes / sizeof (*yyptr); \
|
340
422
|
} \
|
341
|
-
while (0)
|
423
|
+
while (YYID (0))
|
342
424
|
|
343
425
|
#endif
|
344
426
|
|
345
|
-
|
346
|
-
typedef signed char yysigned_char;
|
347
|
-
#else
|
348
|
-
typedef short int yysigned_char;
|
349
|
-
#endif
|
350
|
-
|
351
|
-
/* YYFINAL -- State number of the termination state. */
|
427
|
+
/* YYFINAL -- State number of the termination state. */
|
352
428
|
#define YYFINAL 39
|
353
429
|
/* YYLAST -- Last index in YYTABLE. */
|
354
430
|
#define YYLAST 126
|
355
431
|
|
356
|
-
/* YYNTOKENS -- Number of terminals.
|
432
|
+
/* YYNTOKENS -- Number of terminals. */
|
357
433
|
#define YYNTOKENS 26
|
358
|
-
/* YYNNTS -- Number of nonterminals.
|
434
|
+
/* YYNNTS -- Number of nonterminals. */
|
359
435
|
#define YYNNTS 16
|
360
|
-
/* YYNRULES -- Number of rules.
|
436
|
+
/* YYNRULES -- Number of rules. */
|
361
437
|
#define YYNRULES 51
|
362
|
-
/* YYNRULES -- Number of states.
|
438
|
+
/* YYNRULES -- Number of states. */
|
363
439
|
#define YYNSTATES 80
|
364
440
|
|
365
441
|
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
@@ -370,7 +446,7 @@ union yyalloc
|
|
370
446
|
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
|
371
447
|
|
372
448
|
/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
|
373
|
-
static const
|
449
|
+
static const yytype_uint8 yytranslate[] =
|
374
450
|
{
|
375
451
|
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
376
452
|
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
@@ -404,7 +480,7 @@ static const unsigned char yytranslate[] =
|
|
404
480
|
#if YYDEBUG
|
405
481
|
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
|
406
482
|
YYRHS. */
|
407
|
-
static const
|
483
|
+
static const yytype_uint8 yyprhs[] =
|
408
484
|
{
|
409
485
|
0, 0, 3, 4, 6, 8, 12, 16, 19, 22,
|
410
486
|
25, 27, 29, 33, 35, 38, 42, 44, 46, 48,
|
@@ -414,8 +490,8 @@ static const unsigned char yyprhs[] =
|
|
414
490
|
158, 162
|
415
491
|
};
|
416
492
|
|
417
|
-
/* YYRHS -- A `-1'-separated list of the rules' RHS.
|
418
|
-
static const
|
493
|
+
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
494
|
+
static const yytype_int8 yyrhs[] =
|
419
495
|
{
|
420
496
|
27, 0, -1, -1, 28, -1, 29, -1, 28, 7,
|
421
497
|
29, -1, 28, 6, 29, -1, 28, 29, -1, 9,
|
@@ -437,7 +513,7 @@ static const yysigned_char yyrhs[] =
|
|
437
513
|
};
|
438
514
|
|
439
515
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
440
|
-
static const
|
516
|
+
static const yytype_uint8 yyrline[] =
|
441
517
|
{
|
442
518
|
0, 102, 102, 103, 105, 106, 107, 108, 110, 111,
|
443
519
|
112, 114, 115, 117, 118, 119, 120, 121, 122, 123,
|
@@ -450,7 +526,7 @@ static const unsigned char yyrline[] =
|
|
450
526
|
|
451
527
|
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
|
452
528
|
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
453
|
-
First, the terminals, then, starting at YYNTOKENS, nonterminals.
|
529
|
+
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
|
454
530
|
static const char *const yytname[] =
|
455
531
|
{
|
456
532
|
"$end", "error", "$undefined", "QWRD", "WILD_STR", "LOW", "OR", "AND",
|
@@ -464,7 +540,7 @@ static const char *const yytname[] =
|
|
464
540
|
# ifdef YYPRINT
|
465
541
|
/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
|
466
542
|
token YYLEX-NUM. */
|
467
|
-
static const
|
543
|
+
static const yytype_uint16 yytoknum[] =
|
468
544
|
{
|
469
545
|
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
|
470
546
|
58, 265, 94, 40, 41, 126, 42, 124, 34, 60,
|
@@ -473,7 +549,7 @@ static const unsigned short int yytoknum[] =
|
|
473
549
|
# endif
|
474
550
|
|
475
551
|
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
476
|
-
static const
|
552
|
+
static const yytype_uint8 yyr1[] =
|
477
553
|
{
|
478
554
|
0, 26, 27, 27, 28, 28, 28, 28, 29, 29,
|
479
555
|
29, 30, 30, 31, 31, 31, 31, 31, 31, 31,
|
@@ -484,7 +560,7 @@ static const unsigned char yyr1[] =
|
|
484
560
|
};
|
485
561
|
|
486
562
|
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
487
|
-
static const
|
563
|
+
static const yytype_uint8 yyr2[] =
|
488
564
|
{
|
489
565
|
0, 2, 0, 1, 1, 3, 3, 2, 2, 2,
|
490
566
|
1, 1, 3, 1, 2, 3, 1, 1, 1, 1,
|
@@ -497,7 +573,7 @@ static const unsigned char yyr2[] =
|
|
497
573
|
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
498
574
|
STATE-NUM when YYTABLE doesn't specify something else to do. Zero
|
499
575
|
means the default is an error. */
|
500
|
-
static const
|
576
|
+
static const yytype_uint8 yydefact[] =
|
501
577
|
{
|
502
578
|
2, 20, 23, 0, 0, 0, 26, 0, 0, 0,
|
503
579
|
0, 0, 0, 3, 4, 10, 11, 13, 19, 16,
|
@@ -509,8 +585,8 @@ static const unsigned char yydefact[] =
|
|
509
585
|
39, 0, 38, 40, 41, 42, 43, 25, 28, 32
|
510
586
|
};
|
511
587
|
|
512
|
-
/* YYDEFGOTO[NTERM-NUM].
|
513
|
-
static const
|
588
|
+
/* YYDEFGOTO[NTERM-NUM]. */
|
589
|
+
static const yytype_int8 yydefgoto[] =
|
514
590
|
{
|
515
591
|
-1, 12, 13, 14, 15, 16, 17, 18, 19, 77,
|
516
592
|
28, 78, 20, 21, 32, 22
|
@@ -519,7 +595,7 @@ static const yysigned_char yydefgoto[] =
|
|
519
595
|
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
520
596
|
STATE-NUM. */
|
521
597
|
#define YYPACT_NINF -30
|
522
|
-
static const
|
598
|
+
static const yytype_int8 yypact[] =
|
523
599
|
{
|
524
600
|
83, -4, -30, 102, 102, 64, -30, 7, -2, -1,
|
525
601
|
6, 15, 31, 45, -30, -30, 29, -30, -30, -30,
|
@@ -532,7 +608,7 @@ static const yysigned_char yypact[] =
|
|
532
608
|
};
|
533
609
|
|
534
610
|
/* YYPGOTO[NTERM-NUM]. */
|
535
|
-
static const
|
611
|
+
static const yytype_int8 yypgoto[] =
|
536
612
|
{
|
537
613
|
-30, -30, 89, -13, 56, -29, -30, -30, -30, -30,
|
538
614
|
-30, -30, -30, -30, -30, -30
|
@@ -543,7 +619,7 @@ static const yysigned_char yypgoto[] =
|
|
543
619
|
number is the opposite. If zero, do what YYDEFACT says.
|
544
620
|
If YYTABLE_NINF, syntax error. */
|
545
621
|
#define YYTABLE_NINF -30
|
546
|
-
static const
|
622
|
+
static const yytype_int8 yytable[] =
|
547
623
|
{
|
548
624
|
42, 33, 35, 59, 61, 44, -29, 55, 56, 37,
|
549
625
|
29, 23, 45, -29, 42, 66, 73, 74, 38, 68,
|
@@ -560,7 +636,7 @@ static const yysigned_char yytable[] =
|
|
560
636
|
7, 8, 9, 10, 0, 0, 11
|
561
637
|
};
|
562
638
|
|
563
|
-
static const
|
639
|
+
static const yytype_int8 yycheck[] =
|
564
640
|
{
|
565
641
|
13, 3, 3, 3, 3, 10, 10, 22, 23, 3,
|
566
642
|
3, 15, 17, 17, 27, 44, 22, 23, 3, 48,
|
@@ -579,7 +655,7 @@ static const yysigned_char yycheck[] =
|
|
579
655
|
|
580
656
|
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
581
657
|
symbol of state STATE-NUM. */
|
582
|
-
static const
|
658
|
+
static const yytype_uint8 yystos[] =
|
583
659
|
{
|
584
660
|
0, 3, 4, 8, 9, 13, 16, 18, 19, 20,
|
585
661
|
21, 24, 27, 28, 29, 30, 31, 32, 33, 34,
|
@@ -616,7 +692,7 @@ do \
|
|
616
692
|
yychar = (Token); \
|
617
693
|
yylval = (Value); \
|
618
694
|
yytoken = YYTRANSLATE (yychar); \
|
619
|
-
YYPOPSTACK; \
|
695
|
+
YYPOPSTACK (1); \
|
620
696
|
goto yybackup; \
|
621
697
|
} \
|
622
698
|
else \
|
@@ -624,7 +700,7 @@ do \
|
|
624
700
|
yyerror (qp, YY_("syntax error: cannot back up")); \
|
625
701
|
YYERROR; \
|
626
702
|
} \
|
627
|
-
while (0)
|
703
|
+
while (YYID (0))
|
628
704
|
|
629
705
|
|
630
706
|
#define YYTERROR 1
|
@@ -639,7 +715,7 @@ while (0)
|
|
639
715
|
#ifndef YYLLOC_DEFAULT
|
640
716
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
641
717
|
do \
|
642
|
-
if (N)
|
718
|
+
if (YYID (N)) \
|
643
719
|
{ \
|
644
720
|
(Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
|
645
721
|
(Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
|
@@ -653,7 +729,7 @@ while (0)
|
|
653
729
|
(Current).first_column = (Current).last_column = \
|
654
730
|
YYRHSLOC (Rhs, 0).last_column; \
|
655
731
|
} \
|
656
|
-
while (0)
|
732
|
+
while (YYID (0))
|
657
733
|
#endif
|
658
734
|
|
659
735
|
|
@@ -665,8 +741,8 @@ while (0)
|
|
665
741
|
# if YYLTYPE_IS_TRIVIAL
|
666
742
|
# define YY_LOCATION_PRINT(File, Loc) \
|
667
743
|
fprintf (File, "%d.%d-%d.%d", \
|
668
|
-
|
669
|
-
|
744
|
+
(Loc).first_line, (Loc).first_column, \
|
745
|
+
(Loc).last_line, (Loc).last_column)
|
670
746
|
# else
|
671
747
|
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
|
672
748
|
# endif
|
@@ -693,36 +769,99 @@ while (0)
|
|
693
769
|
do { \
|
694
770
|
if (yydebug) \
|
695
771
|
YYFPRINTF Args; \
|
696
|
-
} while (0)
|
772
|
+
} while (YYID (0))
|
697
773
|
|
698
|
-
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
|
699
|
-
do {
|
700
|
-
if (yydebug)
|
701
|
-
{
|
702
|
-
YYFPRINTF (stderr, "%s ", Title);
|
703
|
-
|
704
|
-
|
705
|
-
YYFPRINTF (stderr, "\n");
|
706
|
-
}
|
707
|
-
} while (0)
|
774
|
+
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
|
775
|
+
do { \
|
776
|
+
if (yydebug) \
|
777
|
+
{ \
|
778
|
+
YYFPRINTF (stderr, "%s ", Title); \
|
779
|
+
yy_symbol_print (stderr, \
|
780
|
+
Type, Value, qp); \
|
781
|
+
YYFPRINTF (stderr, "\n"); \
|
782
|
+
} \
|
783
|
+
} while (YYID (0))
|
784
|
+
|
785
|
+
|
786
|
+
/*--------------------------------.
|
787
|
+
| Print this symbol on YYOUTPUT. |
|
788
|
+
`--------------------------------*/
|
789
|
+
|
790
|
+
/*ARGSUSED*/
|
791
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
792
|
+
|| defined __cplusplus || defined _MSC_VER)
|
793
|
+
static void
|
794
|
+
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, QParser *qp)
|
795
|
+
#else
|
796
|
+
static void
|
797
|
+
yy_symbol_value_print (yyoutput, yytype, yyvaluep, qp)
|
798
|
+
FILE *yyoutput;
|
799
|
+
int yytype;
|
800
|
+
YYSTYPE const * const yyvaluep;
|
801
|
+
QParser *qp;
|
802
|
+
#endif
|
803
|
+
{
|
804
|
+
if (!yyvaluep)
|
805
|
+
return;
|
806
|
+
YYUSE (qp);
|
807
|
+
# ifdef YYPRINT
|
808
|
+
if (yytype < YYNTOKENS)
|
809
|
+
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
|
810
|
+
# else
|
811
|
+
YYUSE (yyoutput);
|
812
|
+
# endif
|
813
|
+
switch (yytype)
|
814
|
+
{
|
815
|
+
default:
|
816
|
+
break;
|
817
|
+
}
|
818
|
+
}
|
819
|
+
|
820
|
+
|
821
|
+
/*--------------------------------.
|
822
|
+
| Print this symbol on YYOUTPUT. |
|
823
|
+
`--------------------------------*/
|
824
|
+
|
825
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
826
|
+
|| defined __cplusplus || defined _MSC_VER)
|
827
|
+
static void
|
828
|
+
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, QParser *qp)
|
829
|
+
#else
|
830
|
+
static void
|
831
|
+
yy_symbol_print (yyoutput, yytype, yyvaluep, qp)
|
832
|
+
FILE *yyoutput;
|
833
|
+
int yytype;
|
834
|
+
YYSTYPE const * const yyvaluep;
|
835
|
+
QParser *qp;
|
836
|
+
#endif
|
837
|
+
{
|
838
|
+
if (yytype < YYNTOKENS)
|
839
|
+
YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
|
840
|
+
else
|
841
|
+
YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
|
842
|
+
|
843
|
+
yy_symbol_value_print (yyoutput, yytype, yyvaluep, qp);
|
844
|
+
YYFPRINTF (yyoutput, ")");
|
845
|
+
}
|
708
846
|
|
709
847
|
/*------------------------------------------------------------------.
|
710
848
|
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
|
711
849
|
| TOP (included). |
|
712
850
|
`------------------------------------------------------------------*/
|
713
851
|
|
714
|
-
#if defined
|
852
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
853
|
+
|| defined __cplusplus || defined _MSC_VER)
|
715
854
|
static void
|
716
|
-
yy_stack_print (
|
855
|
+
yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
|
717
856
|
#else
|
718
857
|
static void
|
719
858
|
yy_stack_print (bottom, top)
|
720
|
-
|
721
|
-
|
859
|
+
yytype_int16 *bottom;
|
860
|
+
yytype_int16 *top;
|
722
861
|
#endif
|
723
862
|
{
|
724
863
|
YYFPRINTF (stderr, "Stack now");
|
725
|
-
for (
|
864
|
+
for (; bottom <= top; ++bottom)
|
726
865
|
YYFPRINTF (stderr, " %d", *bottom);
|
727
866
|
YYFPRINTF (stderr, "\n");
|
728
867
|
}
|
@@ -731,37 +870,46 @@ yy_stack_print (bottom, top)
|
|
731
870
|
do { \
|
732
871
|
if (yydebug) \
|
733
872
|
yy_stack_print ((Bottom), (Top)); \
|
734
|
-
} while (0)
|
873
|
+
} while (YYID (0))
|
735
874
|
|
736
875
|
|
737
876
|
/*------------------------------------------------.
|
738
877
|
| Report that the YYRULE is going to be reduced. |
|
739
878
|
`------------------------------------------------*/
|
740
879
|
|
741
|
-
#if defined
|
880
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
881
|
+
|| defined __cplusplus || defined _MSC_VER)
|
742
882
|
static void
|
743
|
-
yy_reduce_print (int yyrule)
|
883
|
+
yy_reduce_print (YYSTYPE *yyvsp, int yyrule, QParser *qp)
|
744
884
|
#else
|
745
885
|
static void
|
746
|
-
yy_reduce_print (yyrule)
|
886
|
+
yy_reduce_print (yyvsp, yyrule, qp)
|
887
|
+
YYSTYPE *yyvsp;
|
747
888
|
int yyrule;
|
889
|
+
QParser *qp;
|
748
890
|
#endif
|
749
891
|
{
|
892
|
+
int yynrhs = yyr2[yyrule];
|
750
893
|
int yyi;
|
751
894
|
unsigned long int yylno = yyrline[yyrule];
|
752
|
-
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu)
|
753
|
-
|
754
|
-
/*
|
755
|
-
for (yyi =
|
756
|
-
|
757
|
-
|
895
|
+
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
|
896
|
+
yyrule - 1, yylno);
|
897
|
+
/* The symbols being reduced. */
|
898
|
+
for (yyi = 0; yyi < yynrhs; yyi++)
|
899
|
+
{
|
900
|
+
fprintf (stderr, " $%d = ", yyi + 1);
|
901
|
+
yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
|
902
|
+
&(yyvsp[(yyi + 1) - (yynrhs)])
|
903
|
+
, qp);
|
904
|
+
fprintf (stderr, "\n");
|
905
|
+
}
|
758
906
|
}
|
759
907
|
|
760
908
|
# define YY_REDUCE_PRINT(Rule) \
|
761
909
|
do { \
|
762
910
|
if (yydebug) \
|
763
|
-
yy_reduce_print (Rule);
|
764
|
-
} while (0)
|
911
|
+
yy_reduce_print (yyvsp, Rule, qp); \
|
912
|
+
} while (YYID (0))
|
765
913
|
|
766
914
|
/* Nonzero means print parse trace. It is left uninitialized so that
|
767
915
|
multiple parsers can coexist. */
|
@@ -795,42 +943,44 @@ int yydebug;
|
|
795
943
|
#if YYERROR_VERBOSE
|
796
944
|
|
797
945
|
# ifndef yystrlen
|
798
|
-
# if defined
|
946
|
+
# if defined __GLIBC__ && defined _STRING_H
|
799
947
|
# define yystrlen strlen
|
800
948
|
# else
|
801
949
|
/* Return the length of YYSTR. */
|
950
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
951
|
+
|| defined __cplusplus || defined _MSC_VER)
|
802
952
|
static YYSIZE_T
|
803
|
-
# if defined (__STDC__) || defined (__cplusplus)
|
804
953
|
yystrlen (const char *yystr)
|
805
|
-
#
|
954
|
+
#else
|
955
|
+
static YYSIZE_T
|
806
956
|
yystrlen (yystr)
|
807
|
-
|
808
|
-
#
|
957
|
+
const char *yystr;
|
958
|
+
#endif
|
809
959
|
{
|
810
|
-
|
811
|
-
|
812
|
-
while (*yys++ != '\0')
|
960
|
+
YYSIZE_T yylen;
|
961
|
+
for (yylen = 0; yystr[yylen]; yylen++)
|
813
962
|
continue;
|
814
|
-
|
815
|
-
return yys - yystr - 1;
|
963
|
+
return yylen;
|
816
964
|
}
|
817
965
|
# endif
|
818
966
|
# endif
|
819
967
|
|
820
968
|
# ifndef yystpcpy
|
821
|
-
# if defined
|
969
|
+
# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
|
822
970
|
# define yystpcpy stpcpy
|
823
971
|
# else
|
824
972
|
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
|
825
973
|
YYDEST. */
|
974
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
975
|
+
|| defined __cplusplus || defined _MSC_VER)
|
826
976
|
static char *
|
827
|
-
# if defined (__STDC__) || defined (__cplusplus)
|
828
977
|
yystpcpy (char *yydest, const char *yysrc)
|
829
|
-
#
|
978
|
+
#else
|
979
|
+
static char *
|
830
980
|
yystpcpy (yydest, yysrc)
|
831
|
-
|
832
|
-
|
833
|
-
#
|
981
|
+
char *yydest;
|
982
|
+
const char *yysrc;
|
983
|
+
#endif
|
834
984
|
{
|
835
985
|
char *yyd = yydest;
|
836
986
|
const char *yys = yysrc;
|
@@ -856,7 +1006,7 @@ yytnamerr (char *yyres, const char *yystr)
|
|
856
1006
|
{
|
857
1007
|
if (*yystr == '"')
|
858
1008
|
{
|
859
|
-
|
1009
|
+
YYSIZE_T yyn = 0;
|
860
1010
|
char const *yyp = yystr;
|
861
1011
|
|
862
1012
|
for (;;)
|
@@ -891,65 +1041,136 @@ yytnamerr (char *yyres, const char *yystr)
|
|
891
1041
|
}
|
892
1042
|
# endif
|
893
1043
|
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
#if defined (__STDC__) || defined (__cplusplus)
|
904
|
-
static void
|
905
|
-
yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
|
906
|
-
#else
|
907
|
-
static void
|
908
|
-
yysymprint (yyoutput, yytype, yyvaluep)
|
909
|
-
FILE *yyoutput;
|
910
|
-
int yytype;
|
911
|
-
YYSTYPE *yyvaluep;
|
912
|
-
#endif
|
1044
|
+
/* Copy into YYRESULT an error message about the unexpected token
|
1045
|
+
YYCHAR while in state YYSTATE. Return the number of bytes copied,
|
1046
|
+
including the terminating null byte. If YYRESULT is null, do not
|
1047
|
+
copy anything; just return the number of bytes that would be
|
1048
|
+
copied. As a special case, return 0 if an ordinary "syntax error"
|
1049
|
+
message will do. Return YYSIZE_MAXIMUM if overflow occurs during
|
1050
|
+
size calculation. */
|
1051
|
+
static YYSIZE_T
|
1052
|
+
yysyntax_error (char *yyresult, int yystate, int yychar)
|
913
1053
|
{
|
914
|
-
|
915
|
-
(void) yyvaluep;
|
1054
|
+
int yyn = yypact[yystate];
|
916
1055
|
|
917
|
-
if (
|
918
|
-
|
1056
|
+
if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
|
1057
|
+
return 0;
|
919
1058
|
else
|
920
|
-
|
1059
|
+
{
|
1060
|
+
int yytype = YYTRANSLATE (yychar);
|
1061
|
+
YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
|
1062
|
+
YYSIZE_T yysize = yysize0;
|
1063
|
+
YYSIZE_T yysize1;
|
1064
|
+
int yysize_overflow = 0;
|
1065
|
+
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
|
1066
|
+
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
|
1067
|
+
int yyx;
|
1068
|
+
|
1069
|
+
# if 0
|
1070
|
+
/* This is so xgettext sees the translatable formats that are
|
1071
|
+
constructed on the fly. */
|
1072
|
+
YY_("syntax error, unexpected %s");
|
1073
|
+
YY_("syntax error, unexpected %s, expecting %s");
|
1074
|
+
YY_("syntax error, unexpected %s, expecting %s or %s");
|
1075
|
+
YY_("syntax error, unexpected %s, expecting %s or %s or %s");
|
1076
|
+
YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
|
1077
|
+
# endif
|
1078
|
+
char *yyfmt;
|
1079
|
+
char const *yyf;
|
1080
|
+
static char const yyunexpected[] = "syntax error, unexpected %s";
|
1081
|
+
static char const yyexpecting[] = ", expecting %s";
|
1082
|
+
static char const yyor[] = " or %s";
|
1083
|
+
char yyformat[sizeof yyunexpected
|
1084
|
+
+ sizeof yyexpecting - 1
|
1085
|
+
+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
|
1086
|
+
* (sizeof yyor - 1))];
|
1087
|
+
char const *yyprefix = yyexpecting;
|
1088
|
+
|
1089
|
+
/* Start YYX at -YYN if negative to avoid negative indexes in
|
1090
|
+
YYCHECK. */
|
1091
|
+
int yyxbegin = yyn < 0 ? -yyn : 0;
|
1092
|
+
|
1093
|
+
/* Stay within bounds of both yycheck and yytname. */
|
1094
|
+
int yychecklim = YYLAST - yyn + 1;
|
1095
|
+
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
|
1096
|
+
int yycount = 1;
|
1097
|
+
|
1098
|
+
yyarg[0] = yytname[yytype];
|
1099
|
+
yyfmt = yystpcpy (yyformat, yyunexpected);
|
1100
|
+
|
1101
|
+
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
1102
|
+
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
1103
|
+
{
|
1104
|
+
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
|
1105
|
+
{
|
1106
|
+
yycount = 1;
|
1107
|
+
yysize = yysize0;
|
1108
|
+
yyformat[sizeof yyunexpected - 1] = '\0';
|
1109
|
+
break;
|
1110
|
+
}
|
1111
|
+
yyarg[yycount++] = yytname[yyx];
|
1112
|
+
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
|
1113
|
+
yysize_overflow |= (yysize1 < yysize);
|
1114
|
+
yysize = yysize1;
|
1115
|
+
yyfmt = yystpcpy (yyfmt, yyprefix);
|
1116
|
+
yyprefix = yyor;
|
1117
|
+
}
|
921
1118
|
|
1119
|
+
yyf = YY_(yyformat);
|
1120
|
+
yysize1 = yysize + yystrlen (yyf);
|
1121
|
+
yysize_overflow |= (yysize1 < yysize);
|
1122
|
+
yysize = yysize1;
|
922
1123
|
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
1124
|
+
if (yysize_overflow)
|
1125
|
+
return YYSIZE_MAXIMUM;
|
1126
|
+
|
1127
|
+
if (yyresult)
|
1128
|
+
{
|
1129
|
+
/* Avoid sprintf, as that infringes on the user's name space.
|
1130
|
+
Don't have undefined behavior even if the translation
|
1131
|
+
produced a string with the wrong number of "%s"s. */
|
1132
|
+
char *yyp = yyresult;
|
1133
|
+
int yyi = 0;
|
1134
|
+
while ((*yyp = *yyf) != '\0')
|
1135
|
+
{
|
1136
|
+
if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
|
1137
|
+
{
|
1138
|
+
yyp += yytnamerr (yyp, yyarg[yyi++]);
|
1139
|
+
yyf += 2;
|
1140
|
+
}
|
1141
|
+
else
|
1142
|
+
{
|
1143
|
+
yyp++;
|
1144
|
+
yyf++;
|
1145
|
+
}
|
1146
|
+
}
|
1147
|
+
}
|
1148
|
+
return yysize;
|
931
1149
|
}
|
932
|
-
YYFPRINTF (yyoutput, ")");
|
933
1150
|
}
|
1151
|
+
#endif /* YYERROR_VERBOSE */
|
1152
|
+
|
934
1153
|
|
935
|
-
#endif /* ! YYDEBUG */
|
936
1154
|
/*-----------------------------------------------.
|
937
1155
|
| Release the memory associated to this symbol. |
|
938
1156
|
`-----------------------------------------------*/
|
939
1157
|
|
940
|
-
|
1158
|
+
/*ARGSUSED*/
|
1159
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
1160
|
+
|| defined __cplusplus || defined _MSC_VER)
|
941
1161
|
static void
|
942
|
-
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
|
1162
|
+
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, QParser *qp)
|
943
1163
|
#else
|
944
1164
|
static void
|
945
|
-
yydestruct (yymsg, yytype, yyvaluep)
|
1165
|
+
yydestruct (yymsg, yytype, yyvaluep, qp)
|
946
1166
|
const char *yymsg;
|
947
1167
|
int yytype;
|
948
1168
|
YYSTYPE *yyvaluep;
|
1169
|
+
QParser *qp;
|
949
1170
|
#endif
|
950
1171
|
{
|
951
|
-
|
952
|
-
(
|
1172
|
+
YYUSE (yyvaluep);
|
1173
|
+
YYUSE (qp);
|
953
1174
|
|
954
1175
|
if (!yymsg)
|
955
1176
|
yymsg = "Deleting";
|
@@ -959,7 +1180,7 @@ yydestruct (yymsg, yytype, yyvaluep)
|
|
959
1180
|
{
|
960
1181
|
|
961
1182
|
default:
|
962
|
-
|
1183
|
+
break;
|
963
1184
|
}
|
964
1185
|
}
|
965
1186
|
|
@@ -967,13 +1188,13 @@ yydestruct (yymsg, yytype, yyvaluep)
|
|
967
1188
|
/* Prevent warnings from -Wmissing-prototypes. */
|
968
1189
|
|
969
1190
|
#ifdef YYPARSE_PARAM
|
970
|
-
#
|
1191
|
+
#if defined __STDC__ || defined __cplusplus
|
971
1192
|
int yyparse (void *YYPARSE_PARAM);
|
972
|
-
#
|
1193
|
+
#else
|
973
1194
|
int yyparse ();
|
974
|
-
#
|
1195
|
+
#endif
|
975
1196
|
#else /* ! YYPARSE_PARAM */
|
976
|
-
#if defined
|
1197
|
+
#if defined __STDC__ || defined __cplusplus
|
977
1198
|
int yyparse (QParser *qp);
|
978
1199
|
#else
|
979
1200
|
int yyparse ();
|
@@ -990,14 +1211,18 @@ int yyparse ();
|
|
990
1211
|
`----------*/
|
991
1212
|
|
992
1213
|
#ifdef YYPARSE_PARAM
|
993
|
-
#
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
1214
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
1215
|
+
|| defined __cplusplus || defined _MSC_VER)
|
1216
|
+
int
|
1217
|
+
yyparse (void *YYPARSE_PARAM)
|
1218
|
+
#else
|
1219
|
+
int
|
1220
|
+
yyparse (YYPARSE_PARAM)
|
1221
|
+
void *YYPARSE_PARAM;
|
1222
|
+
#endif
|
999
1223
|
#else /* ! YYPARSE_PARAM */
|
1000
|
-
#if defined
|
1224
|
+
#if (defined __STDC__ || defined __C99__FUNC__ \
|
1225
|
+
|| defined __cplusplus || defined _MSC_VER)
|
1001
1226
|
int
|
1002
1227
|
yyparse (QParser *qp)
|
1003
1228
|
#else
|
@@ -1023,6 +1248,12 @@ int yynerrs;
|
|
1023
1248
|
int yyerrstatus;
|
1024
1249
|
/* Look-ahead token as an internal (translated) token number. */
|
1025
1250
|
int yytoken = 0;
|
1251
|
+
#if YYERROR_VERBOSE
|
1252
|
+
/* Buffer for error messages, and its allocated size. */
|
1253
|
+
char yymsgbuf[128];
|
1254
|
+
char *yymsg = yymsgbuf;
|
1255
|
+
YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
|
1256
|
+
#endif
|
1026
1257
|
|
1027
1258
|
/* Three stacks and their tools:
|
1028
1259
|
`yyss': related to states,
|
@@ -1033,9 +1264,9 @@ int yynerrs;
|
|
1033
1264
|
to reallocate them elsewhere. */
|
1034
1265
|
|
1035
1266
|
/* The state stack. */
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1267
|
+
yytype_int16 yyssa[YYINITDEPTH];
|
1268
|
+
yytype_int16 *yyss = yyssa;
|
1269
|
+
yytype_int16 *yyssp;
|
1039
1270
|
|
1040
1271
|
/* The semantic value stack. */
|
1041
1272
|
YYSTYPE yyvsa[YYINITDEPTH];
|
@@ -1044,7 +1275,7 @@ int yynerrs;
|
|
1044
1275
|
|
1045
1276
|
|
1046
1277
|
|
1047
|
-
#define YYPOPSTACK (yyvsp
|
1278
|
+
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
|
1048
1279
|
|
1049
1280
|
YYSIZE_T yystacksize = YYINITDEPTH;
|
1050
1281
|
|
@@ -1053,9 +1284,9 @@ int yynerrs;
|
|
1053
1284
|
YYSTYPE yyval;
|
1054
1285
|
|
1055
1286
|
|
1056
|
-
/*
|
1057
|
-
|
1058
|
-
int yylen;
|
1287
|
+
/* The number of symbols on the RHS of the reduced rule.
|
1288
|
+
Keep to zero when no symbol should be popped. */
|
1289
|
+
int yylen = 0;
|
1059
1290
|
|
1060
1291
|
YYDPRINTF ((stderr, "Starting parse\n"));
|
1061
1292
|
|
@@ -1079,8 +1310,7 @@ int yynerrs;
|
|
1079
1310
|
`------------------------------------------------------------*/
|
1080
1311
|
yynewstate:
|
1081
1312
|
/* In all cases, when you get here, the value and location stacks
|
1082
|
-
have just been pushed.
|
1083
|
-
*/
|
1313
|
+
have just been pushed. So pushing a state here evens the stacks. */
|
1084
1314
|
yyssp++;
|
1085
1315
|
|
1086
1316
|
yysetstate:
|
@@ -1093,11 +1323,11 @@ int yynerrs;
|
|
1093
1323
|
|
1094
1324
|
#ifdef yyoverflow
|
1095
1325
|
{
|
1096
|
-
/* Give user a chance to reallocate the stack.
|
1326
|
+
/* Give user a chance to reallocate the stack. Use copies of
|
1097
1327
|
these so that the &'s don't force the real ones into
|
1098
1328
|
memory. */
|
1099
1329
|
YYSTYPE *yyvs1 = yyvs;
|
1100
|
-
|
1330
|
+
yytype_int16 *yyss1 = yyss;
|
1101
1331
|
|
1102
1332
|
|
1103
1333
|
/* Each stack pointer address is followed by the size of the
|
@@ -1125,7 +1355,7 @@ int yynerrs;
|
|
1125
1355
|
yystacksize = YYMAXDEPTH;
|
1126
1356
|
|
1127
1357
|
{
|
1128
|
-
|
1358
|
+
yytype_int16 *yyss1 = yyss;
|
1129
1359
|
union yyalloc *yyptr =
|
1130
1360
|
(union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
|
1131
1361
|
if (! yyptr)
|
@@ -1160,12 +1390,10 @@ int yynerrs;
|
|
1160
1390
|
`-----------*/
|
1161
1391
|
yybackup:
|
1162
1392
|
|
1163
|
-
/* Do appropriate processing given the current state.
|
1164
|
-
|
1165
|
-
/* yyresume: */
|
1393
|
+
/* Do appropriate processing given the current state. Read a
|
1394
|
+
look-ahead token if we need one and don't already have one. */
|
1166
1395
|
|
1167
1396
|
/* First try to decide what to do without reference to look-ahead token. */
|
1168
|
-
|
1169
1397
|
yyn = yypact[yystate];
|
1170
1398
|
if (yyn == YYPACT_NINF)
|
1171
1399
|
goto yydefault;
|
@@ -1207,22 +1435,21 @@ yybackup:
|
|
1207
1435
|
if (yyn == YYFINAL)
|
1208
1436
|
YYACCEPT;
|
1209
1437
|
|
1438
|
+
/* Count tokens shifted since error; after three, turn off error
|
1439
|
+
status. */
|
1440
|
+
if (yyerrstatus)
|
1441
|
+
yyerrstatus--;
|
1442
|
+
|
1210
1443
|
/* Shift the look-ahead token. */
|
1211
1444
|
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
|
1212
1445
|
|
1213
|
-
/* Discard the token
|
1446
|
+
/* Discard the shifted token unless it is eof. */
|
1214
1447
|
if (yychar != YYEOF)
|
1215
1448
|
yychar = YYEMPTY;
|
1216
1449
|
|
1450
|
+
yystate = yyn;
|
1217
1451
|
*++yyvsp = yylval;
|
1218
1452
|
|
1219
|
-
|
1220
|
-
/* Count tokens shifted since error; after three, turn off error
|
1221
|
-
status. */
|
1222
|
-
if (yyerrstatus)
|
1223
|
-
yyerrstatus--;
|
1224
|
-
|
1225
|
-
yystate = yyn;
|
1226
1453
|
goto yynewstate;
|
1227
1454
|
|
1228
1455
|
|
@@ -1264,47 +1491,47 @@ yyreduce:
|
|
1264
1491
|
|
1265
1492
|
case 3:
|
1266
1493
|
#line 103 "src/q_parser.y"
|
1267
|
-
{ qp->result = (yyval.query) = get_bool_q((yyvsp[
|
1494
|
+
{ qp->result = (yyval.query) = get_bool_q((yyvsp[(1) - (1)].bclss)); }
|
1268
1495
|
break;
|
1269
1496
|
|
1270
1497
|
case 4:
|
1271
1498
|
#line 105 "src/q_parser.y"
|
1272
|
-
{ (yyval.bclss) = first_cls((yyvsp[
|
1499
|
+
{ (yyval.bclss) = first_cls((yyvsp[(1) - (1)].bcls)); }
|
1273
1500
|
break;
|
1274
1501
|
|
1275
1502
|
case 5:
|
1276
1503
|
#line 106 "src/q_parser.y"
|
1277
|
-
{ (yyval.bclss) = add_and_cls((yyvsp[-
|
1504
|
+
{ (yyval.bclss) = add_and_cls((yyvsp[(1) - (3)].bclss), (yyvsp[(3) - (3)].bcls)); }
|
1278
1505
|
break;
|
1279
1506
|
|
1280
1507
|
case 6:
|
1281
1508
|
#line 107 "src/q_parser.y"
|
1282
|
-
{ (yyval.bclss) = add_or_cls((yyvsp[-
|
1509
|
+
{ (yyval.bclss) = add_or_cls((yyvsp[(1) - (3)].bclss), (yyvsp[(3) - (3)].bcls)); }
|
1283
1510
|
break;
|
1284
1511
|
|
1285
1512
|
case 7:
|
1286
1513
|
#line 108 "src/q_parser.y"
|
1287
|
-
{ (yyval.bclss) = add_default_cls(qp, (yyvsp[-
|
1514
|
+
{ (yyval.bclss) = add_default_cls(qp, (yyvsp[(1) - (2)].bclss), (yyvsp[(2) - (2)].bcls)); }
|
1288
1515
|
break;
|
1289
1516
|
|
1290
1517
|
case 8:
|
1291
1518
|
#line 110 "src/q_parser.y"
|
1292
|
-
{ (yyval.bcls) = get_bool_cls((yyvsp[
|
1519
|
+
{ (yyval.bcls) = get_bool_cls((yyvsp[(2) - (2)].query), BC_MUST); }
|
1293
1520
|
break;
|
1294
1521
|
|
1295
1522
|
case 9:
|
1296
1523
|
#line 111 "src/q_parser.y"
|
1297
|
-
{ (yyval.bcls) = get_bool_cls((yyvsp[
|
1524
|
+
{ (yyval.bcls) = get_bool_cls((yyvsp[(2) - (2)].query), BC_MUST_NOT); }
|
1298
1525
|
break;
|
1299
1526
|
|
1300
1527
|
case 10:
|
1301
1528
|
#line 112 "src/q_parser.y"
|
1302
|
-
{ (yyval.bcls) = get_bool_cls((yyvsp[
|
1529
|
+
{ (yyval.bcls) = get_bool_cls((yyvsp[(1) - (1)].query), BC_SHOULD); }
|
1303
1530
|
break;
|
1304
1531
|
|
1305
1532
|
case 12:
|
1306
1533
|
#line 115 "src/q_parser.y"
|
1307
|
-
{ if ((yyvsp[-
|
1534
|
+
{ if ((yyvsp[(1) - (3)].query)) sscanf((yyvsp[(3) - (3)].str),"%f",&((yyvsp[(1) - (3)].query)->boost)); (yyval.query)=(yyvsp[(1) - (3)].query); }
|
1308
1535
|
break;
|
1309
1536
|
|
1310
1537
|
case 14:
|
@@ -1314,27 +1541,27 @@ yyreduce:
|
|
1314
1541
|
|
1315
1542
|
case 15:
|
1316
1543
|
#line 119 "src/q_parser.y"
|
1317
|
-
{ (yyval.query) = get_bool_q((yyvsp[-
|
1544
|
+
{ (yyval.query) = get_bool_q((yyvsp[(2) - (3)].bclss)); }
|
1318
1545
|
break;
|
1319
1546
|
|
1320
1547
|
case 20:
|
1321
1548
|
#line 125 "src/q_parser.y"
|
1322
|
-
{ FLDS((yyval.query), get_term_q(qp, field, (yyvsp[
|
1549
|
+
{ FLDS((yyval.query), get_term_q(qp, field, (yyvsp[(1) - (1)].str))); }
|
1323
1550
|
break;
|
1324
1551
|
|
1325
1552
|
case 21:
|
1326
1553
|
#line 126 "src/q_parser.y"
|
1327
|
-
{ FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-
|
1554
|
+
{ FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].str))); }
|
1328
1555
|
break;
|
1329
1556
|
|
1330
1557
|
case 22:
|
1331
1558
|
#line 127 "src/q_parser.y"
|
1332
|
-
{ FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[-
|
1559
|
+
{ FLDS((yyval.query), get_fuzzy_q(qp, field, (yyvsp[(1) - (2)].str), NULL)); }
|
1333
1560
|
break;
|
1334
1561
|
|
1335
1562
|
case 23:
|
1336
1563
|
#line 129 "src/q_parser.y"
|
1337
|
-
{ FLDS((yyval.query), get_wild_q(qp, field, (yyvsp[
|
1564
|
+
{ FLDS((yyval.query), get_wild_q(qp, field, (yyvsp[(1) - (1)].str))); }
|
1338
1565
|
break;
|
1339
1566
|
|
1340
1567
|
case 24:
|
@@ -1344,7 +1571,7 @@ yyreduce:
|
|
1344
1571
|
|
1345
1572
|
case 25:
|
1346
1573
|
#line 132 "src/q_parser.y"
|
1347
|
-
{ (yyval.query) = (yyvsp[-
|
1574
|
+
{ (yyval.query) = (yyvsp[(3) - (4)].query); }
|
1348
1575
|
break;
|
1349
1576
|
|
1350
1577
|
case 26:
|
@@ -1359,27 +1586,27 @@ yyreduce:
|
|
1359
1586
|
|
1360
1587
|
case 28:
|
1361
1588
|
#line 134 "src/q_parser.y"
|
1362
|
-
{ (yyval.query) = (yyvsp[-
|
1589
|
+
{ (yyval.query) = (yyvsp[(4) - (5)].query); }
|
1363
1590
|
break;
|
1364
1591
|
|
1365
1592
|
case 29:
|
1366
1593
|
#line 136 "src/q_parser.y"
|
1367
|
-
{ (yyval.hashset) = first_field(qp, (yyvsp[
|
1594
|
+
{ (yyval.hashset) = first_field(qp, (yyvsp[(1) - (1)].str)); }
|
1368
1595
|
break;
|
1369
1596
|
|
1370
1597
|
case 30:
|
1371
1598
|
#line 137 "src/q_parser.y"
|
1372
|
-
{ (yyval.hashset) = add_field(qp, (yyvsp[
|
1599
|
+
{ (yyval.hashset) = add_field(qp, (yyvsp[(3) - (3)].str));}
|
1373
1600
|
break;
|
1374
1601
|
|
1375
1602
|
case 31:
|
1376
1603
|
#line 139 "src/q_parser.y"
|
1377
|
-
{ (yyval.query) = get_phrase_q(qp, (yyvsp[-
|
1604
|
+
{ (yyval.query) = get_phrase_q(qp, (yyvsp[(2) - (3)].phrase), NULL); }
|
1378
1605
|
break;
|
1379
1606
|
|
1380
1607
|
case 32:
|
1381
1608
|
#line 140 "src/q_parser.y"
|
1382
|
-
{ (yyval.query) = get_phrase_q(qp, (yyvsp[-
|
1609
|
+
{ (yyval.query) = get_phrase_q(qp, (yyvsp[(2) - (5)].phrase), (yyvsp[(5) - (5)].str)); }
|
1383
1610
|
break;
|
1384
1611
|
|
1385
1612
|
case 33:
|
@@ -1394,7 +1621,7 @@ yyreduce:
|
|
1394
1621
|
|
1395
1622
|
case 35:
|
1396
1623
|
#line 144 "src/q_parser.y"
|
1397
|
-
{ (yyval.phrase) = ph_first_word((yyvsp[
|
1624
|
+
{ (yyval.phrase) = ph_first_word((yyvsp[(1) - (1)].str)); }
|
1398
1625
|
break;
|
1399
1626
|
|
1400
1627
|
case 36:
|
@@ -1404,90 +1631,88 @@ yyreduce:
|
|
1404
1631
|
|
1405
1632
|
case 37:
|
1406
1633
|
#line 146 "src/q_parser.y"
|
1407
|
-
{ (yyval.phrase) = ph_add_word((yyvsp[-
|
1634
|
+
{ (yyval.phrase) = ph_add_word((yyvsp[(1) - (2)].phrase), (yyvsp[(2) - (2)].str)); }
|
1408
1635
|
break;
|
1409
1636
|
|
1410
1637
|
case 38:
|
1411
1638
|
#line 147 "src/q_parser.y"
|
1412
|
-
{ (yyval.phrase) = ph_add_word((yyvsp[-
|
1639
|
+
{ (yyval.phrase) = ph_add_word((yyvsp[(1) - (3)].phrase), NULL); }
|
1413
1640
|
break;
|
1414
1641
|
|
1415
1642
|
case 39:
|
1416
1643
|
#line 148 "src/q_parser.y"
|
1417
|
-
{ (yyval.phrase) = ph_add_multi_word((yyvsp[-
|
1644
|
+
{ (yyval.phrase) = ph_add_multi_word((yyvsp[(1) - (3)].phrase), (yyvsp[(3) - (3)].str)); }
|
1418
1645
|
break;
|
1419
1646
|
|
1420
1647
|
case 40:
|
1421
1648
|
#line 150 "src/q_parser.y"
|
1422
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1649
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), true, true)); }
|
1423
1650
|
break;
|
1424
1651
|
|
1425
1652
|
case 41:
|
1426
1653
|
#line 151 "src/q_parser.y"
|
1427
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1654
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), true, false)); }
|
1428
1655
|
break;
|
1429
1656
|
|
1430
1657
|
case 42:
|
1431
1658
|
#line 152 "src/q_parser.y"
|
1432
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1659
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), false, true)); }
|
1433
1660
|
break;
|
1434
1661
|
|
1435
1662
|
case 43:
|
1436
1663
|
#line 153 "src/q_parser.y"
|
1437
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1664
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].str), false, false)); }
|
1438
1665
|
break;
|
1439
1666
|
|
1440
1667
|
case 44:
|
1441
1668
|
#line 154 "src/q_parser.y"
|
1442
|
-
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-
|
1669
|
+
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (3)].str), false, false)); }
|
1443
1670
|
break;
|
1444
1671
|
|
1445
1672
|
case 45:
|
1446
1673
|
#line 155 "src/q_parser.y"
|
1447
|
-
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[-
|
1674
|
+
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (3)].str), false, true)); }
|
1448
1675
|
break;
|
1449
1676
|
|
1450
1677
|
case 46:
|
1451
1678
|
#line 156 "src/q_parser.y"
|
1452
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1679
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (3)].str), NULL,true, false)); }
|
1453
1680
|
break;
|
1454
1681
|
|
1455
1682
|
case 47:
|
1456
1683
|
#line 157 "src/q_parser.y"
|
1457
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[-
|
1684
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (3)].str), NULL,false, false)); }
|
1458
1685
|
break;
|
1459
1686
|
|
1460
1687
|
case 48:
|
1461
1688
|
#line 158 "src/q_parser.y"
|
1462
|
-
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[
|
1689
|
+
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(2) - (2)].str), false, false)); }
|
1463
1690
|
break;
|
1464
1691
|
|
1465
1692
|
case 49:
|
1466
1693
|
#line 159 "src/q_parser.y"
|
1467
|
-
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[
|
1694
|
+
{ FLDS((yyval.query), get_r_q(qp, field, NULL,(yyvsp[(3) - (3)].str), false, true)); }
|
1468
1695
|
break;
|
1469
1696
|
|
1470
1697
|
case 50:
|
1471
1698
|
#line 160 "src/q_parser.y"
|
1472
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[
|
1699
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(3) - (3)].str), NULL,true, false)); }
|
1473
1700
|
break;
|
1474
1701
|
|
1475
1702
|
case 51:
|
1476
1703
|
#line 161 "src/q_parser.y"
|
1477
|
-
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[
|
1704
|
+
{ FLDS((yyval.query), get_r_q(qp, field, (yyvsp[(2) - (2)].str), NULL,false, false)); }
|
1478
1705
|
break;
|
1479
1706
|
|
1480
1707
|
|
1708
|
+
/* Line 1267 of yacc.c. */
|
1709
|
+
#line 1710 "y.tab.c"
|
1481
1710
|
default: break;
|
1482
1711
|
}
|
1712
|
+
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
1483
1713
|
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
yyvsp -= yylen;
|
1488
|
-
yyssp -= yylen;
|
1489
|
-
|
1490
|
-
|
1714
|
+
YYPOPSTACK (yylen);
|
1715
|
+
yylen = 0;
|
1491
1716
|
YY_STACK_PRINT (yyss, yyssp);
|
1492
1717
|
|
1493
1718
|
*++yyvsp = yyval;
|
@@ -1516,110 +1741,41 @@ yyerrlab:
|
|
1516
1741
|
if (!yyerrstatus)
|
1517
1742
|
{
|
1518
1743
|
++yynerrs;
|
1519
|
-
#if YYERROR_VERBOSE
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1527
|
-
|
1528
|
-
|
1529
|
-
|
1530
|
-
|
1531
|
-
|
1532
|
-
|
1533
|
-
|
1534
|
-
|
1535
|
-
/* This is so xgettext sees the translatable formats that are
|
1536
|
-
constructed on the fly. */
|
1537
|
-
YY_("syntax error, unexpected %s");
|
1538
|
-
YY_("syntax error, unexpected %s, expecting %s");
|
1539
|
-
YY_("syntax error, unexpected %s, expecting %s or %s");
|
1540
|
-
YY_("syntax error, unexpected %s, expecting %s or %s or %s");
|
1541
|
-
YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
|
1542
|
-
#endif
|
1543
|
-
char *yyfmt;
|
1544
|
-
char const *yyf;
|
1545
|
-
static char const yyunexpected[] = "syntax error, unexpected %s";
|
1546
|
-
static char const yyexpecting[] = ", expecting %s";
|
1547
|
-
static char const yyor[] = " or %s";
|
1548
|
-
char yyformat[sizeof yyunexpected
|
1549
|
-
+ sizeof yyexpecting - 1
|
1550
|
-
+ ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
|
1551
|
-
* (sizeof yyor - 1))];
|
1552
|
-
char const *yyprefix = yyexpecting;
|
1553
|
-
|
1554
|
-
/* Start YYX at -YYN if negative to avoid negative indexes in
|
1555
|
-
YYCHECK. */
|
1556
|
-
int yyxbegin = yyn < 0 ? -yyn : 0;
|
1557
|
-
|
1558
|
-
/* Stay within bounds of both yycheck and yytname. */
|
1559
|
-
int yychecklim = YYLAST - yyn;
|
1560
|
-
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
|
1561
|
-
int yycount = 1;
|
1562
|
-
|
1563
|
-
yyarg[0] = yytname[yytype];
|
1564
|
-
yyfmt = yystpcpy (yyformat, yyunexpected);
|
1565
|
-
|
1566
|
-
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
|
1567
|
-
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
|
1744
|
+
#if ! YYERROR_VERBOSE
|
1745
|
+
yyerror (qp, YY_("syntax error"));
|
1746
|
+
#else
|
1747
|
+
{
|
1748
|
+
YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
|
1749
|
+
if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
|
1750
|
+
{
|
1751
|
+
YYSIZE_T yyalloc = 2 * yysize;
|
1752
|
+
if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
|
1753
|
+
yyalloc = YYSTACK_ALLOC_MAXIMUM;
|
1754
|
+
if (yymsg != yymsgbuf)
|
1755
|
+
YYSTACK_FREE (yymsg);
|
1756
|
+
yymsg = (char *) YYSTACK_ALLOC (yyalloc);
|
1757
|
+
if (yymsg)
|
1758
|
+
yymsg_alloc = yyalloc;
|
1759
|
+
else
|
1568
1760
|
{
|
1569
|
-
|
1570
|
-
|
1571
|
-
yycount = 1;
|
1572
|
-
yysize = yysize0;
|
1573
|
-
yyformat[sizeof yyunexpected - 1] = '\0';
|
1574
|
-
break;
|
1575
|
-
}
|
1576
|
-
yyarg[yycount++] = yytname[yyx];
|
1577
|
-
yysize1 = yysize + yytnamerr (0, yytname[yyx]);
|
1578
|
-
yysize_overflow |= yysize1 < yysize;
|
1579
|
-
yysize = yysize1;
|
1580
|
-
yyfmt = yystpcpy (yyfmt, yyprefix);
|
1581
|
-
yyprefix = yyor;
|
1761
|
+
yymsg = yymsgbuf;
|
1762
|
+
yymsg_alloc = sizeof yymsgbuf;
|
1582
1763
|
}
|
1764
|
+
}
|
1583
1765
|
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1592
|
-
|
1593
|
-
/* Avoid sprintf, as that infringes on the user's name space.
|
1594
|
-
Don't have undefined behavior even if the translation
|
1595
|
-
produced a string with the wrong number of "%s"s. */
|
1596
|
-
char *yyp = yymsg;
|
1597
|
-
int yyi = 0;
|
1598
|
-
while ((*yyp = *yyf))
|
1599
|
-
{
|
1600
|
-
if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
|
1601
|
-
{
|
1602
|
-
yyp += yytnamerr (yyp, yyarg[yyi++]);
|
1603
|
-
yyf += 2;
|
1604
|
-
}
|
1605
|
-
else
|
1606
|
-
{
|
1607
|
-
yyp++;
|
1608
|
-
yyf++;
|
1609
|
-
}
|
1610
|
-
}
|
1611
|
-
yyerror (qp, yymsg);
|
1612
|
-
YYSTACK_FREE (yymsg);
|
1613
|
-
}
|
1614
|
-
else
|
1615
|
-
{
|
1616
|
-
yyerror (qp, YY_("syntax error"));
|
1766
|
+
if (0 < yysize && yysize <= yymsg_alloc)
|
1767
|
+
{
|
1768
|
+
(void) yysyntax_error (yymsg, yystate, yychar);
|
1769
|
+
yyerror (qp, yymsg);
|
1770
|
+
}
|
1771
|
+
else
|
1772
|
+
{
|
1773
|
+
yyerror (qp, YY_("syntax error"));
|
1774
|
+
if (yysize != 0)
|
1617
1775
|
goto yyexhaustedlab;
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
#endif /* YYERROR_VERBOSE */
|
1622
|
-
yyerror (qp, YY_("syntax error"));
|
1776
|
+
}
|
1777
|
+
}
|
1778
|
+
#endif
|
1623
1779
|
}
|
1624
1780
|
|
1625
1781
|
|
@@ -1630,14 +1786,15 @@ yyerrlab:
|
|
1630
1786
|
error, discard it. */
|
1631
1787
|
|
1632
1788
|
if (yychar <= YYEOF)
|
1633
|
-
|
1789
|
+
{
|
1634
1790
|
/* Return failure if at end of input. */
|
1635
1791
|
if (yychar == YYEOF)
|
1636
1792
|
YYABORT;
|
1637
|
-
|
1793
|
+
}
|
1638
1794
|
else
|
1639
1795
|
{
|
1640
|
-
yydestruct ("Error: discarding",
|
1796
|
+
yydestruct ("Error: discarding",
|
1797
|
+
yytoken, &yylval, qp);
|
1641
1798
|
yychar = YYEMPTY;
|
1642
1799
|
}
|
1643
1800
|
}
|
@@ -1655,11 +1812,14 @@ yyerrorlab:
|
|
1655
1812
|
/* Pacify compilers like GCC when the user code never invokes
|
1656
1813
|
YYERROR and the label yyerrorlab therefore never appears in user
|
1657
1814
|
code. */
|
1658
|
-
if (0)
|
1815
|
+
if (/*CONSTCOND*/ 0)
|
1659
1816
|
goto yyerrorlab;
|
1660
1817
|
|
1661
|
-
|
1662
|
-
|
1818
|
+
/* Do not reclaim the symbols of the rule which action triggered
|
1819
|
+
this YYERROR. */
|
1820
|
+
YYPOPSTACK (yylen);
|
1821
|
+
yylen = 0;
|
1822
|
+
YY_STACK_PRINT (yyss, yyssp);
|
1663
1823
|
yystate = *yyssp;
|
1664
1824
|
goto yyerrlab1;
|
1665
1825
|
|
@@ -1689,8 +1849,9 @@ yyerrlab1:
|
|
1689
1849
|
YYABORT;
|
1690
1850
|
|
1691
1851
|
|
1692
|
-
yydestruct ("Error: popping",
|
1693
|
-
|
1852
|
+
yydestruct ("Error: popping",
|
1853
|
+
yystos[yystate], yyvsp, qp);
|
1854
|
+
YYPOPSTACK (1);
|
1694
1855
|
yystate = *yyssp;
|
1695
1856
|
YY_STACK_PRINT (yyss, yyssp);
|
1696
1857
|
}
|
@@ -1701,7 +1862,7 @@ yyerrlab1:
|
|
1701
1862
|
*++yyvsp = yylval;
|
1702
1863
|
|
1703
1864
|
|
1704
|
-
/* Shift the error token.
|
1865
|
+
/* Shift the error token. */
|
1705
1866
|
YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
|
1706
1867
|
|
1707
1868
|
yystate = yyn;
|
@@ -1735,18 +1896,27 @@ yyexhaustedlab:
|
|
1735
1896
|
yyreturn:
|
1736
1897
|
if (yychar != YYEOF && yychar != YYEMPTY)
|
1737
1898
|
yydestruct ("Cleanup: discarding lookahead",
|
1738
|
-
yytoken, &yylval);
|
1899
|
+
yytoken, &yylval, qp);
|
1900
|
+
/* Do not reclaim the symbols of the rule which action triggered
|
1901
|
+
this YYABORT or YYACCEPT. */
|
1902
|
+
YYPOPSTACK (yylen);
|
1903
|
+
YY_STACK_PRINT (yyss, yyssp);
|
1739
1904
|
while (yyssp != yyss)
|
1740
1905
|
{
|
1741
1906
|
yydestruct ("Cleanup: popping",
|
1742
|
-
yystos[*yyssp], yyvsp);
|
1743
|
-
YYPOPSTACK;
|
1907
|
+
yystos[*yyssp], yyvsp, qp);
|
1908
|
+
YYPOPSTACK (1);
|
1744
1909
|
}
|
1745
1910
|
#ifndef yyoverflow
|
1746
1911
|
if (yyss != yyssa)
|
1747
1912
|
YYSTACK_FREE (yyss);
|
1748
1913
|
#endif
|
1749
|
-
|
1914
|
+
#if YYERROR_VERBOSE
|
1915
|
+
if (yymsg != yymsgbuf)
|
1916
|
+
YYSTACK_FREE (yymsg);
|
1917
|
+
#endif
|
1918
|
+
/* Make sure YYID is used. */
|
1919
|
+
return YYID (yyresult);
|
1750
1920
|
}
|
1751
1921
|
|
1752
1922
|
|
@@ -1754,7 +1924,7 @@ yyreturn:
|
|
1754
1924
|
|
1755
1925
|
|
1756
1926
|
const char *special_char = "&:()[]{}!\"~^|<>=*?+-";
|
1757
|
-
const char *not_word = " \t
|
1927
|
+
const char *not_word = " \t()[]{}!\"~^|<>=";
|
1758
1928
|
|
1759
1929
|
static int get_word(YYSTYPE *lvalp, QParser *qp)
|
1760
1930
|
{
|
@@ -1772,10 +1942,10 @@ static int get_word(YYSTYPE *lvalp, QParser *qp)
|
|
1772
1942
|
|
1773
1943
|
qp->qstrp--; /* need to back up one character */
|
1774
1944
|
|
1775
|
-
while (!strchr(not_word, (c
|
1945
|
+
while (!strchr(not_word, (c = *qp->qstrp++))) {
|
1776
1946
|
switch (c) {
|
1777
1947
|
case '\\':
|
1778
|
-
if ((c
|
1948
|
+
if ((c = *qp->qstrp) == '\0') {
|
1779
1949
|
*bufp++ = '\\';
|
1780
1950
|
}
|
1781
1951
|
else {
|
@@ -1783,6 +1953,16 @@ static int get_word(YYSTYPE *lvalp, QParser *qp)
|
|
1783
1953
|
qp->qstrp++;
|
1784
1954
|
}
|
1785
1955
|
break;
|
1956
|
+
case ':':
|
1957
|
+
if ((*qp->qstrp) == ':') {
|
1958
|
+
qp->qstrp++;
|
1959
|
+
*bufp++ = ':';
|
1960
|
+
*bufp++ = ':';
|
1961
|
+
}
|
1962
|
+
else {
|
1963
|
+
goto get_word_done;
|
1964
|
+
}
|
1965
|
+
break;
|
1786
1966
|
case '*': case '?':
|
1787
1967
|
is_wild = true;
|
1788
1968
|
/* fall through */
|
@@ -1798,6 +1978,7 @@ static int get_word(YYSTYPE *lvalp, QParser *qp)
|
|
1798
1978
|
bufp = buf + MAX_WORD_SIZE;
|
1799
1979
|
}
|
1800
1980
|
}
|
1981
|
+
get_word_done:
|
1801
1982
|
qp->qstrp--;
|
1802
1983
|
/* check for keywords. There are only four so we have a bit of a hack which
|
1803
1984
|
* just checks for all of them. */
|
@@ -1915,7 +2096,14 @@ static Query *get_bool_q(BCArray *bca)
|
|
1915
2096
|
}
|
1916
2097
|
else if (clause_count == 1) {
|
1917
2098
|
BooleanClause *bc = bca->clauses[0];
|
1918
|
-
|
2099
|
+
if (bc->is_prohibited) {
|
2100
|
+
q = bq_new(false);
|
2101
|
+
bq_add_query_nr(q, bc->query, BC_MUST_NOT);
|
2102
|
+
bq_add_query_nr(q, maq_new(), BC_MUST);
|
2103
|
+
}
|
2104
|
+
else {
|
2105
|
+
q = bc->query;
|
2106
|
+
}
|
1919
2107
|
free(bc);
|
1920
2108
|
free(bca->clauses);
|
1921
2109
|
}
|
@@ -2287,6 +2475,15 @@ static Query *get_r_q(QParser *qp, char *field, char *from, char *to,
|
|
2287
2475
|
bool inc_lower, bool inc_upper)
|
2288
2476
|
{
|
2289
2477
|
Query *rq;
|
2478
|
+
if (qp->wild_lower) {
|
2479
|
+
if (from) {
|
2480
|
+
lower_str(from);
|
2481
|
+
}
|
2482
|
+
if (to) {
|
2483
|
+
lower_str(to);
|
2484
|
+
}
|
2485
|
+
}
|
2486
|
+
/*
|
2290
2487
|
if (from) {
|
2291
2488
|
TokenStream *stream = get_cached_ts(qp, field, from);
|
2292
2489
|
Token *token = ts_next(stream);
|
@@ -2297,10 +2494,9 @@ static Query *get_r_q(QParser *qp, char *field, char *from, char *to,
|
|
2297
2494
|
Token *token = ts_next(stream);
|
2298
2495
|
to = token ? estrdup(token->text) : NULL;
|
2299
2496
|
}
|
2497
|
+
*/
|
2300
2498
|
|
2301
2499
|
rq = rq_new(field, from, to, inc_lower, inc_upper);
|
2302
|
-
if (from) free(from);
|
2303
|
-
if (to) free(to);
|
2304
2500
|
return rq;
|
2305
2501
|
}
|
2306
2502
|
|
@@ -2475,7 +2671,7 @@ Query *qp_get_bad_query(QParser *qp, char *str)
|
|
2475
2671
|
|
2476
2672
|
Query *qp_parse(QParser *self, char *qstr)
|
2477
2673
|
{
|
2478
|
-
Query *result;
|
2674
|
+
Query *result = NULL;
|
2479
2675
|
mutex_lock(&self->mutex);
|
2480
2676
|
if (self->clean_str) {
|
2481
2677
|
self->qstrp = self->qstr = qp_clean_str(qstr);
|
@@ -2486,9 +2682,12 @@ Query *qp_parse(QParser *self, char *qstr)
|
|
2486
2682
|
self->fields = self->def_fields;
|
2487
2683
|
self->result = NULL;
|
2488
2684
|
|
2489
|
-
|
2490
|
-
|
2491
|
-
|
2685
|
+
TRY
|
2686
|
+
yyparse(self);
|
2687
|
+
result = self->result;
|
2688
|
+
XCATCHALL
|
2689
|
+
if (self->handle_parse_errors) HANDLED();
|
2690
|
+
XENDTRY
|
2492
2691
|
if (!result && self->handle_parse_errors) {
|
2493
2692
|
result = qp_get_bad_query(self, self->qstr);
|
2494
2693
|
}
|
@@ -2503,4 +2702,3 @@ Query *qp_parse(QParser *self, char *qstr)
|
|
2503
2702
|
return result;
|
2504
2703
|
}
|
2505
2704
|
|
2506
|
-
|