From d99d164c0a74f11e6bbd0888eaa0e2197cb864f8 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Wed, 10 Jun 2015 20:25:25 +0200 Subject: [PATCH] simplified parser --- arangod/Aql/Ast.cpp | 10 +- arangod/Aql/Ast.h | 6 +- arangod/Aql/AstNode.cpp | 14 +- arangod/Aql/AstNode.h | 2 +- arangod/Aql/Executor.cpp | 14 +- arangod/Aql/Executor.h | 2 +- arangod/Aql/OptimizerRules.cpp | 2 +- arangod/Aql/grammar.cpp | 1464 ++++++++--------- arangod/Aql/grammar.h | 30 +- arangod/Aql/grammar.y | 105 +- arangod/Aql/tokens.cpp | 370 ++--- arangod/Aql/tokens.ll | 4 - .../js/modules/org/arangodb/aql/explainer.js | 3 + .../modules/org/arangodb/aql/explainer.js | 3 + lib/Basics/StringBuffer.h | 8 +- 15 files changed, 964 insertions(+), 1073 deletions(-) diff --git a/arangod/Aql/Ast.cpp b/arangod/Aql/Ast.cpp index 4a1b61c8f1..79ec14bcc0 100644 --- a/arangod/Aql/Ast.cpp +++ b/arangod/Aql/Ast.cpp @@ -776,15 +776,15 @@ AstNode* Ast::createNodeIndexedAccess (AstNode const* accessed, } //////////////////////////////////////////////////////////////////////////////// -/// @brief create an AST expand node +/// @brief create an AST expansion node //////////////////////////////////////////////////////////////////////////////// -AstNode* Ast::createNodeExpand (AstNode const* iterator, - AstNode const* expansion) { - AstNode* node = createNode(NODE_TYPE_EXPAND); +AstNode* Ast::createNodeExpansion (AstNode const* iterator, + AstNode const* expanded) { + AstNode* node = createNode(NODE_TYPE_EXPANSION); node->addMember(iterator); - node->addMember(expansion); + node->addMember(expanded); return node; } diff --git a/arangod/Aql/Ast.h b/arangod/Aql/Ast.h index d536432d23..c3c5b265c3 100644 --- a/arangod/Aql/Ast.h +++ b/arangod/Aql/Ast.h @@ -446,11 +446,11 @@ namespace triagens { AstNode const*); //////////////////////////////////////////////////////////////////////////////// -/// @brief create an AST expand node +/// @brief create an AST expansion node //////////////////////////////////////////////////////////////////////////////// - AstNode* createNodeExpand (AstNode const*, - AstNode const*); + AstNode* createNodeExpansion (AstNode const*, + AstNode const*); //////////////////////////////////////////////////////////////////////////////// /// @brief create an AST iterator node diff --git a/arangod/Aql/AstNode.cpp b/arangod/Aql/AstNode.cpp index db3933d74f..987df03a92 100644 --- a/arangod/Aql/AstNode.cpp +++ b/arangod/Aql/AstNode.cpp @@ -130,7 +130,7 @@ std::unordered_map const AstNode::TypeNames{ { static_cast(NODE_TYPE_ATTRIBUTE_ACCESS), "attribute access" }, { static_cast(NODE_TYPE_BOUND_ATTRIBUTE_ACCESS), "bound attribute access" }, { static_cast(NODE_TYPE_INDEXED_ACCESS), "indexed access" }, - { static_cast(NODE_TYPE_EXPAND), "expand" }, + { static_cast(NODE_TYPE_EXPANSION), "expansion" }, { static_cast(NODE_TYPE_ITERATOR), "iterator" }, { static_cast(NODE_TYPE_VALUE), "value" }, { static_cast(NODE_TYPE_ARRAY), "array" }, @@ -555,7 +555,7 @@ AstNode::AstNode (Ast* ast, case NODE_TYPE_SUBQUERY: case NODE_TYPE_BOUND_ATTRIBUTE_ACCESS: case NODE_TYPE_INDEXED_ACCESS: - case NODE_TYPE_EXPAND: + case NODE_TYPE_EXPANSION: case NODE_TYPE_ITERATOR: case NODE_TYPE_ARRAY: case NODE_TYPE_RANGE: @@ -1687,13 +1687,13 @@ void AstNode::stringify (triagens::basics::StringBuffer* buffer, buffer->appendChar(')'); return; } - - if (type == NODE_TYPE_EXPAND) { + + if (type == NODE_TYPE_EXPANSION) { // not used by V8 - buffer->appendText("_EXPAND("); - getMember(1)->stringify(buffer, verbose, failIfLong); - buffer->appendChar(','); + buffer->appendText("_EXPANSION("); getMember(0)->stringify(buffer, verbose, failIfLong); + buffer->appendChar(','); + getMember(1)->stringify(buffer, verbose, failIfLong); buffer->appendChar(')'); return; } diff --git a/arangod/Aql/AstNode.h b/arangod/Aql/AstNode.h index 68cc330734..26380da3b5 100644 --- a/arangod/Aql/AstNode.h +++ b/arangod/Aql/AstNode.h @@ -154,7 +154,7 @@ namespace triagens { NODE_TYPE_ATTRIBUTE_ACCESS = 35, NODE_TYPE_BOUND_ATTRIBUTE_ACCESS = 36, NODE_TYPE_INDEXED_ACCESS = 37, - NODE_TYPE_EXPAND = 38, + NODE_TYPE_EXPANSION = 38, NODE_TYPE_ITERATOR = 39, NODE_TYPE_VALUE = 40, NODE_TYPE_ARRAY = 41, diff --git a/arangod/Aql/Executor.cpp b/arangod/Aql/Executor.cpp index 4a1c0dcba7..c5d98ba249 100644 --- a/arangod/Aql/Executor.cpp +++ b/arangod/Aql/Executor.cpp @@ -813,22 +813,22 @@ void Executor::generateCodeUserFunctionCall (AstNode const* node) { /// @brief generate JavaScript code for an expansion (i.e. [*] operator) //////////////////////////////////////////////////////////////////////////////// -void Executor::generateCodeExpand (AstNode const* node) { +void Executor::generateCodeExpansion (AstNode const* node) { TRI_ASSERT(node != nullptr); TRI_ASSERT(node->numMembers() == 2); - _buffer->appendText("(function () { var r = []; _AQL.AQL_TO_LIST("); + _buffer->appendText("(function () { return _AQL.AQL_TO_LIST("); generateCodeNode(node->getMember(0)); - _buffer->appendText(").forEach(function (v) { "); + _buffer->appendText(").map(function (v) { "); auto iterator = node->getMember(0); auto variable = static_cast(iterator->getMember(0)->getData()); _buffer->appendText("vars[\""); _buffer->appendText(variable->name); _buffer->appendText("\"]=v; "); - _buffer->appendText("r.push("); + _buffer->appendText("return "); generateCodeNode(node->getMember(1)); - _buffer->appendText("); }); return r; })()"); + _buffer->appendText("; }); })()"); } //////////////////////////////////////////////////////////////////////////////// @@ -967,8 +967,8 @@ void Executor::generateCodeNode (AstNode const* node) { generateCodeUserFunctionCall(node); break; - case NODE_TYPE_EXPAND: - generateCodeExpand(node); + case NODE_TYPE_EXPANSION: + generateCodeExpansion(node); break; case NODE_TYPE_ITERATOR: diff --git a/arangod/Aql/Executor.h b/arangod/Aql/Executor.h index 0fc8711965..fae4ef8d17 100644 --- a/arangod/Aql/Executor.h +++ b/arangod/Aql/Executor.h @@ -207,7 +207,7 @@ namespace triagens { /// @brief generate JavaScript code for an expansion (i.e. [*] operator) //////////////////////////////////////////////////////////////////////////////// - void generateCodeExpand (AstNode const*); + void generateCodeExpansion (AstNode const*); //////////////////////////////////////////////////////////////////////////////// /// @brief generate JavaScript code for an expansion iterator diff --git a/arangod/Aql/OptimizerRules.cpp b/arangod/Aql/OptimizerRules.cpp index caf13da5bf..874bab725c 100644 --- a/arangod/Aql/OptimizerRules.cpp +++ b/arangod/Aql/OptimizerRules.cpp @@ -311,7 +311,7 @@ struct CollectVariableFinder { auto const size = stack.size(); if (size >= 3 && - stack[size - 3]->type == NODE_TYPE_EXPAND) { + stack[size - 3]->type == NODE_TYPE_EXPANSION) { // our variable is used in an expansion, e.g. g[*].attribute auto expandNode = stack[size - 3]; TRI_ASSERT(expandNode->numMembers() == 2); diff --git a/arangod/Aql/grammar.cpp b/arangod/Aql/grammar.cpp index c4b2b3083d..2f7da2108c 100644 --- a/arangod/Aql/grammar.cpp +++ b/arangod/Aql/grammar.cpp @@ -157,21 +157,21 @@ extern int Aqldebug; T_TIMES = 295, T_DIV = 296, T_MOD = 297, - T_EXPAND = 298, - T_QUESTION = 299, - T_COLON = 300, - T_SCOPE = 301, - T_RANGE = 302, - T_COMMA = 303, - T_OPEN = 304, - T_CLOSE = 305, - T_OBJECT_OPEN = 306, - T_OBJECT_CLOSE = 307, - T_ARRAY_OPEN = 308, - T_ARRAY_CLOSE = 309, - T_NIN = 310, - UMINUS = 311, - UPLUS = 312, + T_QUESTION = 298, + T_COLON = 299, + T_SCOPE = 300, + T_RANGE = 301, + T_COMMA = 302, + T_OPEN = 303, + T_CLOSE = 304, + T_OBJECT_OPEN = 305, + T_OBJECT_CLOSE = 306, + T_ARRAY_OPEN = 307, + T_ARRAY_CLOSE = 308, + T_NIN = 309, + UMINUS = 310, + UPLUS = 311, + EXPANSION = 312, FUNCCALL = 313, REFERENCE = 314, INDEXED = 315 @@ -495,16 +495,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 793 +#define YYLAST 771 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 62 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 72 +#define YYNNTS 69 /* YYNRULES -- Number of rules. */ -#define YYNRULES 157 +#define YYNRULES 149 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 273 +#define YYNSTATES 259 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -556,22 +556,21 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 203, 203, 205, 207, 209, 211, 213, 218, 220, - 225, 229, 235, 237, 242, 244, 246, 248, 250, 252, - 257, 266, 274, 279, 281, 286, 293, 303, 303, 317, - 333, 360, 387, 419, 449, 451, 456, 463, 466, 472, - 486, 503, 503, 517, 517, 528, 531, 537, 543, 546, - 549, 552, 558, 563, 570, 578, 581, 587, 598, 609, - 618, 630, 635, 644, 656, 661, 664, 670, 670, 722, - 725, 725, 741, 744, 747, 750, 753, 756, 759, 765, - 772, 789, 789, 801, 804, 807, 813, 816, 819, 822, - 825, 828, 831, 834, 837, 840, 843, 846, 849, 852, - 855, 861, 867, 869, 874, 877, 877, 896, 899, 905, - 908, 914, 914, 923, 925, 930, 933, 939, 942, 956, - 956, 965, 967, 972, 974, 979, 982, 985, 1000, 1004, - 1004, 1028, 1064, 1071, 1075, 1079, 1086, 1091, 1096, 1101, - 1105, 1109, 1116, 1119, 1125, 1132, 1142, 1145, 1148, 1151, - 1154, 1160, 1167, 1174, 1188, 1194, 1201, 1210 + 0, 200, 200, 202, 204, 206, 208, 210, 215, 217, + 222, 226, 232, 234, 239, 241, 243, 245, 247, 249, + 254, 263, 271, 276, 278, 283, 290, 300, 300, 314, + 330, 357, 384, 416, 446, 448, 453, 460, 463, 469, + 483, 500, 500, 514, 514, 525, 528, 534, 540, 543, + 546, 549, 555, 560, 567, 575, 578, 584, 595, 606, + 615, 627, 632, 641, 653, 658, 661, 667, 667, 719, + 722, 722, 738, 741, 744, 747, 750, 753, 756, 762, + 769, 786, 786, 798, 801, 804, 810, 813, 816, 819, + 822, 825, 828, 831, 834, 837, 840, 843, 846, 849, + 852, 858, 864, 866, 871, 874, 874, 893, 896, 902, + 905, 911, 911, 920, 922, 927, 930, 936, 939, 953, + 953, 962, 964, 969, 971, 976, 979, 982, 997, 1033, + 1040, 1052, 1064, 1076, 1087, 1090, 1096, 1103, 1113, 1116, + 1119, 1122, 1125, 1131, 1138, 1145, 1159, 1165, 1172, 1181 }; #endif @@ -593,9 +592,9 @@ static const char *const yytname[] = "\"and operator\"", "\"or operator\"", "\"== operator\"", "\"!= operator\"", "\"< operator\"", "\"> operator\"", "\"<= operator\"", "\">= operator\"", "\"+ operator\"", "\"- operator\"", "\"* operator\"", - "\"/ operator\"", "\"% operator\"", "\"[*] operator\"", "\"?\"", "\":\"", - "\"::\"", "\"..\"", "\",\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", - "\"]\"", "T_NIN", "UMINUS", "UPLUS", "FUNCCALL", "REFERENCE", "INDEXED", + "\"/ operator\"", "\"% operator\"", "\"?\"", "\":\"", "\"::\"", "\"..\"", + "\",\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", "\"]\"", "T_NIN", + "UMINUS", "UPLUS", "EXPANSION", "FUNCCALL", "REFERENCE", "INDEXED", "'.'", "$accept", "query", "optional_post_modification_lets", "optional_post_modification_block", "optional_statement_block_statements", "statement_block_statement", @@ -613,9 +612,9 @@ static const char *const yytname[] = "function_arguments_list", "compound_type", "array", "$@8", "optional_array_elements", "array_elements_list", "options", "object", "$@9", "optional_object_elements", "object_elements_list", - "object_element", "reference", "$@10", "single_reference", "expansion", - "atomic_value", "numeric_value", "value_literal", "collection_name", - "bind_parameter", "object_element_name", "variable_name", YY_NULLPTR + "object_element", "reference", "atomic_value", "numeric_value", + "value_literal", "collection_name", "bind_parameter", + "object_element_name", "variable_name", YY_NULLPTR }; #endif @@ -639,7 +638,7 @@ static const yytype_uint16 yytoknum[] = #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-114))) -#define YYTABLE_NINF -154 +#define YYTABLE_NINF -146 #define yytable_value_is_error(Yytable_value) \ 0 @@ -648,34 +647,32 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -114, 8, 712, -114, 2, 2, 719, 719, 7, -114, - 202, 719, 719, 719, 719, -114, -114, -114, -114, -114, - 57, -114, -114, -114, -114, 20, 20, 20, 20, 20, - -114, 3, -17, -114, 24, -114, -114, -114, -8, -114, - -114, -114, -114, 719, 719, 719, 719, -114, -114, 626, - -10, -114, -114, -114, -114, -114, -114, -114, 18, -34, - -114, -114, -114, -114, 626, 73, 90, 2, 719, 74, - 500, 500, -114, 402, -114, 438, 719, 2, 90, 98, - 56, -114, -114, -114, -114, -114, 719, 2, 719, 97, - 97, 97, 325, -114, 26, 719, 719, 116, 719, 719, - 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, - 719, 719, 719, 106, 81, 99, 719, 59, 125, 93, - -114, 101, -114, 113, 102, -114, 366, 202, 740, 45, - 90, 90, 719, 90, 719, 90, 533, 119, -114, 93, - 90, -114, -114, -114, 626, -114, 626, -114, 103, -114, - -114, 107, 719, 104, 109, -114, 110, 626, 100, 128, - 162, 719, 642, 133, 657, 657, 96, 96, 96, 96, - 6, 6, 97, 97, 97, 564, 51, -114, 685, -31, - 201, -114, -114, 2, -114, 2, 719, 719, -114, -114, - -114, -114, -114, 28, 17, 33, -114, -114, -114, -114, - -114, -114, -114, 500, -114, 500, -114, 719, 719, 2, - -114, -114, 719, 232, -114, 26, 719, -114, 719, 162, - 719, 626, 114, -114, -114, 130, 719, 61, 5, -114, - -114, -114, 626, -114, 90, 90, 469, 595, 134, -114, - 626, 138, -114, 626, 626, 626, -114, -114, 719, 263, - -114, -114, 719, 89, -114, -114, -114, -114, 719, -114, - 2, 719, -114, -114, 294, -114, -114, 500, -114, 626, - -114, 90, -114 + -114, 9, 660, -114, -20, -20, 699, 699, 20, -114, + 113, 699, 699, 699, 699, -114, -114, -114, -114, -114, + 56, -114, -114, -114, -114, 35, 35, 35, 35, 35, + -114, 26, 10, -114, 18, -114, -114, -114, -23, -114, + -114, -114, -114, 699, 699, 699, 699, -114, -114, 560, + 5, -114, -114, -114, -114, -114, -114, -114, -32, -114, + -114, -114, -114, 560, 37, 48, -20, 699, 34, 431, + 431, -114, 331, -114, 366, 699, -20, 48, 59, 61, + -114, -114, -114, -114, -114, 699, -20, 699, 54, 54, + 54, 256, -114, 3, 699, 699, 73, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 64, 47, 633, -8, 98, 67, -114, 71, + -114, 86, 72, -114, 296, 113, 719, 29, 48, 48, + 699, 48, 699, 48, 463, 99, -114, 67, 48, -114, + -114, -114, 560, -114, 560, -114, 77, -114, -114, 92, + 699, 79, 94, -114, 100, 560, 90, 101, 312, 699, + 606, 575, 130, 130, 82, 82, 82, 82, 7, 7, + 54, 54, 54, 495, 50, -114, 666, 93, 189, -114, + -114, -20, -114, -20, 699, 699, -114, -114, -114, -114, + -114, 28, 17, 31, -114, -114, -114, -114, -114, -114, + -114, 431, -114, 431, -114, 699, 699, -20, -114, -114, + 699, 224, -114, 3, 699, -114, 699, 312, 699, 560, + 105, -114, -114, 108, -114, -114, -114, -114, 560, -114, + 48, 48, 398, 528, 109, -114, 560, 118, -114, 560, + 560, 560, -114, -114, 699, -114, -114, -114, -114, 699, + -114, -20, 699, -114, 431, -114, 560, 48, -114 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -686,57 +683,53 @@ static const yytype_uint8 yydefact[] = 12, 0, 0, 1, 0, 0, 0, 0, 27, 43, 0, 0, 0, 0, 0, 67, 13, 14, 16, 15, 37, 17, 18, 19, 2, 10, 10, 10, 10, 10, - 157, 0, 22, 23, 0, 148, 149, 150, 131, 146, - 144, 145, 154, 0, 0, 0, 70, 119, 111, 21, - 81, 132, 72, 73, 74, 75, 109, 110, 77, 128, - 76, 147, 142, 143, 54, 0, 117, 0, 0, 52, - 0, 0, 61, 0, 64, 0, 0, 0, 117, 117, - 0, 3, 4, 5, 6, 7, 0, 0, 0, 85, - 83, 84, 0, 12, 121, 113, 0, 0, 0, 0, + 149, 0, 22, 23, 0, 140, 141, 142, 128, 138, + 136, 137, 146, 0, 0, 0, 70, 119, 111, 21, + 81, 129, 72, 73, 74, 75, 109, 110, 77, 76, + 139, 134, 135, 54, 0, 117, 0, 0, 52, 0, + 0, 61, 0, 64, 0, 0, 0, 117, 117, 0, + 3, 4, 5, 6, 7, 0, 0, 0, 85, 83, + 84, 0, 12, 121, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 29, 28, 34, 0, 44, 45, 48, 0, 0, 0, - 117, 117, 0, 117, 0, 117, 0, 38, 30, 41, - 117, 31, 9, 11, 20, 24, 25, 69, 0, 155, - 156, 0, 0, 0, 122, 123, 0, 115, 0, 114, - 99, 0, 87, 86, 93, 94, 95, 96, 97, 98, - 88, 89, 90, 91, 92, 0, 78, 80, 105, 0, - 0, 133, 134, 0, 118, 0, 0, 0, 49, 50, - 47, 51, 53, 131, 146, 154, 55, 151, 152, 153, - 56, 57, 58, 0, 59, 0, 62, 0, 0, 0, - 32, 71, 0, 0, 120, 0, 0, 112, 0, 100, - 0, 104, 0, 107, 12, 103, 0, 0, 130, 135, - 26, 35, 36, 46, 117, 117, 0, 117, 42, 39, - 127, 0, 124, 125, 116, 101, 82, 106, 105, 0, - 136, 137, 0, 0, 60, 63, 65, 66, 0, 33, - 0, 0, 108, 138, 0, 139, 140, 0, 40, 126, - 141, 117, 68 + 0, 0, 0, 0, 0, 0, 0, 0, 29, 28, + 34, 0, 44, 45, 48, 0, 0, 0, 117, 117, + 0, 117, 0, 117, 0, 38, 30, 41, 117, 31, + 9, 11, 20, 24, 25, 69, 0, 147, 148, 0, + 0, 0, 122, 123, 0, 115, 0, 114, 99, 0, + 87, 86, 93, 94, 95, 96, 97, 98, 88, 89, + 90, 91, 92, 0, 78, 80, 105, 0, 0, 130, + 131, 0, 118, 0, 0, 0, 49, 50, 47, 51, + 53, 128, 138, 146, 55, 143, 144, 145, 56, 57, + 58, 0, 59, 0, 62, 0, 0, 0, 32, 71, + 0, 0, 120, 0, 0, 112, 0, 100, 0, 104, + 0, 107, 12, 103, 133, 132, 26, 35, 36, 46, + 117, 117, 0, 117, 42, 39, 127, 0, 124, 125, + 116, 101, 82, 106, 105, 60, 63, 65, 66, 0, + 33, 0, 0, 108, 0, 40, 126, 117, 68 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -114, -92, -114, 91, -114, -114, -114, -114, 108, -114, - 105, 164, -114, -114, -114, -114, 1, -114, -114, -114, - -114, -114, -114, -114, 0, -114, -114, 132, -57, -114, + -114, -90, -114, 124, -114, -114, -114, -114, 78, -114, + 87, 154, -114, -114, -114, -114, -5, -114, -114, -114, + -114, -114, -114, -114, -3, -114, -114, 102, -56, -114, -114, -114, -114, -114, -114, -114, -114, -114, -1, -114, - -114, -114, -114, -114, -114, -114, -114, -59, -114, -114, - -114, -114, -114, -114, -114, -76, -110, -114, -114, -114, - -25, -114, -114, -114, -114, -3, -114, -114, 64, -113, - -114, -4 + -114, -114, -114, -114, -114, -114, -114, -64, -114, -114, + -114, -114, -114, -114, -114, -70, -113, -114, -114, -114, + -29, -114, -9, -114, -114, 58, 74, -114, -4 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 80, 81, 2, 16, 17, 18, 19, 32, - 33, 66, 20, 67, 21, 121, 122, 79, 238, 140, - 209, 22, 68, 124, 125, 190, 23, 24, 130, 25, - 26, 72, 27, 74, 28, 258, 29, 76, 126, 93, - 50, 51, 114, 52, 53, 54, 222, 223, 224, 225, - 55, 56, 95, 158, 159, 120, 57, 94, 153, 154, - 155, 58, 115, 59, 228, 60, 61, 62, 196, 63, - 156, 34 + -1, 1, 79, 80, 2, 16, 17, 18, 19, 32, + 33, 65, 20, 66, 21, 119, 120, 78, 234, 138, + 207, 22, 67, 122, 123, 188, 23, 24, 128, 25, + 26, 71, 27, 73, 28, 249, 29, 75, 124, 92, + 50, 51, 113, 52, 53, 54, 220, 221, 222, 223, + 55, 56, 94, 156, 157, 118, 57, 93, 151, 152, + 153, 58, 59, 60, 61, 194, 62, 154, 34 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -744,170 +737,166 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 31, 148, 138, 141, 182, 49, 64, 69, 3, 184, - 70, 71, 73, 75, 131, 86, 133, -152, 135, 116, - 65, -152, 226, -152, -8, 30, -8, 117, -151, 184, - 227, 87, -151, -153, -151, 97, 113, -153, -79, -153, - -152, -79, 89, 90, 91, 92, 108, 109, 110, 149, - 150, -151, 88, 151, 201, 202, -153, 204, 252, 206, - 5, -129, 7, 123, 210, -152, 253, -152, 197, 198, - 65, 77, 199, 137, -79, 136, -151, -79, -151, 152, - 97, -153, 181, -153, 250, 144, 42, 146, 42, 106, - 107, 108, 109, 110, 157, 160, 118, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 265, 119, 251, 180, 42, 82, 83, 84, - 85, 139, 127, 191, 192, 97, 97, 160, 161, 177, - 178, 203, 247, 205, 106, 107, 108, 109, 110, 183, - 266, 186, 179, 112, 47, 96, 234, 208, 235, 185, - 187, 213, 212, 211, 217, 216, 214, 215, 254, 255, - 219, 259, 97, 98, 246, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 218, 221, 248, 230, - 112, 123, 260, 261, 78, 232, 231, 233, 142, 262, - 242, 97, 145, 200, 0, 272, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 239, 236, 237, 0, 112, - 271, 240, 143, 96, 0, 243, 0, 244, 0, 245, - 0, 0, 35, 36, 37, 249, 39, 40, 41, 42, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 96, 111, 0, 221, 112, 0, - 0, 264, 0, 0, 0, 229, 268, 267, 0, 0, - 269, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 96, 111, 0, 0, 112, - 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 96, 111, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 263, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 96, 111, 0, - 0, 112, 0, 0, 0, 0, 0, 0, 270, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 0, 111, - 0, 0, 112, 0, 0, 147, 188, 189, 96, 0, - 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, - 39, 40, 41, 42, 0, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 0, - 111, 0, 0, 112, 128, 132, 129, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 0, 111, 0, 0, 112, - 128, 134, 129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 96, 111, 0, 0, 112, 256, 257, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 128, 111, 129, 0, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 31, 68, 146, 30, 182, 49, 63, 136, 139, 3, + 69, 70, 72, 74, 129, 179, 131, -144, 133, 42, + 114, -144, -79, -144, 182, -79, 147, 148, -143, 115, + 149, -145, -143, 64, -143, -145, 96, -145, 85, -8, + -144, -8, 88, 89, 90, 91, 87, 107, 108, 109, + 112, -143, 195, 196, -145, 150, 197, 86, 199, 200, + 116, 202, 121, 204, -144, 5, -144, 7, 208, 64, + 76, 117, 135, -79, 134, -143, -79, -143, -145, 96, + -145, 125, 137, 96, 142, 159, 144, 175, 105, 106, + 107, 108, 109, 155, 158, 176, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 96, 181, 178, 184, 189, 190, 47, 183, 185, + 105, 106, 107, 108, 109, 158, 209, 206, 111, 201, + 212, 203, 243, 35, 36, 37, 210, 39, 40, 41, + 42, 213, 95, 215, 214, 230, 224, 231, 216, 211, + 81, 82, 83, 84, 242, 244, 251, 140, 217, 96, + 245, 246, 252, 250, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 143, 77, 219, 111, 226, 227, 121, + 253, 141, 229, 228, 238, 198, 0, 258, 0, 180, + 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, + 0, 95, 0, 235, 232, 233, 0, 0, 0, 236, + 0, 0, 0, 239, 0, 240, 0, 241, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 0, 111, 96, 0, 112, 0, 207, + 108, 109, 110, 0, 0, 111, 95, 0, 0, 0, + 0, 0, 225, 219, 0, 0, 0, 255, 254, 0, + 0, 256, 0, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 95, 0, + 111, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 0, 0, 111, 0, 0, 145, 186, 187, 95, 0, + 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, + 39, 40, 41, 42, 0, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 0, 96, 111, 126, 130, 127, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 0, 0, 0, 111, 0, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 0, 0, 111, 126, 132, + 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 95, 0, 111, 0, 0, 247, 248, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 0, 126, 111, 127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 95, 0, 111, 0, 205, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 95, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 96, 111, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 96, 111, 220, - 0, 112, 0, 0, 0, 0, 0, 0, 119, 0, - 0, 0, 0, 0, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 96, 111, - 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 96, - 111, 97, 0, 112, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 0, 97, 0, 0, 112, - 0, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 0, 0, 0, 0, 112, 35, 36, 37, 38, 39, - 40, 41, 42, 0, 43, 4, 5, 6, 7, 8, - 9, 10, 0, 44, 45, 0, 0, 11, 12, 13, - 14, 15, 0, 0, 46, -102, 47, 0, 48, 35, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 218, + 95, 111, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 117, 0, 0, 0, 0, 0, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 95, 0, 111, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 96, 97, 111, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 95, 0, + 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 0, + 0, 0, 111, 35, 36, 37, 38, 39, 40, 41, + 42, 0, 43, 4, 5, 6, 7, 8, 9, 10, + 0, 44, 45, 177, 0, 11, 12, 13, 14, 15, + 0, 46, 0, 47, 0, 48, 35, 36, 37, 38, + 39, 40, 41, 42, 0, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 46, -102, 47, 0, 48, 35, 36, 37, 38, 39, 40, 41, 42, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, - 35, 36, 37, 193, 194, 40, 41, 195, 46, 43, - 47, 0, 48, 0, 0, 0, 0, 0, 44, 45, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, - 0, 47, 0, 48 + 0, 0, 0, 0, 0, 0, 0, 44, 45, 35, + 36, 37, 191, 192, 40, 41, 193, 46, 43, 47, + 0, 48, 0, 0, 0, 0, 0, 44, 45, 0, + 0, 0, 0, 0, 0, 0, 0, 46, 0, 47, + 0, 48 }; static const yytype_int16 yycheck[] = { - 4, 93, 78, 79, 117, 6, 7, 10, 0, 119, - 11, 12, 13, 14, 71, 12, 73, 0, 75, 53, - 13, 4, 53, 6, 4, 23, 6, 61, 0, 139, - 61, 48, 4, 0, 6, 29, 46, 4, 46, 6, - 23, 49, 43, 44, 45, 46, 40, 41, 42, 23, - 24, 23, 28, 27, 130, 131, 23, 133, 53, 135, - 4, 43, 6, 67, 140, 48, 61, 50, 23, 24, - 13, 14, 27, 77, 46, 76, 48, 49, 50, 53, - 29, 48, 23, 50, 23, 86, 27, 88, 27, 38, - 39, 40, 41, 42, 95, 96, 23, 98, 99, 100, + 4, 10, 92, 23, 117, 6, 7, 77, 78, 0, + 11, 12, 13, 14, 70, 23, 72, 0, 74, 27, + 52, 4, 45, 6, 137, 48, 23, 24, 0, 61, + 27, 0, 4, 13, 6, 4, 29, 6, 12, 4, + 23, 6, 43, 44, 45, 46, 28, 40, 41, 42, + 45, 23, 23, 24, 23, 52, 27, 47, 128, 129, + 23, 131, 66, 133, 47, 4, 49, 6, 138, 13, + 14, 23, 76, 45, 75, 47, 48, 49, 47, 29, + 49, 47, 23, 29, 85, 12, 87, 23, 38, 39, + 40, 41, 42, 94, 95, 48, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 23, 23, 227, 116, 27, 26, 27, 28, - 29, 23, 48, 126, 127, 29, 29, 128, 12, 23, - 49, 132, 224, 134, 38, 39, 40, 41, 42, 14, - 253, 28, 43, 47, 51, 12, 203, 28, 205, 48, - 48, 152, 45, 50, 54, 45, 52, 48, 234, 235, - 161, 237, 29, 30, 50, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 48, 178, 48, 183, - 47, 185, 48, 45, 20, 186, 185, 187, 80, 248, - 215, 29, 87, 129, -1, 271, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 209, 207, 208, -1, 47, - 267, 212, 80, 12, -1, 216, -1, 218, -1, 220, - -1, -1, 20, 21, 22, 226, 24, 25, 26, 27, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 12, 44, -1, 248, 47, -1, - -1, 252, -1, -1, -1, 54, 260, 258, -1, -1, - 261, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 12, 44, -1, -1, 47, - -1, -1, -1, -1, -1, -1, 54, -1, -1, -1, - -1, -1, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 12, 44, -1, -1, - 47, -1, -1, -1, -1, -1, -1, 54, -1, -1, - -1, -1, -1, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 12, 44, -1, - -1, 47, -1, -1, -1, -1, -1, -1, 54, -1, - -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, -1, 44, - -1, -1, 47, -1, -1, 50, 10, 11, 12, -1, + 111, 29, 14, 114, 28, 124, 125, 50, 47, 47, + 38, 39, 40, 41, 42, 126, 49, 28, 46, 130, + 51, 132, 222, 20, 21, 22, 44, 24, 25, 26, + 27, 47, 12, 53, 44, 201, 53, 203, 47, 150, + 26, 27, 28, 29, 49, 47, 47, 79, 159, 29, + 230, 231, 44, 233, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 86, 20, 176, 46, 181, 183, 183, + 244, 79, 185, 184, 213, 127, -1, 257, -1, 115, + -1, -1, -1, -1, -1, -1, -1, -1, 254, -1, + -1, 12, -1, 207, 205, 206, -1, -1, -1, 210, + -1, -1, -1, 214, -1, 216, -1, 218, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, -1, -1, 46, 12, -1, -1, -1, + -1, -1, 53, 244, -1, -1, -1, 251, 249, -1, + -1, 252, -1, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 12, -1, + 46, -1, -1, -1, -1, -1, -1, 53, -1, -1, + -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, -1, 46, -1, -1, 49, 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, -1, 24, 25, 26, 27, -1, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, -1, - 44, -1, -1, 47, 12, 13, 14, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, 44, -1, -1, 47, - 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + -1, 29, 46, 12, 13, 14, 34, 35, 36, 37, + 38, 39, 40, 41, 42, -1, -1, -1, 46, -1, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, -1, -1, 46, 12, 13, + 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 12, -1, 46, -1, -1, 17, 18, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 12, 44, -1, -1, 47, 17, 18, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 12, 44, 14, -1, 47, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, -1, 44, 12, -1, 47, -1, 16, + 42, 43, -1, 12, 46, 14, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 12, -1, 46, -1, 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 12, 44, -1, -1, - 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 12, 44, 45, - -1, 47, -1, -1, -1, -1, -1, -1, 23, -1, + 37, 38, 39, 40, 41, 42, 43, 12, -1, 46, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 12, 44, - -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 12, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 12, - 44, 29, -1, 47, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, -1, 29, -1, -1, 47, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - -1, -1, -1, -1, 47, 20, 21, 22, 23, 24, - 25, 26, 27, -1, 29, 3, 4, 5, 6, 7, - 8, 9, -1, 38, 39, -1, -1, 15, 16, 17, - 18, 19, -1, -1, 49, 50, 51, -1, 53, 20, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 12, 46, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 23, -1, -1, -1, -1, -1, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 12, -1, 46, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 12, -1, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 29, 30, 46, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 12, -1, + -1, 46, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 29, -1, -1, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, -1, + -1, -1, 46, 20, 21, 22, 23, 24, 25, 26, + 27, -1, 29, 3, 4, 5, 6, 7, 8, 9, + -1, 38, 39, 40, -1, 15, 16, 17, 18, 19, + -1, 48, -1, 50, -1, 52, 20, 21, 22, 23, + 24, 25, 26, 27, -1, 29, -1, -1, -1, -1, + -1, -1, -1, -1, 38, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, -1, 52, 20, 21, 22, 23, 24, 25, 26, 27, -1, 29, -1, - -1, -1, -1, -1, -1, -1, -1, 38, 39, -1, - 20, 21, 22, 23, 24, 25, 26, 27, 49, 29, - 51, -1, 53, -1, -1, -1, -1, -1, 38, 39, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 49, - -1, 51, -1, 53 + -1, -1, -1, -1, -1, -1, -1, 38, 39, 20, + 21, 22, 23, 24, 25, 26, 27, 48, 29, 50, + -1, 52, -1, -1, -1, -1, -1, 38, 39, -1, + -1, -1, -1, -1, -1, -1, -1, 48, -1, 50, + -1, 52 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -917,31 +906,29 @@ static const yytype_uint8 yystos[] = 0, 63, 66, 0, 3, 4, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 67, 68, 69, 70, 74, 76, 83, 88, 89, 91, 92, 94, 96, 98, - 23, 133, 71, 72, 133, 20, 21, 22, 23, 24, - 25, 26, 27, 29, 38, 39, 49, 51, 53, 100, - 102, 103, 105, 106, 107, 112, 113, 118, 123, 125, - 127, 128, 129, 131, 100, 13, 73, 75, 84, 127, - 100, 100, 93, 100, 95, 100, 99, 14, 73, 79, - 64, 65, 65, 65, 65, 65, 12, 48, 28, 100, - 100, 100, 100, 101, 119, 114, 12, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 44, 47, 46, 104, 124, 53, 61, 23, 23, - 117, 77, 78, 133, 85, 86, 100, 48, 12, 14, - 90, 90, 13, 90, 13, 90, 100, 133, 117, 23, - 81, 117, 70, 89, 100, 72, 100, 50, 63, 23, - 24, 27, 53, 120, 121, 122, 132, 100, 115, 116, - 100, 12, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 23, 49, 43, - 100, 23, 131, 14, 118, 48, 28, 48, 10, 11, - 87, 127, 127, 23, 24, 27, 130, 23, 24, 27, - 130, 117, 117, 100, 117, 100, 117, 16, 28, 82, - 117, 50, 45, 100, 52, 48, 45, 54, 48, 100, - 45, 100, 108, 109, 110, 111, 53, 61, 126, 54, - 133, 78, 100, 86, 90, 90, 100, 100, 80, 133, - 100, 54, 122, 100, 100, 100, 50, 63, 48, 100, - 23, 131, 53, 61, 117, 117, 17, 18, 97, 117, - 48, 45, 109, 54, 100, 23, 131, 100, 133, 100, - 54, 90, 117 + 23, 130, 71, 72, 130, 20, 21, 22, 23, 24, + 25, 26, 27, 29, 38, 39, 48, 50, 52, 100, + 102, 103, 105, 106, 107, 112, 113, 118, 123, 124, + 125, 126, 128, 100, 13, 73, 75, 84, 124, 100, + 100, 93, 100, 95, 100, 99, 14, 73, 79, 64, + 65, 65, 65, 65, 65, 12, 47, 28, 100, 100, + 100, 100, 101, 119, 114, 12, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 46, 45, 104, 52, 61, 23, 23, 117, 77, + 78, 130, 85, 86, 100, 47, 12, 14, 90, 90, + 13, 90, 13, 90, 100, 130, 117, 23, 81, 117, + 70, 89, 100, 72, 100, 49, 63, 23, 24, 27, + 52, 120, 121, 122, 129, 100, 115, 116, 100, 12, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 23, 48, 40, 100, 23, + 128, 14, 118, 47, 28, 47, 10, 11, 87, 124, + 124, 23, 24, 27, 127, 23, 24, 27, 127, 117, + 117, 100, 117, 100, 117, 16, 28, 82, 117, 49, + 44, 100, 51, 47, 44, 53, 47, 100, 44, 100, + 108, 109, 110, 111, 53, 53, 130, 78, 100, 86, + 90, 90, 100, 100, 80, 130, 100, 53, 122, 100, + 100, 100, 49, 63, 47, 117, 117, 17, 18, 97, + 117, 47, 44, 109, 100, 130, 100, 90, 117 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -959,10 +946,9 @@ static const yytype_uint8 yyr1[] = 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 108, 108, 109, 110, 109, 111, 111, 112, 112, 114, 113, 115, 115, 116, 116, 117, 117, 119, - 118, 120, 120, 121, 121, 122, 122, 122, 123, 124, - 123, 125, 125, 125, 125, 125, 126, 126, 126, 126, - 126, 126, 127, 127, 128, 128, 129, 129, 129, 129, - 129, 130, 130, 130, 131, 132, 132, 133 + 118, 120, 120, 121, 121, 122, 122, 122, 123, 123, + 123, 123, 123, 123, 124, 124, 125, 125, 126, 126, + 126, 126, 126, 127, 127, 127, 128, 129, 129, 130 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -980,10 +966,9 @@ static const yytype_uint8 yyr2[] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 0, 1, 1, 0, 2, 1, 3, 1, 1, 0, 4, 0, 1, 1, 3, 0, 2, 0, - 4, 0, 1, 1, 3, 3, 5, 3, 1, 0, - 4, 1, 1, 3, 3, 4, 2, 2, 3, 3, - 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1 + 4, 0, 1, 1, 3, 3, 5, 3, 1, 1, + 3, 3, 4, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; @@ -1761,187 +1746,187 @@ yyreduce: switch (yyn) { case 2: -#line 203 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 200 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1768 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1753 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 3: -#line 205 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 202 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1775 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1760 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 4: -#line 207 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 204 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1782 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1767 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 5: -#line 209 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 206 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1789 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1774 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 6: -#line 211 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 208 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1796 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1781 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 7: -#line 213 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 210 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1803 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1788 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 8: -#line 218 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 215 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1810 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1795 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 9: -#line 220 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 217 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1817 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1802 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 10: -#line 225 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 222 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { // still need to close the scope opened by the data-modification statement parser->ast()->scopes()->endNested(); } -#line 1826 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1811 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 11: -#line 229 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 226 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { // the RETURN statement will close the scope opened by the data-modification statement } -#line 1834 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1819 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 12: -#line 235 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 232 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1841 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1826 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 13: -#line 237 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 234 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1848 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1833 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 14: -#line 242 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 239 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1855 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1840 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 15: -#line 244 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 241 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1862 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1847 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 16: -#line 246 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 243 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1869 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1854 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 17: -#line 248 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 245 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1876 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1861 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 18: -#line 250 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 247 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1883 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1868 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 19: -#line 252 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 249 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1890 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1875 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 20: -#line 257 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 254 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->ast()->scopes()->start(triagens::aql::AQL_SCOPE_FOR); auto node = parser->ast()->createNodeFor((yyvsp[-2].strval), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 1901 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1886 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 21: -#line 266 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 263 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { // operand is a reference. can use it directly auto node = parser->ast()->createNodeFilter((yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 1911 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1896 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 22: -#line 274 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 271 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1918 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1903 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 23: -#line 279 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 276 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1925 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1910 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 24: -#line 281 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 278 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 1932 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1917 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 25: -#line 286 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 283 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeLet((yyvsp[-2].strval), (yyvsp[0].node), true); parser->ast()->addOperation(node); } -#line 1941 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1926 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 26: -#line 293 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 290 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! TRI_CaseEqualString((yyvsp[-2].strval), "COUNT")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'COUNT'", (yyvsp[-2].strval), yylloc.first_line, yylloc.first_column); @@ -1949,20 +1934,20 @@ yyreduce: (yyval.strval) = (yyvsp[0].strval); } -#line 1953 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1938 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 27: -#line 303 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 300 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 1962 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1947 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 28: -#line 306 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 303 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); @@ -1971,11 +1956,11 @@ yyreduce: } (yyval.node) = list; } -#line 1975 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1960 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 29: -#line 317 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 314 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); @@ -1992,11 +1977,11 @@ yyreduce: auto node = parser->ast()->createNodeCollectCount(parser->ast()->createNodeArray(), (yyvsp[-1].strval), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 1996 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 1981 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 30: -#line 333 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 330 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); @@ -2024,11 +2009,11 @@ yyreduce: auto node = parser->ast()->createNodeCollectCount((yyvsp[-2].node), (yyvsp[-1].strval), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2028 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2013 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 31: -#line 360 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 357 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); @@ -2056,11 +2041,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-2].node), (yyvsp[-1].strval), nullptr, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2060 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2045 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 32: -#line 387 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 384 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); @@ -2093,11 +2078,11 @@ yyreduce: auto node = parser->ast()->createNodeCollect((yyvsp[-3].node), (yyvsp[-2].strval), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2097 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2082 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 33: -#line 419 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 416 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto scopes = parser->ast()->scopes(); @@ -2125,50 +2110,50 @@ yyreduce: auto node = parser->ast()->createNodeCollectExpression((yyvsp[-5].node), (yyvsp[-3].strval), (yyvsp[-1].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2129 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2114 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 34: -#line 449 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 446 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2136 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2121 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 35: -#line 451 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 448 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2143 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2128 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 36: -#line 456 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 453 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeAssign((yyvsp[-2].strval), (yyvsp[0].node)); parser->pushArrayElement(node); } -#line 2152 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2137 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 37: -#line 463 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 460 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = nullptr; } -#line 2160 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2145 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 38: -#line 466 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 463 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 2168 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2153 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 39: -#line 472 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 469 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->ast()->scopes()->existsVariable((yyvsp[0].strval))) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "use of unknown variable '%s' for KEEP", (yyvsp[0].strval), yylloc.first_line, yylloc.first_column); @@ -2183,11 +2168,11 @@ yyreduce: node->setFlag(FLAG_KEEP_VARIABLENAME); parser->pushArrayElement(node); } -#line 2187 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2172 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 40: -#line 486 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 483 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->ast()->scopes()->existsVariable((yyvsp[0].strval))) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "use of unknown variable '%s' for KEEP", (yyvsp[0].strval), yylloc.first_line, yylloc.first_column); @@ -2202,11 +2187,11 @@ yyreduce: node->setFlag(FLAG_KEEP_VARIABLENAME); parser->pushArrayElement(node); } -#line 2206 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2191 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 41: -#line 503 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 500 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! TRI_CaseEqualString((yyvsp[0].strval), "KEEP")) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected qualifier '%s', expecting 'KEEP'", (yyvsp[0].strval), yylloc.first_line, yylloc.first_column); @@ -2215,140 +2200,140 @@ yyreduce: auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2219 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2204 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 42: -#line 510 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 507 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); (yyval.node) = list; } -#line 2228 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2213 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 43: -#line 517 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 514 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2237 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2222 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 44: -#line 520 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 517 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); auto node = parser->ast()->createNodeSort(list); parser->ast()->addOperation(node); } -#line 2247 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2232 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 45: +#line 525 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushArrayElement((yyvsp[0].node)); + } +#line 2240 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 46: #line 528 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2255 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 46: -#line 531 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushArrayElement((yyvsp[0].node)); - } -#line 2263 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2248 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 47: -#line 537 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 534 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeSortElement((yyvsp[-1].node), (yyvsp[0].node)); } -#line 2271 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2256 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 48: +#line 540 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = parser->ast()->createNodeValueBool(true); + } +#line 2264 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 49: #line 543 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 2279 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 49: -#line 546 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = parser->ast()->createNodeValueBool(true); - } -#line 2287 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2272 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 50: -#line 549 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 546 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 2295 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2280 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 51: -#line 552 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 549 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2303 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2288 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 52: -#line 558 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 555 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto offset = parser->ast()->createNodeValueInt(0); auto node = parser->ast()->createNodeLimit(offset, (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2313 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2298 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 53: -#line 563 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 560 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeLimit((yyvsp[-2].node), (yyvsp[0].node)); parser->ast()->addOperation(node); } -#line 2322 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2307 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 54: -#line 570 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 567 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeReturn((yyvsp[0].node)); parser->ast()->addOperation(node); parser->ast()->scopes()->endNested(); } -#line 2332 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2317 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 55: -#line 578 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 575 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2340 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2325 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 56: -#line 581 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 578 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2348 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2333 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 57: -#line 587 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 584 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_REMOVE, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2357,11 +2342,11 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2361 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2346 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 58: -#line 598 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 595 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_INSERT, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2370,11 +2355,11 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2374 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2359 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 59: -#line 609 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 606 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_UPDATE, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2384,11 +2369,11 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2388 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2373 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 60: -#line 618 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 615 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_UPDATE, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2398,18 +2383,18 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2402 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2387 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 61: -#line 630 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 627 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2409 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2394 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 62: -#line 635 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 632 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_REPLACE, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2419,11 +2404,11 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2423 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2408 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 63: -#line 644 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 641 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_REPLACE, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2433,44 +2418,44 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2437 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2422 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 64: -#line 656 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 653 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2444 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2429 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 65: -#line 661 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 658 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = static_cast(NODE_TYPE_UPDATE); } -#line 2452 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2437 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 66: -#line 664 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 661 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.intval) = static_cast(NODE_TYPE_REPLACE); } -#line 2460 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2445 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 67: -#line 670 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 667 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { // reserve a variable named "$OLD", we might need it in the update expression // and in a later return thing parser->pushStack(parser->ast()->createNodeVariable("$OLD", true)); } -#line 2470 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2455 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 68: -#line 674 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 671 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (! parser->configureWriteQuery(AQL_QUERY_UPSERT, (yyvsp[-1].node), (yyvsp[0].node))) { YYABORT; @@ -2516,19 +2501,19 @@ yyreduce: parser->ast()->addOperation(node); parser->setWriteNode(node); } -#line 2520 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2505 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 69: -#line 722 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 719 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[-1].node); } -#line 2528 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2513 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 70: -#line 725 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 722 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (parser->isModificationQuery()) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected subquery after data-modification operation", yylloc.first_line, yylloc.first_column); @@ -2536,11 +2521,11 @@ yyreduce: parser->ast()->scopes()->start(triagens::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 2540 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2525 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 71: -#line 731 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 728 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -2551,67 +2536,67 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName.c_str()); } -#line 2555 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2540 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 72: +#line 738 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 2548 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 73: #line 741 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2563 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2556 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 73: + case 74: #line 744 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2571 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2564 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 74: + case 75: #line 747 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2579 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2572 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 75: + case 76: #line 750 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2587 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2580 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 76: + case 77: #line 753 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2595 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 77: -#line 756 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2603 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2588 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 78: -#line 759 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 756 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeRange((yyvsp[-2].node), (yyvsp[0].node)); } -#line 2611 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2596 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 79: -#line 765 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 762 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = (yyvsp[0].strval); @@ -2619,11 +2604,11 @@ yyreduce: ABORT_OOM } } -#line 2623 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2608 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 80: -#line 772 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 769 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[-2].strval) == nullptr || (yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -2638,205 +2623,205 @@ yyreduce: ABORT_OOM } } -#line 2642 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2627 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 81: -#line 789 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 786 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->pushStack((yyvsp[0].strval)); auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2653 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2638 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 82: -#line 794 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 791 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto list = static_cast(parser->popStack()); (yyval.node) = parser->ast()->createNodeFunctionCall(static_cast(parser->popStack()), list); } -#line 2662 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2647 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 83: -#line 801 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 798 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_PLUS, (yyvsp[0].node)); } -#line 2670 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2655 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 84: -#line 804 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 801 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_MINUS, (yyvsp[0].node)); } -#line 2678 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2663 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 85: -#line 807 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 804 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeUnaryOperator(NODE_TYPE_OPERATOR_UNARY_NOT, (yyvsp[0].node)); } -#line 2686 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2671 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 86: -#line 813 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 810 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_OR, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2694 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2679 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 87: -#line 816 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 813 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_AND, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2702 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2687 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 88: -#line 819 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 816 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_PLUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2710 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2695 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 89: -#line 822 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 819 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MINUS, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2718 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2703 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 90: -#line 825 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 822 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_TIMES, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2726 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2711 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 91: -#line 828 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 825 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_DIV, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2734 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2719 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 92: -#line 831 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 828 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_MOD, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2742 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2727 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 93: -#line 834 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 831 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_EQ, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2750 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2735 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 94: -#line 837 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 834 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2758 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2743 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 95: -#line 840 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 837 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2766 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2751 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 96: -#line 843 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 840 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GT, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2774 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2759 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 97: -#line 846 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 843 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_LE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2782 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2767 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 98: -#line 849 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 846 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_GE, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2790 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2775 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 99: -#line 852 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 849 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_IN, (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2798 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2783 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 100: -#line 855 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 852 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeBinaryOperator(NODE_TYPE_OPERATOR_BINARY_NIN, (yyvsp[-3].node), (yyvsp[0].node)); } +#line 2791 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 101: +#line 858 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = parser->ast()->createNodeTernaryOperator((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 2799 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 102: +#line 864 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + } #line 2806 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 101: -#line 861 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 103: +#line 866 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { - (yyval.node) = parser->ast()->createNodeTernaryOperator((yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); } -#line 2814 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2813 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 102: -#line 867 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 104: +#line 871 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { + (yyval.node) = (yyvsp[0].node); } #line 2821 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 103: -#line 869 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 2828 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 104: -#line 874 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2836 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - case 105: -#line 877 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 874 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if (parser->isModificationQuery()) { parser->registerParseError(TRI_ERROR_QUERY_PARSE, "unexpected subquery after data-modification operation", yylloc.first_line, yylloc.first_column); @@ -2844,11 +2829,11 @@ yyreduce: parser->ast()->scopes()->start(triagens::aql::AQL_SCOPE_SUBQUERY); parser->ast()->startSubQuery(); } -#line 2848 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2833 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 106: -#line 883 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 880 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { AstNode* node = parser->ast()->endSubQuery(); parser->ast()->scopes()->endCurrent(); @@ -2859,98 +2844,98 @@ yyreduce: (yyval.node) = parser->ast()->createNodeReference(variableName.c_str()); } -#line 2863 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2848 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 107: +#line 893 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushArrayElement((yyvsp[0].node)); + } +#line 2856 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 108: #line 896 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2871 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 108: -#line 899 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushArrayElement((yyvsp[0].node)); - } -#line 2879 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2864 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 109: +#line 902 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + (yyval.node) = (yyvsp[0].node); + } +#line 2872 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 110: #line 905 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 2887 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 110: -#line 908 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2895 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2880 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 111: -#line 914 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 911 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeArray(); parser->pushStack(node); } -#line 2904 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2889 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 112: -#line 917 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 914 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 2912 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2897 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 113: -#line 923 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 920 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } +#line 2904 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 114: +#line 922 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2911 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 115: +#line 927 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushArrayElement((yyvsp[0].node)); + } #line 2919 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 114: -#line 925 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 2926 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 115: + case 116: #line 930 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->pushArrayElement((yyvsp[0].node)); } -#line 2934 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 116: -#line 933 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushArrayElement((yyvsp[0].node)); - } -#line 2942 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2927 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 117: -#line 939 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 936 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = nullptr; } -#line 2950 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2935 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 118: -#line 942 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 939 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[-1].strval) == nullptr || (yyvsp[0].node) == nullptr) { ABORT_OOM @@ -2962,72 +2947,72 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 2966 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2951 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 119: -#line 956 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 953 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { auto node = parser->ast()->createNodeObject(); parser->pushStack(node); } -#line 2975 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2960 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 120: -#line 959 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 956 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = static_cast(parser->popStack()); } -#line 2983 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2968 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 121: -#line 965 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 962 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2990 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2975 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 122: -#line 967 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 964 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } -#line 2997 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 2982 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 123: -#line 972 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 969 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { } +#line 2989 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 124: +#line 971 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + } +#line 2996 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 125: +#line 976 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + parser->pushObjectElement((yyvsp[-2].strval), (yyvsp[0].node)); + } #line 3004 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 124: -#line 974 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - } -#line 3011 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 125: -#line 979 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - parser->pushObjectElement((yyvsp[-2].strval), (yyvsp[0].node)); - } -#line 3019 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - case 126: -#line 982 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 979 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { parser->pushObjectElement((yyvsp[-3].node), (yyvsp[0].node)); } -#line 3027 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3012 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 127: -#line 985 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 982 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[-2].strval) == nullptr) { ABORT_OOM @@ -3040,52 +3025,11 @@ yyreduce: auto param = parser->ast()->createNodeParameter((yyvsp[-2].strval)); parser->pushObjectElement(param, (yyvsp[0].node)); } -#line 3044 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3029 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 128: -#line 1000 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // start of reference (collection or variable name) - (yyval.node) = (yyvsp[0].node); - } -#line 3053 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 129: -#line 1004 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // expanded variable access, e.g. variable[*] - - // create a temporary iterator variable - std::string const nextName = parser->ast()->variables()->nextName() + "_"; - char const* iteratorName = nextName.c_str(); - auto iterator = parser->ast()->createNodeIterator(iteratorName, (yyvsp[0].node)); - - parser->pushStack(iterator); - parser->pushStack(parser->ast()->createNodeReference(iteratorName)); - } -#line 3069 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 130: -#line 1014 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // return from the "expansion" subrule - - // push the expand node into the statement list - auto iterator = static_cast(parser->popStack()); - (yyval.node) = parser->ast()->createNodeExpand(iterator, (yyvsp[0].node)); - - if ((yyval.node) == nullptr) { - ABORT_OOM - } - } -#line 3085 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 131: -#line 1028 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 997 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { // variable or collection auto ast = parser->ast(); @@ -3122,11 +3066,11 @@ yyreduce: (yyval.node) = node; } -#line 3126 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3070 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 132: -#line 1064 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 129: +#line 1033 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); @@ -3134,111 +3078,91 @@ yyreduce: ABORT_OOM } } -#line 3138 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3082 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 130: +#line 1040 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + // named variable access, e.g. variable.reference + if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + (yyvsp[-2].node)->changeMember(1, parser->ast()->createNodeAttributeAccess((yyvsp[-2].node)->getMember(1), (yyvsp[0].strval))); + (yyval.node) = (yyvsp[-2].node); + } + else { + (yyval.node) = parser->ast()->createNodeAttributeAccess((yyvsp[-2].node), (yyvsp[0].strval)); + } + } +#line 3099 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 131: +#line 1052 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + // named variable access, e.g. variable.@reference + if ((yyvsp[-2].node)->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + (yyvsp[-2].node)->changeMember(1, parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node)->getMember(1), (yyvsp[0].node))); + (yyval.node) = (yyvsp[-2].node); + } + else { + (yyval.node) = parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node), (yyvsp[0].node)); + } + } +#line 3116 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ + break; + + case 132: +#line 1064 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + { + // indexed variable access, e.g. variable[index] + if ((yyvsp[-3].node)->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + (yyvsp[-3].node)->changeMember(1, parser->ast()->createNodeIndexedAccess((yyvsp[-3].node)->getMember(1), (yyvsp[-1].node))); + (yyval.node) = (yyvsp[-3].node); + } + else { + (yyval.node) = parser->ast()->createNodeIndexedAccess((yyvsp[-3].node), (yyvsp[-1].node)); + } + } +#line 3133 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 133: -#line 1071 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 1076 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { - // named variable access, e.g. variable.reference - (yyval.node) = parser->ast()->createNodeAttributeAccess((yyvsp[-2].node), (yyvsp[0].strval)); + // variable expansion, e.g. variable[*] + // create a temporary iterator variable + std::string const nextName = parser->ast()->variables()->nextName() + "_"; + char const* iteratorName = nextName.c_str(); + auto iterator = parser->ast()->createNodeIterator(iteratorName, (yyvsp[-3].node)); + (yyval.node) = parser->ast()->createNodeExpansion(iterator, parser->ast()->createNodeReference(iteratorName)); } -#line 3147 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3146 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 134: -#line 1075 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 1087 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { - // named variable access, e.g. variable.@reference - (yyval.node) = parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node), (yyvsp[0].node)); + (yyval.node) = (yyvsp[0].node); } -#line 3156 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3154 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 135: -#line 1079 "arangod/Aql/grammar.y" /* yacc.c:1646 */ +#line 1090 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { - // indexed variable access, e.g. variable[index] - (yyval.node) = parser->ast()->createNodeIndexedAccess((yyvsp[-3].node), (yyvsp[-1].node)); + (yyval.node) = (yyvsp[0].node); } -#line 3165 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3162 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; case 136: -#line 1086 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // named variable access, continuation from * expansion, e.g. [*].variable.reference - auto node = static_cast(parser->popStack()); - (yyval.node) = parser->ast()->createNodeAttributeAccess(node, (yyvsp[0].strval)); - } -#line 3175 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 137: -#line 1091 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.@reference - auto node = static_cast(parser->popStack()); - (yyval.node) = parser->ast()->createNodeBoundAttributeAccess(node, (yyvsp[0].node)); - } -#line 3185 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 138: #line 1096 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // indexed variable access, continuation from * expansion, e.g. [*].variable[index] - auto node = static_cast(parser->popStack()); - (yyval.node) = parser->ast()->createNodeIndexedAccess(node, (yyvsp[-1].node)); - } -#line 3195 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 139: -#line 1101 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // named variable access, continuation from * expansion, e.g. [*].variable.xx.reference - (yyval.node) = parser->ast()->createNodeAttributeAccess((yyvsp[-2].node), (yyvsp[0].strval)); - } -#line 3204 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 140: -#line 1105 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.xx.@reference - (yyval.node) = parser->ast()->createNodeBoundAttributeAccess((yyvsp[-2].node), (yyvsp[0].node)); - } -#line 3213 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 141: -#line 1109 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - // indexed variable access, continuation from * expansion, e.g. [*].variable.xx.[index] - (yyval.node) = parser->ast()->createNodeIndexedAccess((yyvsp[-3].node), (yyvsp[-1].node)); - } -#line 3222 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 142: -#line 1116 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3230 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 143: -#line 1119 "arangod/Aql/grammar.y" /* yacc.c:1646 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 3238 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ - break; - - case 144: -#line 1125 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -3246,11 +3170,11 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 3250 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3174 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 145: -#line 1132 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 137: +#line 1103 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].node) == nullptr) { ABORT_OOM @@ -3258,51 +3182,51 @@ yyreduce: (yyval.node) = (yyvsp[0].node); } -#line 3262 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3186 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 146: -#line 1142 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 138: +#line 1113 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueString((yyvsp[0].strval)); } -#line 3270 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3194 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 147: -#line 1145 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 139: +#line 1116 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = (yyvsp[0].node); } -#line 3278 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3202 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 148: -#line 1148 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 140: +#line 1119 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueNull(); } -#line 3286 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3210 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 149: -#line 1151 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 141: +#line 1122 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(true); } -#line 3294 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3218 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 150: -#line 1154 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 142: +#line 1125 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeValueBool(false); } -#line 3302 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3226 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 151: -#line 1160 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 143: +#line 1131 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -3310,11 +3234,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval), TRI_TRANSACTION_WRITE); } -#line 3314 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3238 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 152: -#line 1167 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 144: +#line 1138 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -3322,11 +3246,11 @@ yyreduce: (yyval.node) = parser->ast()->createNodeCollection((yyvsp[0].strval), TRI_TRANSACTION_WRITE); } -#line 3326 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3250 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 153: -#line 1174 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 145: +#line 1145 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -3338,19 +3262,19 @@ yyreduce: (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval)); } -#line 3342 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3266 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 154: -#line 1188 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 146: +#line 1159 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.node) = parser->ast()->createNodeParameter((yyvsp[0].strval)); } -#line 3350 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3274 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 155: -#line 1194 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 147: +#line 1165 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -3358,11 +3282,11 @@ yyreduce: (yyval.strval) = (yyvsp[0].strval); } -#line 3362 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3286 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 156: -#line 1201 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 148: +#line 1172 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { if ((yyvsp[0].strval) == nullptr) { ABORT_OOM @@ -3370,19 +3294,19 @@ yyreduce: (yyval.strval) = (yyvsp[0].strval); } -#line 3374 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3298 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; - case 157: -#line 1210 "arangod/Aql/grammar.y" /* yacc.c:1646 */ + case 149: +#line 1181 "arangod/Aql/grammar.y" /* yacc.c:1646 */ { (yyval.strval) = (yyvsp[0].strval); } -#line 3382 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3306 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ break; -#line 3386 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ +#line 3310 "arangod/Aql/grammar.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/arangod/Aql/grammar.h b/arangod/Aql/grammar.h index 992d50d2b4..3b14922c7e 100644 --- a/arangod/Aql/grammar.h +++ b/arangod/Aql/grammar.h @@ -86,21 +86,21 @@ extern int Aqldebug; T_TIMES = 295, T_DIV = 296, T_MOD = 297, - T_EXPAND = 298, - T_QUESTION = 299, - T_COLON = 300, - T_SCOPE = 301, - T_RANGE = 302, - T_COMMA = 303, - T_OPEN = 304, - T_CLOSE = 305, - T_OBJECT_OPEN = 306, - T_OBJECT_CLOSE = 307, - T_ARRAY_OPEN = 308, - T_ARRAY_CLOSE = 309, - T_NIN = 310, - UMINUS = 311, - UPLUS = 312, + T_QUESTION = 298, + T_COLON = 299, + T_SCOPE = 300, + T_RANGE = 301, + T_COMMA = 302, + T_OPEN = 303, + T_CLOSE = 304, + T_OBJECT_OPEN = 305, + T_OBJECT_CLOSE = 306, + T_ARRAY_OPEN = 307, + T_ARRAY_CLOSE = 308, + T_NIN = 309, + UMINUS = 310, + UPLUS = 311, + EXPANSION = 312, FUNCCALL = 313, REFERENCE = 314, INDEXED = 315 diff --git a/arangod/Aql/grammar.y b/arangod/Aql/grammar.y index 898297964b..2fc499fd00 100644 --- a/arangod/Aql/grammar.y +++ b/arangod/Aql/grammar.y @@ -108,7 +108,6 @@ void Aqlerror (YYLTYPE* locp, %token T_TIMES "* operator" %token T_DIV "/ operator" %token T_MOD "% operator" -%token T_EXPAND "[*] operator" %token T_QUESTION "?" %token T_COLON ":" @@ -141,7 +140,7 @@ void Aqlerror (YYLTYPE* locp, %left T_PLUS T_MINUS %left T_TIMES T_DIV T_MOD %right UMINUS UPLUS T_NOT -%left T_EXPAND +%left EXPANSION %left FUNCCALL %left REFERENCE %left INDEXED @@ -182,8 +181,6 @@ void Aqlerror (YYLTYPE* locp, %type object_element; %type object_element_name; %type reference; -%type single_reference; -%type expansion; %type atomic_value; %type value_literal; %type collection_name; @@ -997,34 +994,6 @@ object_element: ; reference: - single_reference { - // start of reference (collection or variable name) - $$ = $1; - } - | reference { - // expanded variable access, e.g. variable[*] - - // create a temporary iterator variable - std::string const nextName = parser->ast()->variables()->nextName() + "_"; - char const* iteratorName = nextName.c_str(); - auto iterator = parser->ast()->createNodeIterator(iteratorName, $1); - - parser->pushStack(iterator); - parser->pushStack(parser->ast()->createNodeReference(iteratorName)); - } T_EXPAND expansion { - // return from the "expansion" subrule - - // push the expand node into the statement list - auto iterator = static_cast(parser->popStack()); - $$ = parser->ast()->createNodeExpand(iterator, $4); - - if ($$ == nullptr) { - ABORT_OOM - } - } - ; - -single_reference: T_STRING { // variable or collection auto ast = parser->ast(); @@ -1068,47 +1037,49 @@ single_reference: ABORT_OOM } } - | single_reference '.' T_STRING %prec REFERENCE { + | reference '.' T_STRING %prec REFERENCE { // named variable access, e.g. variable.reference - $$ = parser->ast()->createNodeAttributeAccess($1, $3); + if ($1->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + $1->changeMember(1, parser->ast()->createNodeAttributeAccess($1->getMember(1), $3)); + $$ = $1; + } + else { + $$ = parser->ast()->createNodeAttributeAccess($1, $3); + } } - | single_reference '.' bind_parameter %prec REFERENCE { + | reference '.' bind_parameter %prec REFERENCE { // named variable access, e.g. variable.@reference - $$ = parser->ast()->createNodeBoundAttributeAccess($1, $3); + if ($1->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + $1->changeMember(1, parser->ast()->createNodeBoundAttributeAccess($1->getMember(1), $3)); + $$ = $1; + } + else { + $$ = parser->ast()->createNodeBoundAttributeAccess($1, $3); + } } - | single_reference T_ARRAY_OPEN expression T_ARRAY_CLOSE %prec INDEXED { + | reference T_ARRAY_OPEN expression T_ARRAY_CLOSE %prec INDEXED { // indexed variable access, e.g. variable[index] - $$ = parser->ast()->createNodeIndexedAccess($1, $3); + if ($1->type == NODE_TYPE_EXPANSION) { + // if left operand is an expansion already... + // patch the existing expansion + $1->changeMember(1, parser->ast()->createNodeIndexedAccess($1->getMember(1), $3)); + $$ = $1; + } + else { + $$ = parser->ast()->createNodeIndexedAccess($1, $3); + } } - ; - -expansion: - '.' T_STRING %prec REFERENCE { - // named variable access, continuation from * expansion, e.g. [*].variable.reference - auto node = static_cast(parser->popStack()); - $$ = parser->ast()->createNodeAttributeAccess(node, $2); - } - | '.' bind_parameter %prec REFERENCE { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.@reference - auto node = static_cast(parser->popStack()); - $$ = parser->ast()->createNodeBoundAttributeAccess(node, $2); - } - | T_ARRAY_OPEN expression T_ARRAY_CLOSE %prec INDEXED { - // indexed variable access, continuation from * expansion, e.g. [*].variable[index] - auto node = static_cast(parser->popStack()); - $$ = parser->ast()->createNodeIndexedAccess(node, $2); - } - | expansion '.' T_STRING %prec REFERENCE { - // named variable access, continuation from * expansion, e.g. [*].variable.xx.reference - $$ = parser->ast()->createNodeAttributeAccess($1, $3); - } - | expansion '.' bind_parameter %prec REFERENCE { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.xx.@reference - $$ = parser->ast()->createNodeBoundAttributeAccess($1, $3); - } - | expansion T_ARRAY_OPEN expression T_ARRAY_CLOSE %prec INDEXED { - // indexed variable access, continuation from * expansion, e.g. [*].variable.xx.[index] - $$ = parser->ast()->createNodeIndexedAccess($1, $3); + | reference T_ARRAY_OPEN T_TIMES T_ARRAY_CLOSE %prec EXPANSION { + // variable expansion, e.g. variable[*] + // create a temporary iterator variable + std::string const nextName = parser->ast()->variables()->nextName() + "_"; + char const* iteratorName = nextName.c_str(); + auto iterator = parser->ast()->createNodeIterator(iteratorName, $1); + $$ = parser->ast()->createNodeExpansion(iterator, parser->ast()->createNodeReference(iteratorName)); } ; diff --git a/arangod/Aql/tokens.cpp b/arangod/Aql/tokens.cpp index fb5c83b9e6..ab10970b10 100644 --- a/arangod/Aql/tokens.cpp +++ b/arangod/Aql/tokens.cpp @@ -381,8 +381,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 81 -#define YY_END_OF_BUFFER 82 +#define YY_NUM_RULES 80 +#define YY_END_OF_BUFFER 81 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -390,28 +390,28 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[191] = +static yyconst flex_int16_t yy_accept[189] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 82, 80, 70, 71, 31, 57, 80, 38, - 80, 62, 45, 46, 36, 34, 44, 35, 80, 37, - 67, 67, 41, 29, 30, 27, 39, 80, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 49, 50, 80, 52, 47, 80, 48, 56, - 55, 56, 53, 66, 65, 63, 66, 61, 60, 58, - 61, 74, 73, 77, 79, 78, 70, 25, 51, 32, - 43, 75, 72, 0, 0, 67, 40, 28, 24, 26, - 69, 0, 0, 51, 51, 51, 51, 51, 51, 51, + 0, 0, 81, 79, 69, 70, 31, 56, 79, 38, + 79, 61, 44, 45, 36, 34, 43, 35, 79, 37, + 66, 66, 41, 29, 30, 27, 39, 79, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 48, 49, 79, 51, 46, 79, 47, 55, + 54, 55, 52, 65, 64, 62, 65, 60, 59, 57, + 60, 73, 72, 76, 78, 77, 69, 25, 50, 32, + 42, 74, 71, 0, 0, 66, 40, 28, 24, 26, + 68, 0, 0, 50, 50, 50, 50, 50, 50, 50, - 51, 13, 51, 51, 51, 51, 12, 51, 51, 51, - 51, 51, 0, 51, 0, 33, 54, 64, 59, 74, - 77, 76, 68, 0, 68, 69, 69, 11, 8, 51, - 51, 51, 51, 1, 51, 51, 2, 51, 10, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 42, 51, - 51, 69, 69, 51, 9, 51, 51, 51, 14, 51, - 21, 51, 51, 51, 6, 22, 51, 51, 15, 51, - 23, 51, 51, 7, 51, 51, 51, 51, 51, 51, - 3, 17, 16, 51, 4, 18, 20, 5, 19, 0 + 50, 13, 50, 50, 50, 50, 12, 50, 50, 50, + 50, 50, 50, 0, 33, 53, 63, 58, 73, 76, + 75, 67, 0, 67, 68, 68, 11, 8, 50, 50, + 50, 50, 1, 50, 50, 2, 50, 10, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 68, + 68, 50, 9, 50, 50, 50, 14, 50, 21, 50, + 50, 50, 6, 22, 50, 50, 15, 50, 23, 50, + 50, 7, 50, 50, 50, 50, 50, 50, 3, 17, + 16, 50, 4, 18, 20, 5, 19, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -457,58 +457,58 @@ static yyconst flex_int32_t yy_meta[71] = 6, 6, 6, 6, 6, 6, 6, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[211] = +static yyconst flex_int16_t yy_base[209] = { 0, - 0, 0, 68, 69, 70, 73, 75, 78, 377, 373, - 72, 74, 370, 399, 367, 399, 340, 399, 0, 399, - 347, 399, 399, 399, 399, 399, 399, 399, 332, 73, - 58, 73, 321, 313, 271, 267, 399, 62, 64, 0, + 0, 0, 68, 69, 70, 73, 75, 78, 367, 366, + 72, 74, 362, 399, 353, 399, 326, 399, 0, 399, + 333, 399, 399, 399, 399, 399, 399, 399, 319, 73, + 58, 73, 273, 267, 261, 260, 399, 62, 64, 0, 60, 69, 75, 69, 76, 96, 68, 83, 97, 98, - 101, 107, 271, 399, 234, 399, 399, 211, 399, 399, + 101, 107, 399, 399, 232, 399, 399, 209, 399, 399, 399, 0, 399, 399, 399, 399, 0, 399, 399, 399, - 0, 0, 399, 0, 399, 261, 275, 399, 0, 399, + 0, 0, 399, 0, 399, 260, 272, 399, 0, 399, 399, 399, 399, 75, 128, 134, 399, 399, 399, 399, - 0, 117, 226, 0, 115, 117, 114, 109, 117, 120, + 0, 117, 225, 0, 115, 117, 114, 109, 117, 120, 116, 118, 125, 134, 129, 139, 0, 145, 136, 134, - 150, 143, 226, 176, 188, 399, 399, 399, 399, 0, - 0, 399, 182, 77, 186, 0, 178, 0, 0, 151, - 160, 151, 156, 0, 180, 178, 0, 183, 0, 183, - 181, 185, 179, 181, 193, 199, 197, 196, 399, 0, - 211, 54, 0, 201, 0, 202, 204, 198, 0, 202, - 0, 204, 222, 213, 0, 0, 212, 217, 0, 230, - 0, 222, 221, 0, 233, 236, 229, 237, 227, 228, - 0, 0, 0, 241, 0, 0, 0, 0, 0, 399, - 294, 301, 308, 315, 322, 92, 326, 330, 332, 339, + 150, 143, 176, 188, 399, 399, 399, 399, 0, 0, + 399, 182, 77, 186, 0, 178, 0, 0, 151, 160, + 151, 156, 0, 180, 178, 0, 183, 0, 183, 181, + 185, 179, 181, 193, 199, 197, 196, 0, 211, 54, + 0, 201, 0, 202, 204, 198, 0, 202, 0, 204, + 222, 213, 0, 0, 212, 217, 0, 230, 0, 222, + 221, 0, 233, 236, 229, 237, 227, 228, 0, 0, + 0, 241, 0, 0, 0, 0, 0, 399, 294, 301, + 308, 315, 322, 92, 326, 330, 332, 339, 346, 353, - 346, 353, 360, 367, 371, 375, 379, 383, 387, 391 + 360, 367, 371, 375, 379, 383, 387, 391 } ; -static yyconst flex_int16_t yy_def[211] = +static yyconst flex_int16_t yy_def[209] = { 0, - 190, 1, 191, 191, 192, 192, 193, 193, 194, 194, - 195, 195, 190, 190, 190, 190, 190, 190, 196, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 197, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 190, 190, 199, 190, 190, 190, 190, 190, - 190, 200, 190, 190, 190, 190, 201, 190, 190, 190, - 202, 203, 190, 204, 190, 190, 190, 190, 198, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 205, 197, 206, 198, 198, 198, 198, 198, 198, 198, + 188, 1, 189, 189, 190, 190, 191, 191, 192, 192, + 193, 193, 188, 188, 188, 188, 188, 188, 194, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 195, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 188, 188, 197, 188, 188, 188, 188, 188, + 188, 198, 188, 188, 188, 188, 199, 188, 188, 188, + 200, 201, 188, 202, 188, 188, 188, 188, 196, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 203, 195, 204, 196, 196, 196, 196, 196, 196, 196, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 190, 207, 199, 190, 190, 190, 190, 203, - 204, 190, 190, 190, 190, 205, 208, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 190, 209, - 207, 208, 210, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 0, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 205, 197, 188, 188, 188, 188, 201, 202, + 188, 188, 188, 188, 203, 206, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 207, 205, 206, + 208, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, + 196, 196, 196, 196, 196, 196, 196, 0, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190 + 188, 188, 188, 188, 188, 188, 188, 188 } ; static yyconst flex_int16_t yy_nxt[470] = @@ -522,48 +522,48 @@ static yyconst flex_int16_t yy_nxt[470] = 40, 48, 49, 50, 51, 40, 52, 57, 58, 59, 61, 61, 65, 84, 75, 65, 75, 69, 66, 70, 69, 66, 70, 76, 82, 76, 92, 85, 84, 83, - 86, 86, 123, 123, 125, 125, 97, 79, 98, 95, + 86, 86, 122, 122, 124, 124, 97, 79, 98, 95, - 99, 153, 85, 96, 102, 103, 107, 100, 104, 93, + 99, 151, 85, 96, 102, 103, 107, 100, 104, 93, 85, 101, 108, 62, 62, 67, 63, 63, 67, 97, 71, 98, 95, 71, 99, 85, 96, 102, 103, 107, 100, 104, 105, 109, 101, 108, 110, 106, 111, 112, - 124, 190, 124, 128, 129, 125, 125, 130, 131, 84, - 132, 86, 86, 133, 134, 105, 109, 135, 136, 110, - 106, 111, 112, 85, 93, 137, 128, 129, 138, 139, - 130, 131, 140, 132, 144, 145, 133, 134, 146, 141, - 135, 136, 142, 148, 154, 143, 85, 155, 137, 147, - 156, 138, 139, 150, 150, 140, 157, 144, 145, 123, + 123, 188, 123, 127, 128, 124, 124, 129, 130, 84, + 131, 86, 86, 132, 133, 105, 109, 134, 135, 110, + 106, 111, 112, 85, 93, 136, 127, 128, 137, 138, + 129, 130, 139, 131, 143, 144, 132, 133, 145, 140, + 134, 135, 141, 147, 152, 142, 85, 153, 136, 146, + 154, 137, 138, 148, 148, 139, 155, 143, 144, 122, - 123, 146, 141, 125, 125, 142, 148, 154, 143, 158, - 155, 85, 147, 156, 159, 160, 161, 162, 163, 157, - 164, 165, 166, 150, 167, 153, 168, 169, 150, 150, - 170, 171, 158, 172, 85, 115, 173, 159, 160, 161, - 162, 163, 174, 164, 165, 166, 175, 176, 167, 168, - 169, 177, 178, 170, 171, 179, 172, 180, 150, 173, - 181, 182, 183, 184, 185, 174, 186, 187, 188, 175, - 189, 176, 149, 93, 177, 178, 77, 122, 179, 116, - 180, 115, 113, 181, 182, 183, 184, 185, 90, 186, - 187, 188, 89, 189, 60, 60, 60, 60, 60, 60, + 122, 145, 140, 124, 124, 141, 147, 152, 142, 156, + 153, 85, 146, 154, 157, 158, 159, 160, 161, 155, + 162, 163, 164, 148, 165, 151, 166, 167, 148, 148, + 168, 169, 156, 170, 85, 114, 171, 157, 158, 159, + 160, 161, 172, 162, 163, 164, 173, 174, 165, 166, + 167, 175, 176, 168, 169, 177, 170, 178, 148, 171, + 179, 180, 181, 182, 183, 172, 184, 185, 186, 173, + 187, 174, 93, 77, 175, 176, 121, 115, 177, 114, + 178, 90, 89, 179, 180, 181, 182, 183, 88, 184, + 185, 186, 87, 187, 60, 60, 60, 60, 60, 60, 60, 64, 64, 64, 64, 64, 64, 64, 68, 68, 68, 68, 68, 68, 68, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 91, - 91, 91, 91, 94, 88, 94, 94, 114, 114, 117, - 87, 117, 117, 117, 117, 117, 118, 81, 118, 118, - 118, 118, 118, 119, 80, 119, 119, 119, 119, 119, - 120, 78, 120, 120, 120, 120, 120, 121, 77, 190, - 121, 121, 121, 121, 126, 73, 126, 126, 127, 73, - 127, 127, 151, 190, 151, 151, 152, 190, 152, 152, - 150, 190, 150, 150, 153, 190, 153, 153, 13, 190, + 91, 91, 91, 94, 81, 94, 94, 113, 113, 116, + 80, 116, 116, 116, 116, 116, 117, 78, 117, 117, + 117, 117, 117, 118, 77, 118, 118, 118, 118, 118, + 119, 188, 119, 119, 119, 119, 119, 120, 73, 73, + 120, 120, 120, 120, 125, 188, 125, 125, 126, 188, + 126, 126, 149, 188, 149, 149, 150, 188, 150, 150, + 148, 188, 148, 148, 151, 188, 151, 151, 13, 188, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190 + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188 } ; static yyconst flex_int16_t yy_chk[470] = @@ -577,9 +577,9 @@ static yyconst flex_int16_t yy_chk[470] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, 31, 11, 6, 12, 7, 5, 7, 8, 6, 8, 11, 30, 12, 38, 31, 32, 30, - 32, 32, 84, 84, 124, 124, 41, 196, 42, 39, + 32, 32, 84, 84, 123, 123, 41, 194, 42, 39, - 43, 152, 32, 39, 44, 45, 47, 43, 45, 38, + 43, 150, 32, 39, 44, 45, 47, 43, 45, 38, 31, 43, 48, 3, 4, 5, 3, 4, 6, 41, 7, 42, 39, 8, 43, 32, 39, 44, 45, 47, 43, 45, 46, 49, 43, 48, 50, 46, 51, 52, @@ -587,48 +587,48 @@ static yyconst flex_int16_t yy_chk[470] = 99, 86, 86, 100, 101, 46, 49, 102, 102, 50, 46, 51, 52, 86, 92, 103, 95, 96, 104, 105, 97, 98, 106, 99, 109, 110, 100, 101, 111, 108, - 102, 102, 108, 112, 130, 108, 86, 131, 103, 111, - 132, 104, 105, 114, 114, 106, 133, 109, 110, 123, + 102, 102, 108, 112, 129, 108, 86, 130, 103, 111, + 131, 104, 105, 113, 113, 106, 132, 109, 110, 122, - 123, 111, 108, 125, 125, 108, 112, 130, 108, 135, - 131, 123, 111, 132, 136, 138, 140, 141, 142, 133, - 143, 144, 145, 114, 146, 127, 147, 148, 151, 151, - 154, 156, 135, 157, 123, 115, 158, 136, 138, 140, - 141, 142, 160, 143, 144, 145, 162, 163, 146, 147, - 148, 164, 167, 154, 156, 168, 157, 170, 151, 158, - 172, 173, 175, 176, 177, 160, 178, 179, 180, 162, - 184, 163, 113, 93, 164, 167, 77, 76, 168, 58, - 170, 55, 53, 172, 173, 175, 176, 177, 36, 178, - 179, 180, 35, 184, 191, 191, 191, 191, 191, 191, + 122, 111, 108, 124, 124, 108, 112, 129, 108, 134, + 130, 122, 111, 131, 135, 137, 139, 140, 141, 132, + 142, 143, 144, 113, 145, 126, 146, 147, 149, 149, + 152, 154, 134, 155, 122, 114, 156, 135, 137, 139, + 140, 141, 158, 142, 143, 144, 160, 161, 145, 146, + 147, 162, 165, 152, 154, 166, 155, 168, 149, 156, + 170, 171, 173, 174, 175, 158, 176, 177, 178, 160, + 182, 161, 93, 77, 162, 165, 76, 58, 166, 55, + 168, 36, 35, 170, 171, 173, 174, 175, 34, 176, + 177, 178, 33, 182, 189, 189, 189, 189, 189, 189, - 191, 192, 192, 192, 192, 192, 192, 192, 193, 193, - 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, - 194, 194, 195, 195, 195, 195, 195, 195, 195, 197, - 197, 197, 197, 198, 34, 198, 198, 199, 199, 200, - 33, 200, 200, 200, 200, 200, 201, 29, 201, 201, - 201, 201, 201, 202, 21, 202, 202, 202, 202, 202, - 203, 17, 203, 203, 203, 203, 203, 204, 15, 13, - 204, 204, 204, 204, 205, 10, 205, 205, 206, 9, - 206, 206, 207, 0, 207, 207, 208, 0, 208, 208, - 209, 0, 209, 209, 210, 0, 210, 210, 190, 190, + 189, 190, 190, 190, 190, 190, 190, 190, 191, 191, + 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, + 192, 192, 193, 193, 193, 193, 193, 193, 193, 195, + 195, 195, 195, 196, 29, 196, 196, 197, 197, 198, + 21, 198, 198, 198, 198, 198, 199, 17, 199, 199, + 199, 199, 199, 200, 15, 200, 200, 200, 200, 200, + 201, 13, 201, 201, 201, 201, 201, 202, 10, 9, + 202, 202, 202, 202, 203, 0, 203, 203, 204, 0, + 204, 204, 205, 0, 205, 205, 206, 0, 206, 206, + 207, 0, 207, 207, 208, 0, 208, 208, 188, 188, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190 + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188 } ; /* Table of booleans, true if rule could match eol. */ -static yyconst flex_int32_t yy_rule_can_match_eol[82] = +static yyconst flex_int32_t yy_rule_can_match_eol[81] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, - 0, 0, }; + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, + 0, }; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. @@ -987,13 +987,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 191 ) + if ( yy_current_state >= 189 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 190 ); + while ( yy_current_state != 188 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1279,12 +1279,6 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -{ - return T_EXPAND; -} - YY_BREAK -case 43: -YY_RULE_SETUP { return T_RANGE; } @@ -1292,43 +1286,43 @@ YY_RULE_SETUP /* --------------------------------------------------------------------------- * punctuation * --------------------------------------------------------------------------- */ -case 44: +case 43: YY_RULE_SETUP { return T_COMMA; } YY_BREAK -case 45: +case 44: YY_RULE_SETUP { return T_OPEN; } YY_BREAK -case 46: +case 45: YY_RULE_SETUP { return T_CLOSE; } YY_BREAK -case 47: +case 46: YY_RULE_SETUP { return T_OBJECT_OPEN; } YY_BREAK -case 48: +case 47: YY_RULE_SETUP { return T_OBJECT_CLOSE; } YY_BREAK -case 49: +case 48: YY_RULE_SETUP { return T_ARRAY_OPEN; } YY_BREAK -case 50: +case 49: YY_RULE_SETUP { return T_ARRAY_CLOSE; @@ -1337,7 +1331,7 @@ YY_RULE_SETUP /* --------------------------------------------------------------------------- * literals * --------------------------------------------------------------------------- */ -case 51: +case 50: YY_RULE_SETUP { /* unquoted string */ @@ -1345,7 +1339,7 @@ YY_RULE_SETUP return T_STRING; } YY_BREAK -case 52: +case 51: YY_RULE_SETUP { /* string enclosed in backticks */ @@ -1353,7 +1347,7 @@ YY_RULE_SETUP BEGIN(BACKTICK); } YY_BREAK -case 53: +case 52: YY_RULE_SETUP { /* end of backtick-enclosed string */ @@ -1362,36 +1356,36 @@ YY_RULE_SETUP return T_STRING; } YY_BREAK -case 54: +case 53: YY_RULE_SETUP { /* character escaped by backslash */ BEGIN(BACKTICK); } YY_BREAK -case 55: -/* rule 55 can match eol */ +case 54: +/* rule 54 can match eol */ YY_RULE_SETUP { /* newline character inside backtick */ BEGIN(BACKTICK); } YY_BREAK -case 56: +case 55: YY_RULE_SETUP { /* any character (except newline) inside backtick */ BEGIN(BACKTICK); } YY_BREAK -case 57: +case 56: YY_RULE_SETUP { yyextra->marker(yyextra->queryString() + yyextra->offset()); BEGIN(DOUBLE_QUOTE); } YY_BREAK -case 58: +case 57: YY_RULE_SETUP { /* end of quote-enclosed string */ @@ -1400,36 +1394,36 @@ YY_RULE_SETUP return T_QUOTED_STRING; } YY_BREAK -case 59: +case 58: YY_RULE_SETUP { /* character escaped by backslash */ BEGIN(DOUBLE_QUOTE); } YY_BREAK -case 60: -/* rule 60 can match eol */ +case 59: +/* rule 59 can match eol */ YY_RULE_SETUP { /* newline character inside quote */ BEGIN(DOUBLE_QUOTE); } YY_BREAK +case 60: +YY_RULE_SETUP +{ + /* any character (except newline) inside quote */ + BEGIN(DOUBLE_QUOTE); +} + YY_BREAK case 61: YY_RULE_SETUP -{ - /* any character (except newline) inside quote */ - BEGIN(DOUBLE_QUOTE); -} - YY_BREAK -case 62: -YY_RULE_SETUP { yyextra->marker(yyextra->queryString() + yyextra->offset()); BEGIN(SINGLE_QUOTE); } YY_BREAK -case 63: +case 62: YY_RULE_SETUP { /* end of quote-enclosed string */ @@ -1438,29 +1432,29 @@ YY_RULE_SETUP return T_QUOTED_STRING; } YY_BREAK -case 64: +case 63: YY_RULE_SETUP { /* character escaped by backslash */ BEGIN(SINGLE_QUOTE); } YY_BREAK -case 65: -/* rule 65 can match eol */ +case 64: +/* rule 64 can match eol */ YY_RULE_SETUP { /* newline character inside quote */ BEGIN(SINGLE_QUOTE); } YY_BREAK -case 66: +case 65: YY_RULE_SETUP { /* any character (except newline) inside quote */ BEGIN(SINGLE_QUOTE); } YY_BREAK -case 67: +case 66: YY_RULE_SETUP { /* a numeric integer value */ @@ -1487,7 +1481,7 @@ YY_RULE_SETUP return T_INTEGER; } YY_BREAK -case 68: +case 67: YY_RULE_SETUP { /* a numeric double value */ @@ -1512,7 +1506,7 @@ YY_RULE_SETUP /* --------------------------------------------------------------------------- * bind parameters * --------------------------------------------------------------------------- */ -case 69: +case 68: YY_RULE_SETUP { /* bind parameters must start with a @ @@ -1524,78 +1518,78 @@ YY_RULE_SETUP /* --------------------------------------------------------------------------- * whitespace etc. * --------------------------------------------------------------------------- */ -case 70: +case 69: YY_RULE_SETUP { /* whitespace is ignored */ } YY_BREAK -case 71: -/* rule 71 can match eol */ +case 70: +/* rule 70 can match eol */ YY_RULE_SETUP { yycolumn = 0; } YY_BREAK -case 72: +case 71: YY_RULE_SETUP { BEGIN(COMMENT_SINGLE); } YY_BREAK -case 73: -/* rule 73 can match eol */ +case 72: +/* rule 72 can match eol */ YY_RULE_SETUP { yylineno++; BEGIN(INITIAL); } YY_BREAK -case 74: +case 73: YY_RULE_SETUP { // eat comment in chunks } YY_BREAK -case 75: +case 74: YY_RULE_SETUP { BEGIN(COMMENT_MULTI); } YY_BREAK -case 76: +case 75: YY_RULE_SETUP { BEGIN(INITIAL); } YY_BREAK -case 77: +case 76: YY_RULE_SETUP { // eat comment in chunks } YY_BREAK -case 78: +case 77: YY_RULE_SETUP { // eat the lone star } YY_BREAK -case 79: -/* rule 79 can match eol */ +case 78: +/* rule 78 can match eol */ YY_RULE_SETUP { yylineno++; } YY_BREAK -case 80: +case 79: YY_RULE_SETUP { /* anything else is returned as it is */ return (int) yytext[0]; } YY_BREAK -case 81: +case 80: YY_RULE_SETUP ECHO; YY_BREAK @@ -1899,7 +1893,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 191 ) + if ( yy_current_state >= 189 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1928,11 +1922,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 191 ) + if ( yy_current_state >= 189 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 190); + yy_is_jam = (yy_current_state == 188); (void)yyg; return yy_is_jam ? 0 : yy_current_state; diff --git a/arangod/Aql/tokens.ll b/arangod/Aql/tokens.ll index 09a7031bba..025d635e56 100644 --- a/arangod/Aql/tokens.ll +++ b/arangod/Aql/tokens.ll @@ -233,10 +233,6 @@ namespace triagens { return T_COLON; } -"[*]" { - return T_EXPAND; -} - ".." { return T_RANGE; } diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/modules/org/arangodb/aql/explainer.js b/js/apps/system/_admin/aardvark/APP/frontend/js/modules/org/arangodb/aql/explainer.js index 0eda5c5045..bf650c2fc1 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/js/modules/org/arangodb/aql/explainer.js +++ b/js/apps/system/_admin/aardvark/APP/frontend/js/modules/org/arangodb/aql/explainer.js @@ -347,8 +347,11 @@ function processQuery (query, explain) { case "range": return buildExpression(node.subNodes[0]) + " .. " + buildExpression(node.subNodes[1]) + " " + annotation("/* range */"); case "expand": + case "expansion": references[node.subNodes[0].subNodes[0].name] = node.subNodes[0].subNodes[1]; return buildExpression(node.subNodes[1]); + case "verticalizer": + return buildExpression(node.subNodes[0]); case "user function call": return func(node.name) + "(" + ((node.subNodes && node.subNodes[0].subNodes) || [ ]).map(buildExpression).join(", ") + ")" + " " + annotation("/* user-defined function */"); case "function call": diff --git a/js/common/modules/org/arangodb/aql/explainer.js b/js/common/modules/org/arangodb/aql/explainer.js index 8101ebf182..2669c316af 100644 --- a/js/common/modules/org/arangodb/aql/explainer.js +++ b/js/common/modules/org/arangodb/aql/explainer.js @@ -346,8 +346,11 @@ function processQuery (query, explain) { case "range": return buildExpression(node.subNodes[0]) + " .. " + buildExpression(node.subNodes[1]) + " " + annotation("/* range */"); case "expand": + case "expansion": references[node.subNodes[0].subNodes[0].name] = node.subNodes[0].subNodes[1]; return buildExpression(node.subNodes[1]); + case "verticalizer": + return buildExpression(node.subNodes[0]); case "user function call": return func(node.name) + "(" + ((node.subNodes && node.subNodes[0].subNodes) || [ ]).map(buildExpression).join(", ") + ")" + " " + annotation("/* user-defined function */"); case "function call": diff --git a/lib/Basics/StringBuffer.h b/lib/Basics/StringBuffer.h index ad69a7a65f..dadb623db9 100644 --- a/lib/Basics/StringBuffer.h +++ b/lib/Basics/StringBuffer.h @@ -492,7 +492,7 @@ namespace triagens { /// @brief appends as json-encoded //////////////////////////////////////////////////////////////////////////////// - StringBuffer& appendJsonEncoded (const char * str) { + StringBuffer& appendJsonEncoded (char const* str) { TRI_AppendJsonEncodedStringStringBuffer(&_buffer, str, true); return *this; } @@ -501,7 +501,7 @@ namespace triagens { /// @brief appends characters //////////////////////////////////////////////////////////////////////////////// - StringBuffer& appendText (const char * str, size_t len) { + StringBuffer& appendText (char const* str, size_t len) { TRI_AppendString2StringBuffer(&_buffer, str, len); return *this; } @@ -510,8 +510,8 @@ namespace triagens { /// @brief appends characters //////////////////////////////////////////////////////////////////////////////// - StringBuffer& appendText (const char * str) { - TRI_AppendStringStringBuffer(&_buffer, str); + StringBuffer& appendText (char const* str) { + TRI_AppendString2StringBuffer(&_buffer, str, strlen(str)); return *this; }