// A Bison parser, made by GNU Bison 3.7.1.
// Skeleton implementation for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2015, 2018-2020 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
// especially those whose name start with YY_ or yy_. They are
// private implementation details that can be changed or removed.
#include "parser_gen.hpp"
// Unqualified %code blocks.
#line 82 "grammar.yy"
#include
#include
#include
#include "mongo/db/cst/bson_lexer.h"
#include "mongo/db/cst/c_node_disambiguation.h"
#include "mongo/db/cst/c_node_validation.h"
#include "mongo/db/cst/key_fieldname.h"
#include "mongo/db/query/util/make_data_structure.h"
#include "mongo/platform/decimal128.h"
#include "mongo/stdx/variant.h"
namespace mongo {
// Mandatory error function.
void ParserGen::error(const ParserGen::location_type& loc, const std::string& msg) {
uasserted(ErrorCodes::FailedToParse, str::stream() << msg << " at element " << loc);
}
} // namespace mongo
// Default location for actions, called each time a rule is matched but before the action is
// run. Also called when bison encounters a syntax ambiguity, which should not be relevant for
// mongo.
#define YYLLOC_DEFAULT(newPos, rhsPositions, nRhs)
#line 73 "parser_gen.cpp"
#ifndef YY_
#if defined YYENABLE_NLS && YYENABLE_NLS
#if ENABLE_NLS
#include // FIXME: INFRINGES ON USER NAME SPACE.
#define YY_(msgid) dgettext("bison-runtime", msgid)
#endif
#endif
#ifndef YY_
#define YY_(msgid) msgid
#endif
#endif
// Whether we are compiled with exception support.
#ifndef YY_EXCEPTIONS
#if defined __GNUC__ && !defined __EXCEPTIONS
#define YY_EXCEPTIONS 0
#else
#define YY_EXCEPTIONS 1
#endif
#endif
#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
If N is 0, then set CURRENT to the empty location which ends
the previous symbol: RHS[0] (always defined). */
#ifndef YYLLOC_DEFAULT
#define YYLLOC_DEFAULT(Current, Rhs, N) \
do \
if (N) { \
(Current).begin = YYRHSLOC(Rhs, 1).begin; \
(Current).end = YYRHSLOC(Rhs, N).end; \
} else { \
(Current).begin = (Current).end = YYRHSLOC(Rhs, 0).end; \
} \
while (false)
#endif
// Enable debugging if requested.
#if YYDEBUG
// A pseudo ostream that takes yydebug_ into account.
#define YYCDEBUG \
if (yydebug_) \
(*yycdebug_)
#define YY_SYMBOL_PRINT(Title, Symbol) \
do { \
if (yydebug_) { \
*yycdebug_ << Title << ' '; \
yy_print_(*yycdebug_, Symbol); \
*yycdebug_ << '\n'; \
} \
} while (false)
#define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug_) \
yy_reduce_print_(Rule); \
} while (false)
#define YY_STACK_PRINT() \
do { \
if (yydebug_) \
yy_stack_print_(); \
} while (false)
#else // !YYDEBUG
#define YYCDEBUG \
if (false) \
std::cerr
#define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
#define YY_REDUCE_PRINT(Rule) static_cast(0)
#define YY_STACK_PRINT() static_cast(0)
#endif // !YYDEBUG
#define yyerrok (yyerrstatus_ = 0)
#define yyclearin (yyla.clear())
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
#define YYRECOVERING() (!!yyerrstatus_)
#line 57 "grammar.yy"
namespace mongo {
#line 166 "parser_gen.cpp"
/// Build a parser object.
ParserGen::ParserGen(BSONLexer& lexer_yyarg, CNode* cst_yyarg)
#if YYDEBUG
: yydebug_(false),
yycdebug_(&std::cerr),
#else
:
#endif
lexer(lexer_yyarg),
cst(cst_yyarg) {
}
ParserGen::~ParserGen() {}
ParserGen::syntax_error::~syntax_error() YY_NOEXCEPT YY_NOTHROW {}
/*---------------.
| symbol kinds. |
`---------------*/
// by_state.
ParserGen::by_state::by_state() YY_NOEXCEPT : state(empty_state) {}
ParserGen::by_state::by_state(const by_state& that) YY_NOEXCEPT : state(that.state) {}
void ParserGen::by_state::clear() YY_NOEXCEPT {
state = empty_state;
}
void ParserGen::by_state::move(by_state& that) {
state = that.state;
that.clear();
}
ParserGen::by_state::by_state(state_type s) YY_NOEXCEPT : state(s) {}
ParserGen::symbol_kind_type ParserGen::by_state::kind() const YY_NOEXCEPT {
if (state == empty_state)
return symbol_kind::S_YYEMPTY;
else
return YY_CAST(symbol_kind_type, yystos_[+state]);
}
ParserGen::stack_symbol_type::stack_symbol_type() {}
ParserGen::stack_symbol_type::stack_symbol_type(YY_RVREF(stack_symbol_type) that)
: super_type(YY_MOVE(that.state), YY_MOVE(that.location)) {
switch (that.kind()) {
case symbol_kind::S_BINARY: // "BinData"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_JAVASCRIPT: // "Code"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_JAVASCRIPT_W_SCOPE: // "CodeWScope"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_DB_POINTER: // "dbPointer"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_REGEX: // "regex"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_SYMBOL: // "Symbol"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_dbPointer: // dbPointer
case symbol_kind::S_javascript: // javascript
case symbol_kind::S_symbol: // symbol
case symbol_kind::S_javascriptWScope: // javascriptWScope
case symbol_kind::S_int: // int
case symbol_kind::S_timestamp: // timestamp
case symbol_kind::S_long: // long
case symbol_kind::S_double: // double
case symbol_kind::S_decimal: // decimal
case symbol_kind::S_minKey: // minKey
case symbol_kind::S_maxKey: // maxKey
case symbol_kind::S_value: // value
case symbol_kind::S_string: // string
case symbol_kind::S_aggregationFieldPath: // aggregationFieldPath
case symbol_kind::S_binary: // binary
case symbol_kind::S_undefined: // undefined
case symbol_kind::S_objectId: // objectId
case symbol_kind::S_bool: // bool
case symbol_kind::S_date: // date
case symbol_kind::S_null: // null
case symbol_kind::S_regex: // regex
case symbol_kind::S_simpleValue: // simpleValue
case symbol_kind::S_compoundValue: // compoundValue
case symbol_kind::S_valueArray: // valueArray
case symbol_kind::S_valueObject: // valueObject
case symbol_kind::S_valueFields: // valueFields
case symbol_kind::S_variable: // variable
case symbol_kind::S_typeArray: // typeArray
case symbol_kind::S_typeValue: // typeValue
case symbol_kind::S_pipeline: // pipeline
case symbol_kind::S_stageList: // stageList
case symbol_kind::S_stage: // stage
case symbol_kind::S_inhibitOptimization: // inhibitOptimization
case symbol_kind::S_unionWith: // unionWith
case symbol_kind::S_skip: // skip
case symbol_kind::S_limit: // limit
case symbol_kind::S_matchStage: // matchStage
case symbol_kind::S_project: // project
case symbol_kind::S_sample: // sample
case symbol_kind::S_aggregationProjectFields: // aggregationProjectFields
case symbol_kind::S_aggregationProjectionObjectFields: // aggregationProjectionObjectFields
case symbol_kind::S_topLevelAggregationProjection: // topLevelAggregationProjection
case symbol_kind::S_aggregationProjection: // aggregationProjection
case symbol_kind::S_projectionCommon: // projectionCommon
case symbol_kind::S_aggregationProjectionObject: // aggregationProjectionObject
case symbol_kind::S_num: // num
case symbol_kind::S_expression: // expression
case symbol_kind::S_exprFixedTwoArg: // exprFixedTwoArg
case symbol_kind::S_exprFixedThreeArg: // exprFixedThreeArg
case symbol_kind::S_slice: // slice
case symbol_kind::S_expressionArray: // expressionArray
case symbol_kind::S_expressionObject: // expressionObject
case symbol_kind::S_expressionFields: // expressionFields
case symbol_kind::S_maths: // maths
case symbol_kind::S_meta: // meta
case symbol_kind::S_add: // add
case symbol_kind::S_boolExprs: // boolExprs
case symbol_kind::S_and: // and
case symbol_kind::S_or: // or
case symbol_kind::S_not: // not
case symbol_kind::S_literalEscapes: // literalEscapes
case symbol_kind::S_const: // const
case symbol_kind::S_literal: // literal
case symbol_kind::S_stringExps: // stringExps
case symbol_kind::S_concat: // concat
case symbol_kind::S_dateFromString: // dateFromString
case symbol_kind::S_dateToString: // dateToString
case symbol_kind::S_indexOfBytes: // indexOfBytes
case symbol_kind::S_indexOfCP: // indexOfCP
case symbol_kind::S_ltrim: // ltrim
case symbol_kind::S_regexFind: // regexFind
case symbol_kind::S_regexFindAll: // regexFindAll
case symbol_kind::S_regexMatch: // regexMatch
case symbol_kind::S_regexArgs: // regexArgs
case symbol_kind::S_replaceOne: // replaceOne
case symbol_kind::S_replaceAll: // replaceAll
case symbol_kind::S_rtrim: // rtrim
case symbol_kind::S_split: // split
case symbol_kind::S_strLenBytes: // strLenBytes
case symbol_kind::S_strLenCP: // strLenCP
case symbol_kind::S_strcasecmp: // strcasecmp
case symbol_kind::S_substr: // substr
case symbol_kind::S_substrBytes: // substrBytes
case symbol_kind::S_substrCP: // substrCP
case symbol_kind::S_toLower: // toLower
case symbol_kind::S_toUpper: // toUpper
case symbol_kind::S_trim: // trim
case symbol_kind::S_compExprs: // compExprs
case symbol_kind::S_cmp: // cmp
case symbol_kind::S_eq: // eq
case symbol_kind::S_gt: // gt
case symbol_kind::S_gte: // gte
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
case symbol_kind::S_dateExps: // dateExps
case symbol_kind::S_dateFromParts: // dateFromParts
case symbol_kind::S_dateToParts: // dateToParts
case symbol_kind::S_dayOfMonth: // dayOfMonth
case symbol_kind::S_dayOfWeek: // dayOfWeek
case symbol_kind::S_dayOfYear: // dayOfYear
case symbol_kind::S_hour: // hour
case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
case symbol_kind::S_isoWeek: // isoWeek
case symbol_kind::S_isoWeekYear: // isoWeekYear
case symbol_kind::S_millisecond: // millisecond
case symbol_kind::S_minute: // minute
case symbol_kind::S_month: // month
case symbol_kind::S_second: // second
case symbol_kind::S_week: // week
case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
case symbol_kind::S_toDate: // toDate
case symbol_kind::S_toDecimal: // toDecimal
case symbol_kind::S_toDouble: // toDouble
case symbol_kind::S_toInt: // toInt
case symbol_kind::S_toLong: // toLong
case symbol_kind::S_toObjectId: // toObjectId
case symbol_kind::S_toString: // toString
case symbol_kind::S_type: // type
case symbol_kind::S_abs: // abs
case symbol_kind::S_ceil: // ceil
case symbol_kind::S_divide: // divide
case symbol_kind::S_exponent: // exponent
case symbol_kind::S_floor: // floor
case symbol_kind::S_ln: // ln
case symbol_kind::S_log: // log
case symbol_kind::S_logten: // logten
case symbol_kind::S_mod: // mod
case symbol_kind::S_multiply: // multiply
case symbol_kind::S_pow: // pow
case symbol_kind::S_round: // round
case symbol_kind::S_sqrt: // sqrt
case symbol_kind::S_subtract: // subtract
case symbol_kind::S_trunc: // trunc
case symbol_kind::S_arrayExps: // arrayExps
case symbol_kind::S_arrayElemAt: // arrayElemAt
case symbol_kind::S_arrayToObject: // arrayToObject
case symbol_kind::S_concatArrays: // concatArrays
case symbol_kind::S_filter: // filter
case symbol_kind::S_first: // first
case symbol_kind::S_in: // in
case symbol_kind::S_indexOfArray: // indexOfArray
case symbol_kind::S_isArray: // isArray
case symbol_kind::S_setExpression: // setExpression
case symbol_kind::S_allElementsTrue: // allElementsTrue
case symbol_kind::S_anyElementTrue: // anyElementTrue
case symbol_kind::S_setDifference: // setDifference
case symbol_kind::S_setEquals: // setEquals
case symbol_kind::S_setIntersection: // setIntersection
case symbol_kind::S_setIsSubset: // setIsSubset
case symbol_kind::S_setUnion: // setUnion
case symbol_kind::S_trig: // trig
case symbol_kind::S_sin: // sin
case symbol_kind::S_cos: // cos
case symbol_kind::S_tan: // tan
case symbol_kind::S_sinh: // sinh
case symbol_kind::S_cosh: // cosh
case symbol_kind::S_tanh: // tanh
case symbol_kind::S_asin: // asin
case symbol_kind::S_acos: // acos
case symbol_kind::S_atan: // atan
case symbol_kind::S_asinh: // asinh
case symbol_kind::S_acosh: // acosh
case symbol_kind::S_atanh: // atanh
case symbol_kind::S_atan2: // atan2
case symbol_kind::S_degreesToRadians: // degreesToRadians
case symbol_kind::S_radiansToDegrees: // radiansToDegrees
case symbol_kind::S_nonArrayExpression: // nonArrayExpression
case symbol_kind::S_nonArrayCompoundExpression: // nonArrayCompoundExpression
case symbol_kind::S_aggregationOperator: // aggregationOperator
case symbol_kind::S_aggregationOperatorWithoutSlice: // aggregationOperatorWithoutSlice
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_matchExpression: // matchExpression
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
case symbol_kind::S_predValue: // predValue
case symbol_kind::S_additionalExprs: // additionalExprs
case symbol_kind::S_textArgCaseSensitive: // textArgCaseSensitive
case symbol_kind::S_textArgDiacriticSensitive: // textArgDiacriticSensitive
case symbol_kind::S_textArgLanguage: // textArgLanguage
case symbol_kind::S_textArgSearch: // textArgSearch
case symbol_kind::S_findProject: // findProject
case symbol_kind::S_findProjectFields: // findProjectFields
case symbol_kind::S_topLevelFindProjection: // topLevelFindProjection
case symbol_kind::S_findProjection: // findProjection
case symbol_kind::S_findProjectionSlice: // findProjectionSlice
case symbol_kind::S_elemMatch: // elemMatch
case symbol_kind::S_findProjectionObject: // findProjectionObject
case symbol_kind::S_findProjectionObjectFields: // findProjectionObjectFields
case symbol_kind::S_sortSpecs: // sortSpecs
case symbol_kind::S_specList: // specList
case symbol_kind::S_metaSort: // metaSort
case symbol_kind::S_oneOrNegOne: // oneOrNegOne
case symbol_kind::S_metaSortKeyword: // metaSortKeyword
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_aggregationProjectionFieldname: // aggregationProjectionFieldname
case symbol_kind::S_projectionFieldname: // projectionFieldname
case symbol_kind::S_expressionFieldname: // expressionFieldname
case symbol_kind::S_stageAsUserFieldname: // stageAsUserFieldname
case symbol_kind::S_argAsUserFieldname: // argAsUserFieldname
case symbol_kind::S_argAsProjectionPath: // argAsProjectionPath
case symbol_kind::S_aggExprAsUserFieldname: // aggExprAsUserFieldname
case symbol_kind::S_invariableUserFieldname: // invariableUserFieldname
case symbol_kind::S_sortFieldname: // sortFieldname
case symbol_kind::S_idAsUserFieldname: // idAsUserFieldname
case symbol_kind::S_elemMatchAsUserFieldname: // elemMatchAsUserFieldname
case symbol_kind::S_idAsProjectionPath: // idAsProjectionPath
case symbol_kind::S_valueFieldname: // valueFieldname
case symbol_kind::S_predFieldname: // predFieldname
case symbol_kind::S_logicalExprField: // logicalExprField
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_DATE_LITERAL: // "Date"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_DECIMAL_OTHER: // "arbitrary decimal"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_OBJECT_ID: // "ObjectID"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_TIMESTAMP: // "Timestamp"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_MAX_KEY: // "maxKey"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_MIN_KEY: // "minKey"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_JSNULL: // "null"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_UNDEFINED: // "undefined"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_DOUBLE_OTHER: // "arbitrary double"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_INT_OTHER: // "arbitrary integer"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_LONG_OTHER: // "arbitrary long"
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_aggregationProjectField: // aggregationProjectField
case symbol_kind::S_aggregationProjectionObjectField: // aggregationProjectionObjectField
case symbol_kind::S_expressionField: // expressionField
case symbol_kind::S_valueField: // valueField
case symbol_kind::S_onErrorArg: // onErrorArg
case symbol_kind::S_onNullArg: // onNullArg
case symbol_kind::S_asArg: // asArg
case symbol_kind::S_formatArg: // formatArg
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
case symbol_kind::S_hourArg: // hourArg
case symbol_kind::S_minuteArg: // minuteArg
case symbol_kind::S_secondArg: // secondArg
case symbol_kind::S_millisecondArg: // millisecondArg
case symbol_kind::S_dayArg: // dayArg
case symbol_kind::S_isoWeekArg: // isoWeekArg
case symbol_kind::S_iso8601Arg: // iso8601Arg
case symbol_kind::S_monthArg: // monthArg
case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_fieldPredicate: // fieldPredicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
case symbol_kind::S_notExpr: // notExpr
case symbol_kind::S_matchMod: // matchMod
case symbol_kind::S_existsExpr: // existsExpr
case symbol_kind::S_typeExpr: // typeExpr
case symbol_kind::S_commentExpr: // commentExpr
case symbol_kind::S_matchExpr: // matchExpr
case symbol_kind::S_matchText: // matchText
case symbol_kind::S_matchWhere: // matchWhere
case symbol_kind::S_findProjectField: // findProjectField
case symbol_kind::S_findProjectionObjectField: // findProjectionObjectField
case symbol_kind::S_sortSpec: // sortSpec
value.YY_MOVE_OR_COPY>(YY_MOVE(that.value));
break;
case symbol_kind::S_FIELDNAME: // "fieldname"
case symbol_kind::S_DOLLAR_PREF_FIELDNAME: // "$-prefixed fieldname"
case symbol_kind::S_STRING: // "string"
case symbol_kind::S_DOLLAR_STRING: // "$-prefixed string"
case symbol_kind::S_DOLLAR_DOLLAR_STRING: // "$$-prefixed string"
case symbol_kind::S_arg: // arg
value.YY_MOVE_OR_COPY(YY_MOVE(that.value));
break;
case symbol_kind::S_expressions: // expressions
case symbol_kind::S_values: // values
case symbol_kind::S_exprZeroToTwo: // exprZeroToTwo
case symbol_kind::S_typeValues: // typeValues
value.YY_MOVE_OR_COPY>(YY_MOVE(that.value));
break;
case symbol_kind::S_DOTTED_FIELDNAME: // "fieldname containing dotted path"
value.YY_MOVE_OR_COPY>(YY_MOVE(that.value));
break;
default:
break;
}
#if 201103L <= YY_CPLUSPLUS
// that is emptied.
that.state = empty_state;
#endif
}
ParserGen::stack_symbol_type::stack_symbol_type(state_type s, YY_MOVE_REF(symbol_type) that)
: super_type(s, YY_MOVE(that.location)) {
switch (that.kind()) {
case symbol_kind::S_BINARY: // "BinData"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_JAVASCRIPT: // "Code"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_JAVASCRIPT_W_SCOPE: // "CodeWScope"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_DB_POINTER: // "dbPointer"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_REGEX: // "regex"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_SYMBOL: // "Symbol"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_dbPointer: // dbPointer
case symbol_kind::S_javascript: // javascript
case symbol_kind::S_symbol: // symbol
case symbol_kind::S_javascriptWScope: // javascriptWScope
case symbol_kind::S_int: // int
case symbol_kind::S_timestamp: // timestamp
case symbol_kind::S_long: // long
case symbol_kind::S_double: // double
case symbol_kind::S_decimal: // decimal
case symbol_kind::S_minKey: // minKey
case symbol_kind::S_maxKey: // maxKey
case symbol_kind::S_value: // value
case symbol_kind::S_string: // string
case symbol_kind::S_aggregationFieldPath: // aggregationFieldPath
case symbol_kind::S_binary: // binary
case symbol_kind::S_undefined: // undefined
case symbol_kind::S_objectId: // objectId
case symbol_kind::S_bool: // bool
case symbol_kind::S_date: // date
case symbol_kind::S_null: // null
case symbol_kind::S_regex: // regex
case symbol_kind::S_simpleValue: // simpleValue
case symbol_kind::S_compoundValue: // compoundValue
case symbol_kind::S_valueArray: // valueArray
case symbol_kind::S_valueObject: // valueObject
case symbol_kind::S_valueFields: // valueFields
case symbol_kind::S_variable: // variable
case symbol_kind::S_typeArray: // typeArray
case symbol_kind::S_typeValue: // typeValue
case symbol_kind::S_pipeline: // pipeline
case symbol_kind::S_stageList: // stageList
case symbol_kind::S_stage: // stage
case symbol_kind::S_inhibitOptimization: // inhibitOptimization
case symbol_kind::S_unionWith: // unionWith
case symbol_kind::S_skip: // skip
case symbol_kind::S_limit: // limit
case symbol_kind::S_matchStage: // matchStage
case symbol_kind::S_project: // project
case symbol_kind::S_sample: // sample
case symbol_kind::S_aggregationProjectFields: // aggregationProjectFields
case symbol_kind::S_aggregationProjectionObjectFields: // aggregationProjectionObjectFields
case symbol_kind::S_topLevelAggregationProjection: // topLevelAggregationProjection
case symbol_kind::S_aggregationProjection: // aggregationProjection
case symbol_kind::S_projectionCommon: // projectionCommon
case symbol_kind::S_aggregationProjectionObject: // aggregationProjectionObject
case symbol_kind::S_num: // num
case symbol_kind::S_expression: // expression
case symbol_kind::S_exprFixedTwoArg: // exprFixedTwoArg
case symbol_kind::S_exprFixedThreeArg: // exprFixedThreeArg
case symbol_kind::S_slice: // slice
case symbol_kind::S_expressionArray: // expressionArray
case symbol_kind::S_expressionObject: // expressionObject
case symbol_kind::S_expressionFields: // expressionFields
case symbol_kind::S_maths: // maths
case symbol_kind::S_meta: // meta
case symbol_kind::S_add: // add
case symbol_kind::S_boolExprs: // boolExprs
case symbol_kind::S_and: // and
case symbol_kind::S_or: // or
case symbol_kind::S_not: // not
case symbol_kind::S_literalEscapes: // literalEscapes
case symbol_kind::S_const: // const
case symbol_kind::S_literal: // literal
case symbol_kind::S_stringExps: // stringExps
case symbol_kind::S_concat: // concat
case symbol_kind::S_dateFromString: // dateFromString
case symbol_kind::S_dateToString: // dateToString
case symbol_kind::S_indexOfBytes: // indexOfBytes
case symbol_kind::S_indexOfCP: // indexOfCP
case symbol_kind::S_ltrim: // ltrim
case symbol_kind::S_regexFind: // regexFind
case symbol_kind::S_regexFindAll: // regexFindAll
case symbol_kind::S_regexMatch: // regexMatch
case symbol_kind::S_regexArgs: // regexArgs
case symbol_kind::S_replaceOne: // replaceOne
case symbol_kind::S_replaceAll: // replaceAll
case symbol_kind::S_rtrim: // rtrim
case symbol_kind::S_split: // split
case symbol_kind::S_strLenBytes: // strLenBytes
case symbol_kind::S_strLenCP: // strLenCP
case symbol_kind::S_strcasecmp: // strcasecmp
case symbol_kind::S_substr: // substr
case symbol_kind::S_substrBytes: // substrBytes
case symbol_kind::S_substrCP: // substrCP
case symbol_kind::S_toLower: // toLower
case symbol_kind::S_toUpper: // toUpper
case symbol_kind::S_trim: // trim
case symbol_kind::S_compExprs: // compExprs
case symbol_kind::S_cmp: // cmp
case symbol_kind::S_eq: // eq
case symbol_kind::S_gt: // gt
case symbol_kind::S_gte: // gte
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
case symbol_kind::S_dateExps: // dateExps
case symbol_kind::S_dateFromParts: // dateFromParts
case symbol_kind::S_dateToParts: // dateToParts
case symbol_kind::S_dayOfMonth: // dayOfMonth
case symbol_kind::S_dayOfWeek: // dayOfWeek
case symbol_kind::S_dayOfYear: // dayOfYear
case symbol_kind::S_hour: // hour
case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
case symbol_kind::S_isoWeek: // isoWeek
case symbol_kind::S_isoWeekYear: // isoWeekYear
case symbol_kind::S_millisecond: // millisecond
case symbol_kind::S_minute: // minute
case symbol_kind::S_month: // month
case symbol_kind::S_second: // second
case symbol_kind::S_week: // week
case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
case symbol_kind::S_toDate: // toDate
case symbol_kind::S_toDecimal: // toDecimal
case symbol_kind::S_toDouble: // toDouble
case symbol_kind::S_toInt: // toInt
case symbol_kind::S_toLong: // toLong
case symbol_kind::S_toObjectId: // toObjectId
case symbol_kind::S_toString: // toString
case symbol_kind::S_type: // type
case symbol_kind::S_abs: // abs
case symbol_kind::S_ceil: // ceil
case symbol_kind::S_divide: // divide
case symbol_kind::S_exponent: // exponent
case symbol_kind::S_floor: // floor
case symbol_kind::S_ln: // ln
case symbol_kind::S_log: // log
case symbol_kind::S_logten: // logten
case symbol_kind::S_mod: // mod
case symbol_kind::S_multiply: // multiply
case symbol_kind::S_pow: // pow
case symbol_kind::S_round: // round
case symbol_kind::S_sqrt: // sqrt
case symbol_kind::S_subtract: // subtract
case symbol_kind::S_trunc: // trunc
case symbol_kind::S_arrayExps: // arrayExps
case symbol_kind::S_arrayElemAt: // arrayElemAt
case symbol_kind::S_arrayToObject: // arrayToObject
case symbol_kind::S_concatArrays: // concatArrays
case symbol_kind::S_filter: // filter
case symbol_kind::S_first: // first
case symbol_kind::S_in: // in
case symbol_kind::S_indexOfArray: // indexOfArray
case symbol_kind::S_isArray: // isArray
case symbol_kind::S_setExpression: // setExpression
case symbol_kind::S_allElementsTrue: // allElementsTrue
case symbol_kind::S_anyElementTrue: // anyElementTrue
case symbol_kind::S_setDifference: // setDifference
case symbol_kind::S_setEquals: // setEquals
case symbol_kind::S_setIntersection: // setIntersection
case symbol_kind::S_setIsSubset: // setIsSubset
case symbol_kind::S_setUnion: // setUnion
case symbol_kind::S_trig: // trig
case symbol_kind::S_sin: // sin
case symbol_kind::S_cos: // cos
case symbol_kind::S_tan: // tan
case symbol_kind::S_sinh: // sinh
case symbol_kind::S_cosh: // cosh
case symbol_kind::S_tanh: // tanh
case symbol_kind::S_asin: // asin
case symbol_kind::S_acos: // acos
case symbol_kind::S_atan: // atan
case symbol_kind::S_asinh: // asinh
case symbol_kind::S_acosh: // acosh
case symbol_kind::S_atanh: // atanh
case symbol_kind::S_atan2: // atan2
case symbol_kind::S_degreesToRadians: // degreesToRadians
case symbol_kind::S_radiansToDegrees: // radiansToDegrees
case symbol_kind::S_nonArrayExpression: // nonArrayExpression
case symbol_kind::S_nonArrayCompoundExpression: // nonArrayCompoundExpression
case symbol_kind::S_aggregationOperator: // aggregationOperator
case symbol_kind::S_aggregationOperatorWithoutSlice: // aggregationOperatorWithoutSlice
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_matchExpression: // matchExpression
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
case symbol_kind::S_predValue: // predValue
case symbol_kind::S_additionalExprs: // additionalExprs
case symbol_kind::S_textArgCaseSensitive: // textArgCaseSensitive
case symbol_kind::S_textArgDiacriticSensitive: // textArgDiacriticSensitive
case symbol_kind::S_textArgLanguage: // textArgLanguage
case symbol_kind::S_textArgSearch: // textArgSearch
case symbol_kind::S_findProject: // findProject
case symbol_kind::S_findProjectFields: // findProjectFields
case symbol_kind::S_topLevelFindProjection: // topLevelFindProjection
case symbol_kind::S_findProjection: // findProjection
case symbol_kind::S_findProjectionSlice: // findProjectionSlice
case symbol_kind::S_elemMatch: // elemMatch
case symbol_kind::S_findProjectionObject: // findProjectionObject
case symbol_kind::S_findProjectionObjectFields: // findProjectionObjectFields
case symbol_kind::S_sortSpecs: // sortSpecs
case symbol_kind::S_specList: // specList
case symbol_kind::S_metaSort: // metaSort
case symbol_kind::S_oneOrNegOne: // oneOrNegOne
case symbol_kind::S_metaSortKeyword: // metaSortKeyword
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_aggregationProjectionFieldname: // aggregationProjectionFieldname
case symbol_kind::S_projectionFieldname: // projectionFieldname
case symbol_kind::S_expressionFieldname: // expressionFieldname
case symbol_kind::S_stageAsUserFieldname: // stageAsUserFieldname
case symbol_kind::S_argAsUserFieldname: // argAsUserFieldname
case symbol_kind::S_argAsProjectionPath: // argAsProjectionPath
case symbol_kind::S_aggExprAsUserFieldname: // aggExprAsUserFieldname
case symbol_kind::S_invariableUserFieldname: // invariableUserFieldname
case symbol_kind::S_sortFieldname: // sortFieldname
case symbol_kind::S_idAsUserFieldname: // idAsUserFieldname
case symbol_kind::S_elemMatchAsUserFieldname: // elemMatchAsUserFieldname
case symbol_kind::S_idAsProjectionPath: // idAsProjectionPath
case symbol_kind::S_valueFieldname: // valueFieldname
case symbol_kind::S_predFieldname: // predFieldname
case symbol_kind::S_logicalExprField: // logicalExprField
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_DATE_LITERAL: // "Date"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_DECIMAL_OTHER: // "arbitrary decimal"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_OBJECT_ID: // "ObjectID"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_TIMESTAMP: // "Timestamp"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_MAX_KEY: // "maxKey"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_MIN_KEY: // "minKey"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_JSNULL: // "null"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_UNDEFINED: // "undefined"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_DOUBLE_OTHER: // "arbitrary double"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_INT_OTHER: // "arbitrary integer"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_LONG_OTHER: // "arbitrary long"
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_aggregationProjectField: // aggregationProjectField
case symbol_kind::S_aggregationProjectionObjectField: // aggregationProjectionObjectField
case symbol_kind::S_expressionField: // expressionField
case symbol_kind::S_valueField: // valueField
case symbol_kind::S_onErrorArg: // onErrorArg
case symbol_kind::S_onNullArg: // onNullArg
case symbol_kind::S_asArg: // asArg
case symbol_kind::S_formatArg: // formatArg
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
case symbol_kind::S_hourArg: // hourArg
case symbol_kind::S_minuteArg: // minuteArg
case symbol_kind::S_secondArg: // secondArg
case symbol_kind::S_millisecondArg: // millisecondArg
case symbol_kind::S_dayArg: // dayArg
case symbol_kind::S_isoWeekArg: // isoWeekArg
case symbol_kind::S_iso8601Arg: // iso8601Arg
case symbol_kind::S_monthArg: // monthArg
case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_fieldPredicate: // fieldPredicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
case symbol_kind::S_notExpr: // notExpr
case symbol_kind::S_matchMod: // matchMod
case symbol_kind::S_existsExpr: // existsExpr
case symbol_kind::S_typeExpr: // typeExpr
case symbol_kind::S_commentExpr: // commentExpr
case symbol_kind::S_matchExpr: // matchExpr
case symbol_kind::S_matchText: // matchText
case symbol_kind::S_matchWhere: // matchWhere
case symbol_kind::S_findProjectField: // findProjectField
case symbol_kind::S_findProjectionObjectField: // findProjectionObjectField
case symbol_kind::S_sortSpec: // sortSpec
value.move>(YY_MOVE(that.value));
break;
case symbol_kind::S_FIELDNAME: // "fieldname"
case symbol_kind::S_DOLLAR_PREF_FIELDNAME: // "$-prefixed fieldname"
case symbol_kind::S_STRING: // "string"
case symbol_kind::S_DOLLAR_STRING: // "$-prefixed string"
case symbol_kind::S_DOLLAR_DOLLAR_STRING: // "$$-prefixed string"
case symbol_kind::S_arg: // arg
value.move(YY_MOVE(that.value));
break;
case symbol_kind::S_expressions: // expressions
case symbol_kind::S_values: // values
case symbol_kind::S_exprZeroToTwo: // exprZeroToTwo
case symbol_kind::S_typeValues: // typeValues
value.move>(YY_MOVE(that.value));
break;
case symbol_kind::S_DOTTED_FIELDNAME: // "fieldname containing dotted path"
value.move>(YY_MOVE(that.value));
break;
default:
break;
}
// that is emptied.
that.kind_ = symbol_kind::S_YYEMPTY;
}
#if YY_CPLUSPLUS < 201103L
ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(
const stack_symbol_type& that) {
state = that.state;
switch (that.kind()) {
case symbol_kind::S_BINARY: // "BinData"
value.copy(that.value);
break;
case symbol_kind::S_JAVASCRIPT: // "Code"
value.copy(that.value);
break;
case symbol_kind::S_JAVASCRIPT_W_SCOPE: // "CodeWScope"
value.copy(that.value);
break;
case symbol_kind::S_DB_POINTER: // "dbPointer"
value.copy(that.value);
break;
case symbol_kind::S_REGEX: // "regex"
value.copy(that.value);
break;
case symbol_kind::S_SYMBOL: // "Symbol"
value.copy(that.value);
break;
case symbol_kind::S_dbPointer: // dbPointer
case symbol_kind::S_javascript: // javascript
case symbol_kind::S_symbol: // symbol
case symbol_kind::S_javascriptWScope: // javascriptWScope
case symbol_kind::S_int: // int
case symbol_kind::S_timestamp: // timestamp
case symbol_kind::S_long: // long
case symbol_kind::S_double: // double
case symbol_kind::S_decimal: // decimal
case symbol_kind::S_minKey: // minKey
case symbol_kind::S_maxKey: // maxKey
case symbol_kind::S_value: // value
case symbol_kind::S_string: // string
case symbol_kind::S_aggregationFieldPath: // aggregationFieldPath
case symbol_kind::S_binary: // binary
case symbol_kind::S_undefined: // undefined
case symbol_kind::S_objectId: // objectId
case symbol_kind::S_bool: // bool
case symbol_kind::S_date: // date
case symbol_kind::S_null: // null
case symbol_kind::S_regex: // regex
case symbol_kind::S_simpleValue: // simpleValue
case symbol_kind::S_compoundValue: // compoundValue
case symbol_kind::S_valueArray: // valueArray
case symbol_kind::S_valueObject: // valueObject
case symbol_kind::S_valueFields: // valueFields
case symbol_kind::S_variable: // variable
case symbol_kind::S_typeArray: // typeArray
case symbol_kind::S_typeValue: // typeValue
case symbol_kind::S_pipeline: // pipeline
case symbol_kind::S_stageList: // stageList
case symbol_kind::S_stage: // stage
case symbol_kind::S_inhibitOptimization: // inhibitOptimization
case symbol_kind::S_unionWith: // unionWith
case symbol_kind::S_skip: // skip
case symbol_kind::S_limit: // limit
case symbol_kind::S_matchStage: // matchStage
case symbol_kind::S_project: // project
case symbol_kind::S_sample: // sample
case symbol_kind::S_aggregationProjectFields: // aggregationProjectFields
case symbol_kind::S_aggregationProjectionObjectFields: // aggregationProjectionObjectFields
case symbol_kind::S_topLevelAggregationProjection: // topLevelAggregationProjection
case symbol_kind::S_aggregationProjection: // aggregationProjection
case symbol_kind::S_projectionCommon: // projectionCommon
case symbol_kind::S_aggregationProjectionObject: // aggregationProjectionObject
case symbol_kind::S_num: // num
case symbol_kind::S_expression: // expression
case symbol_kind::S_exprFixedTwoArg: // exprFixedTwoArg
case symbol_kind::S_exprFixedThreeArg: // exprFixedThreeArg
case symbol_kind::S_slice: // slice
case symbol_kind::S_expressionArray: // expressionArray
case symbol_kind::S_expressionObject: // expressionObject
case symbol_kind::S_expressionFields: // expressionFields
case symbol_kind::S_maths: // maths
case symbol_kind::S_meta: // meta
case symbol_kind::S_add: // add
case symbol_kind::S_boolExprs: // boolExprs
case symbol_kind::S_and: // and
case symbol_kind::S_or: // or
case symbol_kind::S_not: // not
case symbol_kind::S_literalEscapes: // literalEscapes
case symbol_kind::S_const: // const
case symbol_kind::S_literal: // literal
case symbol_kind::S_stringExps: // stringExps
case symbol_kind::S_concat: // concat
case symbol_kind::S_dateFromString: // dateFromString
case symbol_kind::S_dateToString: // dateToString
case symbol_kind::S_indexOfBytes: // indexOfBytes
case symbol_kind::S_indexOfCP: // indexOfCP
case symbol_kind::S_ltrim: // ltrim
case symbol_kind::S_regexFind: // regexFind
case symbol_kind::S_regexFindAll: // regexFindAll
case symbol_kind::S_regexMatch: // regexMatch
case symbol_kind::S_regexArgs: // regexArgs
case symbol_kind::S_replaceOne: // replaceOne
case symbol_kind::S_replaceAll: // replaceAll
case symbol_kind::S_rtrim: // rtrim
case symbol_kind::S_split: // split
case symbol_kind::S_strLenBytes: // strLenBytes
case symbol_kind::S_strLenCP: // strLenCP
case symbol_kind::S_strcasecmp: // strcasecmp
case symbol_kind::S_substr: // substr
case symbol_kind::S_substrBytes: // substrBytes
case symbol_kind::S_substrCP: // substrCP
case symbol_kind::S_toLower: // toLower
case symbol_kind::S_toUpper: // toUpper
case symbol_kind::S_trim: // trim
case symbol_kind::S_compExprs: // compExprs
case symbol_kind::S_cmp: // cmp
case symbol_kind::S_eq: // eq
case symbol_kind::S_gt: // gt
case symbol_kind::S_gte: // gte
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
case symbol_kind::S_dateExps: // dateExps
case symbol_kind::S_dateFromParts: // dateFromParts
case symbol_kind::S_dateToParts: // dateToParts
case symbol_kind::S_dayOfMonth: // dayOfMonth
case symbol_kind::S_dayOfWeek: // dayOfWeek
case symbol_kind::S_dayOfYear: // dayOfYear
case symbol_kind::S_hour: // hour
case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
case symbol_kind::S_isoWeek: // isoWeek
case symbol_kind::S_isoWeekYear: // isoWeekYear
case symbol_kind::S_millisecond: // millisecond
case symbol_kind::S_minute: // minute
case symbol_kind::S_month: // month
case symbol_kind::S_second: // second
case symbol_kind::S_week: // week
case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
case symbol_kind::S_toDate: // toDate
case symbol_kind::S_toDecimal: // toDecimal
case symbol_kind::S_toDouble: // toDouble
case symbol_kind::S_toInt: // toInt
case symbol_kind::S_toLong: // toLong
case symbol_kind::S_toObjectId: // toObjectId
case symbol_kind::S_toString: // toString
case symbol_kind::S_type: // type
case symbol_kind::S_abs: // abs
case symbol_kind::S_ceil: // ceil
case symbol_kind::S_divide: // divide
case symbol_kind::S_exponent: // exponent
case symbol_kind::S_floor: // floor
case symbol_kind::S_ln: // ln
case symbol_kind::S_log: // log
case symbol_kind::S_logten: // logten
case symbol_kind::S_mod: // mod
case symbol_kind::S_multiply: // multiply
case symbol_kind::S_pow: // pow
case symbol_kind::S_round: // round
case symbol_kind::S_sqrt: // sqrt
case symbol_kind::S_subtract: // subtract
case symbol_kind::S_trunc: // trunc
case symbol_kind::S_arrayExps: // arrayExps
case symbol_kind::S_arrayElemAt: // arrayElemAt
case symbol_kind::S_arrayToObject: // arrayToObject
case symbol_kind::S_concatArrays: // concatArrays
case symbol_kind::S_filter: // filter
case symbol_kind::S_first: // first
case symbol_kind::S_in: // in
case symbol_kind::S_indexOfArray: // indexOfArray
case symbol_kind::S_isArray: // isArray
case symbol_kind::S_setExpression: // setExpression
case symbol_kind::S_allElementsTrue: // allElementsTrue
case symbol_kind::S_anyElementTrue: // anyElementTrue
case symbol_kind::S_setDifference: // setDifference
case symbol_kind::S_setEquals: // setEquals
case symbol_kind::S_setIntersection: // setIntersection
case symbol_kind::S_setIsSubset: // setIsSubset
case symbol_kind::S_setUnion: // setUnion
case symbol_kind::S_trig: // trig
case symbol_kind::S_sin: // sin
case symbol_kind::S_cos: // cos
case symbol_kind::S_tan: // tan
case symbol_kind::S_sinh: // sinh
case symbol_kind::S_cosh: // cosh
case symbol_kind::S_tanh: // tanh
case symbol_kind::S_asin: // asin
case symbol_kind::S_acos: // acos
case symbol_kind::S_atan: // atan
case symbol_kind::S_asinh: // asinh
case symbol_kind::S_acosh: // acosh
case symbol_kind::S_atanh: // atanh
case symbol_kind::S_atan2: // atan2
case symbol_kind::S_degreesToRadians: // degreesToRadians
case symbol_kind::S_radiansToDegrees: // radiansToDegrees
case symbol_kind::S_nonArrayExpression: // nonArrayExpression
case symbol_kind::S_nonArrayCompoundExpression: // nonArrayCompoundExpression
case symbol_kind::S_aggregationOperator: // aggregationOperator
case symbol_kind::S_aggregationOperatorWithoutSlice: // aggregationOperatorWithoutSlice
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_matchExpression: // matchExpression
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
case symbol_kind::S_predValue: // predValue
case symbol_kind::S_additionalExprs: // additionalExprs
case symbol_kind::S_textArgCaseSensitive: // textArgCaseSensitive
case symbol_kind::S_textArgDiacriticSensitive: // textArgDiacriticSensitive
case symbol_kind::S_textArgLanguage: // textArgLanguage
case symbol_kind::S_textArgSearch: // textArgSearch
case symbol_kind::S_findProject: // findProject
case symbol_kind::S_findProjectFields: // findProjectFields
case symbol_kind::S_topLevelFindProjection: // topLevelFindProjection
case symbol_kind::S_findProjection: // findProjection
case symbol_kind::S_findProjectionSlice: // findProjectionSlice
case symbol_kind::S_elemMatch: // elemMatch
case symbol_kind::S_findProjectionObject: // findProjectionObject
case symbol_kind::S_findProjectionObjectFields: // findProjectionObjectFields
case symbol_kind::S_sortSpecs: // sortSpecs
case symbol_kind::S_specList: // specList
case symbol_kind::S_metaSort: // metaSort
case symbol_kind::S_oneOrNegOne: // oneOrNegOne
case symbol_kind::S_metaSortKeyword: // metaSortKeyword
value.copy(that.value);
break;
case symbol_kind::S_aggregationProjectionFieldname: // aggregationProjectionFieldname
case symbol_kind::S_projectionFieldname: // projectionFieldname
case symbol_kind::S_expressionFieldname: // expressionFieldname
case symbol_kind::S_stageAsUserFieldname: // stageAsUserFieldname
case symbol_kind::S_argAsUserFieldname: // argAsUserFieldname
case symbol_kind::S_argAsProjectionPath: // argAsProjectionPath
case symbol_kind::S_aggExprAsUserFieldname: // aggExprAsUserFieldname
case symbol_kind::S_invariableUserFieldname: // invariableUserFieldname
case symbol_kind::S_sortFieldname: // sortFieldname
case symbol_kind::S_idAsUserFieldname: // idAsUserFieldname
case symbol_kind::S_elemMatchAsUserFieldname: // elemMatchAsUserFieldname
case symbol_kind::S_idAsProjectionPath: // idAsProjectionPath
case symbol_kind::S_valueFieldname: // valueFieldname
case symbol_kind::S_predFieldname: // predFieldname
case symbol_kind::S_logicalExprField: // logicalExprField
value.copy(that.value);
break;
case symbol_kind::S_DATE_LITERAL: // "Date"
value.copy(that.value);
break;
case symbol_kind::S_DECIMAL_OTHER: // "arbitrary decimal"
value.copy(that.value);
break;
case symbol_kind::S_OBJECT_ID: // "ObjectID"
value.copy(that.value);
break;
case symbol_kind::S_TIMESTAMP: // "Timestamp"
value.copy(that.value);
break;
case symbol_kind::S_MAX_KEY: // "maxKey"
value.copy(that.value);
break;
case symbol_kind::S_MIN_KEY: // "minKey"
value.copy(that.value);
break;
case symbol_kind::S_JSNULL: // "null"
value.copy(that.value);
break;
case symbol_kind::S_UNDEFINED: // "undefined"
value.copy(that.value);
break;
case symbol_kind::S_DOUBLE_OTHER: // "arbitrary double"
value.copy(that.value);
break;
case symbol_kind::S_INT_OTHER: // "arbitrary integer"
value.copy(that.value);
break;
case symbol_kind::S_LONG_OTHER: // "arbitrary long"
value.copy(that.value);
break;
case symbol_kind::S_aggregationProjectField: // aggregationProjectField
case symbol_kind::S_aggregationProjectionObjectField: // aggregationProjectionObjectField
case symbol_kind::S_expressionField: // expressionField
case symbol_kind::S_valueField: // valueField
case symbol_kind::S_onErrorArg: // onErrorArg
case symbol_kind::S_onNullArg: // onNullArg
case symbol_kind::S_asArg: // asArg
case symbol_kind::S_formatArg: // formatArg
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
case symbol_kind::S_hourArg: // hourArg
case symbol_kind::S_minuteArg: // minuteArg
case symbol_kind::S_secondArg: // secondArg
case symbol_kind::S_millisecondArg: // millisecondArg
case symbol_kind::S_dayArg: // dayArg
case symbol_kind::S_isoWeekArg: // isoWeekArg
case symbol_kind::S_iso8601Arg: // iso8601Arg
case symbol_kind::S_monthArg: // monthArg
case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_fieldPredicate: // fieldPredicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
case symbol_kind::S_notExpr: // notExpr
case symbol_kind::S_matchMod: // matchMod
case symbol_kind::S_existsExpr: // existsExpr
case symbol_kind::S_typeExpr: // typeExpr
case symbol_kind::S_commentExpr: // commentExpr
case symbol_kind::S_matchExpr: // matchExpr
case symbol_kind::S_matchText: // matchText
case symbol_kind::S_matchWhere: // matchWhere
case symbol_kind::S_findProjectField: // findProjectField
case symbol_kind::S_findProjectionObjectField: // findProjectionObjectField
case symbol_kind::S_sortSpec: // sortSpec
value.copy>(that.value);
break;
case symbol_kind::S_FIELDNAME: // "fieldname"
case symbol_kind::S_DOLLAR_PREF_FIELDNAME: // "$-prefixed fieldname"
case symbol_kind::S_STRING: // "string"
case symbol_kind::S_DOLLAR_STRING: // "$-prefixed string"
case symbol_kind::S_DOLLAR_DOLLAR_STRING: // "$$-prefixed string"
case symbol_kind::S_arg: // arg
value.copy(that.value);
break;
case symbol_kind::S_expressions: // expressions
case symbol_kind::S_values: // values
case symbol_kind::S_exprZeroToTwo: // exprZeroToTwo
case symbol_kind::S_typeValues: // typeValues
value.copy>(that.value);
break;
case symbol_kind::S_DOTTED_FIELDNAME: // "fieldname containing dotted path"
value.copy>(that.value);
break;
default:
break;
}
location = that.location;
return *this;
}
ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(stack_symbol_type& that) {
state = that.state;
switch (that.kind()) {
case symbol_kind::S_BINARY: // "BinData"
value.move(that.value);
break;
case symbol_kind::S_JAVASCRIPT: // "Code"
value.move(that.value);
break;
case symbol_kind::S_JAVASCRIPT_W_SCOPE: // "CodeWScope"
value.move(that.value);
break;
case symbol_kind::S_DB_POINTER: // "dbPointer"
value.move(that.value);
break;
case symbol_kind::S_REGEX: // "regex"
value.move(that.value);
break;
case symbol_kind::S_SYMBOL: // "Symbol"
value.move(that.value);
break;
case symbol_kind::S_dbPointer: // dbPointer
case symbol_kind::S_javascript: // javascript
case symbol_kind::S_symbol: // symbol
case symbol_kind::S_javascriptWScope: // javascriptWScope
case symbol_kind::S_int: // int
case symbol_kind::S_timestamp: // timestamp
case symbol_kind::S_long: // long
case symbol_kind::S_double: // double
case symbol_kind::S_decimal: // decimal
case symbol_kind::S_minKey: // minKey
case symbol_kind::S_maxKey: // maxKey
case symbol_kind::S_value: // value
case symbol_kind::S_string: // string
case symbol_kind::S_aggregationFieldPath: // aggregationFieldPath
case symbol_kind::S_binary: // binary
case symbol_kind::S_undefined: // undefined
case symbol_kind::S_objectId: // objectId
case symbol_kind::S_bool: // bool
case symbol_kind::S_date: // date
case symbol_kind::S_null: // null
case symbol_kind::S_regex: // regex
case symbol_kind::S_simpleValue: // simpleValue
case symbol_kind::S_compoundValue: // compoundValue
case symbol_kind::S_valueArray: // valueArray
case symbol_kind::S_valueObject: // valueObject
case symbol_kind::S_valueFields: // valueFields
case symbol_kind::S_variable: // variable
case symbol_kind::S_typeArray: // typeArray
case symbol_kind::S_typeValue: // typeValue
case symbol_kind::S_pipeline: // pipeline
case symbol_kind::S_stageList: // stageList
case symbol_kind::S_stage: // stage
case symbol_kind::S_inhibitOptimization: // inhibitOptimization
case symbol_kind::S_unionWith: // unionWith
case symbol_kind::S_skip: // skip
case symbol_kind::S_limit: // limit
case symbol_kind::S_matchStage: // matchStage
case symbol_kind::S_project: // project
case symbol_kind::S_sample: // sample
case symbol_kind::S_aggregationProjectFields: // aggregationProjectFields
case symbol_kind::S_aggregationProjectionObjectFields: // aggregationProjectionObjectFields
case symbol_kind::S_topLevelAggregationProjection: // topLevelAggregationProjection
case symbol_kind::S_aggregationProjection: // aggregationProjection
case symbol_kind::S_projectionCommon: // projectionCommon
case symbol_kind::S_aggregationProjectionObject: // aggregationProjectionObject
case symbol_kind::S_num: // num
case symbol_kind::S_expression: // expression
case symbol_kind::S_exprFixedTwoArg: // exprFixedTwoArg
case symbol_kind::S_exprFixedThreeArg: // exprFixedThreeArg
case symbol_kind::S_slice: // slice
case symbol_kind::S_expressionArray: // expressionArray
case symbol_kind::S_expressionObject: // expressionObject
case symbol_kind::S_expressionFields: // expressionFields
case symbol_kind::S_maths: // maths
case symbol_kind::S_meta: // meta
case symbol_kind::S_add: // add
case symbol_kind::S_boolExprs: // boolExprs
case symbol_kind::S_and: // and
case symbol_kind::S_or: // or
case symbol_kind::S_not: // not
case symbol_kind::S_literalEscapes: // literalEscapes
case symbol_kind::S_const: // const
case symbol_kind::S_literal: // literal
case symbol_kind::S_stringExps: // stringExps
case symbol_kind::S_concat: // concat
case symbol_kind::S_dateFromString: // dateFromString
case symbol_kind::S_dateToString: // dateToString
case symbol_kind::S_indexOfBytes: // indexOfBytes
case symbol_kind::S_indexOfCP: // indexOfCP
case symbol_kind::S_ltrim: // ltrim
case symbol_kind::S_regexFind: // regexFind
case symbol_kind::S_regexFindAll: // regexFindAll
case symbol_kind::S_regexMatch: // regexMatch
case symbol_kind::S_regexArgs: // regexArgs
case symbol_kind::S_replaceOne: // replaceOne
case symbol_kind::S_replaceAll: // replaceAll
case symbol_kind::S_rtrim: // rtrim
case symbol_kind::S_split: // split
case symbol_kind::S_strLenBytes: // strLenBytes
case symbol_kind::S_strLenCP: // strLenCP
case symbol_kind::S_strcasecmp: // strcasecmp
case symbol_kind::S_substr: // substr
case symbol_kind::S_substrBytes: // substrBytes
case symbol_kind::S_substrCP: // substrCP
case symbol_kind::S_toLower: // toLower
case symbol_kind::S_toUpper: // toUpper
case symbol_kind::S_trim: // trim
case symbol_kind::S_compExprs: // compExprs
case symbol_kind::S_cmp: // cmp
case symbol_kind::S_eq: // eq
case symbol_kind::S_gt: // gt
case symbol_kind::S_gte: // gte
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
case symbol_kind::S_dateExps: // dateExps
case symbol_kind::S_dateFromParts: // dateFromParts
case symbol_kind::S_dateToParts: // dateToParts
case symbol_kind::S_dayOfMonth: // dayOfMonth
case symbol_kind::S_dayOfWeek: // dayOfWeek
case symbol_kind::S_dayOfYear: // dayOfYear
case symbol_kind::S_hour: // hour
case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
case symbol_kind::S_isoWeek: // isoWeek
case symbol_kind::S_isoWeekYear: // isoWeekYear
case symbol_kind::S_millisecond: // millisecond
case symbol_kind::S_minute: // minute
case symbol_kind::S_month: // month
case symbol_kind::S_second: // second
case symbol_kind::S_week: // week
case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
case symbol_kind::S_toDate: // toDate
case symbol_kind::S_toDecimal: // toDecimal
case symbol_kind::S_toDouble: // toDouble
case symbol_kind::S_toInt: // toInt
case symbol_kind::S_toLong: // toLong
case symbol_kind::S_toObjectId: // toObjectId
case symbol_kind::S_toString: // toString
case symbol_kind::S_type: // type
case symbol_kind::S_abs: // abs
case symbol_kind::S_ceil: // ceil
case symbol_kind::S_divide: // divide
case symbol_kind::S_exponent: // exponent
case symbol_kind::S_floor: // floor
case symbol_kind::S_ln: // ln
case symbol_kind::S_log: // log
case symbol_kind::S_logten: // logten
case symbol_kind::S_mod: // mod
case symbol_kind::S_multiply: // multiply
case symbol_kind::S_pow: // pow
case symbol_kind::S_round: // round
case symbol_kind::S_sqrt: // sqrt
case symbol_kind::S_subtract: // subtract
case symbol_kind::S_trunc: // trunc
case symbol_kind::S_arrayExps: // arrayExps
case symbol_kind::S_arrayElemAt: // arrayElemAt
case symbol_kind::S_arrayToObject: // arrayToObject
case symbol_kind::S_concatArrays: // concatArrays
case symbol_kind::S_filter: // filter
case symbol_kind::S_first: // first
case symbol_kind::S_in: // in
case symbol_kind::S_indexOfArray: // indexOfArray
case symbol_kind::S_isArray: // isArray
case symbol_kind::S_setExpression: // setExpression
case symbol_kind::S_allElementsTrue: // allElementsTrue
case symbol_kind::S_anyElementTrue: // anyElementTrue
case symbol_kind::S_setDifference: // setDifference
case symbol_kind::S_setEquals: // setEquals
case symbol_kind::S_setIntersection: // setIntersection
case symbol_kind::S_setIsSubset: // setIsSubset
case symbol_kind::S_setUnion: // setUnion
case symbol_kind::S_trig: // trig
case symbol_kind::S_sin: // sin
case symbol_kind::S_cos: // cos
case symbol_kind::S_tan: // tan
case symbol_kind::S_sinh: // sinh
case symbol_kind::S_cosh: // cosh
case symbol_kind::S_tanh: // tanh
case symbol_kind::S_asin: // asin
case symbol_kind::S_acos: // acos
case symbol_kind::S_atan: // atan
case symbol_kind::S_asinh: // asinh
case symbol_kind::S_acosh: // acosh
case symbol_kind::S_atanh: // atanh
case symbol_kind::S_atan2: // atan2
case symbol_kind::S_degreesToRadians: // degreesToRadians
case symbol_kind::S_radiansToDegrees: // radiansToDegrees
case symbol_kind::S_nonArrayExpression: // nonArrayExpression
case symbol_kind::S_nonArrayCompoundExpression: // nonArrayCompoundExpression
case symbol_kind::S_aggregationOperator: // aggregationOperator
case symbol_kind::S_aggregationOperatorWithoutSlice: // aggregationOperatorWithoutSlice
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_matchExpression: // matchExpression
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
case symbol_kind::S_predValue: // predValue
case symbol_kind::S_additionalExprs: // additionalExprs
case symbol_kind::S_textArgCaseSensitive: // textArgCaseSensitive
case symbol_kind::S_textArgDiacriticSensitive: // textArgDiacriticSensitive
case symbol_kind::S_textArgLanguage: // textArgLanguage
case symbol_kind::S_textArgSearch: // textArgSearch
case symbol_kind::S_findProject: // findProject
case symbol_kind::S_findProjectFields: // findProjectFields
case symbol_kind::S_topLevelFindProjection: // topLevelFindProjection
case symbol_kind::S_findProjection: // findProjection
case symbol_kind::S_findProjectionSlice: // findProjectionSlice
case symbol_kind::S_elemMatch: // elemMatch
case symbol_kind::S_findProjectionObject: // findProjectionObject
case symbol_kind::S_findProjectionObjectFields: // findProjectionObjectFields
case symbol_kind::S_sortSpecs: // sortSpecs
case symbol_kind::S_specList: // specList
case symbol_kind::S_metaSort: // metaSort
case symbol_kind::S_oneOrNegOne: // oneOrNegOne
case symbol_kind::S_metaSortKeyword: // metaSortKeyword
value.move(that.value);
break;
case symbol_kind::S_aggregationProjectionFieldname: // aggregationProjectionFieldname
case symbol_kind::S_projectionFieldname: // projectionFieldname
case symbol_kind::S_expressionFieldname: // expressionFieldname
case symbol_kind::S_stageAsUserFieldname: // stageAsUserFieldname
case symbol_kind::S_argAsUserFieldname: // argAsUserFieldname
case symbol_kind::S_argAsProjectionPath: // argAsProjectionPath
case symbol_kind::S_aggExprAsUserFieldname: // aggExprAsUserFieldname
case symbol_kind::S_invariableUserFieldname: // invariableUserFieldname
case symbol_kind::S_sortFieldname: // sortFieldname
case symbol_kind::S_idAsUserFieldname: // idAsUserFieldname
case symbol_kind::S_elemMatchAsUserFieldname: // elemMatchAsUserFieldname
case symbol_kind::S_idAsProjectionPath: // idAsProjectionPath
case symbol_kind::S_valueFieldname: // valueFieldname
case symbol_kind::S_predFieldname: // predFieldname
case symbol_kind::S_logicalExprField: // logicalExprField
value.move(that.value);
break;
case symbol_kind::S_DATE_LITERAL: // "Date"
value.move(that.value);
break;
case symbol_kind::S_DECIMAL_OTHER: // "arbitrary decimal"
value.move(that.value);
break;
case symbol_kind::S_OBJECT_ID: // "ObjectID"
value.move(that.value);
break;
case symbol_kind::S_TIMESTAMP: // "Timestamp"
value.move(that.value);
break;
case symbol_kind::S_MAX_KEY: // "maxKey"
value.move(that.value);
break;
case symbol_kind::S_MIN_KEY: // "minKey"
value.move(that.value);
break;
case symbol_kind::S_JSNULL: // "null"
value.move(that.value);
break;
case symbol_kind::S_UNDEFINED: // "undefined"
value.move(that.value);
break;
case symbol_kind::S_DOUBLE_OTHER: // "arbitrary double"
value.move(that.value);
break;
case symbol_kind::S_INT_OTHER: // "arbitrary integer"
value.move(that.value);
break;
case symbol_kind::S_LONG_OTHER: // "arbitrary long"
value.move(that.value);
break;
case symbol_kind::S_aggregationProjectField: // aggregationProjectField
case symbol_kind::S_aggregationProjectionObjectField: // aggregationProjectionObjectField
case symbol_kind::S_expressionField: // expressionField
case symbol_kind::S_valueField: // valueField
case symbol_kind::S_onErrorArg: // onErrorArg
case symbol_kind::S_onNullArg: // onNullArg
case symbol_kind::S_asArg: // asArg
case symbol_kind::S_formatArg: // formatArg
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
case symbol_kind::S_hourArg: // hourArg
case symbol_kind::S_minuteArg: // minuteArg
case symbol_kind::S_secondArg: // secondArg
case symbol_kind::S_millisecondArg: // millisecondArg
case symbol_kind::S_dayArg: // dayArg
case symbol_kind::S_isoWeekArg: // isoWeekArg
case symbol_kind::S_iso8601Arg: // iso8601Arg
case symbol_kind::S_monthArg: // monthArg
case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_fieldPredicate: // fieldPredicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
case symbol_kind::S_notExpr: // notExpr
case symbol_kind::S_matchMod: // matchMod
case symbol_kind::S_existsExpr: // existsExpr
case symbol_kind::S_typeExpr: // typeExpr
case symbol_kind::S_commentExpr: // commentExpr
case symbol_kind::S_matchExpr: // matchExpr
case symbol_kind::S_matchText: // matchText
case symbol_kind::S_matchWhere: // matchWhere
case symbol_kind::S_findProjectField: // findProjectField
case symbol_kind::S_findProjectionObjectField: // findProjectionObjectField
case symbol_kind::S_sortSpec: // sortSpec
value.move>(that.value);
break;
case symbol_kind::S_FIELDNAME: // "fieldname"
case symbol_kind::S_DOLLAR_PREF_FIELDNAME: // "$-prefixed fieldname"
case symbol_kind::S_STRING: // "string"
case symbol_kind::S_DOLLAR_STRING: // "$-prefixed string"
case symbol_kind::S_DOLLAR_DOLLAR_STRING: // "$$-prefixed string"
case symbol_kind::S_arg: // arg
value.move(that.value);
break;
case symbol_kind::S_expressions: // expressions
case symbol_kind::S_values: // values
case symbol_kind::S_exprZeroToTwo: // exprZeroToTwo
case symbol_kind::S_typeValues: // typeValues
value.move>(that.value);
break;
case symbol_kind::S_DOTTED_FIELDNAME: // "fieldname containing dotted path"
value.move>(that.value);
break;
default:
break;
}
location = that.location;
// that is emptied.
that.state = empty_state;
return *this;
}
#endif
template
void ParserGen::yy_destroy_(const char* yymsg, basic_symbol& yysym) const {
if (yymsg)
YY_SYMBOL_PRINT(yymsg, yysym);
}
#if YYDEBUG
template
void ParserGen::yy_print_(std::ostream& yyo, const basic_symbol& yysym) const {
std::ostream& yyoutput = yyo;
YYUSE(yyoutput);
if (yysym.empty())
yyo << "empty symbol";
else {
symbol_kind_type yykind = yysym.kind();
yyo << (yykind < YYNTOKENS ? "token" : "nterm") << ' ' << yysym.name() << " ("
<< yysym.location << ": ";
YYUSE(yykind);
yyo << ')';
}
}
#endif
void ParserGen::yypush_(const char* m, YY_MOVE_REF(stack_symbol_type) sym) {
if (m)
YY_SYMBOL_PRINT(m, sym);
yystack_.push(YY_MOVE(sym));
}
void ParserGen::yypush_(const char* m, state_type s, YY_MOVE_REF(symbol_type) sym) {
#if 201103L <= YY_CPLUSPLUS
yypush_(m, stack_symbol_type(s, std::move(sym)));
#else
stack_symbol_type ss(s, sym);
yypush_(m, ss);
#endif
}
void ParserGen::yypop_(int n) {
yystack_.pop(n);
}
#if YYDEBUG
std::ostream& ParserGen::debug_stream() const {
return *yycdebug_;
}
void ParserGen::set_debug_stream(std::ostream& o) {
yycdebug_ = &o;
}
ParserGen::debug_level_type ParserGen::debug_level() const {
return yydebug_;
}
void ParserGen::set_debug_level(debug_level_type l) {
yydebug_ = l;
}
#endif // YYDEBUG
ParserGen::state_type ParserGen::yy_lr_goto_state_(state_type yystate, int yysym) {
int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
return yydefgoto_[yysym - YYNTOKENS];
}
bool ParserGen::yy_pact_value_is_default_(int yyvalue) {
return yyvalue == yypact_ninf_;
}
bool ParserGen::yy_table_value_is_error_(int yyvalue) {
return yyvalue == yytable_ninf_;
}
int ParserGen::operator()() {
return parse();
}
int ParserGen::parse() {
int yyn;
/// Length of the RHS of the rule being reduced.
int yylen = 0;
// Error handling.
int yynerrs_ = 0;
int yyerrstatus_ = 0;
/// The lookahead symbol.
symbol_type yyla;
/// The locations where the error started and ended.
stack_symbol_type yyerror_range[3];
/// The return value of parse ().
int yyresult;
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
{
YYCDEBUG << "Starting parse\n";
/* Initialize the stack. The initial state will be set in
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
stacks with a primary value. */
yystack_.clear();
yypush_(YY_NULLPTR, 0, YY_MOVE(yyla));
/*-----------------------------------------------.
| yynewstate -- push a new symbol on the stack. |
`-----------------------------------------------*/
yynewstate:
YYCDEBUG << "Entering state " << int(yystack_[0].state) << '\n';
YY_STACK_PRINT();
// Accept?
if (yystack_[0].state == yyfinal_)
YYACCEPT;
goto yybackup;
/*-----------.
| yybackup. |
`-----------*/
yybackup:
// Try to take a decision without lookahead.
yyn = yypact_[+yystack_[0].state];
if (yy_pact_value_is_default_(yyn))
goto yydefault;
// Read a lookahead token.
if (yyla.empty()) {
YYCDEBUG << "Reading a token\n";
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
{
symbol_type yylookahead(yylex(lexer));
yyla.move(yylookahead);
}
#if YY_EXCEPTIONS
catch (const syntax_error& yyexc) {
YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
error(yyexc);
goto yyerrlab1;
}
#endif // YY_EXCEPTIONS
}
YY_SYMBOL_PRINT("Next token is", yyla);
if (yyla.kind() == symbol_kind::S_YYerror) {
// The scanner already issued an error message, process directly
// to error recovery. But do not keep the error token as
// lookahead, it is too special and may lead us to an endless
// loop in error recovery. */
yyla.kind_ = symbol_kind::S_YYUNDEF;
goto yyerrlab1;
}
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
yyn += yyla.kind();
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind()) {
goto yydefault;
}
// Reduce or error.
yyn = yytable_[yyn];
if (yyn <= 0) {
if (yy_table_value_is_error_(yyn))
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
// Count tokens shifted since error; after three, turn off error status.
if (yyerrstatus_)
--yyerrstatus_;
// Shift the lookahead token.
yypush_("Shifting", state_type(yyn), YY_MOVE(yyla));
goto yynewstate;
/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state. |
`-----------------------------------------------------------*/
yydefault:
yyn = yydefact_[+yystack_[0].state];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
/*-----------------------------.
| yyreduce -- do a reduction. |
`-----------------------------*/
yyreduce:
yylen = yyr2_[yyn];
{
stack_symbol_type yylhs;
yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
/* Variants are always initialized to an empty instance of the
correct type. The default '$$ = $1' action is NOT applied
when using variants. */
switch (yyr1_[yyn]) {
case symbol_kind::S_BINARY: // "BinData"
yylhs.value.emplace();
break;
case symbol_kind::S_JAVASCRIPT: // "Code"
yylhs.value.emplace();
break;
case symbol_kind::S_JAVASCRIPT_W_SCOPE: // "CodeWScope"
yylhs.value.emplace();
break;
case symbol_kind::S_DB_POINTER: // "dbPointer"
yylhs.value.emplace();
break;
case symbol_kind::S_REGEX: // "regex"
yylhs.value.emplace();
break;
case symbol_kind::S_SYMBOL: // "Symbol"
yylhs.value.emplace();
break;
case symbol_kind::S_dbPointer: // dbPointer
case symbol_kind::S_javascript: // javascript
case symbol_kind::S_symbol: // symbol
case symbol_kind::S_javascriptWScope: // javascriptWScope
case symbol_kind::S_int: // int
case symbol_kind::S_timestamp: // timestamp
case symbol_kind::S_long: // long
case symbol_kind::S_double: // double
case symbol_kind::S_decimal: // decimal
case symbol_kind::S_minKey: // minKey
case symbol_kind::S_maxKey: // maxKey
case symbol_kind::S_value: // value
case symbol_kind::S_string: // string
case symbol_kind::S_aggregationFieldPath: // aggregationFieldPath
case symbol_kind::S_binary: // binary
case symbol_kind::S_undefined: // undefined
case symbol_kind::S_objectId: // objectId
case symbol_kind::S_bool: // bool
case symbol_kind::S_date: // date
case symbol_kind::S_null: // null
case symbol_kind::S_regex: // regex
case symbol_kind::S_simpleValue: // simpleValue
case symbol_kind::S_compoundValue: // compoundValue
case symbol_kind::S_valueArray: // valueArray
case symbol_kind::S_valueObject: // valueObject
case symbol_kind::S_valueFields: // valueFields
case symbol_kind::S_variable: // variable
case symbol_kind::S_typeArray: // typeArray
case symbol_kind::S_typeValue: // typeValue
case symbol_kind::S_pipeline: // pipeline
case symbol_kind::S_stageList: // stageList
case symbol_kind::S_stage: // stage
case symbol_kind::S_inhibitOptimization: // inhibitOptimization
case symbol_kind::S_unionWith: // unionWith
case symbol_kind::S_skip: // skip
case symbol_kind::S_limit: // limit
case symbol_kind::S_matchStage: // matchStage
case symbol_kind::S_project: // project
case symbol_kind::S_sample: // sample
case symbol_kind::S_aggregationProjectFields: // aggregationProjectFields
case symbol_kind::
S_aggregationProjectionObjectFields: // aggregationProjectionObjectFields
case symbol_kind::S_topLevelAggregationProjection: // topLevelAggregationProjection
case symbol_kind::S_aggregationProjection: // aggregationProjection
case symbol_kind::S_projectionCommon: // projectionCommon
case symbol_kind::S_aggregationProjectionObject: // aggregationProjectionObject
case symbol_kind::S_num: // num
case symbol_kind::S_expression: // expression
case symbol_kind::S_exprFixedTwoArg: // exprFixedTwoArg
case symbol_kind::S_exprFixedThreeArg: // exprFixedThreeArg
case symbol_kind::S_slice: // slice
case symbol_kind::S_expressionArray: // expressionArray
case symbol_kind::S_expressionObject: // expressionObject
case symbol_kind::S_expressionFields: // expressionFields
case symbol_kind::S_maths: // maths
case symbol_kind::S_meta: // meta
case symbol_kind::S_add: // add
case symbol_kind::S_boolExprs: // boolExprs
case symbol_kind::S_and: // and
case symbol_kind::S_or: // or
case symbol_kind::S_not: // not
case symbol_kind::S_literalEscapes: // literalEscapes
case symbol_kind::S_const: // const
case symbol_kind::S_literal: // literal
case symbol_kind::S_stringExps: // stringExps
case symbol_kind::S_concat: // concat
case symbol_kind::S_dateFromString: // dateFromString
case symbol_kind::S_dateToString: // dateToString
case symbol_kind::S_indexOfBytes: // indexOfBytes
case symbol_kind::S_indexOfCP: // indexOfCP
case symbol_kind::S_ltrim: // ltrim
case symbol_kind::S_regexFind: // regexFind
case symbol_kind::S_regexFindAll: // regexFindAll
case symbol_kind::S_regexMatch: // regexMatch
case symbol_kind::S_regexArgs: // regexArgs
case symbol_kind::S_replaceOne: // replaceOne
case symbol_kind::S_replaceAll: // replaceAll
case symbol_kind::S_rtrim: // rtrim
case symbol_kind::S_split: // split
case symbol_kind::S_strLenBytes: // strLenBytes
case symbol_kind::S_strLenCP: // strLenCP
case symbol_kind::S_strcasecmp: // strcasecmp
case symbol_kind::S_substr: // substr
case symbol_kind::S_substrBytes: // substrBytes
case symbol_kind::S_substrCP: // substrCP
case symbol_kind::S_toLower: // toLower
case symbol_kind::S_toUpper: // toUpper
case symbol_kind::S_trim: // trim
case symbol_kind::S_compExprs: // compExprs
case symbol_kind::S_cmp: // cmp
case symbol_kind::S_eq: // eq
case symbol_kind::S_gt: // gt
case symbol_kind::S_gte: // gte
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
case symbol_kind::S_dateExps: // dateExps
case symbol_kind::S_dateFromParts: // dateFromParts
case symbol_kind::S_dateToParts: // dateToParts
case symbol_kind::S_dayOfMonth: // dayOfMonth
case symbol_kind::S_dayOfWeek: // dayOfWeek
case symbol_kind::S_dayOfYear: // dayOfYear
case symbol_kind::S_hour: // hour
case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
case symbol_kind::S_isoWeek: // isoWeek
case symbol_kind::S_isoWeekYear: // isoWeekYear
case symbol_kind::S_millisecond: // millisecond
case symbol_kind::S_minute: // minute
case symbol_kind::S_month: // month
case symbol_kind::S_second: // second
case symbol_kind::S_week: // week
case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
case symbol_kind::S_toDate: // toDate
case symbol_kind::S_toDecimal: // toDecimal
case symbol_kind::S_toDouble: // toDouble
case symbol_kind::S_toInt: // toInt
case symbol_kind::S_toLong: // toLong
case symbol_kind::S_toObjectId: // toObjectId
case symbol_kind::S_toString: // toString
case symbol_kind::S_type: // type
case symbol_kind::S_abs: // abs
case symbol_kind::S_ceil: // ceil
case symbol_kind::S_divide: // divide
case symbol_kind::S_exponent: // exponent
case symbol_kind::S_floor: // floor
case symbol_kind::S_ln: // ln
case symbol_kind::S_log: // log
case symbol_kind::S_logten: // logten
case symbol_kind::S_mod: // mod
case symbol_kind::S_multiply: // multiply
case symbol_kind::S_pow: // pow
case symbol_kind::S_round: // round
case symbol_kind::S_sqrt: // sqrt
case symbol_kind::S_subtract: // subtract
case symbol_kind::S_trunc: // trunc
case symbol_kind::S_arrayExps: // arrayExps
case symbol_kind::S_arrayElemAt: // arrayElemAt
case symbol_kind::S_arrayToObject: // arrayToObject
case symbol_kind::S_concatArrays: // concatArrays
case symbol_kind::S_filter: // filter
case symbol_kind::S_first: // first
case symbol_kind::S_in: // in
case symbol_kind::S_indexOfArray: // indexOfArray
case symbol_kind::S_isArray: // isArray
case symbol_kind::S_setExpression: // setExpression
case symbol_kind::S_allElementsTrue: // allElementsTrue
case symbol_kind::S_anyElementTrue: // anyElementTrue
case symbol_kind::S_setDifference: // setDifference
case symbol_kind::S_setEquals: // setEquals
case symbol_kind::S_setIntersection: // setIntersection
case symbol_kind::S_setIsSubset: // setIsSubset
case symbol_kind::S_setUnion: // setUnion
case symbol_kind::S_trig: // trig
case symbol_kind::S_sin: // sin
case symbol_kind::S_cos: // cos
case symbol_kind::S_tan: // tan
case symbol_kind::S_sinh: // sinh
case symbol_kind::S_cosh: // cosh
case symbol_kind::S_tanh: // tanh
case symbol_kind::S_asin: // asin
case symbol_kind::S_acos: // acos
case symbol_kind::S_atan: // atan
case symbol_kind::S_asinh: // asinh
case symbol_kind::S_acosh: // acosh
case symbol_kind::S_atanh: // atanh
case symbol_kind::S_atan2: // atan2
case symbol_kind::S_degreesToRadians: // degreesToRadians
case symbol_kind::S_radiansToDegrees: // radiansToDegrees
case symbol_kind::S_nonArrayExpression: // nonArrayExpression
case symbol_kind::S_nonArrayCompoundExpression: // nonArrayCompoundExpression
case symbol_kind::S_aggregationOperator: // aggregationOperator
case symbol_kind::
S_aggregationOperatorWithoutSlice: // aggregationOperatorWithoutSlice
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_matchExpression: // matchExpression
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
case symbol_kind::S_predValue: // predValue
case symbol_kind::S_additionalExprs: // additionalExprs
case symbol_kind::S_textArgCaseSensitive: // textArgCaseSensitive
case symbol_kind::S_textArgDiacriticSensitive: // textArgDiacriticSensitive
case symbol_kind::S_textArgLanguage: // textArgLanguage
case symbol_kind::S_textArgSearch: // textArgSearch
case symbol_kind::S_findProject: // findProject
case symbol_kind::S_findProjectFields: // findProjectFields
case symbol_kind::S_topLevelFindProjection: // topLevelFindProjection
case symbol_kind::S_findProjection: // findProjection
case symbol_kind::S_findProjectionSlice: // findProjectionSlice
case symbol_kind::S_elemMatch: // elemMatch
case symbol_kind::S_findProjectionObject: // findProjectionObject
case symbol_kind::S_findProjectionObjectFields: // findProjectionObjectFields
case symbol_kind::S_sortSpecs: // sortSpecs
case symbol_kind::S_specList: // specList
case symbol_kind::S_metaSort: // metaSort
case symbol_kind::S_oneOrNegOne: // oneOrNegOne
case symbol_kind::S_metaSortKeyword: // metaSortKeyword
yylhs.value.emplace();
break;
case symbol_kind::
S_aggregationProjectionFieldname: // aggregationProjectionFieldname
case symbol_kind::S_projectionFieldname: // projectionFieldname
case symbol_kind::S_expressionFieldname: // expressionFieldname
case symbol_kind::S_stageAsUserFieldname: // stageAsUserFieldname
case symbol_kind::S_argAsUserFieldname: // argAsUserFieldname
case symbol_kind::S_argAsProjectionPath: // argAsProjectionPath
case symbol_kind::S_aggExprAsUserFieldname: // aggExprAsUserFieldname
case symbol_kind::S_invariableUserFieldname: // invariableUserFieldname
case symbol_kind::S_sortFieldname: // sortFieldname
case symbol_kind::S_idAsUserFieldname: // idAsUserFieldname
case symbol_kind::S_elemMatchAsUserFieldname: // elemMatchAsUserFieldname
case symbol_kind::S_idAsProjectionPath: // idAsProjectionPath
case symbol_kind::S_valueFieldname: // valueFieldname
case symbol_kind::S_predFieldname: // predFieldname
case symbol_kind::S_logicalExprField: // logicalExprField
yylhs.value.emplace();
break;
case symbol_kind::S_DATE_LITERAL: // "Date"
yylhs.value.emplace();
break;
case symbol_kind::S_DECIMAL_OTHER: // "arbitrary decimal"
yylhs.value.emplace();
break;
case symbol_kind::S_OBJECT_ID: // "ObjectID"
yylhs.value.emplace();
break;
case symbol_kind::S_TIMESTAMP: // "Timestamp"
yylhs.value.emplace();
break;
case symbol_kind::S_MAX_KEY: // "maxKey"
yylhs.value.emplace();
break;
case symbol_kind::S_MIN_KEY: // "minKey"
yylhs.value.emplace();
break;
case symbol_kind::S_JSNULL: // "null"
yylhs.value.emplace();
break;
case symbol_kind::S_UNDEFINED: // "undefined"
yylhs.value.emplace();
break;
case symbol_kind::S_DOUBLE_OTHER: // "arbitrary double"
yylhs.value.emplace();
break;
case symbol_kind::S_INT_OTHER: // "arbitrary integer"
yylhs.value.emplace();
break;
case symbol_kind::S_LONG_OTHER: // "arbitrary long"
yylhs.value.emplace();
break;
case symbol_kind::S_aggregationProjectField: // aggregationProjectField
case symbol_kind::
S_aggregationProjectionObjectField: // aggregationProjectionObjectField
case symbol_kind::S_expressionField: // expressionField
case symbol_kind::S_valueField: // valueField
case symbol_kind::S_onErrorArg: // onErrorArg
case symbol_kind::S_onNullArg: // onNullArg
case symbol_kind::S_asArg: // asArg
case symbol_kind::S_formatArg: // formatArg
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
case symbol_kind::S_hourArg: // hourArg
case symbol_kind::S_minuteArg: // minuteArg
case symbol_kind::S_secondArg: // secondArg
case symbol_kind::S_millisecondArg: // millisecondArg
case symbol_kind::S_dayArg: // dayArg
case symbol_kind::S_isoWeekArg: // isoWeekArg
case symbol_kind::S_iso8601Arg: // iso8601Arg
case symbol_kind::S_monthArg: // monthArg
case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_fieldPredicate: // fieldPredicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
case symbol_kind::S_notExpr: // notExpr
case symbol_kind::S_matchMod: // matchMod
case symbol_kind::S_existsExpr: // existsExpr
case symbol_kind::S_typeExpr: // typeExpr
case symbol_kind::S_commentExpr: // commentExpr
case symbol_kind::S_matchExpr: // matchExpr
case symbol_kind::S_matchText: // matchText
case symbol_kind::S_matchWhere: // matchWhere
case symbol_kind::S_findProjectField: // findProjectField
case symbol_kind::S_findProjectionObjectField: // findProjectionObjectField
case symbol_kind::S_sortSpec: // sortSpec
yylhs.value.emplace>();
break;
case symbol_kind::S_FIELDNAME: // "fieldname"
case symbol_kind::S_DOLLAR_PREF_FIELDNAME: // "$-prefixed fieldname"
case symbol_kind::S_STRING: // "string"
case symbol_kind::S_DOLLAR_STRING: // "$-prefixed string"
case symbol_kind::S_DOLLAR_DOLLAR_STRING: // "$$-prefixed string"
case symbol_kind::S_arg: // arg
yylhs.value.emplace();
break;
case symbol_kind::S_expressions: // expressions
case symbol_kind::S_values: // values
case symbol_kind::S_exprZeroToTwo: // exprZeroToTwo
case symbol_kind::S_typeValues: // typeValues
yylhs.value.emplace>();
break;
case symbol_kind::S_DOTTED_FIELDNAME: // "fieldname containing dotted path"
yylhs.value.emplace>();
break;
default:
break;
}
// Default location.
{
stack_type::slice range(yystack_, yylen);
YYLLOC_DEFAULT(yylhs.location, range, yylen);
yyerror_range[1].location = yylhs.location;
}
// Perform the reduction.
YY_REDUCE_PRINT(yyn);
#if YY_EXCEPTIONS
try
#endif // YY_EXCEPTIONS
{
switch (yyn) {
case 2: // start: START_PIPELINE pipeline
#line 417 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as());
}
#line 2293 "parser_gen.cpp"
break;
case 3: // start: START_MATCH matchExpression
#line 420 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as());
}
#line 2301 "parser_gen.cpp"
break;
case 4: // start: START_PROJECT findProject
#line 423 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as());
}
#line 2309 "parser_gen.cpp"
break;
case 5: // start: START_SORT sortSpecs
#line 426 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as());
}
#line 2317 "parser_gen.cpp"
break;
case 6: // pipeline: "array" stageList "end of array"
#line 433 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[1].value.as());
}
#line 2325 "parser_gen.cpp"
break;
case 7: // stageList: %empty
#line 439 "grammar.yy"
{
}
#line 2331 "parser_gen.cpp"
break;
case 8: // stageList: "object" stage "end of object" stageList
#line 440 "grammar.yy"
{
yylhs.value.as() =
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as())}};
}
#line 2339 "parser_gen.cpp"
break;
case 9: // START_ORDERED_OBJECT: "object"
#line 448 "grammar.yy"
{
lexer.sortObjTokens();
}
#line 2345 "parser_gen.cpp"
break;
case 10: // stage: inhibitOptimization
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2351 "parser_gen.cpp"
break;
case 11: // stage: unionWith
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2357 "parser_gen.cpp"
break;
case 12: // stage: skip
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2363 "parser_gen.cpp"
break;
case 13: // stage: limit
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2369 "parser_gen.cpp"
break;
case 14: // stage: matchStage
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2375 "parser_gen.cpp"
break;
case 15: // stage: project
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2381 "parser_gen.cpp"
break;
case 16: // stage: sample
#line 451 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2387 "parser_gen.cpp"
break;
case 17: // sample: STAGE_SAMPLE "object" "size argument" num "end of object"
#line 454 "grammar.yy"
{
yylhs.value.as() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::sample,
CNode{CNode::ObjectChildren{
{KeyFieldname::sizeArg, YY_MOVE(yystack_[1].value.as())},
}}}}};
}
#line 2399 "parser_gen.cpp"
break;
case 18: // inhibitOptimization: STAGE_INHIBIT_OPTIMIZATION "object" "end of
// object"
#line 464 "grammar.yy"
{
yylhs.value.as() = CNode{CNode::ObjectChildren{
std::pair{KeyFieldname::inhibitOptimization, CNode::noopLeaf()}}};
}
#line 2407 "parser_gen.cpp"
break;
case 19: // unionWith: STAGE_UNION_WITH START_ORDERED_OBJECT "coll argument"
// string "pipeline argument" double "end of object"
#line 470 "grammar.yy"
{
auto pipeline = YY_MOVE(yystack_[1].value.as());
yylhs.value.as() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::unionWith,
CNode{CNode::ObjectChildren{
{KeyFieldname::collArg, YY_MOVE(yystack_[3].value.as())},
{KeyFieldname::pipelineArg, std::move(pipeline)}}}}}};
}
#line 2420 "parser_gen.cpp"
break;
case 20: // num: int
#line 480 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2426 "parser_gen.cpp"
break;
case 21: // num: long
#line 480 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2432 "parser_gen.cpp"
break;
case 22: // num: double
#line 480 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2438 "parser_gen.cpp"
break;
case 23: // num: decimal
#line 480 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2444 "parser_gen.cpp"
break;
case 24: // skip: STAGE_SKIP num
#line 484 "grammar.yy"
{
yylhs.value.as() = CNode{CNode::ObjectChildren{
std::pair{KeyFieldname::skip, YY_MOVE(yystack_[0].value.as())}}};
}
#line 2452 "parser_gen.cpp"
break;
case 25: // limit: STAGE_LIMIT num
#line 489 "grammar.yy"
{
yylhs.value.as() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::limit, YY_MOVE(yystack_[0].value.as())}}};
}
#line 2460 "parser_gen.cpp"
break;
case 26: // matchStage: STAGE_MATCH matchExpression
#line 494 "grammar.yy"
{
yylhs.value.as() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::match, YY_MOVE(yystack_[0].value.as())}}};
}
#line 2468 "parser_gen.cpp"
break;
case 27: // project: STAGE_PROJECT "object" aggregationProjectFields "end of
// object"
#line 500 "grammar.yy"
{
auto&& fields = YY_MOVE(yystack_[1].value.as());
if (auto status =
c_node_validation::validateNoConflictingPathsInProjectFields(
fields);
!status.isOK())
error(yystack_[3].location, status.reason());
if (auto inclusion =
c_node_validation::validateProjectionAsInclusionOrExclusion(fields);
inclusion.isOK())
yylhs.value.as() = CNode{CNode::ObjectChildren{std::pair{
inclusion.getValue() == c_node_validation::IsInclusion::yes
? KeyFieldname::projectInclusion
: KeyFieldname::projectExclusion,
std::move(fields)}}};
else
// Pass the location of the $project token to the error reporting
// function.
error(yystack_[3].location, inclusion.getStatus().reason());
}
#line 2489 "parser_gen.cpp"
break;
case 28: // aggregationProjectFields: %empty
#line 519 "grammar.yy"
{
yylhs.value.as() = CNode::noopLeaf();
}
#line 2497 "parser_gen.cpp"
break;
case 29: // aggregationProjectFields: aggregationProjectFields
// aggregationProjectField
#line 522 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[1].value.as());
yylhs.value.as().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as>()));
}
#line 2506 "parser_gen.cpp"
break;
case 30: // aggregationProjectField: ID topLevelAggregationProjection
#line 529 "grammar.yy"
{
yylhs.value.as>() = {
KeyFieldname::id, YY_MOVE(yystack_[0].value.as())};
}
#line 2514 "parser_gen.cpp"
break;
case 31: // aggregationProjectField: aggregationProjectionFieldname
// topLevelAggregationProjection
#line 532 "grammar.yy"
{
yylhs.value.as>() = {
YY_MOVE(yystack_[1].value.as()),
YY_MOVE(yystack_[0].value.as())};
}
#line 2522 "parser_gen.cpp"
break;
case 32: // topLevelAggregationProjection: aggregationProjection
#line 538 "grammar.yy"
{
auto projection = YY_MOVE(yystack_[0].value.as());
yylhs.value.as() =
stdx::holds_alternative(projection.payload) &&
stdx::holds_alternative(
projection.objectChildren()[0].first)
? c_node_disambiguation::disambiguateCompoundProjection(
std::move(projection))
: std::move(projection);
if (stdx::holds_alternative(
yylhs.value.as().payload))
// TODO SERVER-50498: error() instead of uasserting
uasserted(ErrorCodes::FailedToParse,
"object project field cannot contain both "
"inclusion and exclusion indicators");
}
#line 2538 "parser_gen.cpp"
break;
case 33: // aggregationProjection: projectionCommon
#line 552 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2544 "parser_gen.cpp"
break;
case 34: // aggregationProjection: aggregationProjectionObject
#line 553 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2550 "parser_gen.cpp"
break;
case 35: // aggregationProjection: aggregationOperator
#line 554 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2556 "parser_gen.cpp"
break;
case 36: // projectionCommon: string
#line 558 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2562 "parser_gen.cpp"
break;
case 37: // projectionCommon: binary
#line 559 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2568 "parser_gen.cpp"
break;
case 38: // projectionCommon: undefined
#line 560 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2574 "parser_gen.cpp"
break;
case 39: // projectionCommon: objectId
#line 561 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2580 "parser_gen.cpp"
break;
case 40: // projectionCommon: date
#line 562 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2586 "parser_gen.cpp"
break;
case 41: // projectionCommon: null
#line 563 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2592 "parser_gen.cpp"
break;
case 42: // projectionCommon: regex
#line 564 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2598 "parser_gen.cpp"
break;
case 43: // projectionCommon: dbPointer
#line 565 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2604 "parser_gen.cpp"
break;
case 44: // projectionCommon: javascript
#line 566 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2610 "parser_gen.cpp"
break;
case 45: // projectionCommon: symbol
#line 567 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2616 "parser_gen.cpp"
break;
case 46: // projectionCommon: javascriptWScope
#line 568 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2622 "parser_gen.cpp"
break;
case 47: // projectionCommon: "1 (int)"
#line 569 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{1}};
}
#line 2630 "parser_gen.cpp"
break;
case 48: // projectionCommon: "-1 (int)"
#line 572 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{-1}};
}
#line 2638 "parser_gen.cpp"
break;
case 49: // projectionCommon: "arbitrary integer"
#line 575 "grammar.yy"
{
yylhs.value.as() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as())}};
}
#line 2646 "parser_gen.cpp"
break;
case 50: // projectionCommon: "zero (int)"
#line 578 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::intZeroKey};
}
#line 2654 "parser_gen.cpp"
break;
case 51: // projectionCommon: "1 (long)"
#line 581 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{1ll}};
}
#line 2662 "parser_gen.cpp"
break;
case 52: // projectionCommon: "-1 (long)"
#line 584 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{-1ll}};
}
#line 2670 "parser_gen.cpp"
break;
case 53: // projectionCommon: "arbitrary long"
#line 587 "grammar.yy"
{
yylhs.value.as() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as())}};
}
#line 2678 "parser_gen.cpp"
break;
case 54: // projectionCommon: "zero (long)"
#line 590 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::longZeroKey};
}
#line 2686 "parser_gen.cpp"
break;
case 55: // projectionCommon: "1 (double)"
#line 593 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{1.0}};
}
#line 2694 "parser_gen.cpp"
break;
case 56: // projectionCommon: "-1 (double)"
#line 596 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{-1.0}};
}
#line 2702 "parser_gen.cpp"
break;
case 57: // projectionCommon: "arbitrary double"
#line 599 "grammar.yy"
{
yylhs.value.as() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as())}};
}
#line 2710 "parser_gen.cpp"
break;
case 58: // projectionCommon: "zero (double)"
#line 602 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::doubleZeroKey};
}
#line 2718 "parser_gen.cpp"
break;
case 59: // projectionCommon: "1 (decimal)"
#line 605 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{Decimal128{1.0}}};
}
#line 2726 "parser_gen.cpp"
break;
case 60: // projectionCommon: "-1 (decimal)"
#line 608 "grammar.yy"
{
yylhs.value.as() = CNode{NonZeroKey{Decimal128{-1.0}}};
}
#line 2734 "parser_gen.cpp"
break;
case 61: // projectionCommon: "arbitrary decimal"
#line 611 "grammar.yy"
{
yylhs.value.as() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as())}};
}
#line 2742 "parser_gen.cpp"
break;
case 62: // projectionCommon: "zero (decimal)"
#line 614 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::decimalZeroKey};
}
#line 2750 "parser_gen.cpp"
break;
case 63: // projectionCommon: "true"
#line 617 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::trueKey};
}
#line 2758 "parser_gen.cpp"
break;
case 64: // projectionCommon: "false"
#line 620 "grammar.yy"
{
yylhs.value.as() = CNode{KeyValue::falseKey};
}
#line 2766 "parser_gen.cpp"
break;
case 65: // projectionCommon: timestamp
#line 623 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2772 "parser_gen.cpp"
break;
case 66: // projectionCommon: minKey
#line 624 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2778 "parser_gen.cpp"
break;
case 67: // projectionCommon: maxKey
#line 625 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2784 "parser_gen.cpp"
break;
case 68: // projectionCommon: expressionArray
#line 626 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[0].value.as());
}
#line 2790 "parser_gen.cpp"
break;
case 69: // aggregationProjectionFieldname: projectionFieldname
#line 631 "grammar.yy"
{
yylhs.value.as() =
YY_MOVE(yystack_[0].value.as());
if (stdx::holds_alternative(
stdx::get(yylhs.value.as())))
error(yystack_[0].location,
"positional projection forbidden in $project aggregation "
"pipeline stage");
}
#line 2800 "parser_gen.cpp"
break;
case 70: // projectionFieldname: "fieldname"
#line 640 "grammar.yy"
{
auto components =
makeVector(YY_MOVE(yystack_[0].value.as()));
if (auto positional =
c_node_validation::validateProjectionPathAsNormalOrPositional(
components);
positional.isOK()) {
yylhs.value.as() =
c_node_disambiguation::disambiguateProjectionPathType(
std::move(components), positional.getValue());
} else {
error(yystack_[0].location, positional.getStatus().reason());
}
}
#line 2816 "parser_gen.cpp"
break;
case 71: // projectionFieldname: argAsProjectionPath
#line 651 "grammar.yy"
{
yylhs.value.as() =
YY_MOVE(yystack_[0].value.as());
}
#line 2822 "parser_gen.cpp"
break;
case 72: // projectionFieldname: "fieldname containing dotted path"
#line 652 "grammar.yy"
{
auto components = YY_MOVE(yystack_[0].value.as>());
if (auto positional =
c_node_validation::validateProjectionPathAsNormalOrPositional(
components);
positional.isOK()) {
yylhs.value.as() =
c_node_disambiguation::disambiguateProjectionPathType(
std::move(components), positional.getValue());
} else {
error(yystack_[0].location, positional.getStatus().reason());
}
}
#line 2838 "parser_gen.cpp"
break;
case 73: // aggregationProjectionObject: "object"
// aggregationProjectionObjectFields "end of object"
#line 667 "grammar.yy"
{
yylhs.value.as() = YY_MOVE(yystack_[1].value.as