• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

realm / realm-core / github_pull_request_275914

25 Sep 2023 03:10PM UTC coverage: 92.915% (+1.7%) from 91.215%
github_pull_request_275914

Pull #6073

Evergreen

jedelbo
Merge tag 'v13.21.0' into next-major

"Feature/Bugfix release"
Pull Request #6073: Merge next-major

96928 of 177706 branches covered (0.0%)

8324 of 8714 new or added lines in 122 files covered. (95.52%)

181 existing lines in 28 files now uncovered.

247505 of 266379 relevant lines covered (92.91%)

7164945.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

69.61
/src/realm/parser/generated/query_bison.cpp
1
// A Bison parser, made by GNU Bison 3.8.2.
2

3
// Skeleton implementation for Bison LALR(1) parsers in C++
4

5
// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
6

7
// This program is free software: you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published by
9
// the Free Software Foundation, either version 3 of the License, or
10
// (at your option) any later version.
11

12
// This program is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16

17
// You should have received a copy of the GNU General Public License
18
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
19

20
// As a special exception, you may create a larger work that contains
21
// part or all of the Bison parser skeleton and distribute that work
22
// under terms of your choice, so long as that work isn't itself a
23
// parser generator using the skeleton or a modified version thereof
24
// as a parser skeleton.  Alternatively, if you modify or redistribute
25
// the parser skeleton itself, you may (at your option) remove this
26
// special exception, which will cause the skeleton and the resulting
27
// Bison output files to be licensed under the GNU General Public
28
// License without this special exception.
29

30
// This special exception was added by the Free Software Foundation in
31
// version 2.2 of Bison.
32

33
// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
34
// especially those whose name start with YY_ or yy_.  They are
35
// private implementation details that can be changed or removed.
36

37

38

39

40

41
#include "query_bison.hpp"
42

43

44
// Unqualified %code blocks.
45

46
#include <realm/parser/driver.hpp>
47
#include <realm/table.hpp>
48
using namespace realm;
49
using namespace realm::query_parser;
50

51
#ifdef _MSC_VER
52
// ignore msvc warnings in this file (poped at end)
53
// do this by setting the warning level to 1 (permissive)
54
#pragma warning( push, 1 )
55
#endif
56

57

58

59
#ifndef YY_
60
# if defined YYENABLE_NLS && YYENABLE_NLS
61
#  if ENABLE_NLS
62
#   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
63
#   define YY_(msgid) dgettext ("bison-runtime", msgid)
64
#  endif
65
# endif
66
# ifndef YY_
67
#  define YY_(msgid) msgid
68
# endif
69
#endif
70

71

72
// Whether we are compiled with exception support.
73
#ifndef YY_EXCEPTIONS
74
# if defined __GNUC__ && !defined __EXCEPTIONS
75
#  define YY_EXCEPTIONS 0
76
# else
77
#  define YY_EXCEPTIONS 1
78
# endif
79
#endif
80

81

82

83
// Enable debugging if requested.
84
#if YYDEBUG
85

86
// A pseudo ostream that takes yydebug_ into account.
87
# define YYCDEBUG if (yydebug_) (*yycdebug_)
10,556,696✔
88

89
# define YY_SYMBOL_PRINT(Title, Symbol)         \
90
  do {                                          \
24,315,316✔
91
    if (yydebug_)                               \
13,188,792✔
92
    {                                           \
6,815,408✔
93
      *yycdebug_ << Title << ' ';               \
×
94
      yy_print_ (*yycdebug_, Symbol);           \
×
95
      *yycdebug_ << '\n';                       \
×
96
    }                                           \
×
97
  } while (false)
13,188,792✔
98

99
# define YY_REDUCE_PRINT(Rule)          \
100
  do {                                  \
13,035,840✔
101
    if (yydebug_)                       \
6,517,920✔
102
      yy_reduce_print_ (Rule);          \
3,373,020✔
103
  } while (false)
6,517,920✔
104

105
# define YY_STACK_PRINT()               \
106
  do {                                  \
8,579,114✔
107
    if (yydebug_)                       \
8,579,114✔
108
      yy_stack_print_ ();                \
4,397,446✔
109
  } while (false)
8,579,114✔
110

111
#else // !YYDEBUG
112

113
# define YYCDEBUG if (false) std::cerr
114
# define YY_SYMBOL_PRINT(Title, Symbol)  YY_USE (Symbol)
115
# define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
116
# define YY_STACK_PRINT()                static_cast<void> (0)
117

118
#endif // !YYDEBUG
119

120
#define yyerrok         (yyerrstatus_ = 0)
121
#define yyclearin       (yyla.clear ())
122

123
#define YYACCEPT        goto yyacceptlab
40,892✔
124
#define YYABORT         goto yyabortlab
716✔
125
#define YYERROR         goto yyerrorlab
×
126
#define YYRECOVERING()  (!!yyerrstatus_)
127

128
namespace yy {
129

130
  /// Build a parser object.
131
  parser::parser (ParserDriver& drv_yyarg, void* scanner_yyarg)
132
#if YYDEBUG
133
    : yydebug_ (false),
134
      yycdebug_ (&std::cerr),
135
#else
136
    :
137
#endif
138
      drv (drv_yyarg),
139
      scanner (scanner_yyarg)
140
  {}
41,618✔
141

142
  parser::~parser ()
143
  {}
41,618✔
144

145
  parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
146
  {}
116✔
147

148
  /*---------.
149
  | symbol.  |
150
  `---------*/
151

152

153

154
  // by_state.
155
  parser::by_state::by_state () YY_NOEXCEPT
156
    : state (empty_state)
157
  {}
23,304,732✔
158

159
  parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
160
    : state (that.state)
161
  {}
×
162

163
  void
164
  parser::by_state::clear () YY_NOEXCEPT
165
  {
42,284,570✔
166
    state = empty_state;
42,284,570✔
167
  }
42,284,570✔
168

169
  void
170
  parser::by_state::move (by_state& that)
171
  {
8,535,052✔
172
    state = that.state;
8,535,052✔
173
    that.clear ();
8,535,052✔
174
  }
8,535,052✔
175

176
  parser::by_state::by_state (state_type s) YY_NOEXCEPT
177
    : state (s)
178
  {}
10,555,156✔
179

180
  parser::symbol_kind_type
181
  parser::by_state::kind () const YY_NOEXCEPT
182
  {
50,807,002✔
183
    if (state == empty_state)
50,807,002✔
184
      return symbol_kind::SYM_YYEMPTY;
33,907,096✔
185
    else
16,899,906✔
186
      return YY_CAST (symbol_kind_type, yystos_[+state]);
16,899,906✔
187
  }
50,807,002✔
188

189
  parser::stack_symbol_type::stack_symbol_type ()
190
  {}
23,307,046✔
191

192
  parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
193
    : super_type (YY_MOVE (that.state))
194
  {
8,537,208✔
195
    switch (that.kind ())
8,537,208✔
196
    {
8,537,208✔
197
      case symbol_kind::SYM_aggregate: // aggregate
✔
198
        value.YY_MOVE_OR_COPY< AggrNode* > (YY_MOVE (that.value));
×
199
        break;
×
200

201
      case symbol_kind::SYM_equality: // equality
✔
202
      case symbol_kind::SYM_relational: // relational
✔
203
      case symbol_kind::SYM_stringop: // stringop
✔
204
        value.YY_MOVE_OR_COPY< CompareType > (YY_MOVE (that.value));
×
205
        break;
×
206

207
      case symbol_kind::SYM_constant: // constant
✔
208
      case symbol_kind::SYM_primary_key: // primary_key
✔
209
        value.YY_MOVE_OR_COPY< ConstantNode* > (YY_MOVE (that.value));
×
210
        break;
×
211

212
      case symbol_kind::SYM_distinct: // distinct
✔
213
      case symbol_kind::SYM_distinct_param: // distinct_param
✔
214
      case symbol_kind::SYM_sort: // sort
✔
215
      case symbol_kind::SYM_sort_param: // sort_param
✔
216
      case symbol_kind::SYM_limit: // limit
✔
217
        value.YY_MOVE_OR_COPY< DescriptorNode* > (YY_MOVE (that.value));
×
218
        break;
×
219

220
      case symbol_kind::SYM_post_query: // post_query
✔
221
        value.YY_MOVE_OR_COPY< DescriptorOrderingNode* > (YY_MOVE (that.value));
×
222
        break;
×
223

224
      case symbol_kind::SYM_expr: // expr
✔
225
        value.YY_MOVE_OR_COPY< ExpressionNode* > (YY_MOVE (that.value));
×
226
        break;
×
227

228
      case symbol_kind::SYM_geoloop_content: // geoloop_content
✔
229
      case symbol_kind::SYM_geoloop: // geoloop
✔
230
      case symbol_kind::SYM_geopoly_content: // geopoly_content
✔
231
      case symbol_kind::SYM_geospatial: // geospatial
✔
232
        value.YY_MOVE_OR_COPY< GeospatialNode* > (YY_MOVE (that.value));
×
233
        break;
×
234

235
      case symbol_kind::SYM_list: // list
✔
236
      case symbol_kind::SYM_list_content: // list_content
✔
237
        value.YY_MOVE_OR_COPY< ListNode* > (YY_MOVE (that.value));
×
238
        break;
×
239

240
      case symbol_kind::SYM_path_elem: // path_elem
✔
241
        value.YY_MOVE_OR_COPY< PathElem > (YY_MOVE (that.value));
×
242
        break;
×
243

244
      case symbol_kind::SYM_path: // path
✔
245
        value.YY_MOVE_OR_COPY< PathNode* > (YY_MOVE (that.value));
×
246
        break;
×
247

248
      case symbol_kind::SYM_post_op: // post_op
✔
249
        value.YY_MOVE_OR_COPY< PostOpNode* > (YY_MOVE (that.value));
✔
250
        break;
×
251

×
252
      case symbol_kind::SYM_prop: // prop
253
      case symbol_kind::SYM_simple_prop: // simple_prop
✔
254
        value.YY_MOVE_OR_COPY< PropertyNode* > (YY_MOVE (that.value));
✔
255
        break;
×
256

×
257
      case symbol_kind::SYM_query: // query
258
      case symbol_kind::SYM_compare: // compare
✔
259
        value.YY_MOVE_OR_COPY< QueryNode* > (YY_MOVE (that.value));
×
260
        break;
×
261

262
      case symbol_kind::SYM_subquery: // subquery
✔
263
        value.YY_MOVE_OR_COPY< SubqueryNode* > (YY_MOVE (that.value));
×
264
        break;
×
265

266
      case symbol_kind::SYM_boolexpr: // boolexpr
✔
267
        value.YY_MOVE_OR_COPY< TrueOrFalseNode* > (YY_MOVE (that.value));
×
268
        break;
×
269

270
      case symbol_kind::SYM_value: // value
✔
271
        value.YY_MOVE_OR_COPY< ValueNode* > (YY_MOVE (that.value));
×
272
        break;
×
273

274
      case symbol_kind::SYM_direction: // direction
✔
275
        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
×
276
        break;
×
277

278
      case symbol_kind::SYM_coordinate: // coordinate
✔
279
        value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
✔
280
        break;
×
281

×
282
      case symbol_kind::SYM_comp_type: // comp_type
283
      case symbol_kind::SYM_aggr_op: // aggr_op
✔
284
        value.YY_MOVE_OR_COPY< int > (YY_MOVE (that.value));
×
285
        break;
×
286

287
      case symbol_kind::SYM_geopoint: // geopoint
✔
288
        value.YY_MOVE_OR_COPY< std::optional<GeoPoint> > (YY_MOVE (that.value));
✔
289
        break;
✔
290

✔
291
      case symbol_kind::SYM_ID: // "identifier"
✔
292
      case symbol_kind::SYM_STRING: // "string"
✔
293
      case symbol_kind::SYM_BASE64: // "base64"
✔
294
      case symbol_kind::SYM_INFINITY: // "infinity"
✔
295
      case symbol_kind::SYM_NAN: // "NaN"
✔
296
      case symbol_kind::SYM_NATURAL0: // "natural0"
✔
297
      case symbol_kind::SYM_NUMBER: // "number"
✔
298
      case symbol_kind::SYM_FLOAT: // "float"
✔
299
      case symbol_kind::SYM_TIMESTAMP: // "date"
✔
300
      case symbol_kind::SYM_UUID: // "UUID"
✔
301
      case symbol_kind::SYM_OID: // "ObjectId"
✔
302
      case symbol_kind::SYM_LINK: // "link"
✔
303
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
✔
304
      case symbol_kind::SYM_ARG: // "argument"
✔
305
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
✔
306
      case symbol_kind::SYM_ENDSWITH: // "endswith"
✔
307
      case symbol_kind::SYM_CONTAINS: // "contains"
✔
308
      case symbol_kind::SYM_TEXT: // "fulltext"
✔
309
      case symbol_kind::SYM_LIKE: // "like"
✔
310
      case symbol_kind::SYM_BETWEEN: // "between"
✔
311
      case symbol_kind::SYM_IN: // "in"
✔
312
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
✔
NEW
313
      case symbol_kind::SYM_OBJ: // "obj"
✔
314
      case symbol_kind::SYM_SORT: // "sort"
✔
315
      case symbol_kind::SYM_DISTINCT: // "distinct"
✔
NEW
316
      case symbol_kind::SYM_LIMIT: // "limit"
✔
NEW
317
      case symbol_kind::SYM_ASCENDING: // "ascending"
✔
NEW
318
      case symbol_kind::SYM_DESCENDING: // "descending"
✔
319
      case symbol_kind::SYM_SIZE: // "@size"
✔
320
      case symbol_kind::SYM_TYPE: // "@type"
✔
321
      case symbol_kind::SYM_KEY_VAL: // "key or value"
✔
NEW
322
      case symbol_kind::SYM_id: // id
✔
323
        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
✔
324
        break;
×
325

×
326
      default:
4,376,360✔
327
        break;
8,536,454✔
328
    }
8,536,372✔
329

8,536,198✔
330
#if 201103L <= YY_CPLUSPLUS
4,376,278✔
331
    // that is emptied.
8,536,198✔
332
    that.state = empty_state;
4,376,278✔
333
#endif
8,536,198✔
334
  }
8,536,198✔
335

4,159,920✔
336
  parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
337
    : super_type (s)
338
  {
1,003,766✔
339
    switch (that.kind ())
2,020,010✔
340
    {
2,020,010✔
341
      case symbol_kind::SYM_aggregate: // aggregate
1,016,244✔
342
        value.move< AggrNode* > (YY_MOVE (that.value));
✔
343
        break;
×
344

×
345
      case symbol_kind::SYM_equality: // equality
346
      case symbol_kind::SYM_relational: // relational
✔
347
      case symbol_kind::SYM_stringop: // stringop
✔
348
        value.move< CompareType > (YY_MOVE (that.value));
✔
349
        break;
×
350

×
351
      case symbol_kind::SYM_constant: // constant
352
      case symbol_kind::SYM_primary_key: // primary_key
✔
353
        value.move< ConstantNode* > (YY_MOVE (that.value));
✔
354
        break;
×
355

×
356
      case symbol_kind::SYM_distinct: // distinct
357
      case symbol_kind::SYM_distinct_param: // distinct_param
✔
358
      case symbol_kind::SYM_sort: // sort
✔
359
      case symbol_kind::SYM_sort_param: // sort_param
✔
360
      case symbol_kind::SYM_limit: // limit
✔
361
        value.move< DescriptorNode* > (YY_MOVE (that.value));
✔
362
        break;
×
363

×
364
      case symbol_kind::SYM_post_query: // post_query
365
        value.move< DescriptorOrderingNode* > (YY_MOVE (that.value));
✔
366
        break;
×
367

×
368
      case symbol_kind::SYM_expr: // expr
369
        value.move< ExpressionNode* > (YY_MOVE (that.value));
✔
370
        break;
×
371

×
372
      case symbol_kind::SYM_geoloop_content: // geoloop_content
373
      case symbol_kind::SYM_geoloop: // geoloop
✔
374
      case symbol_kind::SYM_geopoly_content: // geopoly_content
✔
375
      case symbol_kind::SYM_geospatial: // geospatial
✔
376
        value.move< GeospatialNode* > (YY_MOVE (that.value));
✔
377
        break;
×
378

×
379
      case symbol_kind::SYM_list: // list
380
      case symbol_kind::SYM_list_content: // list_content
✔
381
        value.move< ListNode* > (YY_MOVE (that.value));
✔
382
        break;
×
383

×
384
      case symbol_kind::SYM_path_elem: // path_elem
385
        value.move< PathElem > (YY_MOVE (that.value));
✔
386
        break;
×
387

×
388
      case symbol_kind::SYM_path: // path
389
        value.move< PathNode* > (YY_MOVE (that.value));
✔
390
        break;
×
391

×
392
      case symbol_kind::SYM_post_op: // post_op
393
        value.move< PostOpNode* > (YY_MOVE (that.value));
✔
394
        break;
✔
395

×
396
      case symbol_kind::SYM_prop: // prop
×
397
      case symbol_kind::SYM_simple_prop: // simple_prop
398
        value.move< PropertyNode* > (YY_MOVE (that.value));
✔
399
        break;
✔
400

×
401
      case symbol_kind::SYM_query: // query
×
402
      case symbol_kind::SYM_compare: // compare
403
        value.move< QueryNode* > (YY_MOVE (that.value));
✔
404
        break;
×
405

×
406
      case symbol_kind::SYM_subquery: // subquery
407
        value.move< SubqueryNode* > (YY_MOVE (that.value));
✔
408
        break;
×
409

×
410
      case symbol_kind::SYM_boolexpr: // boolexpr
411
        value.move< TrueOrFalseNode* > (YY_MOVE (that.value));
✔
412
        break;
×
413

×
414
      case symbol_kind::SYM_value: // value
415
        value.move< ValueNode* > (YY_MOVE (that.value));
✔
416
        break;
×
417

×
418
      case symbol_kind::SYM_direction: // direction
419
        value.move< bool > (YY_MOVE (that.value));
✔
420
        break;
×
421

×
422
      case symbol_kind::SYM_coordinate: // coordinate
423
        value.move< double > (YY_MOVE (that.value));
✔
424
        break;
✔
425

×
426
      case symbol_kind::SYM_comp_type: // comp_type
×
427
      case symbol_kind::SYM_aggr_op: // aggr_op
428
        value.move< int > (YY_MOVE (that.value));
✔
429
        break;
×
430

×
431
      case symbol_kind::SYM_geopoint: // geopoint
432
        value.move< std::optional<GeoPoint> > (YY_MOVE (that.value));
246,746✔
433
        break;
250,644✔
434

251,360✔
435
      case symbol_kind::SYM_ID: // "identifier"
736,520✔
436
      case symbol_kind::SYM_STRING: // "string"
736,552✔
437
      case symbol_kind::SYM_BASE64: // "base64"
748,750✔
438
      case symbol_kind::SYM_INFINITY: // "infinity"
748,934✔
439
      case symbol_kind::SYM_NAN: // "NaN"
750,308✔
440
      case symbol_kind::SYM_NATURAL0: // "natural0"
750,638✔
441
      case symbol_kind::SYM_NUMBER: // "number"
750,974✔
442
      case symbol_kind::SYM_FLOAT: // "float"
751,360✔
443
      case symbol_kind::SYM_TIMESTAMP: // "date"
751,364✔
444
      case symbol_kind::SYM_UUID: // "UUID"
751,388✔
445
      case symbol_kind::SYM_OID: // "ObjectId"
967,998✔
446
      case symbol_kind::SYM_LINK: // "link"
968,268✔
447
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
968,536✔
448
      case symbol_kind::SYM_ARG: // "argument"
968,986✔
449
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
969,014✔
450
      case symbol_kind::SYM_ENDSWITH: // "endswith"
969,258✔
451
      case symbol_kind::SYM_CONTAINS: // "contains"
969,322✔
452
      case symbol_kind::SYM_TEXT: // "fulltext"
969,702✔
453
      case symbol_kind::SYM_LIKE: // "like"
969,818✔
454
      case symbol_kind::SYM_BETWEEN: // "between"
969,870✔
455
      case symbol_kind::SYM_IN: // "in"
970,224✔
456
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
970,422✔
457
      case symbol_kind::SYM_OBJ: // "obj"
970,664✔
458
      case symbol_kind::SYM_SORT: // "sort"
971,596✔
459
      case symbol_kind::SYM_DISTINCT: // "distinct"
971,886✔
460
      case symbol_kind::SYM_LIMIT: // "limit"
971,960✔
461
      case symbol_kind::SYM_ASCENDING: // "ascending"
972,248✔
462
      case symbol_kind::SYM_DESCENDING: // "descending"
972,466✔
463
      case symbol_kind::SYM_SIZE: // "@size"
972,470✔
464
      case symbol_kind::SYM_TYPE: // "@type"
974,490✔
465
      case symbol_kind::SYM_KEY_VAL: // "key or value"
974,782✔
466
      case symbol_kind::SYM_id: // id
974,818✔
467
        value.move< std::string > (YY_MOVE (that.value));
975,212✔
468
        break;
975,212✔
469

975,212✔
470
      default:
1,008,844✔
471
        break;
518,716✔
472
    }
1,529,898✔
473

1,529,898✔
474
    // that is emptied.
2,019,884✔
475
    that.kind_ = symbol_kind::SYM_YYEMPTY;
1,003,738✔
476
  }
1,003,738✔
477

1,016,146✔
478
#if YY_CPLUSPLUS < 201103L
1,016,146✔
479
  parser::stack_symbol_type&
480
  parser::stack_symbol_type::operator= (const stack_symbol_type& that)
481
  {
482
    state = that.state;
483
    switch (that.kind ())
484
    {
485
      case symbol_kind::SYM_aggregate: // aggregate
486
        value.copy< AggrNode* > (that.value);
487
        break;
488

489
      case symbol_kind::SYM_equality: // equality
490
      case symbol_kind::SYM_relational: // relational
491
      case symbol_kind::SYM_stringop: // stringop
492
        value.copy< CompareType > (that.value);
493
        break;
494

495
      case symbol_kind::SYM_constant: // constant
496
      case symbol_kind::SYM_primary_key: // primary_key
497
        value.copy< ConstantNode* > (that.value);
498
        break;
499

500
      case symbol_kind::SYM_distinct: // distinct
501
      case symbol_kind::SYM_distinct_param: // distinct_param
502
      case symbol_kind::SYM_sort: // sort
503
      case symbol_kind::SYM_sort_param: // sort_param
504
      case symbol_kind::SYM_limit: // limit
505
        value.copy< DescriptorNode* > (that.value);
506
        break;
507

508
      case symbol_kind::SYM_post_query: // post_query
509
        value.copy< DescriptorOrderingNode* > (that.value);
510
        break;
511

512
      case symbol_kind::SYM_expr: // expr
513
        value.copy< ExpressionNode* > (that.value);
514
        break;
515

516
      case symbol_kind::SYM_geoloop_content: // geoloop_content
517
      case symbol_kind::SYM_geoloop: // geoloop
518
      case symbol_kind::SYM_geopoly_content: // geopoly_content
519
      case symbol_kind::SYM_geospatial: // geospatial
520
        value.copy< GeospatialNode* > (that.value);
521
        break;
522

523
      case symbol_kind::SYM_list: // list
524
      case symbol_kind::SYM_list_content: // list_content
525
        value.copy< ListNode* > (that.value);
526
        break;
527

528
      case symbol_kind::SYM_path_elem: // path_elem
529
        value.copy< PathElem > (that.value);
530
        break;
531

532
      case symbol_kind::SYM_path: // path
533
        value.copy< PathNode* > (that.value);
534
        break;
535

536
      case symbol_kind::SYM_post_op: // post_op
537
        value.copy< PostOpNode* > (that.value);
538
        break;
539

540
      case symbol_kind::SYM_prop: // prop
541
      case symbol_kind::SYM_simple_prop: // simple_prop
542
        value.copy< PropertyNode* > (that.value);
543
        break;
544

545
      case symbol_kind::SYM_query: // query
546
      case symbol_kind::SYM_compare: // compare
547
        value.copy< QueryNode* > (that.value);
548
        break;
549

550
      case symbol_kind::SYM_subquery: // subquery
551
        value.copy< SubqueryNode* > (that.value);
552
        break;
553

554
      case symbol_kind::SYM_boolexpr: // boolexpr
555
        value.copy< TrueOrFalseNode* > (that.value);
556
        break;
557

558
      case symbol_kind::SYM_value: // value
559
        value.copy< ValueNode* > (that.value);
560
        break;
561

562
      case symbol_kind::SYM_direction: // direction
563
        value.copy< bool > (that.value);
564
        break;
565

566
      case symbol_kind::SYM_coordinate: // coordinate
567
        value.copy< double > (that.value);
568
        break;
569

570
      case symbol_kind::SYM_comp_type: // comp_type
571
      case symbol_kind::SYM_aggr_op: // aggr_op
572
        value.copy< int > (that.value);
573
        break;
574

575
      case symbol_kind::SYM_geopoint: // geopoint
576
        value.copy< std::optional<GeoPoint> > (that.value);
577
        break;
578

579
      case symbol_kind::SYM_ID: // "identifier"
580
      case symbol_kind::SYM_STRING: // "string"
581
      case symbol_kind::SYM_BASE64: // "base64"
582
      case symbol_kind::SYM_INFINITY: // "infinity"
583
      case symbol_kind::SYM_NAN: // "NaN"
584
      case symbol_kind::SYM_NATURAL0: // "natural0"
585
      case symbol_kind::SYM_NUMBER: // "number"
586
      case symbol_kind::SYM_FLOAT: // "float"
587
      case symbol_kind::SYM_TIMESTAMP: // "date"
588
      case symbol_kind::SYM_UUID: // "UUID"
589
      case symbol_kind::SYM_OID: // "ObjectId"
590
      case symbol_kind::SYM_LINK: // "link"
591
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
592
      case symbol_kind::SYM_ARG: // "argument"
593
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
594
      case symbol_kind::SYM_ENDSWITH: // "endswith"
595
      case symbol_kind::SYM_CONTAINS: // "contains"
596
      case symbol_kind::SYM_TEXT: // "fulltext"
597
      case symbol_kind::SYM_LIKE: // "like"
598
      case symbol_kind::SYM_BETWEEN: // "between"
599
      case symbol_kind::SYM_IN: // "in"
600
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
601
      case symbol_kind::SYM_OBJ: // "obj"
602
      case symbol_kind::SYM_SORT: // "sort"
603
      case symbol_kind::SYM_DISTINCT: // "distinct"
604
      case symbol_kind::SYM_LIMIT: // "limit"
605
      case symbol_kind::SYM_ASCENDING: // "ascending"
606
      case symbol_kind::SYM_DESCENDING: // "descending"
607
      case symbol_kind::SYM_SIZE: // "@size"
608
      case symbol_kind::SYM_TYPE: // "@type"
609
      case symbol_kind::SYM_KEY_VAL: // "key or value"
610
      case symbol_kind::SYM_id: // id
611
        value.copy< std::string > (that.value);
612
        break;
613

614
      default:
615
        break;
616
    }
617

618
    return *this;
619
  }
620

621
  parser::stack_symbol_type&
622
  parser::stack_symbol_type::operator= (stack_symbol_type& that)
623
  {
624
    state = that.state;
625
    switch (that.kind ())
626
    {
627
      case symbol_kind::SYM_aggregate: // aggregate
628
        value.move< AggrNode* > (that.value);
629
        break;
630

631
      case symbol_kind::SYM_equality: // equality
632
      case symbol_kind::SYM_relational: // relational
633
      case symbol_kind::SYM_stringop: // stringop
634
        value.move< CompareType > (that.value);
635
        break;
636

637
      case symbol_kind::SYM_constant: // constant
638
      case symbol_kind::SYM_primary_key: // primary_key
639
        value.move< ConstantNode* > (that.value);
640
        break;
641

642
      case symbol_kind::SYM_distinct: // distinct
643
      case symbol_kind::SYM_distinct_param: // distinct_param
644
      case symbol_kind::SYM_sort: // sort
645
      case symbol_kind::SYM_sort_param: // sort_param
646
      case symbol_kind::SYM_limit: // limit
647
        value.move< DescriptorNode* > (that.value);
648
        break;
649

650
      case symbol_kind::SYM_post_query: // post_query
651
        value.move< DescriptorOrderingNode* > (that.value);
652
        break;
653

654
      case symbol_kind::SYM_expr: // expr
655
        value.move< ExpressionNode* > (that.value);
656
        break;
657

658
      case symbol_kind::SYM_geoloop_content: // geoloop_content
659
      case symbol_kind::SYM_geoloop: // geoloop
660
      case symbol_kind::SYM_geopoly_content: // geopoly_content
661
      case symbol_kind::SYM_geospatial: // geospatial
662
        value.move< GeospatialNode* > (that.value);
663
        break;
664

665
      case symbol_kind::SYM_list: // list
666
      case symbol_kind::SYM_list_content: // list_content
667
        value.move< ListNode* > (that.value);
668
        break;
669

670
      case symbol_kind::SYM_path_elem: // path_elem
671
        value.move< PathElem > (that.value);
672
        break;
673

674
      case symbol_kind::SYM_path: // path
675
        value.move< PathNode* > (that.value);
676
        break;
677

678
      case symbol_kind::SYM_post_op: // post_op
679
        value.move< PostOpNode* > (that.value);
680
        break;
681

682
      case symbol_kind::SYM_prop: // prop
683
      case symbol_kind::SYM_simple_prop: // simple_prop
684
        value.move< PropertyNode* > (that.value);
685
        break;
686

687
      case symbol_kind::SYM_query: // query
688
      case symbol_kind::SYM_compare: // compare
689
        value.move< QueryNode* > (that.value);
690
        break;
691

692
      case symbol_kind::SYM_subquery: // subquery
693
        value.move< SubqueryNode* > (that.value);
694
        break;
695

696
      case symbol_kind::SYM_boolexpr: // boolexpr
697
        value.move< TrueOrFalseNode* > (that.value);
698
        break;
699

700
      case symbol_kind::SYM_value: // value
701
        value.move< ValueNode* > (that.value);
702
        break;
703

704
      case symbol_kind::SYM_direction: // direction
705
        value.move< bool > (that.value);
706
        break;
707

708
      case symbol_kind::SYM_coordinate: // coordinate
709
        value.move< double > (that.value);
710
        break;
711

712
      case symbol_kind::SYM_comp_type: // comp_type
713
      case symbol_kind::SYM_aggr_op: // aggr_op
714
        value.move< int > (that.value);
715
        break;
716

717
      case symbol_kind::SYM_geopoint: // geopoint
718
        value.move< std::optional<GeoPoint> > (that.value);
719
        break;
720

721
      case symbol_kind::SYM_ID: // "identifier"
722
      case symbol_kind::SYM_STRING: // "string"
723
      case symbol_kind::SYM_BASE64: // "base64"
724
      case symbol_kind::SYM_INFINITY: // "infinity"
725
      case symbol_kind::SYM_NAN: // "NaN"
726
      case symbol_kind::SYM_NATURAL0: // "natural0"
727
      case symbol_kind::SYM_NUMBER: // "number"
728
      case symbol_kind::SYM_FLOAT: // "float"
729
      case symbol_kind::SYM_TIMESTAMP: // "date"
730
      case symbol_kind::SYM_UUID: // "UUID"
731
      case symbol_kind::SYM_OID: // "ObjectId"
732
      case symbol_kind::SYM_LINK: // "link"
733
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
734
      case symbol_kind::SYM_ARG: // "argument"
735
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
736
      case symbol_kind::SYM_ENDSWITH: // "endswith"
737
      case symbol_kind::SYM_CONTAINS: // "contains"
738
      case symbol_kind::SYM_TEXT: // "fulltext"
739
      case symbol_kind::SYM_LIKE: // "like"
740
      case symbol_kind::SYM_BETWEEN: // "between"
741
      case symbol_kind::SYM_IN: // "in"
742
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
743
      case symbol_kind::SYM_OBJ: // "obj"
744
      case symbol_kind::SYM_SORT: // "sort"
745
      case symbol_kind::SYM_DISTINCT: // "distinct"
746
      case symbol_kind::SYM_LIMIT: // "limit"
747
      case symbol_kind::SYM_ASCENDING: // "ascending"
748
      case symbol_kind::SYM_DESCENDING: // "descending"
749
      case symbol_kind::SYM_SIZE: // "@size"
750
      case symbol_kind::SYM_TYPE: // "@type"
751
      case symbol_kind::SYM_KEY_VAL: // "key or value"
752
      case symbol_kind::SYM_id: // id
753
        value.move< std::string > (that.value);
754
        break;
755

756
      default:
757
        break;
758
    }
759

760
    // that is emptied.
761
    that.state = empty_state;
762
    return *this;
763
  }
764
#endif
765

766
  template <typename Base>
767
  void
768
  parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
769
  {
40,968✔
770
    if (yymsg)
40,968✔
771
      YY_SYMBOL_PRINT (yymsg, yysym);
40,968✔
772
  }
40,968✔
773

43,022✔
774
#if YYDEBUG
43,022✔
775
  template <typename Base>
42,986✔
776
  void
43,022✔
777
  parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
778
  {
779
    std::ostream& yyoutput = yyo;
780
    YY_USE (yyoutput);
781
    if (yysym.empty ())
782
      yyo << "empty symbol";
×
783
    else
×
784
      {
×
785
        symbol_kind_type yykind = yysym.kind ();
×
786
        yyo << (yykind < YYNTOKENS ? "token" : "nterm")
×
787
            << ' ' << yysym.name () << " (";
×
788
        switch (yykind)
×
789
    {
×
790
      case symbol_kind::SYM_YYEOF: // "end of file"
×
791
                 { yyo << "<>"; }
×
792
        break;
×
793

×
794
      case symbol_kind::SYM_TRUEPREDICATE: // "truepredicate"
×
795
                 { yyo << "<>"; }
×
796
        break;
×
797

798
      case symbol_kind::SYM_FALSEPREDICATE: // "falsepredicate"
×
799
                 { yyo << "<>"; }
×
800
        break;
×
801

802
      case symbol_kind::SYM_SUBQUERY: // "subquery"
×
803
                 { yyo << "<>"; }
×
804
        break;
×
805

806
      case symbol_kind::SYM_TRUE: // "true"
×
807
                 { yyo << "<>"; }
×
808
        break;
×
809

810
      case symbol_kind::SYM_FALSE: // "false"
×
811
                 { yyo << "<>"; }
×
812
        break;
×
813

814
      case symbol_kind::SYM_NULL_VAL: // "null"
×
815
                 { yyo << "<>"; }
×
816
        break;
×
817

818
      case symbol_kind::SYM_EQUAL: // "=="
×
819
                 { yyo << "<>"; }
×
820
        break;
×
821

822
      case symbol_kind::SYM_NOT_EQUAL: // "!="
×
823
                 { yyo << "<>"; }
×
824
        break;
×
825

826
      case symbol_kind::SYM_LESS: // "<"
×
827
                 { yyo << "<>"; }
×
828
        break;
×
829

830
      case symbol_kind::SYM_GREATER: // ">"
×
831
                 { yyo << "<>"; }
×
832
        break;
×
833

834
      case symbol_kind::SYM_GREATER_EQUAL: // ">="
×
835
                 { yyo << "<>"; }
×
836
        break;
×
837

838
      case symbol_kind::SYM_LESS_EQUAL: // "<="
×
839
                 { yyo << "<>"; }
×
840
        break;
×
841

842
      case symbol_kind::SYM_CASE: // "[c]"
×
843
                 { yyo << "<>"; }
×
844
        break;
×
845

846
      case symbol_kind::SYM_ANY: // "any"
×
847
                 { yyo << "<>"; }
×
848
        break;
×
849

850
      case symbol_kind::SYM_ALL: // "all"
×
851
                 { yyo << "<>"; }
×
852
        break;
×
853

854
      case symbol_kind::SYM_NONE: // "none"
×
855
                 { yyo << "<>"; }
×
856
        break;
×
857

858
      case symbol_kind::SYM_BACKLINK: // "@links"
×
859
                 { yyo << "<>"; }
×
860
        break;
×
861

862
      case symbol_kind::SYM_MAX: // "@max"
×
863
                 { yyo << "<>"; }
×
864
        break;
×
865

866
      case symbol_kind::SYM_MIN: // "@min"
×
867
                 { yyo << "<>"; }
×
868
        break;
×
869

NEW
870
      case symbol_kind::SYM_SUM: // "@sun"
×
871
                 { yyo << "<>"; }
×
872
        break;
×
873

874
      case symbol_kind::SYM_AVG: // "@average"
×
875
                 { yyo << "<>"; }
×
876
        break;
×
877

878
      case symbol_kind::SYM_AND: // "&&"
×
879
                 { yyo << "<>"; }
×
880
        break;
×
881

882
      case symbol_kind::SYM_OR: // "||"
×
883
                 { yyo << "<>"; }
×
884
        break;
×
885

886
      case symbol_kind::SYM_NOT: // "!"
×
887
                 { yyo << "<>"; }
×
888
        break;
×
889

890
      case symbol_kind::SYM_GEOBOX: // "geobox"
×
891
                 { yyo << "<>"; }
×
892
        break;
×
893

894
      case symbol_kind::SYM_GEOPOLYGON: // "geopolygon"
×
895
                 { yyo << "<>"; }
×
896
        break;
×
897

898
      case symbol_kind::SYM_GEOCIRCLE: // "geocircle"
×
899
                 { yyo << "<>"; }
×
900
        break;
×
901

902
      case symbol_kind::SYM_ID: // "identifier"
×
903
                 { yyo << yysym.value.template as < std::string > (); }
×
904
        break;
×
905

906
      case symbol_kind::SYM_STRING: // "string"
×
907
                 { yyo << yysym.value.template as < std::string > (); }
×
908
        break;
×
909

910
      case symbol_kind::SYM_BASE64: // "base64"
×
911
                 { yyo << yysym.value.template as < std::string > (); }
×
912
        break;
×
913

914
      case symbol_kind::SYM_INFINITY: // "infinity"
×
915
                 { yyo << yysym.value.template as < std::string > (); }
×
916
        break;
×
917

918
      case symbol_kind::SYM_NAN: // "NaN"
×
919
                 { yyo << yysym.value.template as < std::string > (); }
×
920
        break;
×
921

922
      case symbol_kind::SYM_NATURAL0: // "natural0"
×
923
                 { yyo << yysym.value.template as < std::string > (); }
×
924
        break;
×
925

926
      case symbol_kind::SYM_NUMBER: // "number"
×
927
                 { yyo << yysym.value.template as < std::string > (); }
×
928
        break;
×
929

930
      case symbol_kind::SYM_FLOAT: // "float"
×
931
                 { yyo << yysym.value.template as < std::string > (); }
×
932
        break;
×
933

934
      case symbol_kind::SYM_TIMESTAMP: // "date"
×
935
                 { yyo << yysym.value.template as < std::string > (); }
×
936
        break;
×
937

938
      case symbol_kind::SYM_UUID: // "UUID"
×
939
                 { yyo << yysym.value.template as < std::string > (); }
×
940
        break;
×
941

942
      case symbol_kind::SYM_OID: // "ObjectId"
×
943
                 { yyo << yysym.value.template as < std::string > (); }
×
944
        break;
×
945

946
      case symbol_kind::SYM_LINK: // "link"
×
947
                 { yyo << yysym.value.template as < std::string > (); }
×
948
        break;
×
949

950
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
×
951
                 { yyo << yysym.value.template as < std::string > (); }
×
952
        break;
×
953

954
      case symbol_kind::SYM_ARG: // "argument"
×
955
                 { yyo << yysym.value.template as < std::string > (); }
×
956
        break;
×
957

958
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
×
959
                 { yyo << yysym.value.template as < std::string > (); }
×
960
        break;
×
961

962
      case symbol_kind::SYM_ENDSWITH: // "endswith"
×
963
                 { yyo << yysym.value.template as < std::string > (); }
×
964
        break;
×
965

966
      case symbol_kind::SYM_CONTAINS: // "contains"
×
967
                 { yyo << yysym.value.template as < std::string > (); }
×
968
        break;
×
969

970
      case symbol_kind::SYM_TEXT: // "fulltext"
×
971
                 { yyo << yysym.value.template as < std::string > (); }
×
972
        break;
×
973

974
      case symbol_kind::SYM_LIKE: // "like"
×
975
                 { yyo << yysym.value.template as < std::string > (); }
×
976
        break;
×
977

978
      case symbol_kind::SYM_BETWEEN: // "between"
×
979
                 { yyo << yysym.value.template as < std::string > (); }
×
980
        break;
×
981

982
      case symbol_kind::SYM_IN: // "in"
×
983
                 { yyo << yysym.value.template as < std::string > (); }
×
984
        break;
×
985

986
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
×
987
                 { yyo << yysym.value.template as < std::string > (); }
×
988
        break;
×
989

990
      case symbol_kind::SYM_OBJ: // "obj"
×
991
                 { yyo << yysym.value.template as < std::string > (); }
×
992
        break;
×
993

994
      case symbol_kind::SYM_SORT: // "sort"
×
995
                 { yyo << yysym.value.template as < std::string > (); }
×
996
        break;
×
997

998
      case symbol_kind::SYM_DISTINCT: // "distinct"
×
999
                 { yyo << yysym.value.template as < std::string > (); }
×
1000
        break;
×
1001

1002
      case symbol_kind::SYM_LIMIT: // "limit"
×
1003
                 { yyo << yysym.value.template as < std::string > (); }
×
1004
        break;
×
1005

NEW
1006
      case symbol_kind::SYM_ASCENDING: // "ascending"
×
NEW
1007
                 { yyo << yysym.value.template as < std::string > (); }
×
NEW
1008
        break;
×
1009

1010
      case symbol_kind::SYM_DESCENDING: // "descending"
×
1011
                 { yyo << yysym.value.template as < std::string > (); }
×
1012
        break;
×
1013

1014
      case symbol_kind::SYM_SIZE: // "@size"
×
1015
                 { yyo << yysym.value.template as < std::string > (); }
×
1016
        break;
×
1017

NEW
1018
      case symbol_kind::SYM_TYPE: // "@type"
×
NEW
1019
                 { yyo << yysym.value.template as < std::string > (); }
×
NEW
1020
        break;
×
1021

NEW
1022
      case symbol_kind::SYM_KEY_VAL: // "key or value"
×
NEW
1023
                 { yyo << yysym.value.template as < std::string > (); }
×
NEW
1024
        break;
×
1025

NEW
1026
      case symbol_kind::SYM_61_: // '+'
×
NEW
1027
                 { yyo << "<>"; }
×
NEW
1028
        break;
×
1029

1030
      case symbol_kind::SYM_62_: // '-'
×
1031
                 { yyo << "<>"; }
×
1032
        break;
×
1033

1034
      case symbol_kind::SYM_63_: // '*'
×
1035
                 { yyo << "<>"; }
×
1036
        break;
×
1037

1038
      case symbol_kind::SYM_64_: // '/'
×
1039
                 { yyo << "<>"; }
×
1040
        break;
×
1041

NEW
1042
      case symbol_kind::SYM_65_: // '('
×
NEW
1043
                 { yyo << "<>"; }
×
NEW
1044
        break;
×
1045

NEW
1046
      case symbol_kind::SYM_66_: // ')'
×
1047
                 { yyo << "<>"; }
×
1048
        break;
×
1049

NEW
1050
      case symbol_kind::SYM_67_: // '.'
×
1051
                 { yyo << "<>"; }
×
1052
        break;
×
1053

NEW
1054
      case symbol_kind::SYM_68_: // ','
×
1055
                 { yyo << "<>"; }
×
1056
        break;
×
1057

NEW
1058
      case symbol_kind::SYM_69_: // '['
×
1059
                 { yyo << "<>"; }
×
1060
        break;
×
1061

NEW
1062
      case symbol_kind::SYM_70_: // ']'
×
1063
                 { yyo << "<>"; }
×
1064
        break;
×
1065

NEW
1066
      case symbol_kind::SYM_71_: // '{'
×
1067
                 { yyo << "<>"; }
×
1068
        break;
×
1069

NEW
1070
      case symbol_kind::SYM_72_: // '}'
×
1071
                 { yyo << "<>"; }
×
1072
        break;
×
1073

NEW
1074
      case symbol_kind::SYM_final: // final
×
1075
                 { yyo << "<>"; }
×
1076
        break;
×
1077

NEW
1078
      case symbol_kind::SYM_query: // query
×
1079
                 { yyo << yysym.value.template as < QueryNode* > (); }
×
1080
        break;
×
1081

NEW
1082
      case symbol_kind::SYM_compare: // compare
×
1083
                 { yyo << yysym.value.template as < QueryNode* > (); }
×
1084
        break;
×
1085

NEW
1086
      case symbol_kind::SYM_expr: // expr
×
1087
                 { yyo << yysym.value.template as < ExpressionNode* > (); }
×
1088
        break;
×
1089

NEW
1090
      case symbol_kind::SYM_value: // value
×
1091
                 { yyo << yysym.value.template as < ValueNode* > (); }
×
1092
        break;
×
1093

1094
      case symbol_kind::SYM_prop: // prop
×
1095
                 { yyo << yysym.value.template as < PropertyNode* > (); }
×
1096
        break;
×
1097

1098
      case symbol_kind::SYM_aggregate: // aggregate
×
1099
                 { yyo << yysym.value.template as < AggrNode* > (); }
×
1100
        break;
×
1101

1102
      case symbol_kind::SYM_simple_prop: // simple_prop
×
1103
                 { yyo << yysym.value.template as < PropertyNode* > (); }
×
1104
        break;
×
1105

1106
      case symbol_kind::SYM_subquery: // subquery
×
1107
                 { yyo << yysym.value.template as < SubqueryNode* > (); }
×
1108
        break;
×
1109

1110
      case symbol_kind::SYM_coordinate: // coordinate
×
1111
                 { yyo << yysym.value.template as < double > (); }
×
1112
        break;
×
1113

1114
      case symbol_kind::SYM_geopoint: // geopoint
×
1115
                 {
×
1116
           if (!yysym.value.template as < std::optional<GeoPoint> > ()) {
×
1117
               yyo << "null";
1118
           } else {
×
1119
             yyo << "['" << yysym.value.template as < std::optional<GeoPoint> > ()->longitude << "', '" << yysym.value.template as < std::optional<GeoPoint> > ()->latitude;
×
1120
             if (auto alt = yysym.value.template as < std::optional<GeoPoint> > ()->get_altitude())
×
1121
               yyo << "', '" << *alt; 
1122
             yyo << "']"; }}
×
1123
        break;
×
1124

×
1125
      case symbol_kind::SYM_geoloop_content: // geoloop_content
1126
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1127
        break;
×
1128

×
1129
      case symbol_kind::SYM_geoloop: // geoloop
1130
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1131
        break;
×
1132

×
1133
      case symbol_kind::SYM_geopoly_content: // geopoly_content
1134
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1135
        break;
×
1136

×
1137
      case symbol_kind::SYM_geospatial: // geospatial
×
1138
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1139
        break;
×
1140

×
1141
      case symbol_kind::SYM_post_query: // post_query
×
1142
                 { yyo << yysym.value.template as < DescriptorOrderingNode* > (); }
×
1143
        break;
×
1144

1145
      case symbol_kind::SYM_distinct: // distinct
×
1146
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1147
        break;
×
1148

1149
      case symbol_kind::SYM_distinct_param: // distinct_param
×
1150
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1151
        break;
×
1152

1153
      case symbol_kind::SYM_sort: // sort
×
1154
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1155
        break;
×
1156

1157
      case symbol_kind::SYM_sort_param: // sort_param
×
1158
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1159
        break;
×
1160

1161
      case symbol_kind::SYM_limit: // limit
×
1162
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1163
        break;
×
1164

1165
      case symbol_kind::SYM_direction: // direction
×
1166
                 { yyo << yysym.value.template as < bool > (); }
×
1167
        break;
×
1168

1169
      case symbol_kind::SYM_list: // list
×
1170
                 { yyo << yysym.value.template as < ListNode* > (); }
×
1171
        break;
×
1172

1173
      case symbol_kind::SYM_list_content: // list_content
×
1174
                 { yyo << yysym.value.template as < ListNode* > (); }
×
1175
        break;
×
1176

1177
      case symbol_kind::SYM_constant: // constant
×
1178
                 { yyo << yysym.value.template as < ConstantNode* > (); }
×
1179
        break;
×
1180

1181
      case symbol_kind::SYM_primary_key: // primary_key
×
1182
                 { yyo << yysym.value.template as < ConstantNode* > (); }
×
1183
        break;
×
1184

1185
      case symbol_kind::SYM_boolexpr: // boolexpr
×
1186
                 { yyo << yysym.value.template as < TrueOrFalseNode* > (); }
×
1187
        break;
×
1188

1189
      case symbol_kind::SYM_comp_type: // comp_type
×
1190
                 { yyo << yysym.value.template as < int > (); }
×
1191
        break;
×
1192

1193
      case symbol_kind::SYM_post_op: // post_op
×
1194
                 { yyo << yysym.value.template as < PostOpNode* > (); }
×
1195
        break;
×
1196

1197
      case symbol_kind::SYM_aggr_op: // aggr_op
×
1198
                 { yyo << yysym.value.template as < int > (); }
×
1199
        break;
×
1200

1201
      case symbol_kind::SYM_equality: // equality
×
1202
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
1203
        break;
×
1204

1205
      case symbol_kind::SYM_relational: // relational
×
1206
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
1207
        break;
×
1208

1209
      case symbol_kind::SYM_stringop: // stringop
×
1210
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
1211
        break;
×
1212

1213
      case symbol_kind::SYM_path: // path
×
1214
                 { yyo << yysym.value.template as < PathNode* > (); }
×
1215
        break;
×
1216

1217
      case symbol_kind::SYM_path_elem: // path_elem
×
1218
                 { yyo << yysym.value.template as < PathElem > ().id; }
×
1219
        break;
×
1220

1221
      case symbol_kind::SYM_id: // id
×
1222
                 { yyo << yysym.value.template as < std::string > (); }
×
1223
        break;
×
1224

1225
      default:
×
1226
        break;
×
1227
    }
×
1228
        yyo << ')';
1229
      }
×
1230
  }
×
1231
#endif
1232

1233
  void
×
1234
  parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
1235
  {
4,375,968✔
1236
    if (m)
4,375,968✔
1237
      YY_SYMBOL_PRINT (m, sym);
4,375,968!
1238
    yystack_.push (YY_MOVE (sym));
4,375,968✔
1239
  }
4,375,968✔
1240

1241
  void
×
1242
  parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
1243
  {
1,003,770✔
1244
#if 201103L <= YY_CPLUSPLUS
1,003,770✔
1245
    yypush_ (m, stack_symbol_type (s, std::move (sym)));
1,003,770✔
1246
#else
1247
    stack_symbol_type ss (s, sym);
1248
    yypush_ (m, ss);
1249
#endif
1250
  }
1,003,770✔
1251

4,160,528✔
1252
  void
4,160,528✔
1253
  parser::yypop_ (int n) YY_NOEXCEPT
994,898✔
1254
  {
7,594,334✔
1255
    yystack_.pop (n);
7,594,334✔
1256
  }
3,433,806✔
1257

1258
#if YYDEBUG
1259
  std::ostream&
1,016,246✔
1260
  parser::debug_stream () const
1,016,246✔
1261
  {
1,016,246✔
1262
    return *yycdebug_;
1263
  }
1264

1265
  void
1266
  parser::set_debug_stream (std::ostream& o)
1,016,246✔
1267
  {
1268
    yycdebug_ = &o;
1269
  }
1270

3,208,628✔
1271

3,208,628✔
1272
  parser::debug_level_type
3,208,628✔
1273
  parser::debug_level () const
1274
  {
1275
    return yydebug_;
1276
  }
1277

1278
  void
1279
  parser::set_debug_level (debug_level_type l)
1280
  {
20,296✔
1281
    yydebug_ = l;
20,296✔
1282
  }
20,296✔
1283
#endif // YYDEBUG
1284

1285
  parser::state_type
1286
  parser::yy_lr_goto_state_ (state_type yystate, int yysym)
1287
  {
3,373,028✔
1288
    int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
3,373,028✔
1289
    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
3,373,028✔
1290
      return yytable_[yyr];
944,926✔
1291
    else
2,428,102✔
1292
      return yydefgoto_[yysym - YYNTOKENS];
2,428,102✔
1293
  }
3,373,028✔
1294

1295
  bool
1296
  parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
21,324✔
1297
  {
4,378,628✔
1298
    return yyvalue == yypact_ninf_;
4,378,628✔
1299
  }
4,357,304✔
1300

1301
  bool
1302
  parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
1303
  {
3,145,328✔
1304
    return yyvalue == yytable_ninf_;
3,145,328✔
1305
  }
3,145,328✔
1306

948,928✔
1307
  int
2,195,490✔
1308
  parser::operator() ()
2,195,490✔
1309
  {
3,164,714✔
1310
    return parse ();
20,296✔
1311
  }
20,296✔
1312

1313
  int
4,139,682✔
1314
  parser::parse ()
4,139,682✔
1315
  {
4,159,978✔
1316
    int yyn;
20,296✔
1317
    /// Length of the RHS of the rule being reduced.
20,296✔
1318
    int yylen = 0;
20,296✔
1319

21,210✔
1320
    // Error handling.
21,210✔
1321
    int yynerrs_ = 0;
21,210✔
1322
    int yyerrstatus_ = 0;
20,296✔
1323

20,296✔
1324
    /// The lookahead symbol.
20,296✔
1325
    symbol_type yyla;
41,620✔
1326

41,620✔
1327
    /// The return value of parse ().
41,620✔
1328
    int yyresult;
20,296✔
1329

20,296✔
1330
#if YY_EXCEPTIONS
20,296✔
1331
    try
41,620✔
1332
#endif // YY_EXCEPTIONS
41,620✔
1333
      {
20,296✔
1334
    YYCDEBUG << "Starting parse\n";
41,620✔
1335

20,296✔
1336

20,296✔
1337
    /* Initialize the stack.  The initial state will be set in
41,620✔
1338
       yynewstate, since the latter expects the semantical and the
41,620✔
1339
       location values to have been already stored, initialize these
20,296✔
1340
       stacks with a primary value.  */
20,296✔
1341
    yystack_.clear ();
41,620✔
1342
    yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
20,296✔
1343

20,296✔
1344
  /*-----------------------------------------------.
41,620✔
1345
  | yynewstate -- push a new symbol on the stack.  |
20,296✔
1346
  `-----------------------------------------------*/
41,620✔
1347
  yynewstate:
4,397,708✔
1348
    YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
4,397,708✔
1349
    YY_STACK_PRINT ();
4,397,708✔
1350

4,397,708✔
1351
    // Accept?
4,376,384✔
1352
    if (yystack_[0].state == yyfinal_)
4,376,384✔
1353
      YYACCEPT;
4,376,384✔
1354

4,376,384✔
1355
    goto yybackup;
4,376,384✔
1356

4,356,024✔
1357

4,377,348✔
1358
  /*-----------.
4,377,348✔
1359
  | yybackup.  |
4,356,024✔
1360
  `-----------*/
4,356,024✔
1361
  yybackup:
4,356,024✔
1362
    // Try to take a decision without lookahead.
4,356,024✔
1363
    yyn = yypact_[+yystack_[0].state];
8,515,602✔
1364
    if (yy_pact_value_is_default_ (yyn))
8,515,602✔
1365
      goto yydefault;
6,097,556✔
1366

2,418,046✔
1367
    // Read a lookahead token.
2,418,046✔
1368
    if (yyla.empty ())
6,577,624✔
1369
      {
1,004,762✔
1370
        YYCDEBUG << "Reading a token\n";
983,802✔
1371
#if YY_EXCEPTIONS
5,122,420✔
1372
        try
983,802✔
1373
#endif // YY_EXCEPTIONS
983,802✔
1374
          {
983,802✔
1375
            symbol_type yylookahead (yylex (scanner));
983,802✔
1376
            yyla.move (yylookahead);
983,802✔
1377
          }
5,122,874✔
1378
#if YY_EXCEPTIONS
983,802✔
1379
        catch (const syntax_error& yyexc)
5,122,874✔
1380
          {
5,122,874✔
1381
            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
1,948,684✔
1382
            error (yyexc);
58✔
1383
            goto yyerrlab1;
58✔
1384
          }
2,190,504✔
1385
#endif // YY_EXCEPTIONS
3,413,168✔
1386
      }
3,413,168✔
1387
    YY_SYMBOL_PRINT ("Next token is", yyla);
3,413,168✔
1388

3,413,168✔
1389
    if (yyla.kind () == symbol_kind::SYM_YYerror)
3,413,168✔
1390
    {
995,184✔
1391
      // The scanner already issued an error message, process directly
995,184✔
1392
      // to error recovery.  But do not keep the error token as
995,184✔
1393
      // lookahead, it is too special and may lead us to an endless
995,184✔
1394
      // loop in error recovery. */
995,184✔
1395
      yyla.kind_ = symbol_kind::SYM_YYUNDEF;
995,184✔
1396
      goto yyerrlab1;
58✔
1397
    }
58✔
1398

2,418,042✔
1399
    /* If the proper action on seeing token YYLA.TYPE is to reduce or
2,418,042✔
1400
       to detect an error, take that action.  */
2,418,042✔
1401
    yyn += yyla.kind ();
4,608,466✔
1402
    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
4,608,466✔
1403
      {
3,626,110✔
1404
        goto yydefault;
1,435,628✔
1405
      }
3,626,110✔
1406

982,356✔
1407
    // Reduce or error.
982,356✔
1408
    yyn = yytable_[yyn];
982,356✔
1409
    if (yyn <= 0)
982,356✔
1410
      {
1411
        if (yy_table_value_is_error_ (yyn))
×
1412
          goto yyerrlab;
×
1413
        yyn = -yyn;
×
1414
        goto yyreduce;
1415
      }
1416

982,356✔
1417
    // Count tokens shifted since error; after three, turn off error status.
3,172,838✔
1418
    if (yyerrstatus_)
3,172,838✔
1419
      --yyerrstatus_;
1,196,970✔
1420

2,179,326✔
1421
    // Shift the lookahead token.
2,179,326✔
1422
    yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));
982,356✔
1423
    goto yynewstate;
982,356✔
1424

4,366,718✔
1425

4,366,718✔
1426
  /*-----------------------------------------------------------.
3,373,206✔
1427
  | yydefault -- do the default action for the current state.  |
3,373,206!
1428
  `-----------------------------------------------------------*/
3,373,206✔
1429
  yydefault:
3,373,206✔
1430
    yyn = yydefact_[+yystack_[0].state];
3,373,206✔
1431
    if (yyn == 0)
3,373,206✔
1432
      goto yyerrlab;
300✔
1433
    goto yyreduce;
3,372,906✔
1434

4,366,416✔
1435

3,372,904✔
1436
  /*-----------------------------.
3,372,904✔
1437
  | yyreduce -- do a reduction.  |
3,372,904✔
1438
  `-----------------------------*/
4,366,416✔
1439
  yyreduce:
4,366,416✔
1440
    yylen = yyr2_[yyn];
3,372,904✔
1441
    {
3,372,904✔
1442
      stack_symbol_type yylhs;
3,372,904✔
1443
      yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
3,372,904✔
1444
      /* Variants are always initialized to an empty instance of the
3,372,904✔
1445
         correct type. The default '$$ = $1' action is NOT applied
6,517,822✔
1446
         when using variants.  */
6,517,822✔
1447
      switch (yyr1_[yyn])
6,517,822✔
1448
    {
3,373,204✔
1449
      case symbol_kind::SYM_aggregate: // aggregate
3,146,378✔
1450
        yylhs.value.emplace< AggrNode* > ();
1,760✔
1451
        break;
1,760✔
1452

1453
      case symbol_kind::SYM_equality: // equality
235,232✔
1454
      case symbol_kind::SYM_relational: // relational
235,232✔
1455
      case symbol_kind::SYM_stringop: // stringop
3,379,570✔
1456
        yylhs.value.emplace< CompareType > ();
3,379,570✔
1457
        break;
3,379,570✔
1458

3,379,570✔
1459
      case symbol_kind::SYM_constant: // constant
3,395,350✔
1460
      case symbol_kind::SYM_primary_key: // primary_key
251,012✔
1461
        yylhs.value.emplace< ConstantNode* > ();
251,012✔
1462
        break;
251,012✔
1463

3,395,350✔
1464
      case symbol_kind::SYM_distinct: // distinct
3,395,350✔
1465
      case symbol_kind::SYM_distinct_param: // distinct_param
3,012✔
1466
      case symbol_kind::SYM_sort: // sort
3,012✔
1467
      case symbol_kind::SYM_sort_param: // sort_param
3,012✔
1468
      case symbol_kind::SYM_limit: // limit
1,252✔
1469
        yylhs.value.emplace< DescriptorNode* > ();
233,714✔
1470
        break;
236,280✔
1471

237,504✔
1472
      case symbol_kind::SYM_post_query: // post_query
257,010✔
1473
        yylhs.value.emplace< DescriptorOrderingNode* > ();
257,010✔
1474
        break;
20,758✔
1475

237,620✔
1476
      case symbol_kind::SYM_expr: // expr
721,308✔
1477
        yylhs.value.emplace< ExpressionNode* > ();
721,308✔
1478
        break;
721,308✔
1479

1,252✔
1480
      case symbol_kind::SYM_geoloop_content: // geoloop_content
1,426✔
1481
      case symbol_kind::SYM_geoloop: // geoloop
682✔
1482
      case symbol_kind::SYM_geopoly_content: // geopoly_content
1,000✔
1483
      case symbol_kind::SYM_geospatial: // geospatial
1,358✔
1484
        yylhs.value.emplace< GeospatialNode* > ();
1,560✔
1485
        break;
1,560✔
1486

1,560✔
1487
      case symbol_kind::SYM_list: // list
2,548✔
1488
      case symbol_kind::SYM_list_content: // list_content
24,334✔
1489
        yylhs.value.emplace< ListNode* > ();
24,334✔
1490
        break;
24,334✔
1491

2,548✔
1492
      case symbol_kind::SYM_path_elem: // path_elem
716,078✔
1493
        yylhs.value.emplace< PathElem > ();
716,078✔
1494
        break;
716,078✔
1495

2,548✔
1496
      case symbol_kind::SYM_path: // path
244,996✔
1497
        yylhs.value.emplace< PathNode* > ();
245,030✔
1498
        break;
245,064✔
1499

2,856✔
1500
      case symbol_kind::SYM_post_op: // post_op
235,378✔
1501
        yylhs.value.emplace< PostOpNode* > ();
235,378✔
1502
        break;
235,070✔
1503

3,244✔
1504
      case symbol_kind::SYM_prop: // prop
237,796✔
1505
      case symbol_kind::SYM_simple_prop: // simple_prop
237,796✔
1506
        yylhs.value.emplace< PropertyNode* > ();
237,796✔
1507
        break;
235,248✔
1508

483,048✔
1509
      case symbol_kind::SYM_query: // query
935,282✔
1510
      case symbol_kind::SYM_compare: // compare
935,282✔
1511
        yylhs.value.emplace< QueryNode* > ();
687,482✔
1512
        break;
923,576✔
1513

923,576✔
1514
      case symbol_kind::SYM_subquery: // subquery
923,576✔
1515
        yylhs.value.emplace< SubqueryNode* > ();
162✔
1516
        break;
236,254✔
1517

923,754✔
1518
      case symbol_kind::SYM_boolexpr: // boolexpr
923,754✔
1519
        yylhs.value.emplace< TrueOrFalseNode* > ();
236,620✔
1520
        break;
348✔
1521

1,140,684✔
1522
      case symbol_kind::SYM_value: // value
1,377,032✔
1523
        yylhs.value.emplace< ValueNode* > ();
1,160,618✔
1524
        break;
1,160,618✔
1525

687,482✔
1526
      case symbol_kind::SYM_direction: // direction
687,644✔
1527
        yylhs.value.emplace< bool > ();
520✔
1528
        break;
520✔
1529

687,482✔
1530
      case symbol_kind::SYM_coordinate: // coordinate
687,830✔
1531
        yylhs.value.emplace< double > ();
824✔
1532
        break;
824✔
1533

687,482✔
1534
      case symbol_kind::SYM_comp_type: // comp_type
1,160,608✔
1535
      case symbol_kind::SYM_aggr_op: // aggr_op
479,242✔
1536
        yylhs.value.emplace< int > ();
479,242✔
1537
        break;
6,116✔
1538

6,474✔
1539
      case symbol_kind::SYM_geopoint: // geopoint
6,474✔
1540
        yylhs.value.emplace< std::optional<GeoPoint> > ();
578✔
1541
        break;
220✔
1542

6,592✔
1543
      case symbol_kind::SYM_ID: // "identifier"
245,888✔
1544
      case symbol_kind::SYM_STRING: // "string"
245,888✔
1545
      case symbol_kind::SYM_BASE64: // "base64"
245,412✔
1546
      case symbol_kind::SYM_INFINITY: // "infinity"
249,768✔
1547
      case symbol_kind::SYM_NAN: // "NaN"
251,528✔
1548
      case symbol_kind::SYM_NATURAL0: // "natural0"
251,528✔
1549
      case symbol_kind::SYM_NUMBER: // "number"
251,528✔
1550
      case symbol_kind::SYM_FLOAT: // "float"
245,412✔
1551
      case symbol_kind::SYM_TIMESTAMP: // "date"
245,632✔
1552
      case symbol_kind::SYM_UUID: // "UUID"
245,632✔
1553
      case symbol_kind::SYM_OID: // "ObjectId"
245,632✔
1554
      case symbol_kind::SYM_LINK: // "link"
245,412✔
1555
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
245,412✔
1556
      case symbol_kind::SYM_ARG: // "argument"
245,412✔
1557
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
245,412✔
1558
      case symbol_kind::SYM_ENDSWITH: // "endswith"
245,412✔
1559
      case symbol_kind::SYM_CONTAINS: // "contains"
245,412✔
1560
      case symbol_kind::SYM_TEXT: // "fulltext"
245,412✔
1561
      case symbol_kind::SYM_LIKE: // "like"
245,412✔
1562
      case symbol_kind::SYM_BETWEEN: // "between"
245,412✔
1563
      case symbol_kind::SYM_IN: // "in"
245,412✔
1564
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
245,412✔
1565
      case symbol_kind::SYM_OBJ: // "obj"
245,412✔
1566
      case symbol_kind::SYM_SORT: // "sort"
245,412✔
1567
      case symbol_kind::SYM_DISTINCT: // "distinct"
245,412✔
1568
      case symbol_kind::SYM_LIMIT: // "limit"
245,412✔
1569
      case symbol_kind::SYM_ASCENDING: // "ascending"
245,412✔
1570
      case symbol_kind::SYM_DESCENDING: // "descending"
245,412✔
1571
      case symbol_kind::SYM_SIZE: // "@size"
245,412✔
1572
      case symbol_kind::SYM_TYPE: // "@type"
245,412✔
1573
      case symbol_kind::SYM_KEY_VAL: // "key or value"
245,412✔
1574
      case symbol_kind::SYM_id: // id
245,412✔
1575
        yylhs.value.emplace< std::string > ();
245,412✔
1576
        break;
245,412✔
1577

245,412✔
1578
      default:
245,412✔
1579
        break;
20,016✔
1580
    }
3,373,020✔
1581

3,373,020✔
1582

3,373,020✔
1583

3,373,020✔
1584
      // Perform the reduction.
3,373,020✔
1585
      YY_REDUCE_PRINT (yyn);
3,373,020✔
1586
#if YY_EXCEPTIONS
3,373,020✔
1587
      try
3,373,020✔
1588
#endif // YY_EXCEPTIONS
3,373,020✔
1589
        {
3,373,020✔
1590
          switch (yyn)
3,373,020✔
1591
            {
3,620,400✔
1592
  case 2: // final: query post_query
267,396✔
1593
                       { drv.result = yystack_[1].value.as < QueryNode* > (); drv.ordering = yystack_[0].value.as < DescriptorOrderingNode* > (); }
267,396✔
1594
    break;
20,016✔
1595

21,042✔
1596
  case 3: // query: compare
256,362✔
1597
                                { yylhs.value.as < QueryNode* > () = yystack_[0].value.as < QueryNode* > (); }
3,380,220✔
1598
    break;
235,320✔
1599

1600
  case 4: // query: query "||" query
214,960✔
1601
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<OrNode>(yystack_[2].value.as < QueryNode* > (), yystack_[0].value.as < QueryNode* > ()); }
214,960✔
1602
    break;
3,359,860✔
1603

3,144,900✔
1604
  case 5: // query: query "&&" query
3,145,360✔
1605
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<AndNode>(yystack_[2].value.as < QueryNode* > (), yystack_[0].value.as < QueryNode* > ()); }
3,145,360✔
1606
    break;
3,145,360✔
1607

3,144,900✔
1608
  case 6: // query: "!" query
3,145,376✔
1609
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<NotNode>(yystack_[0].value.as < QueryNode* > ()); }
21,518✔
1610
    break;
21,518✔
1611

21,042✔
1612
  case 7: // query: '(' query ')'
616✔
1613
                                { yylhs.value.as < QueryNode* > () = yystack_[1].value.as < QueryNode* > (); }
236,960✔
1614
    break;
236,960✔
1615

236,344✔
1616
  case 8: // query: boolexpr
348✔
1617
                                { yylhs.value.as < QueryNode* > () =yystack_[0].value.as < TrueOrFalseNode* > (); }
215,308✔
1618
    break;
215,308✔
1619

214,960✔
1620
  case 9: // compare: expr equality expr
231,284✔
1621
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<EqualityNode>(yystack_[2].value.as < ExpressionNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ()); }
231,744✔
1622
    break;
231,744✔
1623

460✔
1624
  case 10: // compare: expr equality "[c]" expr
146✔
1625
                                {
622✔
1626
                                    auto tmp = drv.m_parse_nodes.create<EqualityNode>(yystack_[3].value.as < ExpressionNode* > (), yystack_[2].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ());
622✔
1627
                                    tmp->case_sensitive = false;
622✔
1628
                                    yylhs.value.as < QueryNode* > () = tmp;
146✔
1629
                                }
762✔
1630
    break;
762✔
1631

616✔
1632
  case 11: // compare: expr relational expr
2,544✔
1633
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<RelationalNode>(yystack_[2].value.as < ExpressionNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ()); }
2,892✔
1634
    break;
2,892✔
1635

348✔
1636
  case 12: // compare: value stringop value
650✔
1637
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<StringOpsNode>(yystack_[2].value.as < ValueNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ValueNode* > ()); }
232,884✔
1638
    break;
232,884✔
1639

232,234✔
1640
  case 13: // compare: value "fulltext" value
14✔
1641
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<StringOpsNode>(yystack_[2].value.as < ValueNode* > (), CompareType::TEXT, yystack_[0].value.as < ValueNode* > ()); }
176✔
1642
    break;
176✔
1643

162✔
1644
  case 14: // compare: value stringop "[c]" value
700✔
1645
                                {
700✔
1646
                                    auto tmp = drv.m_parse_nodes.create<StringOpsNode>(yystack_[3].value.as < ValueNode* > (), yystack_[2].value.as < CompareType > (), yystack_[0].value.as < ValueNode* > ());
700✔
1647
                                    tmp->case_sensitive = false;
700✔
1648
                                    yylhs.value.as < QueryNode* > () = tmp;
538✔
1649
                                }
3,104✔
1650
    break;
3,104✔
1651

2,566✔
1652
  case 15: // compare: value "between" list
50✔
1653
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<BetweenNode>(yystack_[2].value.as < ValueNode* > (), yystack_[0].value.as < ListNode* > ()); }
728✔
1654
    break;
728✔
1655

678✔
1656
  case 16: // compare: prop "geowithin" geospatial
70✔
1657
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<GeoWithinNode>(yystack_[2].value.as < PropertyNode* > (), yystack_[0].value.as < GeospatialNode* > ()); }
84✔
1658
    break;
84✔
1659

14✔
1660
  case 17: // compare: prop "geowithin" "argument"
24✔
1661
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<GeoWithinNode>(yystack_[2].value.as < PropertyNode* > (), yystack_[0].value.as < std::string > ()); }
570✔
1662
    break;
570✔
1663

546✔
1664
  case 18: // expr: value
469,160✔
1665
                                { yylhs.value.as < ExpressionNode* > () = yystack_[0].value.as < ValueNode* > (); }
469,160✔
1666
    break;
469,160✔
1667

546✔
1668
  case 19: // expr: '(' expr ')'
118✔
1669
                                { yylhs.value.as < ExpressionNode* > () = yystack_[1].value.as < ExpressionNode* > (); }
168✔
1670
    break;
168✔
1671

50✔
1672
  case 20: // expr: expr '*' expr
140✔
1673
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '*', yystack_[0].value.as < ExpressionNode* > ()); }
210✔
1674
    break;
210✔
1675

70✔
1676
  case 21: // expr: expr '/' expr
98✔
1677
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '/', yystack_[0].value.as < ExpressionNode* > ()); }
122✔
1678
    break;
122✔
1679

24✔
1680
  case 22: // expr: expr '+' expr
222✔
1681
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '+', yystack_[0].value.as < ExpressionNode* > ()); }
470,824✔
1682
    break;
470,824✔
1683

470,602✔
1684
  case 23: // expr: expr '-' expr
68✔
1685
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '-', yystack_[0].value.as < ExpressionNode* > ()); }
186✔
1686
    break;
186✔
1687

118✔
1688
  case 24: // value: constant
233,564✔
1689
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < ConstantNode* > ();}
233,704✔
1690
    break;
233,704✔
1691

140✔
1692
  case 25: // value: prop
234,944✔
1693
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < PropertyNode* > ();}
235,042✔
1694
    break;
235,042✔
1695

98✔
1696
  case 26: // value: list
646✔
1697
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < ListNode* > ();}
868✔
1698
    break;
868✔
1699

222✔
1700
  case 27: // value: aggregate
1,760✔
1701
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < AggrNode* > ();}
1,828✔
1702
    break;
1,828✔
1703

68✔
1704
  case 28: // value: subquery
162✔
1705
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < SubqueryNode* > ();}
234,750✔
1706
    break;
234,750✔
1707

234,588✔
1708
  case 29: // prop: path post_op
230,962✔
1709
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > ()); yylhs.value.as < PropertyNode* > ()->add_postop(yystack_[0].value.as < PostOpNode* > ()); }
466,942✔
1710
    break;
466,942✔
1711

235,980✔
1712
  case 30: // prop: comp_type path post_op
4,106✔
1713
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > (), ExpressionComparisonType(yystack_[2].value.as < int > ())); yylhs.value.as < PropertyNode* > ()->add_postop(yystack_[0].value.as < PostOpNode* > ()); }
4,752✔
1714
    break;
4,752✔
1715

646✔
1716
  case 31: // aggregate: path aggr_op '.' id
396✔
1717
                                {
2,156✔
1718
                                    auto prop = drv.m_parse_nodes.create<PropertyNode>(yystack_[3].value.as < PathNode* > ());
2,156✔
1719
                                    yylhs.value.as < AggrNode* > () = drv.m_parse_nodes.create<LinkAggrNode>(prop, yystack_[2].value.as < int > (), yystack_[0].value.as < std::string > ());
2,156✔
1720
                                }
396✔
1721
    break;
558✔
1722

162✔
1723
  case 32: // aggregate: path aggr_op
1,526✔
1724
                                {
1,364✔
1725
                                    auto prop = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > ());
233,354✔
1726
                                    yylhs.value.as < AggrNode* > () = drv.m_parse_nodes.create<ListAggrNode>(prop, yystack_[0].value.as < int > ());
233,354✔
1727
                                }
233,354✔
1728
    break;
1,364✔
1729

4,106✔
1730
  case 33: // simple_prop: path
4,286✔
1731
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[0].value.as < PathNode* > ()); }
4,286✔
1732
    break;
180✔
1733

396✔
1734
  case 34: // subquery: "subquery" '(' simple_prop ',' id ',' query ')' '.' "@size"
558✔
1735
                                                               { yylhs.value.as < SubqueryNode* > () = drv.m_parse_nodes.create<SubqueryNode>(yystack_[7].value.as < PropertyNode* > (), yystack_[5].value.as < std::string > (), yystack_[3].value.as < QueryNode* > ()); }
558✔
1736
    break;
558✔
1737

396✔
1738
  case 35: // coordinate: "float"
680✔
1739
                    { yylhs.value.as < double > () = strtod(yystack_[0].value.as < std::string > ().c_str(), nullptr); }
284✔
1740
    break;
1,648✔
1741

1,364✔
1742
  case 36: // coordinate: "natural0"
1,516✔
1743
                    { yylhs.value.as < double > () = double(strtoll(yystack_[0].value.as < std::string > ().c_str(), nullptr, 0)); }
1,516✔
1744
    break;
1,516✔
1745

1,364✔
1746
  case 37: // coordinate: "argument"
40✔
1747
                    { yylhs.value.as < double > () = drv.get_arg_for_coordinate(yystack_[0].value.as < std::string > ()); }
220✔
1748
    break;
220✔
1749

180✔
1750
  case 38: // geopoint: '[' coordinate ',' coordinate ']'
206✔
1751
                                        { yylhs.value.as < std::optional<GeoPoint> > () = GeoPoint{yystack_[3].value.as < double > (), yystack_[1].value.as < double > ()}; }
368✔
1752
    break;
368✔
1753

162✔
1754
  case 39: // geopoint: '[' coordinate ',' coordinate ',' "float" ']'
14✔
1755
                                                  { yylhs.value.as < std::optional<GeoPoint> > () = GeoPoint{yystack_[5].value.as < double > (), yystack_[3].value.as < double > (), strtod(yystack_[1].value.as < std::string > ().c_str(), nullptr)}; }
298✔
1756
    break;
298✔
1757

284✔
1758
  case 40: // geoloop_content: geopoint
34✔
1759
               { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Loop{}, *yystack_[0].value.as < std::optional<GeoPoint> > ()); }
186✔
1760
    break;
186✔
1761

152✔
1762
  case 41: // geoloop_content: geoloop_content ',' geopoint
136✔
1763
                                   { yystack_[2].value.as < GeospatialNode* > ()->add_point_to_loop(*yystack_[0].value.as < std::optional<GeoPoint> > ()); yylhs.value.as < GeospatialNode* > () = yystack_[2].value.as < GeospatialNode* > (); }
176✔
1764
    break;
176✔
1765

40✔
1766
  case 42: // geoloop: '{' geoloop_content '}'
34✔
1767
                                  { yylhs.value.as < GeospatialNode* > () = yystack_[1].value.as < GeospatialNode* > (); }
240✔
1768
    break;
240✔
1769

206✔
1770
  case 43: // geopoly_content: geoloop
30✔
1771
              { yylhs.value.as < GeospatialNode* > () = yystack_[0].value.as < GeospatialNode* > (); }
44✔
1772
    break;
44✔
1773

14✔
1774
  case 44: // geopoly_content: geopoly_content ',' geoloop
4✔
1775
                                  { yystack_[2].value.as < GeospatialNode* > ()->add_loop_to_polygon(yystack_[0].value.as < GeospatialNode* > ()); yylhs.value.as < GeospatialNode* > () = yystack_[2].value.as < GeospatialNode* > (); }
38✔
1776
    break;
38✔
1777

34✔
1778
  case 45: // geospatial: "geobox" '(' geopoint ',' geopoint ')'
10✔
1779
                                            { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Box{}, *yystack_[3].value.as < std::optional<GeoPoint> > (), *yystack_[1].value.as < std::optional<GeoPoint> > ()); }
146✔
1780
    break;
146✔
1781

136✔
1782
  case 46: // geospatial: "geocircle" '(' geopoint ',' coordinate ')'
30✔
1783
                                                { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Circle{}, *yystack_[3].value.as < std::optional<GeoPoint> > (), yystack_[1].value.as < double > ()); }
64✔
1784
    break;
64✔
1785

34✔
1786
  case 47: // geospatial: "geopolygon" '(' geopoly_content ')'
30✔
1787
                                            { yylhs.value.as < GeospatialNode* > () = yystack_[1].value.as < GeospatialNode* > (); }
60✔
1788
    break;
60✔
1789

30✔
1790
  case 48: // post_query: %empty
20,064✔
1791
                                { yylhs.value.as < DescriptorOrderingNode* > () = drv.m_parse_nodes.create<DescriptorOrderingNode>();}
20,068✔
1792
    break;
20,068✔
1793

4✔
1794
  case 49: // post_query: post_query sort
318✔
1795
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
328✔
1796
    break;
328✔
1797

10✔
1798
  case 50: // post_query: post_query distinct
174✔
1799
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
204✔
1800
    break;
204✔
1801

30✔
1802
  case 51: // post_query: post_query limit
202✔
1803
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
232✔
1804
    break;
232✔
1805

30✔
1806
  case 52: // distinct: "distinct" '(' distinct_param ')'
174✔
1807
                                          { yylhs.value.as < DescriptorNode* > () = yystack_[1].value.as < DescriptorNode* > (); }
21,266✔
1808
    break;
21,266✔
1809

21,092✔
1810
  case 53: // distinct_param: path
178✔
1811
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::DISTINCT); yylhs.value.as < DescriptorNode* > ()->add(yystack_[0].value.as < PathNode* > ());}
496✔
1812
    break;
496✔
1813

318✔
1814
  case 54: // distinct_param: distinct_param ',' path
22✔
1815
                                { yystack_[2].value.as < DescriptorNode* > ()->add(yystack_[0].value.as < PathNode* > ()); yylhs.value.as < DescriptorNode* > () = yystack_[2].value.as < DescriptorNode* > (); }
196✔
1816
    break;
196✔
1817

174✔
1818
  case 55: // sort: "sort" '(' sort_param ')'
318✔
1819
                                { yylhs.value.as < DescriptorNode* > () = yystack_[1].value.as < DescriptorNode* > (); }
520✔
1820
    break;
520✔
1821

202✔
1822
  case 56: // sort_param: path direction
322✔
1823
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::SORT); yylhs.value.as < DescriptorNode* > ()->add(yystack_[1].value.as < PathNode* > (), yystack_[0].value.as < bool > ());}
496✔
1824
    break;
496✔
1825

174✔
1826
  case 57: // sort_param: sort_param ',' path direction
36✔
1827
                                     { yystack_[3].value.as < DescriptorNode* > ()->add(yystack_[1].value.as < PathNode* > (), yystack_[0].value.as < bool > ()); yylhs.value.as < DescriptorNode* > () = yystack_[3].value.as < DescriptorNode* > (); }
214✔
1828
    break;
214✔
1829

178✔
1830
  case 58: // limit: "limit" '(' "natural0" ')'
202✔
1831
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::LIMIT, yystack_[1].value.as < std::string > ()); }
224✔
1832
    break;
224✔
1833

22✔
1834
  case 59: // direction: "ascending"
290✔
1835
                                { yylhs.value.as < bool > () = true; }
608✔
1836
    break;
608✔
1837

318✔
1838
  case 60: // direction: "descending"
68✔
1839
                                { yylhs.value.as < bool > () = false; }
390✔
1840
    break;
390✔
1841

322✔
1842
  case 61: // list: '{' list_content '}'
486✔
1843
                                        { yylhs.value.as < ListNode* > () = yystack_[1].value.as < ListNode* > (); }
522✔
1844
    break;
522✔
1845

36✔
1846
  case 62: // list: comp_type '{' list_content '}'
210✔
1847
                                        { yystack_[1].value.as < ListNode* > ()->set_comp_type(ExpressionComparisonType(yystack_[3].value.as < int > ())); yylhs.value.as < ListNode* > () = yystack_[1].value.as < ListNode* > (); }
412✔
1848
    break;
412✔
1849

202✔
1850
  case 63: // list_content: constant
630✔
1851
                                { yylhs.value.as < ListNode* > () = drv.m_parse_nodes.create<ListNode>(yystack_[0].value.as < ConstantNode* > ()); }
920✔
1852
    break;
920✔
1853

290✔
1854
  case 64: // list_content: %empty
72✔
1855
                                { yylhs.value.as < ListNode* > () = drv.m_parse_nodes.create<ListNode>(); }
140✔
1856
    break;
140✔
1857

68✔
1858
  case 65: // list_content: list_content ',' constant
1,150✔
1859
                                { yystack_[2].value.as < ListNode* > ()->add_element(yystack_[0].value.as < ConstantNode* > ()); yylhs.value.as < ListNode* > () = yystack_[2].value.as < ListNode* > (); }
1,636✔
1860
    break;
1,636✔
1861

486✔
1862
  case 66: // constant: primary_key
15,608✔
1863
                                { yylhs.value.as < ConstantNode* > () = yystack_[0].value.as < ConstantNode* > (); }
15,818✔
1864
    break;
15,818✔
1865

210✔
1866
  case 67: // constant: "infinity"
76✔
1867
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::INFINITY_VAL, yystack_[0].value.as < std::string > ()); }
706✔
1868
    break;
706✔
1869

630✔
1870
  case 68: // constant: "NaN"
32✔
1871
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NAN_VAL, yystack_[0].value.as < std::string > ()); }
104✔
1872
    break;
104✔
1873

72✔
1874
  case 69: // constant: "base64"
714✔
1875
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::BASE64, yystack_[0].value.as < std::string > ()); }
1,864✔
1876
    break;
1,864✔
1877

1,150✔
1878
  case 70: // constant: "float"
1,076✔
1879
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::FLOAT, yystack_[0].value.as < std::string > ()); }
16,702✔
1880
    break;
16,702✔
1881

15,626✔
1882
  case 71: // constant: "date"
282✔
1883
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TIMESTAMP, yystack_[0].value.as < std::string > ()); }
358✔
1884
    break;
358✔
1885

76✔
1886
  case 72: // constant: "link"
4✔
1887
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::LINK, yystack_[0].value.as < std::string > ()); }
36✔
1888
    break;
36✔
1889

32✔
1890
  case 73: // constant: "typed link"
24✔
1891
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TYPED_LINK, yystack_[0].value.as < std::string > ()); }
382✔
1892
    break;
382✔
1893

358✔
1894
  case 74: // constant: "true"
62✔
1895
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TRUE, ""); }
1,138✔
1896
    break;
1,138✔
1897

1,076✔
1898
  case 75: // constant: "false"
136✔
1899
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::FALSE, ""); }
466✔
1900
    break;
466✔
1901

330✔
1902
  case 76: // constant: "null"
1,110✔
1903
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NULL_VAL, ""); }
1,114✔
1904
    break;
1,114✔
1905

4✔
1906
  case 77: // constant: "argument"
216,140✔
1907
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::ARG, yystack_[0].value.as < std::string > ()); }
216,164✔
1908
    break;
216,164✔
1909

24✔
1910
  case 78: // constant: comp_type "argument"
16✔
1911
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ExpressionComparisonType(yystack_[1].value.as < int > ()), yystack_[0].value.as < std::string > ()); }
102✔
1912
    break;
102✔
1913

86✔
1914
  case 79: // constant: "obj" '(' "string" ',' primary_key ')'
52✔
1915
                                { 
212✔
1916
                                    auto tmp = yystack_[1].value.as < ConstantNode* > ();
212✔
1917
                                    tmp->add_table(yystack_[3].value.as < std::string > ());
212✔
1918
                                    yylhs.value.as < ConstantNode* > () = tmp;
52✔
1919
                                }
1,166✔
1920
    break;
1,166✔
1921

1,114✔
1922
  case 80: // primary_key: "natural0"
11,276✔
1923
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NUMBER, yystack_[0].value.as < std::string > ()); }
227,804✔
1924
    break;
227,804✔
1925

216,528✔
1926
  case 81: // primary_key: "number"
184✔
1927
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NUMBER, yystack_[0].value.as < std::string > ()); }
200✔
1928
    break;
200✔
1929

16✔
1930
  case 82: // primary_key: "string"
3,586✔
1931
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::STRING, yystack_[0].value.as < std::string > ()); }
3,638✔
1932
    break;
3,638✔
1933

52✔
1934
  case 83: // primary_key: "UUID"
340✔
1935
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::UUID_T, yystack_[0].value.as < std::string > ()); }
340✔
1936
    break;
340✔
1937

52✔
1938
  case 84: // primary_key: "ObjectId"
338✔
1939
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::OID, yystack_[0].value.as < std::string > ()); }
872✔
1940
    break;
872✔
1941

534✔
1942
  case 85: // boolexpr: "truepredicate"
268✔
1943
                                { yylhs.value.as < TrueOrFalseNode* > () = drv.m_parse_nodes.create<TrueOrFalseNode>(true); }
626✔
1944
    break;
626✔
1945

358✔
1946
  case 86: // boolexpr: "falsepredicate"
80✔
1947
                                { yylhs.value.as < TrueOrFalseNode* > () = drv.m_parse_nodes.create<TrueOrFalseNode>(false); }
11,672✔
1948
    break;
11,672✔
1949

11,592✔
1950
  case 87: // comp_type: "any"
1,878✔
1951
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::Any); }
2,062✔
1952
    break;
2,062✔
1953

184✔
1954
  case 88: // comp_type: "all"
1,268✔
1955
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::All); }
4,448✔
1956
    break;
4,448✔
1957

3,180✔
1958
  case 89: // comp_type: "none"
1,210✔
1959
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::None); }
1,546✔
1960
    break;
1,546✔
1961

336✔
1962
  case 90: // post_op: %empty
232,924✔
1963
                                { yylhs.value.as < PostOpNode* > () = nullptr; }
233,310✔
1964
    break;
233,310✔
1965

386✔
1966
  case 91: // post_op: '.' "@size"
1,854✔
1967
                                { yylhs.value.as < PostOpNode* > () = drv.m_parse_nodes.create<PostOpNode>(yystack_[0].value.as < std::string > (), PostOpNode::SIZE);}
2,122✔
1968
    break;
2,122✔
1969

268✔
1970
  case 92: // post_op: '.' "@type"
292✔
1971
                                { yylhs.value.as < PostOpNode* > () = drv.m_parse_nodes.create<PostOpNode>(yystack_[0].value.as < std::string > (), PostOpNode::TYPE);}
372✔
1972
    break;
372✔
1973

80✔
1974
  case 93: // aggr_op: '.' "@max"
432✔
1975
                                { yylhs.value.as < int > () = int(AggrNode::MAX);}
2,310✔
1976
    break;
2,310✔
1977

1,878✔
1978
  case 94: // aggr_op: '.' "@min"
418✔
1979
                                { yylhs.value.as < int > () = int(AggrNode::MIN);}
1,686✔
1980
    break;
1,686✔
1981

1,268✔
1982
  case 95: // aggr_op: '.' "@sun"
480✔
1983
                                { yylhs.value.as < int > () = int(AggrNode::SUM);}
1,690✔
1984
    break;
1,690✔
1985

1,210✔
1986
  case 96: // aggr_op: '.' "@average"
430✔
1987
                                { yylhs.value.as < int > () = int(AggrNode::AVG);}
234,374✔
1988
    break;
234,374✔
1989

233,944✔
1990
  case 97: // equality: "=="
229,632✔
1991
                                { yylhs.value.as < CompareType > () = CompareType::EQUAL; }
231,490✔
1992
    break;
231,490✔
1993

1,858✔
1994
  case 98: // equality: "!="
1,502✔
1995
                                { yylhs.value.as < CompareType > () = CompareType::NOT_EQUAL; }
1,506✔
1996
    break;
1,506✔
1997

4✔
1998
  case 99: // equality: "in"
366✔
1999
                                { yylhs.value.as < CompareType > () = CompareType::IN; }
658✔
2000
    break;
658✔
2001

292✔
2002
  case 100: // relational: "<"
312✔
2003
                                { yylhs.value.as < CompareType > () = CompareType::LESS; }
744✔
2004
    break;
744✔
2005

432✔
2006
  case 101: // relational: "<="
192✔
2007
                                { yylhs.value.as < CompareType > () = CompareType::LESS_EQUAL; }
610✔
2008
    break;
610✔
2009

418✔
2010
  case 102: // relational: ">"
1,670✔
2011
                                { yylhs.value.as < CompareType > () = CompareType::GREATER; }
2,150✔
2012
    break;
2,150✔
2013

480✔
2014
  case 103: // relational: ">="
370✔
2015
                                { yylhs.value.as < CompareType > () = CompareType::GREATER_EQUAL; }
800✔
2016
    break;
800✔
2017

430✔
2018
  case 104: // stringop: "beginswith"
252✔
2019
                                { yylhs.value.as < CompareType > () = CompareType::BEGINSWITH; }
230,840✔
2020
    break;
230,840✔
2021

230,588✔
2022
  case 105: // stringop: "endswith"
252✔
2023
                                { yylhs.value.as < CompareType > () = CompareType::ENDSWITH; }
1,762✔
2024
    break;
1,762✔
2025

1,510✔
2026
  case 106: // stringop: "contains"
444✔
2027
                                { yylhs.value.as < CompareType > () = CompareType::CONTAINS; }
810✔
2028
    break;
810✔
2029

366✔
2030
  case 107: // stringop: "like"
240✔
2031
                                { yylhs.value.as < CompareType > () = CompareType::LIKE; }
552✔
2032
    break;
552✔
2033

312✔
2034
  case 108: // path: path_elem
237,572✔
2035
                                { yylhs.value.as < PathNode* > () = drv.m_parse_nodes.create<PathNode>(yystack_[0].value.as < PathElem > ()); }
237,764✔
2036
    break;
237,764✔
2037

192✔
2038
  case 109: // path: path '.' path_elem
7,254✔
2039
                                { yystack_[2].value.as < PathNode* > ()->add_element(yystack_[0].value.as < PathElem > ()); yylhs.value.as < PathNode* > () = yystack_[2].value.as < PathNode* > (); }
8,946✔
2040
    break;
8,946✔
2041

1,692✔
2042
  case 110: // path_elem: id
244,770✔
2043
                                { yylhs.value.as < PathElem > () = PathElem{yystack_[0].value.as < std::string > ()}; }
245,140✔
2044
    break;
245,140✔
2045

370✔
2046
  case 111: // path_elem: id '[' "natural0" ']'
2047
                                { yylhs.value.as < PathElem > () = PathElem{yystack_[3].value.as < std::string > (), int64_t(strtoll(yystack_[1].value.as < std::string > ().c_str(), nullptr, 0))}; }
268✔
2048
    break;
268✔
2049

268✔
2050
  case 112: // path_elem: id '[' "string" ']'
54✔
2051
                                { yylhs.value.as < PathElem > () = PathElem{yystack_[3].value.as < std::string > (), yystack_[1].value.as < std::string > ().substr(1, yystack_[1].value.as < std::string > ().size() - 2)}; }
318✔
2052
    break;
318✔
2053

264✔
2054
  case 113: // path_elem: id '[' "argument" ']'
2✔
2055
                                { yylhs.value.as < PathElem > () = PathElem{yystack_[3].value.as < std::string > (), drv.get_arg_for_index(yystack_[1].value.as < std::string > ())}; }
450✔
2056
    break;
450✔
2057

448✔
2058
  case 114: // id: "identifier"
244,880✔
2059
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
245,124✔
2060
    break;
245,124✔
2061

244✔
2062
  case 115: // id: "@links"
394✔
2063
                                { yylhs.value.as < std::string > () = std::string("@links"); }
239,012✔
2064
    break;
239,012✔
2065

238,618✔
2066
  case 116: // id: "beginswith"
2✔
2067
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
8,198✔
2068
    break;
8,198✔
2069

8,196✔
2070
  case 117: // id: "endswith"
4✔
2071
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
250✔
2072
    break;
250✔
2073

246✔
2074
  case 118: // id: "contains"
2✔
2075
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
236✔
2076
    break;
236✔
2077

234✔
2078
  case 119: // id: "like"
2079
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
218✔
2080
    break;
218✔
2081

218✔
2082
  case 120: // id: "between"
12✔
2083
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
172✔
2084
    break;
172✔
2085

160✔
2086
  case 121: // id: "key or value"
34✔
2087
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
166✔
2088
    break;
166✔
2089

132✔
2090
  case 122: // id: "sort"
20✔
2091
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
22✔
2092
    break;
22✔
2093

2✔
2094
  case 123: // id: "distinct"
14✔
2095
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
246,772✔
2096
    break;
246,772✔
2097

246,758✔
2098
  case 124: // id: "limit"
16✔
2099
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
410✔
2100
    break;
410✔
2101

394✔
2102
  case 125: // id: "ascending"
2103
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
2✔
2104
    break;
2✔
2105

2✔
2106
  case 126: // id: "descending"
6✔
2107
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
10✔
2108
    break;
10✔
2109

4✔
2110
  case 127: // id: "in"
14✔
2111
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
16✔
2112
    break;
16✔
2113

2✔
2114
  case 128: // id: "fulltext"
14✔
2115
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
14✔
2116
    break;
14✔
2117

×
2118

2119

12✔
2120
            default:
12✔
2121
              break;
12✔
2122
            }
2123
        }
36✔
2124
#if YY_EXCEPTIONS
36✔
2125
      catch (const syntax_error& yyexc)
36✔
2126
        {
2127
          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
20✔
2128
          error (yyexc);
20✔
2129
          YYERROR;
20✔
2130
        }
2131
#endif // YY_EXCEPTIONS
3,373,054✔
2132
      YY_SYMBOL_PRINT ("-> $$ =", yylhs);
3,373,054✔
2133
      yypop_ (yylen);
3,373,054✔
2134
      yylen = 0;
3,373,040✔
2135

3,373,056✔
2136
      // Shift the result of the reduction.
3,373,056✔
2137
      yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
3,373,056✔
2138
    }
3,373,040✔
2139
    goto yynewstate;
3,373,040✔
2140

300✔
2141

300✔
2142
  /*--------------------------------------.
300✔
2143
  | yyerrlab -- here on detecting error.  |
306✔
2144
  `--------------------------------------*/
306✔
2145
  yyerrlab:
306✔
2146
    // If not already recovering from an error, report this error.
300✔
2147
    if (!yyerrstatus_)
314✔
2148
      {
314✔
2149
        ++yynerrs_;
314✔
2150
        context yyctx (*this, yyla);
300✔
2151
        std::string msg = yysyntax_error_ (yyctx);
314✔
2152
        error (YY_MOVE (msg));
314✔
2153
      }
314✔
2154

300✔
2155

340✔
2156
    if (yyerrstatus_ == 3)
340✔
2157
      {
40✔
2158
        /* If just tried and failed to reuse lookahead token after an
2159
           error, discard it.  */
54✔
2160

54✔
2161
        // Return failure if at end of input.
54✔
2162
        if (yyla.kind () == symbol_kind::SYM_YYEOF)
NEW
2163
          YYABORT;
✔
NEW
2164
        else if (!yyla.empty ())
×
NEW
2165
          {
×
2166
            yy_destroy_ ("Error: discarding", yyla);
NEW
2167
            yyla.clear ();
✔
UNCOV
2168
          }
×
UNCOV
2169
      }
×
2170

300✔
2171
    // Else will try to reuse lookahead token after shifting the error token.
300✔
2172
    goto yyerrlab1;
300✔
2173

✔
2174

×
2175
  /*---------------------------------------------------.
×
2176
  | yyerrorlab -- error raised explicitly by YYERROR.  |
×
2177
  `---------------------------------------------------*/
×
2178
  yyerrorlab:
×
2179
    /* Pacify compilers when the user code never invokes YYERROR and
×
2180
       the label yyerrorlab therefore never appears in user code.  */
×
2181
    if (false)
×
2182
      YYERROR;
×
2183

×
2184
    /* Do not reclaim the symbols of the rule whose action triggered
3,145,018✔
2185
       this YYERROR.  */
3,145,018✔
2186
    yypop_ (yylen);
3,145,018✔
2187
    yylen = 0;
3,145,018✔
2188
    YY_STACK_PRINT ();
2189
    goto yyerrlab1;
2190

3,145,376✔
2191

3,145,376✔
2192
  /*-------------------------------------------------------------.
3,145,376✔
2193
  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
358✔
2194
  `-------------------------------------------------------------*/
358✔
2195
  yyerrlab1:
358✔
2196
    yyerrstatus_ = 3;   // Each real token shifted decrements this.
358✔
2197
    // Pop stack until we find a state that shifts the error token.
358✔
2198
    for (;;)
658✔
2199
      {
1,130✔
2200
        yyn = yypact_[+yystack_[0].state];
1,430✔
2201
        if (!yy_pact_value_is_default_ (yyn))
1,430✔
2202
          {
1,430✔
2203
            yyn += symbol_kind::SYM_YYerror;
1,430✔
2204
            if (0 <= yyn && yyn <= yylast_
1,430✔
2205
                && yycheck_[yyn] == symbol_kind::SYM_YYerror)
1,430✔
2206
              {
300✔
2207
                yyn = yytable_[yyn];
2208
                if (0 < yyn)
2209
                  break;
300✔
2210
              }
1,130✔
2211
          }
1,130✔
2212

1,130✔
2213
        // Pop the current state because it cannot handle the error token.
1,130✔
2214
        if (yystack_.size () == 1)
1,130✔
2215
          YYABORT;
1,130!
2216

1,130✔
2217
        yy_destroy_ ("Error: popping", yystack_[0]);
1,130!
2218
        yypop_ ();
772✔
2219
        YY_STACK_PRINT ();
772✔
2220
      }
772✔
2221
    {
358✔
2222
      stack_symbol_type error_token;
×
2223

2224

2225
      // Shift the error token.
300✔
2226
      error_token.state = state_type (yyn);
2227
      yypush_ ("Shifting", YY_MOVE (error_token));
2228
    }
2229
    goto yynewstate;
2230

19,932✔
2231

19,932✔
2232
  /*-------------------------------------.
19,932✔
2233
  | yyacceptlab -- YYACCEPT comes here.  |
19,932✔
2234
  `-------------------------------------*/
19,932✔
2235
  yyacceptlab:
19,932✔
2236
    yyresult = 0;
19,932✔
2237
    goto yyreturn;
19,932✔
2238

358✔
2239

358✔
2240
  /*-----------------------------------.
358✔
2241
  | yyabortlab -- YYABORT comes here.  |
358!
2242
  `-----------------------------------*/
358✔
2243
  yyabortlab:
358✔
2244
    yyresult = 1;
358✔
2245
    goto yyreturn;
358✔
2246

20,290✔
2247

20,290✔
2248
  /*-----------------------------------------------------.
20,648✔
2249
  | yyreturn -- parsing is finished, return the result.  |
20,648✔
2250
  `-----------------------------------------------------*/
20,290✔
2251
  yyreturn:
20,648✔
2252
    if (!yyla.empty ())
21,420✔
2253
      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
1,430✔
2254

21,420✔
2255
    /* Do not reclaim the symbols of the rule whose action triggered
21,420✔
2256
       this YYABORT or YYACCEPT.  */
21,420✔
2257
    yypop_ (yylen);
21,420✔
2258
    YY_STACK_PRINT ();
21,310✔
2259
    while (1 < yystack_.size ())
60,150✔
2260
      {
39,860✔
2261
        yy_destroy_ ("Cleanup: popping", yystack_[0]);
39,860!
2262
        yypop_ ();
39,860✔
2263
      }
40,990✔
2264

21,420✔
2265
    return yyresult;
20,290✔
2266
  }
6✔
2267
#if YY_EXCEPTIONS
1,136✔
2268
    catch (...)
364✔
2269
      {
6✔
2270
        YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
778✔
2271
        // Do not try to display the values of the reclaimed symbols,
778✔
2272
        // as their printers might throw an exception.
778✔
2273
        if (!yyla.empty ())
778✔
UNCOV
2274
          yy_destroy_ (YY_NULLPTR, yyla);
×
2275

6✔
2276
        while (1 < yystack_.size ())
42✔
2277
          {
36✔
2278
            yy_destroy_ (YY_NULLPTR, yystack_[0]);
36✔
2279
            yypop_ ();
36✔
2280
          }
36✔
2281
        throw;
6✔
2282
      }
6✔
2283
#endif // YY_EXCEPTIONS
20,296✔
2284
  }
20,296✔
2285

2286
  void
2287
  parser::error (const syntax_error& yyexc)
2288
  {
21,018✔
2289
    error (yyexc.what ());
21,018✔
2290
  }
21,018✔
2291

2292
  /* Return YYSTR after stripping away unnecessary quotes and
2293
     backslashes, so that it's suitable for yyerror.  The heuristic is
2294
     that double-quoting is unnecessary unless the string contains an
2295
     apostrophe, a comma, or backslash (other than backslash-backslash).
2296
     YYSTR is taken from yytname.  */
358✔
2297
  std::string
358✔
2298
  parser::yytnamerr_ (const char *yystr)
358✔
2299
  {
540✔
2300
    if (*yystr == '"')
540✔
2301
      {
392✔
2302
        std::string yyr;
392✔
2303
        char const *yyp = yystr;
392✔
2304

21,710✔
2305
        for (;;)
21,710✔
2306
          switch (*++yyp)
3,948✔
2307
            {
3,648✔
2308
            case '\'':
2309
            case ',':
2310
              goto do_not_strip_quotes;
21,318✔
2311

21,318✔
2312
            case '\\':
63,236✔
2313
              if (*++yyp != '\\')
41,918✔
2314
                goto do_not_strip_quotes;
41,918✔
2315
              else
41,918✔
2316
                goto append;
41,918✔
2317

2318
            append:
21,318✔
2319
            default:
3,262✔
2320
              yyr += *yyp;
3,262✔
2321
              break;
3,262✔
2322

6✔
2323
            case '"':
398✔
2324
              return yyr;
392✔
2325
            }
3,648✔
2326
      do_not_strip_quotes: ;
398✔
2327
      }
×
2328

540✔
2329
    return yystr;
582✔
2330
  }
576✔
2331

36✔
2332
  std::string
36✔
2333
  parser::symbol_name (symbol_kind_type yysymbol)
36✔
2334
  {
546✔
2335
    return yytnamerr_ (yytname_[yysymbol]);
546✔
2336
  }
21,864✔
2337

21,324✔
2338

2339

2340
  // parser::context.
2341
  parser::context::context (const parser& yyparser, const symbol_type& yyla)
58✔
2342
    : yyparser_ (yyparser)
58✔
2343
    , yyla_ (yyla)
58✔
2344
  {}
300✔
2345

2346
  int
2347
  parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
2348
  {
300✔
2349
    // Actual number of expected tokens
300✔
2350
    int yycount = 0;
300✔
2351

300✔
2352
    const int yyn = yypact_[+yyparser_.yystack_[0].state];
844✔
2353
    if (!yy_pact_value_is_default_ (yyn))
844✔
2354
      {
692✔
2355
        /* Start YYX at -YYN if negative to avoid negative indexes in
692✔
2356
           YYCHECK.  In other words, skip the first -YYN actions for
692✔
2357
           this state because they are default actions.  */
300✔
2358
        const int yyxbegin = yyn < 0 ? -yyn : 0;
692✔
2359
        // Stay within bounds of both yycheck and yytname.
3,948✔
2360
        const int yychecklim = yylast_ - yyn + 1;
3,948✔
2361
        const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
300✔
2362
        for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
15,032✔
2363
          if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::SYM_YYerror
14,866✔
2364
              && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
14,866✔
2365
            {
910✔
2366
              if (!yyarg)
910!
2367
                ++yycount;
×
2368
              else if (yycount == yyargn)
910✔
2369
                return 0;
134✔
2370
              else
776✔
2371
                yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
776✔
2372
            }
4,166✔
2373
      }
3,556✔
2374

3,556✔
2375
    if (yyarg && yycount == 0 && 0 < yyargn)
300✔
2376
      yyarg[0] = symbol_kind::SYM_YYEMPTY;
392✔
2377
    return yycount;
558✔
2378
  }
3,948✔
2379

2380

2381

2382

152✔
2383

544✔
2384

2385
  int
2386
  parser::yy_syntax_error_arguments_ (const context& yyctx,
2387
                                                 symbol_kind_type yyarg[], int yyargn) const
544✔
2388
  {
844✔
2389
    /* There are many possibilities here to consider:
844✔
2390
       - If this state is a consistent state with a default action, then
300✔
2391
         the only way this function was invoked is if the default action
300✔
2392
         is an error action.  In that case, don't check for expected
300✔
2393
         tokens because there are none.
300✔
2394
       - The only way there can be no lookahead present (in yyla) is
300✔
2395
         if this state is a consistent state with a default action.
300✔
2396
         Thus, detecting the absence of a lookahead is sufficient to
300✔
2397
         determine that there is no unexpected or expected token to
600✔
2398
         report.  In that case, just report a simple "syntax error".
300✔
2399
       - Don't assume there isn't a lookahead just because this state is
300✔
2400
         a consistent state with a default action.  There might have
300✔
2401
         been a previous inconsistent state, consistent state with a
600✔
2402
         non-default action, or user semantic action that manipulated
300✔
2403
         yyla.  (However, yyla is currently not documented for users.)
600✔
2404
       - Of course, the expected token list depends on states to have
300✔
2405
         correct lookahead information, and it depends on the parser not
600✔
2406
         to perform extra reductions after fetching a lookahead from the
600✔
2407
         scanner and before detecting a syntax error.  Thus, state merging
600✔
2408
         (from LALR or IELR) and default reductions corrupt the expected
300✔
2409
         token list.  However, the list is correct for canonical LR with
300✔
2410
         one exception: it will still contain any token that will not be
300✔
2411
         accepted due to an error action in a later state.
588✔
2412
    */
300✔
2413

600✔
2414
    if (!yyctx.lookahead ().empty ())
590✔
2415
      {
15,836✔
2416
        if (yyarg)
15,670✔
2417
          yyarg[0] = yyctx.token ();
1,214✔
2418
        int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1,214✔
2419
        return yyn + 1;
1,214✔
2420
      }
300✔
2421
    return 0;
914✔
2422
  }
134✔
2423

780✔
2424
  // Generate an error message.
780✔
2425
  std::string
914✔
2426
  parser::yysyntax_error_ (const context& yyctx) const
300✔
2427
  {
300✔
2428
    // Its maximum.
466!
2429
    enum { YYARGS_MAX = 5 };
300✔
2430
    // Arguments of yyformat.
466✔
2431
    symbol_kind_type yyarg[YYARGS_MAX];
600✔
2432
    int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
300✔
2433

300✔
2434
    char const* yyformat = YY_NULLPTR;
300✔
2435
    switch (yycount)
300✔
2436
      {
300✔
2437
#define YYCASE_(N, S)                         \
2438
        case N:                               \
300✔
2439
          yyformat = S;                       \
300✔
2440
        break
300✔
2441
      default: // Avoid compiler warnings.
300✔
2442
        YYCASE_ (0, YY_("syntax error"));
2443
        YYCASE_ (1, YY_("syntax error, unexpected %s"));
134✔
2444
        YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
130✔
2445
        YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
14✔
2446
        YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
6✔
2447
        YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
16✔
2448
#undef YYCASE_
300✔
2449
      }
300✔
2450

300✔
2451
    std::string yyres;
300✔
2452
    // Argument number.
300✔
2453
    std::ptrdiff_t yyi = 0;
300✔
2454
    for (char const* yyp = yyformat; *yyp; ++yyp)
10,628✔
2455
      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
10,328✔
2456
        {
540✔
2457
          yyres += symbol_name (yyarg[yyi++]);
540✔
2458
          ++yyp;
540✔
2459
        }
540✔
2460
      else
9,788✔
2461
        yyres += *yyp;
9,788✔
2462
    return yyres;
300✔
2463
  }
300✔
2464

2465

2466
  const short parser::yypact_ninf_ = -193;
2467

300✔
2468
  const signed char parser::yytable_ninf_ = -1;
300✔
2469

300✔
2470
  const short
300✔
2471
  parser::yypact_[] =
300✔
2472
  {
300✔
2473
     106,  -193,  -193,   -59,  -193,  -193,  -193,  -193,  -193,  -193,
300✔
2474
    -193,   106,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,
2475
    -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,  -193,
2476
    -193,  -193,  -193,    19,  -193,  -193,  -193,  -193,  -193,  -193,
2477
     106,   428,    33,    -9,  -193,   234,    49,    14,  -193,  -193,
2478
    -193,  -193,  -193,  -193,   372,    10,  -193,    36,   495,  -193,
2479
      71,    -7,    12,   -33,  -193,    37,  -193,   106,   106,   138,
2480
    -193,  -193,  -193,  -193,  -193,  -193,  -193,   223,   223,   223,
300✔
2481
     223,   167,   223,  -193,  -193,  -193,   340,  -193,    11,   284,
2482
      63,  -193,   428,    66,   453,  -193,    67,     1,    89,    97,
300✔
2483
     101,  -193,  -193,   428,  -193,  -193,   146,   129,   130,   131,
2484
    -193,  -193,  -193,   223,    65,  -193,  -193,    65,  -193,  -193,
300✔
2485
     223,   126,   126,  -193,  -193,   105,   340,  -193,   153,   160,
300✔
2486
     161,  -193,  -193,   -12,   474,  -193,  -193,  -193,  -193,  -193,
2487
    -193,  -193,  -193,   495,   163,   164,   165,   495,   495,    68,
300✔
2488
    -193,   495,   495,   201,    54,   126,  -193,   168,   178,   168,
300✔
2489
    -193,  -193,  -193,  -193,  -193,   182,   185,   -25,    -3,    53,
300✔
2490
      97,   186,   -23,   206,   168,  -193,    99,   213,   106,  -193,
2491
    -193,   495,  -193,  -193,  -193,  -193,   495,  -193,  -193,  -193,
300✔
2492
    -193,   214,   168,  -193,    15,  -193,   178,   -23,    13,    -3,
300✔
2493
      97,   -23,   219,   168,  -193,  -193,   220,   226,  -193,   111,
300✔
2494
    -193,  -193,  -193,   229,   267,  -193,  -193,   235,  -193
2✔
2495
  };
2✔
2496

134✔
2497
  const unsigned char
130✔
2498
  parser::yydefact_[] =
14✔
2499
  {
2✔
2500
       0,    85,    86,     0,    74,    75,    76,    87,    88,    89,
20✔
2501
     115,     0,   114,    82,    69,    67,    68,    80,    81,    70,
300✔
2502
      71,    83,    84,    72,    73,    77,   116,   117,   118,   128,
300✔
2503
     119,   120,   127,     0,   122,   123,   124,   125,   126,   121,
2504
       0,    64,     0,    48,     3,     0,    18,    25,    27,    28,
300✔
2505
      26,    24,    66,     8,     0,    90,   108,   110,     0,     6,
2506
       0,     0,     0,     0,    63,     0,     1,     0,     0,     2,
300✔
2507
      97,    98,   100,   102,   103,   101,    99,     0,     0,     0,
10,648✔
2508
       0,     0,     0,   104,   105,   106,     0,   107,     0,     0,
10,348✔
2509
       0,    78,    64,    90,     0,    29,    32,     0,     0,    33,
544✔
2510
       0,     7,    19,     0,    61,     5,     4,     0,     0,     0,
544✔
2511
      50,    49,    51,     0,    22,    18,    25,    23,    20,    21,
544✔
2512
       0,     9,    11,    13,    15,     0,     0,    12,     0,     0,
544✔
2513
       0,    17,    16,     0,     0,    30,    93,    94,    95,    96,
9,804✔
2514
      91,    92,   109,     0,     0,     0,     0,     0,     0,     0,
9,804✔
2515
      65,     0,     0,     0,     0,    10,    14,     0,     0,     0,
300✔
2516
      62,    31,   112,   111,   113,     0,     0,     0,     0,     0,
300✔
2517
      53,     0,     0,     0,     0,    43,     0,     0,     0,    79,
2518
      55,     0,    59,    60,    56,    52,     0,    58,    36,    35,
2519
      37,     0,     0,    40,     0,    47,     0,     0,     0,     0,
2520
      54,     0,     0,     0,    42,    44,     0,     0,    57,     0,
2521
      45,    41,    46,     0,     0,    38,    34,     0,    39
2522
  };
2523

2524
  const short
2525
  parser::yypgoto_[] =
2526
  {
2527
    -193,  -193,   -10,  -193,   -32,     0,     2,  -193,  -193,  -193,
2528
    -192,  -140,  -193,   110,  -193,  -193,  -193,  -193,  -193,  -193,
2529
    -193,  -193,   108,   221,   216,   -31,   162,  -193,   -37,   217,
2530
    -193,  -193,  -193,  -193,   -51,   -63,   -16
2531
  };
2532

2533
  const unsigned char
2534
  parser::yydefgoto_[] =
2535
  {
2536
       0,    42,    43,    44,    45,   115,   116,    48,    98,    49,
2537
     191,   173,   194,   175,   176,   132,    69,   110,   169,   111,
2538
     167,   112,   184,    50,    63,    51,    52,    53,    54,    95,
2539
      96,    81,    82,    89,    55,    56,    57
2540
  };
2541

2542
  const unsigned char
2543
  parser::yytable_[] =
2544
  {
2545
      46,    59,    47,    93,    65,   206,    58,    99,    62,   209,
2546
      64,    46,   188,    47,   189,    67,    68,    67,    68,   177,
2547
     190,    70,    71,    72,    73,    74,    75,     7,     8,     9,
2548
      61,   142,   144,    66,   193,   103,   145,    67,    68,   104,
2549
      46,   180,    47,   181,   146,   114,   117,   118,   119,   121,
2550
     122,   125,   202,   182,   183,    65,   103,   105,   106,   101,
2551
     160,    64,    76,   211,   148,    90,    65,    46,    46,    47,
2552
      47,   142,   150,    77,    78,    79,    80,    94,   102,   207,
2553
      91,   154,    41,   203,    60,   142,   123,   204,   155,   127,
2554
     128,   129,   130,    83,    84,    85,    86,    87,    88,    13,
2555
     168,   170,   100,    17,    18,    97,   131,    21,    22,     1,
2556
       2,     3,     4,     5,     6,    77,    78,    79,    80,   185,
2557
     102,   186,     7,     8,     9,    10,   156,   161,    79,    80,
2558
     199,   165,    11,   134,   143,   200,    12,    13,    14,    15,
2559
      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
2560
      26,    27,    28,    29,    30,    31,    32,   147,    33,    34,
2561
      35,    36,    37,    38,   148,   195,    39,   196,   198,   149,
2562
      67,    40,     3,     4,     5,     6,    92,    41,    46,   214,
2563
      47,   215,   120,     7,     8,     9,    10,    77,    78,    79,
2564
      80,   107,   108,   109,   151,   152,   153,    12,    13,    14,
2565
      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
2566
      25,    26,    27,    28,    29,    30,    31,    32,   157,    33,
2567
      34,    35,    36,    37,    38,   158,   159,    39,     3,     4,
2568
       5,     6,   113,   162,   163,   164,   171,   172,    41,     7,
2569
       8,     9,    10,    70,    71,    72,    73,    74,    75,   174,
2570
     178,   179,   187,    12,    13,    14,    15,    16,    17,    18,
2571
      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
2572
      29,    30,    31,    32,   192,    33,    34,    35,    36,    37,
2573
      38,   197,   201,    39,    76,   210,   212,   216,   113,     3,
2574
       4,     5,     6,   213,    41,    77,    78,    79,    80,   126,
2575
       7,     8,     9,    10,   217,   218,   205,   208,   133,   124,
2576
     135,   166,     0,     0,    12,    13,    14,    15,    16,    17,
2577
      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
2578
      28,    29,    30,    31,    32,     0,    33,    34,    35,    36,
2579
      37,    38,     0,     0,    39,     3,     4,     5,     6,     0,
2580
       0,     0,     0,     0,     0,    41,     7,     8,     9,    10,
2581
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2582
      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
2583
      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
2584
      32,    10,    33,    34,    35,    36,    37,    38,     0,     0,
2585
      39,     0,    12,     0,     0,     0,     0,     0,     0,     0,
2586
       0,    41,     0,     0,     0,    91,    26,    27,    28,    29,
2587
      30,    31,    32,     0,     0,    34,    35,    36,    37,    38,
2588
       0,     0,    39,     0,     4,     5,     6,     0,     0,     0,
2589
       0,     0,     0,    92,     7,     8,     9,     0,     0,     0,
2590
       0,     0,     0,     0,     0,     0,     0,     0,     0,    13,
2591
      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
2592
      24,    25,    10,   136,   137,   138,   139,     0,     0,     0,
2593
      33,     0,     0,    12,     0,     0,     0,     0,     0,     0,
2594
       0,     0,     0,    10,     0,     0,     0,    26,    27,    28,
2595
      29,    30,    31,    32,    12,     0,    34,    35,    36,    37,
2596
      38,   140,   141,    39,    10,     0,     0,     0,    26,    27,
2597
      28,    29,    30,    31,    32,    12,     0,    34,    35,    36,
2598
      37,    38,   140,   141,    39,     0,     0,     0,     0,    26,
2599
      27,    28,    29,    30,    31,    32,     0,     0,    34,    35,
2600
      36,    37,    38,     0,     0,    39
2601
  };
2602

2603
  const short
2604
  parser::yycheck_[] =
2605
  {
2606
       0,    11,     0,    54,    41,   197,    65,    58,    40,   201,
2607
      41,    11,    35,    11,    37,    24,    25,    24,    25,   159,
2608
      43,     9,    10,    11,    12,    13,    14,    16,    17,    18,
2609
      40,    94,    31,     0,   174,    68,    35,    24,    25,    72,
2610
      40,    66,    40,    68,    43,    77,    78,    79,    80,    81,
2611
      82,    88,   192,    56,    57,    92,    68,    67,    68,    66,
2612
      72,    92,    50,   203,    67,    51,   103,    67,    68,    67,
2613
      68,   134,   103,    61,    62,    63,    64,    67,    66,    66,
2614
      43,   113,    71,    68,    65,   148,    86,    72,   120,    89,
2615
      27,    28,    29,    44,    45,    46,    47,    48,    49,    31,
2616
     151,   152,    31,    35,    36,    69,    43,    39,    40,     3,
2617
       4,     5,     6,     7,     8,    61,    62,    63,    64,    66,
2618
      66,    68,    16,    17,    18,    19,   126,   143,    63,    64,
2619
     181,   147,    26,    67,    67,   186,    30,    31,    32,    33,
2620
      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
2621
      44,    45,    46,    47,    48,    49,    50,    68,    52,    53,
2622
      54,    55,    56,    57,    67,    66,    60,    68,   178,    68,
2623
      24,    65,     5,     6,     7,     8,    71,    71,   178,    68,
2624
     178,    70,    15,    16,    17,    18,    19,    61,    62,    63,
2625
      64,    53,    54,    55,    65,    65,    65,    30,    31,    32,
2626
      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
2627
      43,    44,    45,    46,    47,    48,    49,    50,    65,    52,
2628
      53,    54,    55,    56,    57,    65,    65,    60,     5,     6,
2629
       7,     8,    65,    70,    70,    70,    35,    69,    71,    16,
2630
      17,    18,    19,     9,    10,    11,    12,    13,    14,    71,
2631
      68,    66,    66,    30,    31,    32,    33,    34,    35,    36,
2632
      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
2633
      47,    48,    49,    50,    68,    52,    53,    54,    55,    56,
2634
      57,    68,    68,    60,    50,    66,    66,    58,    65,     5,
2635
       6,     7,     8,    67,    71,    61,    62,    63,    64,    15,
2636
      16,    17,    18,    19,    37,    70,   196,   199,    92,    88,
2637
      93,   149,    -1,    -1,    30,    31,    32,    33,    34,    35,
2638
      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
2639
      46,    47,    48,    49,    50,    -1,    52,    53,    54,    55,
2640
      56,    57,    -1,    -1,    60,     5,     6,     7,     8,    -1,
2641
      -1,    -1,    -1,    -1,    -1,    71,    16,    17,    18,    19,
2642
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2643
      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
2644
      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
2645
      50,    19,    52,    53,    54,    55,    56,    57,    -1,    -1,
2646
      60,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2647
      -1,    71,    -1,    -1,    -1,    43,    44,    45,    46,    47,
2648
      48,    49,    50,    -1,    -1,    53,    54,    55,    56,    57,
2649
      -1,    -1,    60,    -1,     6,     7,     8,    -1,    -1,    -1,
2650
      -1,    -1,    -1,    71,    16,    17,    18,    -1,    -1,    -1,
2651
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    31,
2652
      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
2653
      42,    43,    19,    20,    21,    22,    23,    -1,    -1,    -1,
2654
      52,    -1,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,
2655
      -1,    -1,    -1,    19,    -1,    -1,    -1,    44,    45,    46,
2656
      47,    48,    49,    50,    30,    -1,    53,    54,    55,    56,
2657
      57,    58,    59,    60,    19,    -1,    -1,    -1,    44,    45,
2658
      46,    47,    48,    49,    50,    30,    -1,    53,    54,    55,
2659
      56,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    44,
2660
      45,    46,    47,    48,    49,    50,    -1,    -1,    53,    54,
2661
      55,    56,    57,    -1,    -1,    60
2662
  };
2663

2664
  const signed char
2665
  parser::yystos_[] =
2666
  {
2667
       0,     3,     4,     5,     6,     7,     8,    16,    17,    18,
2668
      19,    26,    30,    31,    32,    33,    34,    35,    36,    37,
2669
      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
2670
      48,    49,    50,    52,    53,    54,    55,    56,    57,    60,
2671
      65,    71,    74,    75,    76,    77,    78,    79,    80,    82,
2672
      96,    98,    99,   100,   101,   107,   108,   109,    65,    75,
2673
      65,    75,    77,    97,    98,   101,     0,    24,    25,    89,
2674
       9,    10,    11,    12,    13,    14,    50,    61,    62,    63,
2675
      64,   104,   105,    44,    45,    46,    47,    48,    49,   106,
2676
      51,    43,    71,   107,    67,   102,   103,    69,    81,   107,
2677
      31,    66,    66,    68,    72,    75,    75,    53,    54,    55,
2678
      90,    92,    94,    65,    77,    78,    79,    77,    77,    77,
2679
      15,    77,    77,    78,    96,   101,    15,    78,    27,    28,
2680
      29,    43,    88,    97,    67,   102,    20,    21,    22,    23,
2681
      58,    59,   108,    67,    31,    35,    43,    68,    67,    68,
2682
      98,    65,    65,    65,    77,    77,    78,    65,    65,    65,
2683
      72,   109,    70,    70,    70,   109,    99,    93,   107,    91,
2684
     107,    35,    69,    84,    71,    86,    87,    84,    68,    66,
2685
      66,    68,    56,    57,    95,    66,    68,    66,    35,    37,
2686
      43,    83,    68,    84,    85,    66,    68,    68,    75,   107,
2687
     107,    68,    84,    68,    72,    86,    83,    66,    95,    83,
2688
      66,    84,    66,    67,    68,    70,    58,    37,    70
2689
  };
2690

2691
  const signed char
2692
  parser::yyr1_[] =
2693
  {
2694
       0,    73,    74,    75,    75,    75,    75,    75,    75,    76,
2695
      76,    76,    76,    76,    76,    76,    76,    76,    77,    77,
2696
      77,    77,    77,    77,    78,    78,    78,    78,    78,    79,
2697
      79,    80,    80,    81,    82,    83,    83,    83,    84,    84,
2698
      85,    85,    86,    87,    87,    88,    88,    88,    89,    89,
2699
      89,    89,    90,    91,    91,    92,    93,    93,    94,    95,
2700
      95,    96,    96,    97,    97,    97,    98,    98,    98,    98,
2701
      98,    98,    98,    98,    98,    98,    98,    98,    98,    98,
2702
      99,    99,    99,    99,    99,   100,   100,   101,   101,   101,
2703
     102,   102,   102,   103,   103,   103,   103,   104,   104,   104,
2704
     105,   105,   105,   105,   106,   106,   106,   106,   107,   107,
2705
     108,   108,   108,   108,   109,   109,   109,   109,   109,   109,
2706
     109,   109,   109,   109,   109,   109,   109,   109,   109
2707
  };
2708

2709
  const signed char
2710
  parser::yyr2_[] =
2711
  {
2712
       0,     2,     2,     1,     3,     3,     2,     3,     1,     3,
2713
       4,     3,     3,     3,     4,     3,     3,     3,     1,     3,
2714
       3,     3,     3,     3,     1,     1,     1,     1,     1,     2,
2715
       3,     4,     2,     1,    10,     1,     1,     1,     5,     7,
2716
       1,     3,     3,     1,     3,     6,     6,     4,     0,     2,
2717
       2,     2,     4,     1,     3,     4,     2,     4,     4,     1,
2718
       1,     3,     4,     1,     0,     3,     1,     1,     1,     1,
2719
       1,     1,     1,     1,     1,     1,     1,     1,     2,     6,
2720
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2721
       0,     2,     2,     2,     2,     2,     2,     1,     1,     1,
2722
       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
2723
       1,     4,     4,     4,     1,     1,     1,     1,     1,     1,
2724
       1,     1,     1,     1,     1,     1,     1,     1,     1
2725
  };
2726

2727

2728
#if YYDEBUG || 1
2729
  // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2730
  // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
2731
  const char*
2732
  const parser::yytname_[] =
2733
  {
2734
  "\"end of file\"", "error", "\"invalid token\"", "\"truepredicate\"",
2735
  "\"falsepredicate\"", "\"subquery\"", "\"true\"", "\"false\"",
2736
  "\"null\"", "\"==\"", "\"!=\"", "\"<\"", "\">\"", "\">=\"", "\"<=\"",
2737
  "\"[c]\"", "\"any\"", "\"all\"", "\"none\"", "\"@links\"", "\"@max\"",
2738
  "\"@min\"", "\"@sun\"", "\"@average\"", "\"&&\"", "\"||\"", "\"!\"",
2739
  "\"geobox\"", "\"geopolygon\"", "\"geocircle\"", "\"identifier\"",
2740
  "\"string\"", "\"base64\"", "\"infinity\"", "\"NaN\"", "\"natural0\"",
2741
  "\"number\"", "\"float\"", "\"date\"", "\"UUID\"", "\"ObjectId\"",
2742
  "\"link\"", "\"typed link\"", "\"argument\"", "\"beginswith\"",
2743
  "\"endswith\"", "\"contains\"", "\"fulltext\"", "\"like\"",
2744
  "\"between\"", "\"in\"", "\"geowithin\"", "\"obj\"", "\"sort\"",
2745
  "\"distinct\"", "\"limit\"", "\"ascending\"", "\"descending\"",
2746
  "\"@size\"", "\"@type\"", "\"key or value\"", "'+'", "'-'", "'*'", "'/'",
2747
  "'('", "')'", "'.'", "','", "'['", "']'", "'{'", "'}'", "$accept",
2748
  "final", "query", "compare", "expr", "value", "prop", "aggregate",
2749
  "simple_prop", "subquery", "coordinate", "geopoint", "geoloop_content",
2750
  "geoloop", "geopoly_content", "geospatial", "post_query", "distinct",
2751
  "distinct_param", "sort", "sort_param", "limit", "direction", "list",
2752
  "list_content", "constant", "primary_key", "boolexpr", "comp_type",
2753
  "post_op", "aggr_op", "equality", "relational", "stringop", "path",
2754
  "path_elem", "id", YY_NULLPTR
2755
  };
2756
#endif
2757

2758

2759
#if YYDEBUG
2760
  const short
2761
  parser::yyrline_[] =
2762
  {
2763
       0,   191,   191,   194,   195,   196,   197,   198,   199,   202,
2764
     203,   208,   209,   210,   211,   216,   217,   218,   221,   222,
2765
     223,   224,   225,   226,   229,   230,   231,   232,   233,   236,
2766
     237,   240,   244,   250,   253,   256,   257,   258,   261,   262,
2767
     265,   266,   268,   271,   272,   275,   276,   277,   280,   281,
2768
     282,   283,   285,   288,   289,   291,   294,   295,   297,   300,
2769
     301,   303,   304,   307,   308,   309,   312,   313,   314,   315,
2770
     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
2771
     333,   334,   335,   336,   337,   340,   341,   344,   345,   346,
2772
     349,   350,   351,   354,   355,   356,   357,   360,   361,   362,
2773
     365,   366,   367,   368,   371,   372,   373,   374,   377,   378,
2774
     381,   382,   383,   384,   387,   388,   389,   390,   391,   392,
2775
     393,   394,   395,   396,   397,   398,   399,   400,   401
2776
  };
2777

2778
  void
2779
  parser::yy_stack_print_ () const
2780
  {
2781
    *yycdebug_ << "Stack now";
2782
    for (stack_type::const_iterator
2783
           i = yystack_.begin (),
2784
           i_end = yystack_.end ();
2785
         i != i_end; ++i)
2786
      *yycdebug_ << ' ' << int (i->state);
2787
    *yycdebug_ << '\n';
2788
  }
2789

2790
  void
2791
  parser::yy_reduce_print_ (int yyrule) const
2792
  {
2793
    int yylno = yyrline_[yyrule];
2794
    int yynrhs = yyr2_[yyrule];
2795
    // Print the symbols being reduced, and their result.
2796
    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
2797
               << " (line " << yylno << "):\n";
2798
    // The symbols being reduced.
2799
    for (int yyi = 0; yyi < yynrhs; yyi++)
2800
      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
2801
                       yystack_[(yynrhs) - (yyi + 1)]);
2802
  }
2803
#endif // YYDEBUG
2804

2805

2806
} // yy
2807

2808

2809

2810
void
2811
yy::parser::error (const std::string& m)
2812
{
358✔
2813
    drv.error(m);
358✔
2814
}
358✔
2815

2816
#ifdef _MSC_VER
2817
#pragma warning( pop ) // restore normal warning levels
2818
#endif
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc