From 2cdcd24a593244806d6eeddbbf827d84ada877c5 Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Wed, 21 May 2014 08:58:49 +0200 Subject: [PATCH] First step to move ahuacatl to C++ --- ...imiser.c => ahuacatl-access-optimiser.cpp} | 0 ...acatl-ast-node.c => ahuacatl-ast-node.cpp} | 0 ...arameter.c => ahuacatl-bind-parameter.cpp} | 0 ...huacatl-codegen.c => ahuacatl-codegen.cpp} | 0 ...collections.c => ahuacatl-collections.cpp} | 0 ...huacatl-context.c => ahuacatl-context.cpp} | 0 ...conversions.c => ahuacatl-conversions.cpp} | 0 .../{ahuacatl-error.c => ahuacatl-error.cpp} | 0 ...huacatl-explain.c => ahuacatl-explain.cpp} | 0 ...atl-functions.c => ahuacatl-functions.cpp} | 0 arangod/Ahuacatl/ahuacatl-grammar.c | 3215 ----------------- arangod/Ahuacatl/ahuacatl-grammar.cpp | 2480 +++++++++++++ ...ahuacatl-grammar.y => ahuacatl-grammar.yy} | 0 .../{ahuacatl-index.c => ahuacatl-index.cpp} | 0 .../{ahuacatl-node.c => ahuacatl-node.cpp} | 0 ...atl-optimiser.c => ahuacatl-optimiser.cpp} | 0 ...ctions.c => ahuacatl-parser-functions.cpp} | 0 ...{ahuacatl-parser.c => ahuacatl-parser.cpp} | 0 ...{ahuacatl-result.c => ahuacatl-result.cpp} | 0 .../{ahuacatl-scope.c => ahuacatl-scope.cpp} | 0 ...ent-dump.c => ahuacatl-statement-dump.cpp} | 0 ...walker.c => ahuacatl-statement-walker.cpp} | 0 ...ementlist.c => ahuacatl-statementlist.cpp} | 0 ...{ahuacatl-tokens.c => ahuacatl-tokens.cpp} | 100 +- .../{ahuacatl-tokens.l => ahuacatl-tokens.ll} | 0 ...acatl-variable.c => ahuacatl-variable.cpp} | 0 arangod/Makefile.files | 56 +- 27 files changed, 2566 insertions(+), 3285 deletions(-) rename arangod/Ahuacatl/{ahuacatl-access-optimiser.c => ahuacatl-access-optimiser.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-ast-node.c => ahuacatl-ast-node.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-bind-parameter.c => ahuacatl-bind-parameter.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-codegen.c => ahuacatl-codegen.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-collections.c => ahuacatl-collections.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-context.c => ahuacatl-context.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-conversions.c => ahuacatl-conversions.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-error.c => ahuacatl-error.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-explain.c => ahuacatl-explain.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-functions.c => ahuacatl-functions.cpp} (100%) delete mode 100644 arangod/Ahuacatl/ahuacatl-grammar.c create mode 100644 arangod/Ahuacatl/ahuacatl-grammar.cpp rename arangod/Ahuacatl/{ahuacatl-grammar.y => ahuacatl-grammar.yy} (100%) rename arangod/Ahuacatl/{ahuacatl-index.c => ahuacatl-index.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-node.c => ahuacatl-node.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-optimiser.c => ahuacatl-optimiser.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-parser-functions.c => ahuacatl-parser-functions.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-parser.c => ahuacatl-parser.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-result.c => ahuacatl-result.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-scope.c => ahuacatl-scope.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-statement-dump.c => ahuacatl-statement-dump.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-statement-walker.c => ahuacatl-statement-walker.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-statementlist.c => ahuacatl-statementlist.cpp} (100%) rename arangod/Ahuacatl/{ahuacatl-tokens.c => ahuacatl-tokens.cpp} (97%) rename arangod/Ahuacatl/{ahuacatl-tokens.l => ahuacatl-tokens.ll} (100%) rename arangod/Ahuacatl/{ahuacatl-variable.c => ahuacatl-variable.cpp} (100%) diff --git a/arangod/Ahuacatl/ahuacatl-access-optimiser.c b/arangod/Ahuacatl/ahuacatl-access-optimiser.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-access-optimiser.c rename to arangod/Ahuacatl/ahuacatl-access-optimiser.cpp diff --git a/arangod/Ahuacatl/ahuacatl-ast-node.c b/arangod/Ahuacatl/ahuacatl-ast-node.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-ast-node.c rename to arangod/Ahuacatl/ahuacatl-ast-node.cpp diff --git a/arangod/Ahuacatl/ahuacatl-bind-parameter.c b/arangod/Ahuacatl/ahuacatl-bind-parameter.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-bind-parameter.c rename to arangod/Ahuacatl/ahuacatl-bind-parameter.cpp diff --git a/arangod/Ahuacatl/ahuacatl-codegen.c b/arangod/Ahuacatl/ahuacatl-codegen.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-codegen.c rename to arangod/Ahuacatl/ahuacatl-codegen.cpp diff --git a/arangod/Ahuacatl/ahuacatl-collections.c b/arangod/Ahuacatl/ahuacatl-collections.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-collections.c rename to arangod/Ahuacatl/ahuacatl-collections.cpp diff --git a/arangod/Ahuacatl/ahuacatl-context.c b/arangod/Ahuacatl/ahuacatl-context.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-context.c rename to arangod/Ahuacatl/ahuacatl-context.cpp diff --git a/arangod/Ahuacatl/ahuacatl-conversions.c b/arangod/Ahuacatl/ahuacatl-conversions.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-conversions.c rename to arangod/Ahuacatl/ahuacatl-conversions.cpp diff --git a/arangod/Ahuacatl/ahuacatl-error.c b/arangod/Ahuacatl/ahuacatl-error.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-error.c rename to arangod/Ahuacatl/ahuacatl-error.cpp diff --git a/arangod/Ahuacatl/ahuacatl-explain.c b/arangod/Ahuacatl/ahuacatl-explain.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-explain.c rename to arangod/Ahuacatl/ahuacatl-explain.cpp diff --git a/arangod/Ahuacatl/ahuacatl-functions.c b/arangod/Ahuacatl/ahuacatl-functions.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-functions.c rename to arangod/Ahuacatl/ahuacatl-functions.cpp diff --git a/arangod/Ahuacatl/ahuacatl-grammar.c b/arangod/Ahuacatl/ahuacatl-grammar.c deleted file mode 100644 index a1b0b0b5e0..0000000000 --- a/arangod/Ahuacatl/ahuacatl-grammar.c +++ /dev/null @@ -1,3215 +0,0 @@ -/* A Bison parser, made by GNU Bison 3.0.2. */ - -/* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. */ - -/* C LALR(1) parser skeleton written by Richard Stallman, by - simplifying the original so-called "semantic" parser. */ - -/* All symbols defined below should begin with yy or YY, to avoid - infringing on user name space. This should be done even for local - variables, as they might otherwise be expanded by user macros. - There are some unavoidable exceptions within include files to - define necessary library symbols; they are noted "INFRINGES ON - USER NAME SPACE" below. */ - -/* Identify Bison output. */ -#define YYBISON 1 - -/* Bison version. */ -#define YYBISON_VERSION "3.0.2" - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - - -/* Substitute the variable and function names. */ -#define yyparse Ahuacatlparse -#define yylex Ahuacatllex -#define yyerror Ahuacatlerror -#define yydebug Ahuacatldebug -#define yynerrs Ahuacatlnerrs - - -/* Copy the first part of user declarations. */ -#line 10 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:339 */ - -#include -#include - -#include -#include -#include - -#include "Ahuacatl/ahuacatl-ast-node.h" -#include "Ahuacatl/ahuacatl-context.h" -#include "Ahuacatl/ahuacatl-error.h" -#include "Ahuacatl/ahuacatl-parser.h" -#include "Ahuacatl/ahuacatl-parser-functions.h" -#include "Ahuacatl/ahuacatl-scope.h" - -#line 88 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:339 */ - -# ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 1 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "ahuacatl-grammar.h". */ -#ifndef YY_AHUACATL_ARANGOD_AHUACATL_AHUACATL_GRAMMAR_H_INCLUDED -# define YY_AHUACATL_ARANGOD_AHUACATL_AHUACATL_GRAMMAR_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 -#endif -#if YYDEBUG -extern int Ahuacatldebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - T_END = 0, - T_FOR = 258, - T_LET = 259, - T_FILTER = 260, - T_RETURN = 261, - T_COLLECT = 262, - T_SORT = 263, - T_LIMIT = 264, - T_ASC = 265, - T_DESC = 266, - T_IN = 267, - T_INTO = 268, - T_NULL = 269, - T_TRUE = 270, - T_FALSE = 271, - T_STRING = 272, - T_QUOTED_STRING = 273, - T_INTEGER = 274, - T_DOUBLE = 275, - T_PARAMETER = 276, - T_ASSIGN = 277, - T_NOT = 278, - T_AND = 279, - T_OR = 280, - T_EQ = 281, - T_NE = 282, - T_LT = 283, - T_GT = 284, - T_LE = 285, - T_GE = 286, - T_PLUS = 287, - T_MINUS = 288, - T_TIMES = 289, - T_DIV = 290, - T_MOD = 291, - T_EXPAND = 292, - T_QUESTION = 293, - T_COLON = 294, - T_SCOPE = 295, - T_RANGE = 296, - T_COMMA = 297, - T_OPEN = 298, - T_CLOSE = 299, - T_DOC_OPEN = 300, - T_DOC_CLOSE = 301, - T_LIST_OPEN = 302, - T_LIST_CLOSE = 303, - UMINUS = 304, - UPLUS = 305, - FUNCCALL = 306, - REFERENCE = 307, - INDEXED = 308 - }; -#endif - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE YYSTYPE; -union YYSTYPE -{ -#line 26 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:355 */ - - TRI_aql_node_t* node; - char* strval; - bool boolval; - int64_t intval; - -#line 190 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:355 */ -}; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - -/* Location type. */ -#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED -typedef struct YYLTYPE YYLTYPE; -struct YYLTYPE -{ - int first_line; - int first_column; - int last_line; - int last_column; -}; -# define YYLTYPE_IS_DECLARED 1 -# define YYLTYPE_IS_TRIVIAL 1 -#endif - - - -int Ahuacatlparse (TRI_aql_context_t* const context); - -#endif /* !YY_AHUACATL_ARANGOD_AHUACATL_AHUACATL_GRAMMAR_H_INCLUDED */ - -/* Copy the second part of user declarations. */ -#line 33 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:358 */ - - -//////////////////////////////////////////////////////////////////////////////// -/// @brief forward for lexer function defined in ahuacatl-tokens.l -//////////////////////////////////////////////////////////////////////////////// - -int Ahuacatllex (YYSTYPE*, YYLTYPE*, void*); - -//////////////////////////////////////////////////////////////////////////////// -/// @brief register parse error -//////////////////////////////////////////////////////////////////////////////// - -void Ahuacatlerror (YYLTYPE* locp, TRI_aql_context_t* const context, const char* err) { - TRI_SetErrorParseAql(context, err, locp->first_line, locp->first_column); -} - -//////////////////////////////////////////////////////////////////////////////// -/// @brief shortcut macro for signalling out of memory -//////////////////////////////////////////////////////////////////////////////// - -#define ABORT_OOM \ - TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_OUT_OF_MEMORY, NULL); \ - YYABORT; - -#define scanner context->_parser->_scanner - - -#line 245 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:358 */ - -#ifdef short -# undef short -#endif - -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; -#endif - -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; -#else -typedef signed char yytype_int8; -#endif - -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; -#else -typedef unsigned short int yytype_uint16; -#endif - -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; -#else -typedef short int yytype_int16; -#endif - -#ifndef YYSIZE_T -# ifdef __SIZE_TYPE__ -# define YYSIZE_T __SIZE_TYPE__ -# elif defined size_t -# define YYSIZE_T size_t -# elif ! defined YYSIZE_T -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# else -# define YYSIZE_T unsigned int -# endif -#endif - -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) -# endif -# endif -# ifndef YY_ -# define YY_(Msgid) Msgid -# endif -#endif - -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - - -#if ! defined yyoverflow || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# ifdef YYSTACK_USE_ALLOCA -# if YYSTACK_USE_ALLOCA -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR -# include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX -# define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER -# include /* INFRINGES ON USER NAME SPACE */ -# define alloca _alloca -# else -# define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS -# include /* INFRINGES ON USER NAME SPACE */ - /* Use EXIT_SUCCESS as a witness for stdlib.h. */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# ifndef YYSTACK_ALLOC_MAXIMUM - /* The OS might guarantee only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - invoke alloca (N) if N exceeds 4096. Use a slightly smaller number - to allow for a few compiler-allocated temporary stack slots. */ -# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ -# endif -# else -# define YYSTACK_ALLOC YYMALLOC -# define YYSTACK_FREE YYFREE -# ifndef YYSTACK_ALLOC_MAXIMUM -# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM -# endif -# if (defined __cplusplus && ! defined EXIT_SUCCESS \ - && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) -# include /* INFRINGES ON USER NAME SPACE */ -# ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -# endif -# endif -# ifndef YYMALLOC -# define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS -void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# ifndef YYFREE -# define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS -void free (void *); /* INFRINGES ON USER NAME SPACE */ -# endif -# endif -# endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - - -#if (! defined yyoverflow \ - && (! defined __cplusplus \ - || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ - && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - yytype_int16 yyss_alloc; - YYSTYPE yyvs_alloc; - YYLTYPE yyls_alloc; -}; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ - + 2 * YYSTACK_GAP_MAXIMUM) - -# define YYCOPY_NEEDED 1 - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined YYCOPY_NEEDED && YYCOPY_NEEDED -/* Copy COUNT objects from SRC to DST. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if defined __GNUC__ && 1 < __GNUC__ -# define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) -# else -# define YYCOPY(Dst, Src, Count) \ - do \ - { \ - YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (Dst)[yyi] = (Src)[yyi]; \ - } \ - while (0) -# endif -# endif -#endif /* !YYCOPY_NEEDED */ - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 3 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 380 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 55 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 52 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 113 -/* YYNSTATES -- Number of states. */ -#define YYNSTATES 176 - -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 308 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint8 yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53 -}; - -#if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 184, 184, 189, 191, 196, 198, 200, 202, 204, - 206, 211, 230, 243, 248, 250, 255, 269, 269, 290, - 292, 297, 310, 313, 319, 319, 341, 346, 354, 365, - 368, 371, 377, 388, 401, 421, 424, 424, 460, 463, - 466, 469, 472, 475, 478, 509, 516, 530, 530, 555, - 563, 571, 582, 590, 598, 606, 614, 622, 630, 638, - 646, 654, 662, 670, 678, 686, 697, 709, 711, 716, - 721, 729, 732, 738, 738, 751, 753, 758, 763, 771, - 771, 784, 786, 791, 793, 798, 806, 810, 810, 868, - 885, 892, 900, 908, 919, 929, 939, 949, 957, 965, - 976, 979, 985, 988, 1013, 1022, 1025, 1034, 1043, 1055, - 1067, 1074, 1083, 1089 -}; -#endif - -#if YYDEBUG || YYERROR_VERBOSE || 1 -/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "\"end of query string\"", "error", "$undefined", "\"FOR declaration\"", - "\"LET declaration\"", "\"FILTER declaration\"", - "\"RETURN declaration\"", "\"COLLECT declaration\"", - "\"SORT declaration\"", "\"LIMIT declaration\"", "\"ASC keyword\"", - "\"DESC keyword\"", "\"IN keyword\"", "\"INTO keyword\"", "\"null\"", - "\"true\"", "\"false\"", "\"identifier\"", "\"quoted string\"", - "\"integer number\"", "\"number\"", "\"bind parameter\"", - "\"assignment\"", "\"not operator\"", "\"and operator\"", - "\"or operator\"", "\"== operator\"", "\"!= operator\"", - "\"< operator\"", "\"> operator\"", "\"<= operator\"", "\">= operator\"", - "\"+ operator\"", "\"- operator\"", "\"* operator\"", "\"/ operator\"", - "\"% operator\"", "\"[*] operator\"", "\"?\"", "\":\"", "\"::\"", - "\"..\"", "\",\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", "\"]\"", - "UMINUS", "UPLUS", "FUNCCALL", "REFERENCE", "INDEXED", "'.'", "$accept", - "query", "optional_statement_block_statements", - "statement_block_statement", "for_statement", "filter_statement", - "let_statement", "let_list", "let_element", "collect_statement", "$@1", - "collect_list", "collect_element", "optional_into", "sort_statement", - "$@2", "sort_list", "sort_element", "sort_direction", "limit_statement", - "return_statement", "expression", "$@3", "function_name", - "function_call", "$@4", "operator_unary", "operator_binary", - "operator_ternary", "optional_function_call_arguments", - "function_arguments_list", "compound_type", "list", "$@5", - "optional_list_elements", "list_elements_list", "array", "$@6", - "optional_array_elements", "array_elements_list", "array_element", - "reference", "$@7", "single_reference", "expansion", "atomic_value", - "numeric_value", "value_literal", "bind_parameter", "array_element_name", - "variable_name", "integer_value", YY_NULLPTR -}; -#endif - -# ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 46 -}; -# endif - -#define YYPACT_NINF -75 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-75))) - -#define YYTABLE_NINF -88 - -#define yytable_value_is_error(Yytable_value) \ - 0 - - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int16 yypact[] = -{ - -75, 30, 119, -75, 32, 32, 174, 174, -75, -75, - 71, -75, -75, -75, -75, -75, -75, -75, -75, -75, - 35, 9, -75, 58, -75, -75, -75, 39, -75, -75, - -75, -75, 174, 174, 174, 174, -75, -75, 283, 43, - -75, -75, -75, -75, -75, -75, -75, 74, -34, -75, - -75, -75, -75, -75, 283, 32, 174, 67, 174, 32, - 174, -75, -75, -75, 198, -75, 76, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 95, 75, 82, 174, 1, 2, - -75, 110, 91, -75, 233, 71, 283, -75, 283, -75, - 73, -75, -75, 88, 93, -75, 97, 283, 89, 100, - -24, 344, 333, 319, 319, 24, 24, 24, 24, 80, - 80, -75, -75, -75, 258, 308, -75, 174, -31, 7, - -75, -75, 32, 32, -75, 174, 174, -75, -75, -75, - -75, -75, -75, 76, 174, -75, 174, 174, 283, 99, - 102, 174, 4, -30, -75, -75, -75, 283, -75, -75, - 283, 283, 308, -75, 174, 72, -75, -75, 174, 29, - 283, -75, 139, -75, -75, -75 -}; - - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ -static const yytype_uint8 yydefact[] = -{ - 3, 0, 0, 1, 0, 0, 0, 0, 17, 24, - 0, 4, 5, 7, 6, 8, 9, 10, 2, 112, - 0, 13, 14, 0, 106, 107, 108, 89, 104, 113, - 103, 109, 0, 0, 0, 36, 79, 73, 12, 47, - 90, 38, 39, 40, 41, 71, 72, 43, 86, 42, - 105, 100, 101, 102, 34, 0, 0, 32, 0, 0, - 0, 51, 49, 50, 0, 3, 81, 75, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, - 19, 0, 25, 26, 29, 0, 11, 15, 16, 35, - 0, 110, 111, 0, 82, 83, 0, 77, 0, 76, - 65, 53, 52, 59, 60, 61, 62, 63, 64, 54, - 55, 56, 57, 58, 0, 44, 46, 67, 0, 0, - 91, 92, 0, 0, 18, 0, 0, 30, 31, 28, - 33, 37, 80, 0, 0, 74, 0, 0, 69, 0, - 68, 0, 0, 88, 93, 23, 20, 21, 27, 84, - 85, 78, 66, 48, 0, 0, 94, 95, 0, 0, - 70, 96, 0, 97, 98, 99 -}; - - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = -{ - -75, 81, -75, -75, -75, -75, -75, -75, 90, -75, - -75, -75, 6, -75, -75, -75, -75, 11, -75, -75, - -75, -6, -75, -75, -75, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - 5, -75, -75, -75, -75, -7, -75, -75, -74, -75, - -2, -75 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ -static const yytype_int16 yydefgoto[] = -{ - -1, 1, 2, 11, 12, 13, 14, 21, 22, 15, - 55, 89, 90, 134, 16, 56, 92, 93, 139, 17, - 18, 94, 65, 39, 40, 85, 41, 42, 43, 149, - 150, 44, 45, 67, 108, 109, 46, 66, 103, 104, - 105, 47, 86, 48, 153, 49, 50, 51, 52, 106, - 23, 53 -}; - - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_int16 yytable[] = -{ - 38, 54, 20, 57, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 87, 131, 132, 151, 168, 130, 68, - 88, 166, 31, 152, 169, 31, 61, 62, 63, 64, - 3, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 133, 82, 173, 58, 83, 19, - 31, 59, 96, 91, 98, 154, 77, 78, 79, 80, - 81, 107, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 167, -45, - 60, 129, -45, 84, 68, 24, 25, 26, 140, 28, - 29, 30, 31, 101, 102, 174, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 95, - 82, -87, 126, 83, 79, 80, 81, 141, 127, 128, - 171, 148, 4, 5, 6, 7, 8, 9, 10, 157, - 155, 91, 135, 136, 142, 143, 144, 145, 160, 156, - 161, 162, 146, 163, 164, 165, 100, 158, 159, 97, - 0, 68, 0, 0, 0, 0, 0, 0, 170, 0, - 0, 0, 172, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 0, 82, 0, 0, - 83, 0, 0, 0, 0, 0, 0, 175, 24, 25, - 26, 27, 28, 29, 30, 31, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, - 68, 0, 0, 0, 0, 0, 0, 35, 0, 36, - 0, 37, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 0, 82, 0, 0, 83, - 0, 0, 99, 137, 138, 68, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 68, 82, 0, 0, 83, 0, 0, 0, 0, 0, - 0, 0, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 68, 82, 147, 0, 83, - 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 68, 82, 0, 0, 83, 0, 0, 0, 0, 0, - 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 68, 82, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 68, 69, 0, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81 -}; - -static const yytype_int16 yycheck[] = -{ - 6, 7, 4, 10, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 47, 88, 13, 47, 47, 17, 12, - 54, 17, 21, 54, 54, 21, 32, 33, 34, 35, - 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 42, 38, 17, 12, 41, 17, - 21, 42, 58, 55, 60, 48, 32, 33, 34, 35, - 36, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 152, 40, - 22, 87, 43, 40, 12, 14, 15, 16, 95, 18, - 19, 20, 21, 17, 18, 169, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 42, - 38, 37, 17, 41, 34, 35, 36, 44, 43, 37, - 48, 127, 3, 4, 5, 6, 7, 8, 9, 135, - 132, 133, 22, 42, 46, 42, 39, 48, 144, 133, - 146, 147, 42, 44, 42, 151, 65, 136, 143, 59, - -1, 12, -1, -1, -1, -1, -1, -1, 164, -1, - -1, -1, 168, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, -1, 38, -1, -1, - 41, -1, -1, -1, -1, -1, -1, 48, 14, 15, - 16, 17, 18, 19, 20, 21, -1, 23, -1, -1, - -1, -1, -1, -1, -1, -1, 32, 33, -1, -1, - 12, -1, -1, -1, -1, -1, -1, 43, -1, 45, - -1, 47, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, -1, 38, -1, -1, 41, - -1, -1, 44, 10, 11, 12, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 12, 38, -1, -1, 41, -1, -1, -1, -1, -1, - -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 12, 38, 39, -1, 41, - -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 12, 38, -1, -1, 41, -1, -1, -1, -1, -1, - -1, 12, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 12, 38, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 12, 24, -1, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint8 yystos[] = -{ - 0, 56, 57, 0, 3, 4, 5, 6, 7, 8, - 9, 58, 59, 60, 61, 64, 69, 74, 75, 17, - 105, 62, 63, 105, 14, 15, 16, 17, 18, 19, - 20, 21, 23, 32, 33, 43, 45, 47, 76, 78, - 79, 81, 82, 83, 86, 87, 91, 96, 98, 100, - 101, 102, 103, 106, 76, 65, 70, 100, 12, 42, - 22, 76, 76, 76, 76, 77, 92, 88, 12, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 38, 41, 40, 80, 97, 47, 54, 66, - 67, 105, 71, 72, 76, 42, 76, 63, 76, 44, - 56, 17, 18, 93, 94, 95, 104, 76, 89, 90, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 17, 43, 37, 76, - 17, 103, 13, 42, 68, 22, 42, 10, 11, 73, - 100, 44, 46, 42, 39, 48, 42, 39, 76, 84, - 85, 47, 54, 99, 48, 105, 67, 76, 72, 95, - 76, 76, 76, 44, 42, 76, 17, 103, 47, 54, - 76, 48, 76, 17, 103, 48 -}; - - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 55, 56, 57, 57, 58, 58, 58, 58, 58, - 58, 59, 60, 61, 62, 62, 63, 65, 64, 66, - 66, 67, 68, 68, 70, 69, 71, 71, 72, 73, - 73, 73, 74, 74, 75, 76, 77, 76, 76, 76, - 76, 76, 76, 76, 76, 78, 78, 80, 79, 81, - 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 83, 84, 84, 85, - 85, 86, 86, 88, 87, 89, 89, 90, 90, 92, - 91, 93, 93, 94, 94, 95, 96, 97, 96, 98, - 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, - 100, 100, 101, 101, 102, 102, 102, 102, 102, 103, - 104, 104, 105, 106 -}; - - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 2, 0, 2, 1, 1, 1, 1, 1, - 1, 4, 2, 2, 1, 3, 3, 0, 4, 1, - 3, 3, 0, 2, 0, 3, 1, 3, 2, 0, - 1, 1, 2, 4, 2, 3, 0, 4, 1, 1, - 1, 1, 1, 1, 3, 1, 3, 0, 5, 2, - 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 0, 1, 1, - 3, 1, 1, 0, 4, 0, 1, 1, 3, 0, - 4, 0, 1, 1, 3, 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 -}; - - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - - -#define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (&yylloc, context, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - - -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ - (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ - (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ - (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ - } \ - else \ - { \ - (Current).first_line = (Current).last_line = \ - YYRHSLOC (Rhs, 0).last_line; \ - (Current).first_column = (Current).last_column = \ - YYRHSLOC (Rhs, 0).last_column; \ - } \ - while (0) -#endif - -#define YYRHSLOC(Rhs, K) ((Rhs)[K]) - - -/* Enable debugging if requested. */ -#if YYDEBUG - -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - - -/* YY_LOCATION_PRINT -- Print the location on the stream. - This macro was not mandated originally: define only if we know - we won't break user code: when these are the locations we know. */ - -#ifndef YY_LOCATION_PRINT -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - -/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ - -YY_ATTRIBUTE_UNUSED -static unsigned -yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) -{ - unsigned res = 0; - int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; - if (0 <= yylocp->first_line) - { - res += YYFPRINTF (yyo, "%d", yylocp->first_line); - if (0 <= yylocp->first_column) - res += YYFPRINTF (yyo, ".%d", yylocp->first_column); - } - if (0 <= yylocp->last_line) - { - if (yylocp->first_line < yylocp->last_line) - { - res += YYFPRINTF (yyo, "-%d", yylocp->last_line); - if (0 <= end_col) - res += YYFPRINTF (yyo, ".%d", end_col); - } - else if (0 <= end_col && yylocp->first_column < end_col) - res += YYFPRINTF (yyo, "-%d", end_col); - } - return res; - } - -# define YY_LOCATION_PRINT(File, Loc) \ - yy_location_print_ (File, &(Loc)) - -# else -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -# endif -#endif - - -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value, Location, context); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - - -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ - -static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, TRI_aql_context_t* const context) -{ - FILE *yyo = yyoutput; - YYUSE (yyo); - YYUSE (yylocationp); - YYUSE (context); - if (!yyvaluep) - return; -# ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - YYUSE (yytype); -} - - -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, TRI_aql_context_t* const context) -{ - YYFPRINTF (yyoutput, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - - YY_LOCATION_PRINT (yyoutput, *yylocationp); - YYFPRINTF (yyoutput, ": "); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, context); - YYFPRINTF (yyoutput, ")"); -} - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (included). | -`------------------------------------------------------------------*/ - -static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) -{ - YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } - YYFPRINTF (stderr, "\n"); -} - -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) - - -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ - -static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, TRI_aql_context_t* const context) -{ - unsigned long int yylno = yyrline[yyrule]; - int yynrhs = yyr2[yyrule]; - int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); - /* The symbols being reduced. */ - for (yyi = 0; yyi < yynrhs; yyi++) - { - YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , &(yylsp[(yyi + 1) - (yynrhs)]) , context); - YYFPRINTF (stderr, "\n"); - } -} - -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, yylsp, Rule, context); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ - -#ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 -#endif - - -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -yystrlen (const char *yystr) -{ - YYSIZE_T yylen; - for (yylen = 0; yystr[yylen]; yylen++) - continue; - return yylen; -} -# endif -# endif - -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -yystpcpy (char *yydest, const char *yysrc) -{ - char *yyd = yydest; - const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; - - return yyd - 1; -} -# endif -# endif - -# ifndef yytnamerr -/* Copy to YYRES the contents of YYSTR after stripping away unnecessary - quotes and backslashes, so that it's suitable for yyerror. The - heuristic is that double-quoting is unnecessary unless the string - contains an apostrophe, a comma, or backslash (other than - backslash-backslash). YYSTR is taken from yytname. If YYRES is - null, do not copy; instead, return the length of what the result - would have been. */ -static YYSIZE_T -yytnamerr (char *yyres, const char *yystr) -{ - if (*yystr == '"') - { - YYSIZE_T yyn = 0; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } - do_not_strip_quotes: ; - } - - if (! yyres) - return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; -} -# endif - -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ -static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) -{ - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ - int yycount = 0; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yychar) is if - this state is a consistent state with a default action. Thus, - detecting the absence of a lookahead is sufficient to determine - that there is no unexpected or expected token to report. In that - case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is a - consistent state with a default action. There might have been a - previous inconsistent state, consistent state with a non-default - action, or user semantic action that manipulated yychar. - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state merging - (from LALR or IELR) and default reductions corrupt the expected - token list. However, the list is correct for canonical LR with - one exception: it will still contain any token that will not be - accepted due to an error action in a later state. - */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } - } - - switch (yycount) - { -# define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ - } - - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - - if (*yymsg_alloc < yysize) - { - *yymsg_alloc = 2 * yysize; - if (! (yysize <= *yymsg_alloc - && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) - *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; - } - - /* Avoid sprintf, as that infringes on the user's name space. - Don't have undefined behavior even if the translation - produced a string with the wrong number of "%s"s. */ - { - char *yyp = *yymsg; - int yyi = 0; - while ((*yyp = *yyformat) != '\0') - if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) - { - yyp += yytnamerr (yyp, yyarg[yyi++]); - yyformat += 2; - } - else - { - yyp++; - yyformat++; - } - } - return 0; -} -#endif /* YYERROR_VERBOSE */ - -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, TRI_aql_context_t* const context) -{ - YYUSE (yyvaluep); - YYUSE (yylocationp); - YYUSE (context); - if (!yymsg) - yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); - YY_IGNORE_MAYBE_UNINITIALIZED_END -} - - - - -/*----------. -| yyparse. | -`----------*/ - -int -yyparse (TRI_aql_context_t* const context) -{ -/* The lookahead symbol. */ -int yychar; - - -/* The semantic value of the lookahead symbol. */ -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); - -/* Location data for the lookahead symbol. */ -static YYLTYPE yyloc_default -# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL - = { 1, 1, 1, 1 } -# endif -; -YYLTYPE yylloc = yyloc_default; - - /* Number of syntax errors so far. */ - int yynerrs; - - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - 'yyls': related to locations. - - Refer to the stacks through separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; - - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls; - YYLTYPE *yylsp; - - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[3]; - - YYSIZE_T yystacksize; - - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; - YYLTYPE yyloc; - -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - - /* The number of symbols on the RHS of the reduced rule. - Keep to zero when no symbol should be popped. */ - int yylen = 0; - - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yylsp = yyls = yylsa; - yystacksize = YYINITDEPTH; - - YYDPRINTF ((stderr, "Starting parse\n")); - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - yylsp[0] = yylloc; - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. So pushing a state here evens the stacks. */ - yyssp++; - - yysetstate: - *yyssp = yystate; - - if (yyss + yystacksize - 1 <= yyssp) - { - /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; - -#ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - YYLTYPE *yyls1 = yyls; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yyls1, yysize * sizeof (*yylsp), - &yystacksize); - - yyls = yyls1; - yyss = yyss1; - yyvs = yyvs1; - } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else - /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; - yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif -#endif /* no yyoverflow */ - - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - yylsp = yyls + yysize - 1; - - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); - - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; - } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - - if (yystate == YYFINAL) - YYACCEPT; - - goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: - - /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ - - /* First try to decide what to do without reference to lookahead token. */ - yyn = yypact[yystate]; - if (yypact_value_is_default (yyn)) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ - if (yychar == YYEMPTY) - { - YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (&yylval, &yylloc, scanner); - } - - if (yychar <= YYEOF) - { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); - } - else - { - yytoken = YYTRANSLATE (yychar); - YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); - } - - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) - goto yydefault; - yyn = yytable[yyn]; - if (yyn <= 0) - { - if (yytable_value_is_error (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; - - /* Shift the lookahead token. */ - YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - - yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - *++yylsp = yylloc; - goto yynewstate; - - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ -yydefault: - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ -yyreduce: - /* yyn is the number of a rule to reduce with. */ - yylen = yyr2[yyn]; - - /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. - - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; - - /* Default location. */ - YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 2: -#line 184 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1620 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 3: -#line 189 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1627 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 4: -#line 191 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1634 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 5: -#line 196 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1641 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 6: -#line 198 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1648 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 7: -#line 200 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1655 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 8: -#line 202 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1662 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 9: -#line 204 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1669 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 10: -#line 206 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1676 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 11: -#line 211 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node; - - if (! TRI_StartScopeAql(context, TRI_AQL_SCOPE_FOR)) { - ABORT_OOM - } - - node = TRI_CreateNodeForAql(context, (yyvsp[-2].strval), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1697 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 12: -#line 230 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeFilterAql(context, (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1712 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 13: -#line 243 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1719 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 14: -#line 248 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1726 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 15: -#line 250 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1733 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 16: -#line 255 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeLetAql(context, (yyvsp[-2].strval), (yyvsp[0].node)); - - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1749 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 17: -#line 269 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeListAql(context); - - if (node == NULL) { - ABORT_OOM - } - - TRI_PushStackParseAql(context, node); - } -#line 1763 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 18: -#line 277 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeCollectAql(context, TRI_PopStackParseAql(context), (yyvsp[0].strval)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1778 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 19: -#line 290 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1785 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 20: -#line 292 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 1792 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 21: -#line 297 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeAssignAql(context, (yyvsp[-2].strval), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_PushListAql(context, node)) { - ABORT_OOM - } - } -#line 1807 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 22: -#line 310 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.strval) = NULL; - } -#line 1815 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 23: -#line 313 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.strval) = (yyvsp[0].strval); - } -#line 1823 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 24: -#line 319 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeListAql(context); - - if (node == NULL) { - ABORT_OOM - } - - TRI_PushStackParseAql(context, node); - } -#line 1837 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 25: -#line 327 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* list = TRI_PopStackParseAql(context); - TRI_aql_node_t* node = TRI_CreateNodeSortAql(context, list); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1853 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 26: -#line 341 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 1863 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 27: -#line 346 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 1873 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 28: -#line 354 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeSortElementAql(context, (yyvsp[-1].node), (yyvsp[0].boolval)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 1886 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 29: -#line 365 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.boolval) = true; - } -#line 1894 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 30: -#line 368 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.boolval) = true; - } -#line 1902 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 31: -#line 371 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.boolval) = false; - } -#line 1910 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 32: -#line 377 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeLimitAql(context, TRI_CreateNodeValueIntAql(context, 0), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - - } -#line 1926 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 33: -#line 388 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeLimitAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - } -#line 1941 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 34: -#line 401 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeReturnAql(context, (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, node)) { - ABORT_OOM - } - - if (! TRI_EndScopeByReturnAql(context)) { - ABORT_OOM - } - - // $$ = node; - } -#line 1962 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 35: -#line 421 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[-1].node); - } -#line 1970 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 36: -#line 424 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_StartScopeAql(context, TRI_AQL_SCOPE_SUBQUERY)) { - ABORT_OOM - } - } -#line 1980 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 37: -#line 428 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* result; - TRI_aql_node_t* subQuery; - TRI_aql_node_t* nameNode; - - if (! TRI_EndScopeAql(context)) { - ABORT_OOM - } - - subQuery = TRI_CreateNodeSubqueryAql(context); - - if (subQuery == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, subQuery)) { - ABORT_OOM - } - - nameNode = TRI_AQL_NODE_MEMBER(subQuery, 0); - if (nameNode == NULL) { - ABORT_OOM - } - - result = TRI_CreateNodeReferenceAql(context, TRI_AQL_NODE_STRING(nameNode)); - if (result == NULL) { - ABORT_OOM - } - - // return the result - (yyval.node) = result; - } -#line 2017 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 38: -#line 460 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2025 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 39: -#line 463 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2033 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 40: -#line 466 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2041 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 41: -#line 469 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2049 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 42: -#line 472 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2057 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 43: -#line 475 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2065 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 44: -#line 478 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node; - TRI_aql_node_t* list; - - if ((yyvsp[-2].node) == NULL || (yyvsp[0].node) == NULL) { - ABORT_OOM - } - - list = TRI_CreateNodeListAql(context); - if (list == NULL) { - ABORT_OOM - } - - if (TRI_ERROR_NO_ERROR != TRI_PushBackVectorPointer(&list->_members, (void*) (yyvsp[-2].node))) { - ABORT_OOM - } - if (TRI_ERROR_NO_ERROR != TRI_PushBackVectorPointer(&list->_members, (void*) (yyvsp[0].node))) { - ABORT_OOM - } - - node = TRI_CreateNodeFcallAql(context, "RANGE", list); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2098 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 45: -#line 509 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.strval) = (yyvsp[0].strval); - - if ((yyval.strval) == NULL) { - ABORT_OOM - } - } -#line 2110 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 46: -#line 516 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if ((yyvsp[-2].strval) == NULL || (yyvsp[0].strval) == NULL) { - ABORT_OOM - } - - (yyval.strval) = TRI_RegisterString3Aql(context, (yyvsp[-2].strval), "::", (yyvsp[0].strval)); - - if ((yyval.strval) == NULL) { - ABORT_OOM - } - } -#line 2126 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 47: -#line 530 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node; - - if (! TRI_PushStackParseAql(context, (yyvsp[0].strval))) { - ABORT_OOM - } - - node = TRI_CreateNodeListAql(context); - if (node == NULL) { - ABORT_OOM - } - - TRI_PushStackParseAql(context, node); - } -#line 2145 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 48: -#line 543 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* list = TRI_PopStackParseAql(context); - TRI_aql_node_t* node = TRI_CreateNodeFcallAql(context, TRI_PopStackParseAql(context), list); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2159 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 49: -#line 555 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryPlusAql(context, (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2172 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 50: -#line 563 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryMinusAql(context, (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2185 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 51: -#line 571 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryNotAql(context, (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2198 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 52: -#line 582 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryOrAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2211 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 53: -#line 590 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryAndAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2224 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 54: -#line 598 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryPlusAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2237 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 55: -#line 606 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryMinusAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2250 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 56: -#line 614 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryTimesAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2263 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 57: -#line 622 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryDivAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2276 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 58: -#line 630 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryModAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2289 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 59: -#line 638 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryEqAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2302 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 60: -#line 646 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryNeAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2315 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 61: -#line 654 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryLtAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2328 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 62: -#line 662 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryGtAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2341 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 63: -#line 670 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryLeAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2354 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 64: -#line 678 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryGeAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2367 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 65: -#line 686 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryInAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2380 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 66: -#line 697 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeOperatorTernaryAql(context, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2394 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 67: -#line 709 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2401 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 68: -#line 711 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2408 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 69: -#line 716 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 2418 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 70: -#line 721 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 2428 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 71: -#line 729 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2436 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 72: -#line 732 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2444 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 73: -#line 738 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeListAql(context); - if (node == NULL) { - ABORT_OOM - } - - TRI_PushStackParseAql(context, node); - } -#line 2457 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 74: -#line 745 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = TRI_PopStackParseAql(context); - } -#line 2465 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 75: -#line 751 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2472 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 76: -#line 753 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2479 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 77: -#line 758 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 2489 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 78: -#line 763 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushListAql(context, (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 2499 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 79: -#line 771 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeArrayAql(context); - if (node == NULL) { - ABORT_OOM - } - - TRI_PushStackParseAql(context, node); - } -#line 2512 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 80: -#line 778 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = TRI_PopStackParseAql(context); - } -#line 2520 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 81: -#line 784 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2527 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 82: -#line 786 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2534 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 83: -#line 791 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2541 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 84: -#line 793 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - } -#line 2548 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 85: -#line 798 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if (! TRI_PushArrayAql(context, (yyvsp[-2].strval), (yyvsp[0].node))) { - ABORT_OOM - } - } -#line 2558 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 86: -#line 806 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // start of reference (collection or variable name) - (yyval.node) = (yyvsp[0].node); - } -#line 2567 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 87: -#line 810 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // expanded variable access, e.g. variable[*] - TRI_aql_node_t* node; - char* varname = TRI_GetNameParseAql(context); - - if (varname == NULL) { - ABORT_OOM - } - - // push the varname onto the stack - TRI_PushStackParseAql(context, varname); - - // push on the stack what's going to be expanded (will be popped when we come back) - TRI_PushStackParseAql(context, (yyvsp[0].node)); - - // create a temporary variable for the row iterator (will be popped by "expansion" rule") - node = TRI_CreateNodeReferenceAql(context, varname); - - if (node == NULL) { - ABORT_OOM - } - - // push the variable - TRI_PushStackParseAql(context, node); - } -#line 2597 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 88: -#line 834 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // return from the "expansion" subrule - TRI_aql_node_t* expanded = TRI_PopStackParseAql(context); - TRI_aql_node_t* expand; - TRI_aql_node_t* nameNode; - char* varname = TRI_PopStackParseAql(context); - - // push the actual expand node into the statement list - expand = TRI_CreateNodeExpandAql(context, varname, expanded, (yyvsp[0].node)); - - if (expand == NULL) { - ABORT_OOM - } - - if (! TRI_AppendStatementListAql(context->_statements, expand)) { - ABORT_OOM - } - - nameNode = TRI_AQL_NODE_MEMBER(expand, 1); - - if (nameNode == NULL) { - ABORT_OOM - } - - // return a reference only - (yyval.node) = TRI_CreateNodeReferenceAql(context, TRI_AQL_NODE_STRING(nameNode)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2633 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 89: -#line 868 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // variable or collection - TRI_aql_node_t* node; - - if (TRI_VariableExistsScopeAql(context, (yyvsp[0].strval))) { - node = TRI_CreateNodeReferenceAql(context, (yyvsp[0].strval)); - } - else { - node = TRI_CreateNodeCollectionAql(context, (yyvsp[0].strval)); - } - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2655 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 90: -#line 885 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2667 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 91: -#line 892 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access, e.g. variable.reference - (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, (yyvsp[-2].node), (yyvsp[0].strval)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2680 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 92: -#line 900 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access, e.g. variable.@reference - (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2693 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 93: -#line 908 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // indexed variable access, e.g. variable[index] - (yyval.node) = TRI_CreateNodeIndexedAql(context, (yyvsp[-3].node), (yyvsp[-1].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2706 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 94: -#line 919 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access, continuation from * expansion, e.g. [*].variable.reference - TRI_aql_node_t* node = TRI_PopStackParseAql(context); - - (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, node, (yyvsp[0].strval)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2721 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 95: -#line 929 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.@reference - TRI_aql_node_t* node = TRI_PopStackParseAql(context); - - (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, node, (yyvsp[0].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2736 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 96: -#line 939 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // indexed variable access, continuation from * expansion, e.g. [*].variable[index] - TRI_aql_node_t* node = TRI_PopStackParseAql(context); - - (yyval.node) = TRI_CreateNodeIndexedAql(context, node, (yyvsp[-1].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2751 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 97: -#line 949 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access, continuation from * expansion, e.g. [*].variable.xx.reference - (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, (yyvsp[-2].node), (yyvsp[0].strval)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2764 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 98: -#line 957 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.xx.@reference - (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, (yyvsp[-2].node), (yyvsp[0].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2777 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 99: -#line 965 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - // indexed variable access, continuation from * expansion, e.g. [*].variable.xx.[index] - (yyval.node) = TRI_CreateNodeIndexedAql(context, (yyvsp[-3].node), (yyvsp[-1].node)); - - if ((yyval.node) == NULL) { - ABORT_OOM - } - } -#line 2790 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 100: -#line 976 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2798 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 101: -#line 979 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2806 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 102: -#line 985 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2814 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 103: -#line 988 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node; - double value; - - if ((yyvsp[0].strval) == NULL) { - ABORT_OOM - } - - value = TRI_DoubleString((yyvsp[0].strval)); - - if (TRI_errno() != TRI_ERROR_NO_ERROR) { - TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_QUERY_NUMBER_OUT_OF_RANGE, NULL); - YYABORT; - } - - node = TRI_CreateNodeValueDoubleAql(context, value); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2842 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 104: -#line 1013 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeValueStringAql(context, (yyvsp[0].strval)); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2856 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 105: -#line 1022 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.node) = (yyvsp[0].node); - } -#line 2864 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 106: -#line 1025 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeValueNullAql(context); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2878 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 107: -#line 1034 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeValueBoolAql(context, true); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2892 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 108: -#line 1043 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeValueBoolAql(context, false); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2906 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 109: -#line 1055 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node = TRI_CreateNodeParameterAql(context, (yyvsp[0].strval)); - - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2920 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 110: -#line 1067 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if ((yyvsp[0].strval) == NULL) { - ABORT_OOM - } - - (yyval.strval) = (yyvsp[0].strval); - } -#line 2932 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 111: -#line 1074 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - if ((yyvsp[0].strval) == NULL) { - ABORT_OOM - } - - (yyval.strval) = (yyvsp[0].strval); - } -#line 2944 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 112: -#line 1083 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - (yyval.strval) = (yyvsp[0].strval); - } -#line 2952 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - case 113: -#line 1089 "arangod/Ahuacatl/ahuacatl-grammar.y" /* yacc.c:1661 */ - { - TRI_aql_node_t* node; - int64_t value; - - if ((yyvsp[0].strval) == NULL) { - ABORT_OOM - } - - value = TRI_Int64String((yyvsp[0].strval)); - if (TRI_errno() != TRI_ERROR_NO_ERROR) { - TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_QUERY_NUMBER_OUT_OF_RANGE, NULL); - YYABORT; - } - - node = TRI_CreateNodeValueIntAql(context, value); - if (node == NULL) { - ABORT_OOM - } - - (yyval.node) = node; - } -#line 2978 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - break; - - -#line 2982 "arangod/Ahuacatl/ahuacatl-grammar.c" /* yacc.c:1661 */ - default: break; - } - /* User semantic actions sometimes alter yychar, and that requires - that yytoken be updated with the new translation. We take the - approach of translating immediately before every use of yytoken. - One alternative is translating here after every semantic action, - but that translation would be missed if the semantic action invokes - YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or - if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an - incorrect destructor might then be invoked immediately. In the - case of YYERROR or YYBACKUP, subsequent parser actions might lead - to an incorrect destructor call or verbose syntax error message - before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); - - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - - *++yyvsp = yyval; - *++yylsp = yyloc; - - /* Now 'shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; - - goto yynewstate; - - -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ -yyerrlab: - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) - { - ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (&yylloc, context, YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) - { - char const *yymsgp = YY_("syntax error"); - int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; - if (yysyntax_error_status == 0) - yymsgp = yymsg; - else if (yysyntax_error_status == 1) - { - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) - { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; - } - else - { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; - } - } - yyerror (&yylloc, context, yymsgp); - if (yysyntax_error_status == 2) - goto yyexhaustedlab; - } -# undef YYSYNTAX_ERROR -#endif - } - - yyerror_range[1] = yylloc; - - if (yyerrstatus == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } - else - { - yydestruct ("Error: discarding", - yytoken, &yylval, &yylloc, context); - yychar = YYEMPTY; - } - } - - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; - - -/*---------------------------------------------------. -| yyerrorlab -- error raised explicitly by YYERROR. | -`---------------------------------------------------*/ -yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; - - yyerror_range[1] = yylsp[1-yylen]; - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - YYPOPSTACK (yylen); - yylen = 0; - YY_STACK_PRINT (yyss, yyssp); - yystate = *yyssp; - goto yyerrlab1; - - -/*-------------------------------------------------------------. -| yyerrlab1 -- common code for both syntax error and YYERROR. | -`-------------------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ - - for (;;) - { - yyn = yypact[yystate]; - if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - yyerror_range[1] = *yylsp; - yydestruct ("Error: popping", - yystos[yystate], yyvsp, yylsp, context); - YYPOPSTACK (1); - yystate = *yyssp; - YY_STACK_PRINT (yyss, yyssp); - } - - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END - - yyerror_range[2] = yylloc; - /* Using YYLLOC is tempting, but would change the location of - the lookahead. YYLOC is available though. */ - YYLLOC_DEFAULT (yyloc, yyerror_range, 2); - *++yylsp = yyloc; - - /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); - - yystate = yyn; - goto yynewstate; - - -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#if !defined yyoverflow || YYERROR_VERBOSE -/*-------------------------------------------------. -| yyexhaustedlab -- memory exhaustion comes here. | -`-------------------------------------------------*/ -yyexhaustedlab: - yyerror (&yylloc, context, YY_("memory exhausted")); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: - if (yychar != YYEMPTY) - { - /* Make sure we have latest lookahead translation. See comments at - user semantic actions for why this is necessary. */ - yytoken = YYTRANSLATE (yychar); - yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, &yylloc, context); - } - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - YYPOPSTACK (yylen); - YY_STACK_PRINT (yyss, yyssp); - while (yyssp != yyss) - { - yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, yylsp, context); - YYPOPSTACK (1); - } -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); -#endif -#if YYERROR_VERBOSE - if (yymsg != yymsgbuf) - YYSTACK_FREE (yymsg); -#endif - return yyresult; -} diff --git a/arangod/Ahuacatl/ahuacatl-grammar.cpp b/arangod/Ahuacatl/ahuacatl-grammar.cpp new file mode 100644 index 0000000000..d86c8a62c0 --- /dev/null +++ b/arangod/Ahuacatl/ahuacatl-grammar.cpp @@ -0,0 +1,2480 @@ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ + +/* Skeleton implementation for Bison LALR(1) parsers in C++ + + Copyright (C) 2002-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +// Take the name prefix into account. +#define yylex Ahuacatllex + +/* First part of user declarations. */ + + +#include +#include + +#include +#include +#include + +#include "Ahuacatl/ahuacatl-ast-node.h" +#include "Ahuacatl/ahuacatl-context.h" +#include "Ahuacatl/ahuacatl-error.h" +#include "Ahuacatl/ahuacatl-parser.h" +#include "Ahuacatl/ahuacatl-parser-functions.h" +#include "Ahuacatl/ahuacatl-scope.h" + + + + +#include "ahuacatl-grammar.h" + +/* User implementation prologue. */ + + + +//////////////////////////////////////////////////////////////////////////////// +/// @brief forward for lexer function defined in ahuacatl-tokens.l +//////////////////////////////////////////////////////////////////////////////// + +int Ahuacatllex (YYSTYPE*, YYLTYPE*, void*); + +//////////////////////////////////////////////////////////////////////////////// +/// @brief register parse error +//////////////////////////////////////////////////////////////////////////////// + +void Ahuacatlerror (YYLTYPE* locp, TRI_aql_context_t* const context, const char* err) { + TRI_SetErrorParseAql(context, err, locp->first_line, locp->first_column); +} + +//////////////////////////////////////////////////////////////////////////////// +/// @brief shortcut macro for signalling out of memory +//////////////////////////////////////////////////////////////////////////////// + +#define ABORT_OOM \ + TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_OUT_OF_MEMORY, NULL); \ + YYABORT; + +#define scanner context->_parser->_scanner + + + + + +# ifndef YY_NULL +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULL nullptr +# else +# define YY_NULL 0 +# endif +# endif + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* FIXME: INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (/*CONSTCOND*/ false) +# endif + + +/* Suppress unused-variable warnings by "using" E. */ +#define YYUSE(e) ((void) (e)) + +/* Enable debugging if requested. */ +#if YYDEBUG + +/* A pseudo ostream that takes yydebug_ into account. */ +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_symbol_print_ ((Type), (Value), (Location)); \ + *yycdebug_ << std::endl; \ + } \ +} while (false) + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ +} while (false) + +# define YY_STACK_PRINT() \ +do { \ + if (yydebug_) \ + yystack_print_ (); \ +} while (false) + +#else /* !YYDEBUG */ + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) YYUSE(Type) +# define YY_REDUCE_PRINT(Rule) static_cast(0) +# define YY_STACK_PRINT() static_cast(0) + +#endif /* !YYDEBUG */ + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yychar = yyempty_) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + + +namespace Ahuacatl { + + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr = ""; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + + + /// Build a parser object. + parser::parser (TRI_aql_context_t* const context_yyarg) + : +#if YYDEBUG + yydebug_ (false), + yycdebug_ (&std::cerr), +#endif + context (context_yyarg) + { + } + + parser::~parser () + { + } + +#if YYDEBUG + /*--------------------------------. + | Print this symbol on YYOUTPUT. | + `--------------------------------*/ + + inline void + parser::yy_symbol_value_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yyvaluep); + std::ostream& yyo = debug_stream (); + std::ostream& yyoutput = yyo; + YYUSE (yyoutput); + YYUSE (yytype); + } + + + void + parser::yy_symbol_print_ (int yytype, + const semantic_type* yyvaluep, const location_type* yylocationp) + { + *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm") + << ' ' << yytname_[yytype] << " (" + << *yylocationp << ": "; + yy_symbol_value_print_ (yytype, yyvaluep, yylocationp); + *yycdebug_ << ')'; + } +#endif + + void + parser::yydestruct_ (const char* yymsg, + int yytype, semantic_type* yyvaluep, location_type* yylocationp) + { + YYUSE (yylocationp); + YYUSE (yymsg); + YYUSE (yyvaluep); + + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YYUSE (yytype); + } + + void + parser::yypop_ (unsigned int n) + { + yystate_stack_.pop (n); + yysemantic_stack_.pop (n); + yylocation_stack_.pop (n); + } + +#if YYDEBUG + std::ostream& + parser::debug_stream () const + { + return *yycdebug_; + } + + void + parser::set_debug_stream (std::ostream& o) + { + yycdebug_ = &o; + } + + + parser::debug_level_type + parser::debug_level () const + { + return yydebug_; + } + + void + parser::set_debug_level (debug_level_type l) + { + yydebug_ = l; + } +#endif + + inline bool + parser::yy_pact_value_is_default_ (int yyvalue) + { + return yyvalue == yypact_ninf_; + } + + inline bool + parser::yy_table_value_is_error_ (int yyvalue) + { + return yyvalue == yytable_ninf_; + } + + int + parser::parse () + { + /// Lookahead and lookahead in internal form. + int yychar = yyempty_; + int yytoken = 0; + + // State. + int yyn; + int yylen = 0; + int yystate = 0; + + // Error handling. + int yynerrs_ = 0; + int yyerrstatus_ = 0; + + /// Semantic value of the lookahead. + static semantic_type yyval_default; + semantic_type yylval = yyval_default; + /// Location of the lookahead. + location_type yylloc; + /// The locations where the error started and ended. + location_type yyerror_range[3]; + + /// $$. + semantic_type yyval; + /// @$. + location_type yyloc; + + int yyresult; + + // FIXME: This shoud be completely indented. It is not yet to + // avoid gratuitous conflicts when merging into the master branch. + try + { + YYCDEBUG << "Starting parse" << std::endl; + + + /* Initialize the stacks. The initial state will be pushed in + yynewstate, since the latter expects the semantical and the + location values to have been already stored, initialize these + stacks with a primary value. */ + yystate_stack_.clear (); + yysemantic_stack_.clear (); + yylocation_stack_.clear (); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* New state. */ + yynewstate: + yystate_stack_.push (yystate); + YYCDEBUG << "Entering state " << yystate << std::endl; + + /* Accept? */ + if (yystate == yyfinal_) + goto yyacceptlab; + + goto yybackup; + + /* Backup. */ + yybackup: + + /* Try to take a decision without lookahead. */ + yyn = yypact_[yystate]; + if (yy_pact_value_is_default_ (yyn)) + goto yydefault; + + /* Read a lookahead token. */ + if (yychar == yyempty_) + { + YYCDEBUG << "Reading a token: "; + yychar = yylex (&yylval, &yylloc, scanner); + } + + /* Convert token to internal form. */ + if (yychar <= yyeof_) + { + yychar = yytoken = yyeof_; + YYCDEBUG << "Now at end of input." << std::endl; + } + else + { + yytoken = yytranslate_ (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken) + goto yydefault; + + /* Reduce or error. */ + yyn = yytable_[yyn]; + if (yyn <= 0) + { + if (yy_table_value_is_error_ (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the token being shifted. */ + yychar = yyempty_; + + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yylloc); + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus_) + --yyerrstatus_; + + yystate = yyn; + goto yynewstate; + + /*-----------------------------------------------------------. + | yydefault -- do the default action for the current state. | + `-----------------------------------------------------------*/ + yydefault: + yyn = yydefact_[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + /*-----------------------------. + | yyreduce -- Do a reduction. | + `-----------------------------*/ + yyreduce: + yylen = yyr2_[yyn]; + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. Otherwise, use the top of the stack. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. */ + if (yylen) + yyval = yysemantic_stack_[yylen - 1]; + else + yyval = yysemantic_stack_[0]; + + // Compute the default @$. + { + slice slice (yylocation_stack_, yylen); + YYLLOC_DEFAULT (yyloc, slice, yylen); + } + + // Perform the reduction. + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: + + { + } + break; + + case 3: + + { + } + break; + + case 4: + + { + } + break; + + case 5: + + { + } + break; + + case 6: + + { + } + break; + + case 7: + + { + } + break; + + case 8: + + { + } + break; + + case 9: + + { + } + break; + + case 10: + + { + } + break; + + case 11: + + { + TRI_aql_node_t* node; + + if (! TRI_StartScopeAql(context, TRI_AQL_SCOPE_FOR)) { + ABORT_OOM + } + + node = TRI_CreateNodeForAql(context, (yysemantic_stack_[(4) - (2)].strval), (yysemantic_stack_[(4) - (4)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 12: + + { + TRI_aql_node_t* node = TRI_CreateNodeFilterAql(context, (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 13: + + { + } + break; + + case 14: + + { + } + break; + + case 15: + + { + } + break; + + case 16: + + { + TRI_aql_node_t* node = TRI_CreateNodeLetAql(context, (yysemantic_stack_[(3) - (1)].strval), (yysemantic_stack_[(3) - (3)].node)); + + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 17: + + { + TRI_aql_node_t* node = TRI_CreateNodeListAql(context); + + if (node == NULL) { + ABORT_OOM + } + + TRI_PushStackParseAql(context, node); + } + break; + + case 18: + + { + TRI_aql_node_t* node = TRI_CreateNodeCollectAql(context, TRI_PopStackParseAql(context), (yysemantic_stack_[(4) - (4)].strval)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 19: + + { + } + break; + + case 20: + + { + } + break; + + case 21: + + { + TRI_aql_node_t* node = TRI_CreateNodeAssignAql(context, (yysemantic_stack_[(3) - (1)].strval), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_PushListAql(context, node)) { + ABORT_OOM + } + } + break; + + case 22: + + { + (yyval.strval) = NULL; + } + break; + + case 23: + + { + (yyval.strval) = (yysemantic_stack_[(2) - (2)].strval); + } + break; + + case 24: + + { + TRI_aql_node_t* node = TRI_CreateNodeListAql(context); + + if (node == NULL) { + ABORT_OOM + } + + TRI_PushStackParseAql(context, node); + } + break; + + case 25: + + { + TRI_aql_node_t* list = TRI_PopStackParseAql(context); + TRI_aql_node_t* node = TRI_CreateNodeSortAql(context, list); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 26: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(1) - (1)].node))) { + ABORT_OOM + } + } + break; + + case 27: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(3) - (3)].node))) { + ABORT_OOM + } + } + break; + + case 28: + + { + TRI_aql_node_t* node = TRI_CreateNodeSortElementAql(context, (yysemantic_stack_[(2) - (1)].node), (yysemantic_stack_[(2) - (2)].boolval)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 29: + + { + (yyval.boolval) = true; + } + break; + + case 30: + + { + (yyval.boolval) = true; + } + break; + + case 31: + + { + (yyval.boolval) = false; + } + break; + + case 32: + + { + TRI_aql_node_t* node = TRI_CreateNodeLimitAql(context, TRI_CreateNodeValueIntAql(context, 0), (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + + } + break; + + case 33: + + { + TRI_aql_node_t* node = TRI_CreateNodeLimitAql(context, (yysemantic_stack_[(4) - (2)].node), (yysemantic_stack_[(4) - (4)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + } + break; + + case 34: + + { + TRI_aql_node_t* node = TRI_CreateNodeReturnAql(context, (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, node)) { + ABORT_OOM + } + + if (! TRI_EndScopeByReturnAql(context)) { + ABORT_OOM + } + + // $$ = node; + } + break; + + case 35: + + { + (yyval.node) = (yysemantic_stack_[(3) - (2)].node); + } + break; + + case 36: + + { + if (! TRI_StartScopeAql(context, TRI_AQL_SCOPE_SUBQUERY)) { + ABORT_OOM + } + } + break; + + case 37: + + { + TRI_aql_node_t* result; + TRI_aql_node_t* subQuery; + TRI_aql_node_t* nameNode; + + if (! TRI_EndScopeAql(context)) { + ABORT_OOM + } + + subQuery = TRI_CreateNodeSubqueryAql(context); + + if (subQuery == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, subQuery)) { + ABORT_OOM + } + + nameNode = TRI_AQL_NODE_MEMBER(subQuery, 0); + if (nameNode == NULL) { + ABORT_OOM + } + + result = TRI_CreateNodeReferenceAql(context, TRI_AQL_NODE_STRING(nameNode)); + if (result == NULL) { + ABORT_OOM + } + + // return the result + (yyval.node) = result; + } + break; + + case 38: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 39: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 40: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 41: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 42: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 43: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 44: + + { + TRI_aql_node_t* node; + TRI_aql_node_t* list; + + if ((yysemantic_stack_[(3) - (1)].node) == NULL || (yysemantic_stack_[(3) - (3)].node) == NULL) { + ABORT_OOM + } + + list = TRI_CreateNodeListAql(context); + if (list == NULL) { + ABORT_OOM + } + + if (TRI_ERROR_NO_ERROR != TRI_PushBackVectorPointer(&list->_members, (void*) (yysemantic_stack_[(3) - (1)].node))) { + ABORT_OOM + } + if (TRI_ERROR_NO_ERROR != TRI_PushBackVectorPointer(&list->_members, (void*) (yysemantic_stack_[(3) - (3)].node))) { + ABORT_OOM + } + + node = TRI_CreateNodeFcallAql(context, "RANGE", list); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 45: + + { + (yyval.strval) = (yysemantic_stack_[(1) - (1)].strval); + + if ((yyval.strval) == NULL) { + ABORT_OOM + } + } + break; + + case 46: + + { + if ((yysemantic_stack_[(3) - (1)].strval) == NULL || (yysemantic_stack_[(3) - (3)].strval) == NULL) { + ABORT_OOM + } + + (yyval.strval) = TRI_RegisterString3Aql(context, (yysemantic_stack_[(3) - (1)].strval), "::", (yysemantic_stack_[(3) - (3)].strval)); + + if ((yyval.strval) == NULL) { + ABORT_OOM + } + } + break; + + case 47: + + { + TRI_aql_node_t* node; + + if (! TRI_PushStackParseAql(context, (yysemantic_stack_[(1) - (1)].strval))) { + ABORT_OOM + } + + node = TRI_CreateNodeListAql(context); + if (node == NULL) { + ABORT_OOM + } + + TRI_PushStackParseAql(context, node); + } + break; + + case 48: + + { + TRI_aql_node_t* list = TRI_PopStackParseAql(context); + TRI_aql_node_t* node = TRI_CreateNodeFcallAql(context, TRI_PopStackParseAql(context), list); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 49: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryPlusAql(context, (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 50: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryMinusAql(context, (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 51: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorUnaryNotAql(context, (yysemantic_stack_[(2) - (2)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 52: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryOrAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 53: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryAndAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 54: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryPlusAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 55: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryMinusAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 56: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryTimesAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 57: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryDivAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 58: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryModAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 59: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryEqAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 60: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryNeAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 61: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryLtAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 62: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryGtAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 63: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryLeAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 64: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryGeAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 65: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorBinaryInAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 66: + + { + TRI_aql_node_t* node = TRI_CreateNodeOperatorTernaryAql(context, (yysemantic_stack_[(5) - (1)].node), (yysemantic_stack_[(5) - (3)].node), (yysemantic_stack_[(5) - (5)].node)); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 67: + + { + } + break; + + case 68: + + { + } + break; + + case 69: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(1) - (1)].node))) { + ABORT_OOM + } + } + break; + + case 70: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(3) - (3)].node))) { + ABORT_OOM + } + } + break; + + case 71: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 72: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 73: + + { + TRI_aql_node_t* node = TRI_CreateNodeListAql(context); + if (node == NULL) { + ABORT_OOM + } + + TRI_PushStackParseAql(context, node); + } + break; + + case 74: + + { + (yyval.node) = TRI_PopStackParseAql(context); + } + break; + + case 75: + + { + } + break; + + case 76: + + { + } + break; + + case 77: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(1) - (1)].node))) { + ABORT_OOM + } + } + break; + + case 78: + + { + if (! TRI_PushListAql(context, (yysemantic_stack_[(3) - (3)].node))) { + ABORT_OOM + } + } + break; + + case 79: + + { + TRI_aql_node_t* node = TRI_CreateNodeArrayAql(context); + if (node == NULL) { + ABORT_OOM + } + + TRI_PushStackParseAql(context, node); + } + break; + + case 80: + + { + (yyval.node) = TRI_PopStackParseAql(context); + } + break; + + case 81: + + { + } + break; + + case 82: + + { + } + break; + + case 83: + + { + } + break; + + case 84: + + { + } + break; + + case 85: + + { + if (! TRI_PushArrayAql(context, (yysemantic_stack_[(3) - (1)].strval), (yysemantic_stack_[(3) - (3)].node))) { + ABORT_OOM + } + } + break; + + case 86: + + { + // start of reference (collection or variable name) + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 87: + + { + // expanded variable access, e.g. variable[*] + TRI_aql_node_t* node; + char* varname = TRI_GetNameParseAql(context); + + if (varname == NULL) { + ABORT_OOM + } + + // push the varname onto the stack + TRI_PushStackParseAql(context, varname); + + // push on the stack what's going to be expanded (will be popped when we come back) + TRI_PushStackParseAql(context, (yysemantic_stack_[(1) - (1)].node)); + + // create a temporary variable for the row iterator (will be popped by "expansion" rule") + node = TRI_CreateNodeReferenceAql(context, varname); + + if (node == NULL) { + ABORT_OOM + } + + // push the variable + TRI_PushStackParseAql(context, node); + } + break; + + case 88: + + { + // return from the "expansion" subrule + TRI_aql_node_t* expanded = TRI_PopStackParseAql(context); + TRI_aql_node_t* expand; + TRI_aql_node_t* nameNode; + char* varname = TRI_PopStackParseAql(context); + + // push the actual expand node into the statement list + expand = TRI_CreateNodeExpandAql(context, varname, expanded, (yysemantic_stack_[(4) - (4)].node)); + + if (expand == NULL) { + ABORT_OOM + } + + if (! TRI_AppendStatementListAql(context->_statements, expand)) { + ABORT_OOM + } + + nameNode = TRI_AQL_NODE_MEMBER(expand, 1); + + if (nameNode == NULL) { + ABORT_OOM + } + + // return a reference only + (yyval.node) = TRI_CreateNodeReferenceAql(context, TRI_AQL_NODE_STRING(nameNode)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 89: + + { + // variable or collection + TRI_aql_node_t* node; + + if (TRI_VariableExistsScopeAql(context, (yysemantic_stack_[(1) - (1)].strval))) { + node = TRI_CreateNodeReferenceAql(context, (yysemantic_stack_[(1) - (1)].strval)); + } + else { + node = TRI_CreateNodeCollectionAql(context, (yysemantic_stack_[(1) - (1)].strval)); + } + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 90: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 91: + + { + // named variable access, e.g. variable.reference + (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].strval)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 92: + + { + // named variable access, e.g. variable.@reference + (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 93: + + { + // indexed variable access, e.g. variable[index] + (yyval.node) = TRI_CreateNodeIndexedAql(context, (yysemantic_stack_[(4) - (1)].node), (yysemantic_stack_[(4) - (3)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 94: + + { + // named variable access, continuation from * expansion, e.g. [*].variable.reference + TRI_aql_node_t* node = TRI_PopStackParseAql(context); + + (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, node, (yysemantic_stack_[(2) - (2)].strval)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 95: + + { + // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.@reference + TRI_aql_node_t* node = TRI_PopStackParseAql(context); + + (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, node, (yysemantic_stack_[(2) - (2)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 96: + + { + // indexed variable access, continuation from * expansion, e.g. [*].variable[index] + TRI_aql_node_t* node = TRI_PopStackParseAql(context); + + (yyval.node) = TRI_CreateNodeIndexedAql(context, node, (yysemantic_stack_[(3) - (2)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 97: + + { + // named variable access, continuation from * expansion, e.g. [*].variable.xx.reference + (yyval.node) = TRI_CreateNodeAttributeAccessAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].strval)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 98: + + { + // named variable access w/ bind parameter, continuation from * expansion, e.g. [*].variable.xx.@reference + (yyval.node) = TRI_CreateNodeBoundAttributeAccessAql(context, (yysemantic_stack_[(3) - (1)].node), (yysemantic_stack_[(3) - (3)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 99: + + { + // indexed variable access, continuation from * expansion, e.g. [*].variable.xx.[index] + (yyval.node) = TRI_CreateNodeIndexedAql(context, (yysemantic_stack_[(4) - (1)].node), (yysemantic_stack_[(4) - (3)].node)); + + if ((yyval.node) == NULL) { + ABORT_OOM + } + } + break; + + case 100: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 101: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 102: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 103: + + { + TRI_aql_node_t* node; + double value; + + if ((yysemantic_stack_[(1) - (1)].strval) == NULL) { + ABORT_OOM + } + + value = TRI_DoubleString((yysemantic_stack_[(1) - (1)].strval)); + + if (TRI_errno() != TRI_ERROR_NO_ERROR) { + TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_QUERY_NUMBER_OUT_OF_RANGE, NULL); + YYABORT; + } + + node = TRI_CreateNodeValueDoubleAql(context, value); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 104: + + { + TRI_aql_node_t* node = TRI_CreateNodeValueStringAql(context, (yysemantic_stack_[(1) - (1)].strval)); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 105: + + { + (yyval.node) = (yysemantic_stack_[(1) - (1)].node); + } + break; + + case 106: + + { + TRI_aql_node_t* node = TRI_CreateNodeValueNullAql(context); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 107: + + { + TRI_aql_node_t* node = TRI_CreateNodeValueBoolAql(context, true); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 108: + + { + TRI_aql_node_t* node = TRI_CreateNodeValueBoolAql(context, false); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 109: + + { + TRI_aql_node_t* node = TRI_CreateNodeParameterAql(context, (yysemantic_stack_[(1) - (1)].strval)); + + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + case 110: + + { + if ((yysemantic_stack_[(1) - (1)].strval) == NULL) { + ABORT_OOM + } + + (yyval.strval) = (yysemantic_stack_[(1) - (1)].strval); + } + break; + + case 111: + + { + if ((yysemantic_stack_[(1) - (1)].strval) == NULL) { + ABORT_OOM + } + + (yyval.strval) = (yysemantic_stack_[(1) - (1)].strval); + } + break; + + case 112: + + { + (yyval.strval) = (yysemantic_stack_[(1) - (1)].strval); + } + break; + + case 113: + + { + TRI_aql_node_t* node; + int64_t value; + + if ((yysemantic_stack_[(1) - (1)].strval) == NULL) { + ABORT_OOM + } + + value = TRI_Int64String((yysemantic_stack_[(1) - (1)].strval)); + if (TRI_errno() != TRI_ERROR_NO_ERROR) { + TRI_SetErrorContextAql(__FILE__, __LINE__, context, TRI_ERROR_QUERY_NUMBER_OUT_OF_RANGE, NULL); + YYABORT; + } + + node = TRI_CreateNodeValueIntAql(context, value); + if (node == NULL) { + ABORT_OOM + } + + (yyval.node) = node; + } + break; + + + + default: + break; + } + + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action + invokes YYABORT, YYACCEPT, or YYERROR immediately after altering + yychar. In the case of YYABORT or YYACCEPT, an incorrect + destructor might then be invoked immediately. In the case of + YYERROR, subsequent parser actions might lead to an incorrect + destructor call or verbose syntax error message before the + lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc); + + yypop_ (yylen); + yylen = 0; + YY_STACK_PRINT (); + + yysemantic_stack_.push (yyval); + yylocation_stack_.push (yyloc); + + /* Shift the result of the reduction. */ + yyn = yyr1_[yyn]; + yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0]; + if (0 <= yystate && yystate <= yylast_ + && yycheck_[yystate] == yystate_stack_[0]) + yystate = yytable_[yystate]; + else + yystate = yydefgoto_[yyn - yyntokens_]; + goto yynewstate; + + /*------------------------------------. + | yyerrlab -- here on detecting error | + `------------------------------------*/ + yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus_) + { + ++yynerrs_; + if (yychar == yyempty_) + yytoken = yyempty_; + error (yylloc, yysyntax_error_ (yystate, yytoken)); + } + + yyerror_range[1] = yylloc; + if (yyerrstatus_ == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + if (yychar <= yyeof_) + { + /* Return failure if at end of input. */ + if (yychar == yyeof_) + YYABORT; + } + else + { + yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc); + yychar = yyempty_; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + + /*---------------------------------------------------. + | yyerrorlab -- error raised explicitly by YYERROR. | + `---------------------------------------------------*/ + yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (false) + goto yyerrorlab; + + yyerror_range[1] = yylocation_stack_[yylen - 1]; + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + yypop_ (yylen); + yylen = 0; + yystate = yystate_stack_[0]; + goto yyerrlab1; + + /*-------------------------------------------------------------. + | yyerrlab1 -- common code for both syntax error and YYERROR. | + `-------------------------------------------------------------*/ + yyerrlab1: + yyerrstatus_ = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += yyterror_; + if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yystate_stack_.height () == 1) + YYABORT; + + yyerror_range[1] = yylocation_stack_[0]; + yydestruct_ ("Error: popping", + yystos_[yystate], + &yysemantic_stack_[0], &yylocation_stack_[0]); + yypop_ (); + yystate = yystate_stack_[0]; + YY_STACK_PRINT (); + } + + yyerror_range[2] = yylloc; + // Using YYLLOC is tempting, but would change the location of + // the lookahead. YYLOC is available though. + YYLLOC_DEFAULT (yyloc, yyerror_range, 2); + yysemantic_stack_.push (yylval); + yylocation_stack_.push (yyloc); + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos_[yyn], + &yysemantic_stack_[0], &yylocation_stack_[0]); + + yystate = yyn; + goto yynewstate; + + /* Accept. */ + yyacceptlab: + yyresult = 0; + goto yyreturn; + + /* Abort. */ + yyabortlab: + yyresult = 1; + goto yyreturn; + + yyreturn: + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See comments + at user semantic actions for why this is necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, + &yylloc); + } + + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + yypop_ (yylen); + while (1 < yystate_stack_.height ()) + { + yydestruct_ ("Cleanup: popping", + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + + return yyresult; + } + catch (...) + { + YYCDEBUG << "Exception caught: cleaning lookahead and stack" + << std::endl; + // Do not try to display the values of the reclaimed symbols, + // as their printer might throw an exception. + if (yychar != yyempty_) + { + /* Make sure we have latest lookahead translation. See + comments at user semantic actions for why this is + necessary. */ + yytoken = yytranslate_ (yychar); + yydestruct_ (YY_NULL, yytoken, &yylval, &yylloc); + } + + while (1 < yystate_stack_.height ()) + { + yydestruct_ (YY_NULL, + yystos_[yystate_stack_[0]], + &yysemantic_stack_[0], + &yylocation_stack_[0]); + yypop_ (); + } + throw; + } + } + + // Generate an error message. + std::string + parser::yysyntax_error_ (int yystate, int yytoken) + { + std::string yyres; + // Number of reported tokens (one for the "unexpected", one per + // "expected"). + size_t yycount = 0; + // Its maximum. + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + // Arguments of yyformat. + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yytoken) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state + merging (from LALR or IELR) and default reductions corrupt the + expected token list. However, the list is correct for + canonical LR with one exception: it will still contain any + token that will not be accepted due to an error action in a + later state. + */ + if (yytoken != yyempty_) + { + yyarg[yycount++] = yytname_[yytoken]; + int yyn = yypact_[yystate]; + if (!yy_pact_value_is_default_ (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = yylast_ - yyn + 1; + int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; + for (int yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ + && !yy_table_value_is_error_ (yytable_[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + break; + } + else + yyarg[yycount++] = yytname_[yyx]; + } + } + } + + char const* yyformat = YY_NULL; + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + // Argument number. + size_t yyi = 0; + for (char const* yyp = yyformat; *yyp; ++yyp) + if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) + { + yyres += yytnamerr_ (yyarg[yyi++]); + ++yyp; + } + else + yyres += *yyp; + return yyres; + } + + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ + const signed char parser::yypact_ninf_ = -75; + const short int + parser::yypact_[] = + { + -75, 30, 119, -75, 32, 32, 174, 174, -75, -75, + 71, -75, -75, -75, -75, -75, -75, -75, -75, -75, + 35, 9, -75, 58, -75, -75, -75, 39, -75, -75, + -75, -75, 174, 174, 174, 174, -75, -75, 283, 43, + -75, -75, -75, -75, -75, -75, -75, 74, -34, -75, + -75, -75, -75, -75, 283, 32, 174, 67, 174, 32, + 174, -75, -75, -75, 198, -75, 76, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 95, 75, 82, 174, 1, 2, + -75, 110, 91, -75, 233, 71, 283, -75, 283, -75, + 73, -75, -75, 88, 93, -75, 97, 283, 89, 100, + -24, 344, 333, 319, 319, 24, 24, 24, 24, 80, + 80, -75, -75, -75, 258, 308, -75, 174, -31, 7, + -75, -75, 32, 32, -75, 174, 174, -75, -75, -75, + -75, -75, -75, 76, 174, -75, 174, 174, 283, 99, + 102, 174, 4, -30, -75, -75, -75, 283, -75, -75, + 283, 283, 308, -75, 174, 72, -75, -75, 174, 29, + 283, -75, 139, -75, -75, -75 + }; + + /* YYDEFACT[S] -- default reduction number in state S. Performed when + YYTABLE doesn't specify something else to do. Zero means the + default is an error. */ + const unsigned char + parser::yydefact_[] = + { + 3, 0, 0, 1, 0, 0, 0, 0, 17, 24, + 0, 4, 5, 7, 6, 8, 9, 10, 2, 112, + 0, 13, 14, 0, 106, 107, 108, 89, 104, 113, + 103, 109, 0, 0, 0, 36, 79, 73, 12, 47, + 90, 38, 39, 40, 41, 71, 72, 43, 86, 42, + 105, 100, 101, 102, 34, 0, 0, 32, 0, 0, + 0, 51, 49, 50, 0, 3, 81, 75, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 19, 0, 25, 26, 29, 0, 11, 15, 16, 35, + 0, 110, 111, 0, 82, 83, 0, 77, 0, 76, + 65, 53, 52, 59, 60, 61, 62, 63, 64, 54, + 55, 56, 57, 58, 0, 44, 46, 67, 0, 0, + 91, 92, 0, 0, 18, 0, 0, 30, 31, 28, + 33, 37, 80, 0, 0, 74, 0, 0, 69, 0, + 68, 0, 0, 88, 93, 23, 20, 21, 27, 84, + 85, 78, 66, 48, 0, 0, 94, 95, 0, 0, + 70, 96, 0, 97, 98, 99 + }; + + /* YYPGOTO[NTERM-NUM]. */ + const signed char + parser::yypgoto_[] = + { + -75, 81, -75, -75, -75, -75, -75, -75, 90, -75, + -75, -75, 6, -75, -75, -75, -75, 11, -75, -75, + -75, -6, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + 5, -75, -75, -75, -75, -7, -75, -75, -74, -75, + -2, -75 + }; + + /* YYDEFGOTO[NTERM-NUM]. */ + const short int + parser::yydefgoto_[] = + { + -1, 1, 2, 11, 12, 13, 14, 21, 22, 15, + 55, 89, 90, 134, 16, 56, 92, 93, 139, 17, + 18, 94, 65, 39, 40, 85, 41, 42, 43, 149, + 150, 44, 45, 67, 108, 109, 46, 66, 103, 104, + 105, 47, 86, 48, 153, 49, 50, 51, 52, 106, + 23, 53 + }; + + /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF_, syntax error. */ + const signed char parser::yytable_ninf_ = -88; + const short int + parser::yytable_[] = + { + 38, 54, 20, 57, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 87, 131, 132, 151, 168, 130, 68, + 88, 166, 31, 152, 169, 31, 61, 62, 63, 64, + 3, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 133, 82, 173, 58, 83, 19, + 31, 59, 96, 91, 98, 154, 77, 78, 79, 80, + 81, 107, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 167, -45, + 60, 129, -45, 84, 68, 24, 25, 26, 140, 28, + 29, 30, 31, 101, 102, 174, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 95, + 82, -87, 126, 83, 79, 80, 81, 141, 127, 128, + 171, 148, 4, 5, 6, 7, 8, 9, 10, 157, + 155, 91, 135, 136, 142, 143, 144, 145, 160, 156, + 161, 162, 146, 163, 164, 165, 100, 158, 159, 97, + 0, 68, 0, 0, 0, 0, 0, 0, 170, 0, + 0, 0, 172, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 0, 82, 0, 0, + 83, 0, 0, 0, 0, 0, 0, 175, 24, 25, + 26, 27, 28, 29, 30, 31, 0, 32, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 34, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 35, 0, 36, + 0, 37, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 0, 82, 0, 0, 83, + 0, 0, 99, 137, 138, 68, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 68, 82, 0, 0, 83, 0, 0, 0, 0, 0, + 0, 0, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 68, 82, 147, 0, 83, + 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 68, 82, 0, 0, 83, 0, 0, 0, 0, 0, + 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 68, 82, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 68, 69, 0, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81 + }; + + /* YYCHECK. */ + const short int + parser::yycheck_[] = + { + 6, 7, 4, 10, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 47, 88, 13, 47, 47, 17, 12, + 54, 17, 21, 54, 54, 21, 32, 33, 34, 35, + 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 42, 38, 17, 12, 41, 17, + 21, 42, 58, 55, 60, 48, 32, 33, 34, 35, + 36, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 152, 40, + 22, 87, 43, 40, 12, 14, 15, 16, 95, 18, + 19, 20, 21, 17, 18, 169, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 42, + 38, 37, 17, 41, 34, 35, 36, 44, 43, 37, + 48, 127, 3, 4, 5, 6, 7, 8, 9, 135, + 132, 133, 22, 42, 46, 42, 39, 48, 144, 133, + 146, 147, 42, 44, 42, 151, 65, 136, 143, 59, + -1, 12, -1, -1, -1, -1, -1, -1, 164, -1, + -1, -1, 168, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, -1, 38, -1, -1, + 41, -1, -1, -1, -1, -1, -1, 48, 14, 15, + 16, 17, 18, 19, 20, 21, -1, 23, -1, -1, + -1, -1, -1, -1, -1, -1, 32, 33, -1, -1, + 12, -1, -1, -1, -1, -1, -1, 43, -1, 45, + -1, 47, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, -1, 38, -1, -1, 41, + -1, -1, 44, 10, 11, 12, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 12, 38, -1, -1, 41, -1, -1, -1, -1, -1, + -1, -1, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 12, 38, 39, -1, 41, + -1, -1, -1, -1, -1, -1, -1, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 12, 38, -1, -1, 41, -1, -1, -1, -1, -1, + -1, 12, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 12, 38, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 12, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36 + }; + + /* STOS_[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ + const unsigned char + parser::yystos_[] = + { + 0, 56, 57, 0, 3, 4, 5, 6, 7, 8, + 9, 58, 59, 60, 61, 64, 69, 74, 75, 17, + 105, 62, 63, 105, 14, 15, 16, 17, 18, 19, + 20, 21, 23, 32, 33, 43, 45, 47, 76, 78, + 79, 81, 82, 83, 86, 87, 91, 96, 98, 100, + 101, 102, 103, 106, 76, 65, 70, 100, 12, 42, + 22, 76, 76, 76, 76, 77, 92, 88, 12, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 38, 41, 40, 80, 97, 47, 54, 66, + 67, 105, 71, 72, 76, 42, 76, 63, 76, 44, + 56, 17, 18, 93, 94, 95, 104, 76, 89, 90, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 17, 43, 37, 76, + 17, 103, 13, 42, 68, 22, 42, 10, 11, 73, + 100, 44, 46, 42, 39, 48, 42, 39, 76, 84, + 85, 47, 54, 99, 48, 105, 67, 76, 72, 95, + 76, 76, 76, 44, 42, 76, 17, 103, 47, 54, + 76, 48, 76, 17, 103, 48 + }; + +#if YYDEBUG + /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding + to YYLEX-NUM. */ + const unsigned short int + parser::yytoken_number_[] = + { + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 46 + }; +#endif + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ + const unsigned char + parser::yyr1_[] = + { + 0, 55, 56, 57, 57, 58, 58, 58, 58, 58, + 58, 59, 60, 61, 62, 62, 63, 65, 64, 66, + 66, 67, 68, 68, 70, 69, 71, 71, 72, 73, + 73, 73, 74, 74, 75, 76, 77, 76, 76, 76, + 76, 76, 76, 76, 76, 78, 78, 80, 79, 81, + 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 82, 83, 84, 84, 85, + 85, 86, 86, 88, 87, 89, 89, 90, 90, 92, + 91, 93, 93, 94, 94, 95, 96, 97, 96, 98, + 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, + 100, 100, 101, 101, 102, 102, 102, 102, 102, 103, + 104, 104, 105, 106 + }; + + /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ + const unsigned char + parser::yyr2_[] = + { + 0, 2, 2, 0, 2, 1, 1, 1, 1, 1, + 1, 4, 2, 2, 1, 3, 3, 0, 4, 1, + 3, 3, 0, 2, 0, 3, 1, 3, 2, 0, + 1, 1, 2, 4, 2, 3, 0, 4, 1, 1, + 1, 1, 1, 1, 3, 1, 3, 0, 5, 2, + 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 5, 0, 1, 1, + 3, 1, 1, 0, 4, 0, 1, 1, 3, 0, + 4, 0, 1, 1, 3, 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 + }; + + + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at \a yyntokens_, nonterminals. */ + const char* + const parser::yytname_[] = + { + "\"end of query string\"", "error", "$undefined", "\"FOR declaration\"", + "\"LET declaration\"", "\"FILTER declaration\"", + "\"RETURN declaration\"", "\"COLLECT declaration\"", + "\"SORT declaration\"", "\"LIMIT declaration\"", "\"ASC keyword\"", + "\"DESC keyword\"", "\"IN keyword\"", "\"INTO keyword\"", "\"null\"", + "\"true\"", "\"false\"", "\"identifier\"", "\"quoted string\"", + "\"integer number\"", "\"number\"", "\"bind parameter\"", + "\"assignment\"", "\"not operator\"", "\"and operator\"", + "\"or operator\"", "\"== operator\"", "\"!= operator\"", + "\"< operator\"", "\"> operator\"", "\"<= operator\"", "\">= operator\"", + "\"+ operator\"", "\"- operator\"", "\"* operator\"", "\"/ operator\"", + "\"% operator\"", "\"[*] operator\"", "\"?\"", "\":\"", "\"::\"", + "\"..\"", "\",\"", "\"(\"", "\")\"", "\"{\"", "\"}\"", "\"[\"", "\"]\"", + "UPLUS", "UMINUS", "FUNCCALL", "REFERENCE", "INDEXED", "'.'", "$accept", + "query", "optional_statement_block_statements", + "statement_block_statement", "for_statement", "filter_statement", + "let_statement", "let_list", "let_element", "collect_statement", "$@1", + "collect_list", "collect_element", "optional_into", "sort_statement", + "$@2", "sort_list", "sort_element", "sort_direction", "limit_statement", + "return_statement", "expression", "$@3", "function_name", + "function_call", "$@4", "operator_unary", "operator_binary", + "operator_ternary", "optional_function_call_arguments", + "function_arguments_list", "compound_type", "list", "$@5", + "optional_list_elements", "list_elements_list", "array", "$@6", + "optional_array_elements", "array_elements_list", "array_element", + "reference", "$@7", "single_reference", "expansion", "atomic_value", + "numeric_value", "value_literal", "bind_parameter", "array_element_name", + "variable_name", "integer_value", YY_NULL + }; + +#if YYDEBUG + /* YYRHS -- A `-1'-separated list of the rules' RHS. */ + const parser::rhs_number_type + parser::yyrhs_[] = + { + 56, 0, -1, 57, 75, -1, -1, 57, 58, -1, + 59, -1, 61, -1, 60, -1, 64, -1, 69, -1, + 74, -1, 3, 105, 12, 76, -1, 5, 76, -1, + 4, 62, -1, 63, -1, 62, 42, 63, -1, 105, + 22, 76, -1, -1, 7, 65, 66, 68, -1, 67, + -1, 66, 42, 67, -1, 105, 22, 76, -1, -1, + 13, 105, -1, -1, 8, 70, 71, -1, 72, -1, + 71, 42, 72, -1, 76, 73, -1, -1, 10, -1, + 11, -1, 9, 100, -1, 9, 100, 42, 100, -1, + 6, 76, -1, 43, 76, 44, -1, -1, 43, 77, + 56, 44, -1, 81, -1, 82, -1, 83, -1, 86, + -1, 100, -1, 96, -1, 76, 41, 76, -1, 17, + -1, 78, 40, 17, -1, -1, 78, 80, 43, 84, + 44, -1, 32, 76, -1, 33, 76, -1, 23, 76, + -1, 76, 25, 76, -1, 76, 24, 76, -1, 76, + 32, 76, -1, 76, 33, 76, -1, 76, 34, 76, + -1, 76, 35, 76, -1, 76, 36, 76, -1, 76, + 26, 76, -1, 76, 27, 76, -1, 76, 28, 76, + -1, 76, 29, 76, -1, 76, 30, 76, -1, 76, + 31, 76, -1, 76, 12, 76, -1, 76, 38, 76, + 39, 76, -1, -1, 85, -1, 76, -1, 85, 42, + 76, -1, 87, -1, 91, -1, -1, 47, 88, 89, + 48, -1, -1, 90, -1, 76, -1, 90, 42, 76, + -1, -1, 45, 92, 93, 46, -1, -1, 94, -1, + 95, -1, 94, 42, 95, -1, 104, 39, 76, -1, + 98, -1, -1, 96, 97, 37, 99, -1, 17, -1, + 79, -1, 98, 54, 17, -1, 98, 54, 103, -1, + 98, 47, 76, 48, -1, 54, 17, -1, 54, 103, + -1, 47, 76, 48, -1, 99, 54, 17, -1, 99, + 54, 103, -1, 99, 47, 76, 48, -1, 102, -1, + 103, -1, 106, -1, 20, -1, 18, -1, 101, -1, + 14, -1, 15, -1, 16, -1, 21, -1, 17, -1, + 18, -1, 17, -1, 19, -1 + }; + + /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ + const unsigned short int + parser::yyprhs_[] = + { + 0, 0, 3, 6, 7, 10, 12, 14, 16, 18, + 20, 22, 27, 30, 33, 35, 39, 43, 44, 49, + 51, 55, 59, 60, 63, 64, 68, 70, 74, 77, + 78, 80, 82, 85, 90, 93, 97, 98, 103, 105, + 107, 109, 111, 113, 115, 119, 121, 125, 126, 132, + 135, 138, 141, 145, 149, 153, 157, 161, 165, 169, + 173, 177, 181, 185, 189, 193, 197, 203, 204, 206, + 208, 212, 214, 216, 217, 222, 223, 225, 227, 231, + 232, 237, 238, 240, 242, 246, 250, 252, 253, 258, + 260, 262, 266, 270, 275, 278, 281, 285, 289, 293, + 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, + 318, 320, 322, 324 + }; + + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ + const unsigned short int + parser::yyrline_[] = + { + 0, 184, 184, 189, 191, 196, 198, 200, 202, 204, + 206, 211, 230, 243, 248, 250, 255, 269, 269, 290, + 292, 297, 310, 313, 319, 319, 341, 346, 354, 365, + 368, 371, 377, 388, 401, 421, 424, 424, 460, 463, + 466, 469, 472, 475, 478, 509, 516, 530, 530, 555, + 563, 571, 582, 590, 598, 606, 614, 622, 630, 638, + 646, 654, 662, 670, 678, 686, 697, 709, 711, 716, + 721, 729, 732, 738, 738, 751, 753, 758, 763, 771, + 771, 784, 786, 791, 793, 798, 806, 810, 810, 868, + 885, 892, 900, 908, 919, 929, 939, 949, 957, 965, + 976, 979, 985, 988, 1013, 1022, 1025, 1034, 1043, 1055, + 1067, 1074, 1083, 1089 + }; + + // Print the state stack on the debug stream. + void + parser::yystack_print_ () + { + *yycdebug_ << "Stack now"; + for (state_stack_type::const_iterator i = yystate_stack_.begin (); + i != yystate_stack_.end (); ++i) + *yycdebug_ << ' ' << *i; + *yycdebug_ << std::endl; + } + + // Report on the debug stream that the rule \a yyrule is going to be reduced. + void + parser::yy_reduce_print_ (int yyrule) + { + unsigned int yylno = yyrline_[yyrule]; + int yynrhs = yyr2_[yyrule]; + /* Print the symbols being reduced, and their result. */ + *yycdebug_ << "Reducing stack by rule " << yyrule - 1 + << " (line " << yylno << "):" << std::endl; + /* The symbols being reduced. */ + for (int yyi = 0; yyi < yynrhs; yyi++) + YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", + yyrhs_[yyprhs_[yyrule] + yyi], + &(yysemantic_stack_[(yynrhs) - (yyi + 1)]), + &(yylocation_stack_[(yynrhs) - (yyi + 1)])); + } +#endif // YYDEBUG + + /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ + parser::token_number_type + parser::yytranslate_ (int t) + { + static + const token_number_type + translate_table[] = + { + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 54, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53 + }; + if ((unsigned int) t <= yyuser_token_number_max_) + return translate_table[t]; + else + return yyundef_token_; + } + + const int parser::yyeof_ = 0; + const int parser::yylast_ = 380; + const int parser::yynnts_ = 52; + const int parser::yyempty_ = -2; + const int parser::yyfinal_ = 3; + const int parser::yyterror_ = 1; + const int parser::yyerrcode_ = 256; + const int parser::yyntokens_ = 55; + + const unsigned int parser::yyuser_token_number_max_ = 308; + const parser::token_number_type parser::yyundef_token_ = 2; + + +} // Ahuacatl + diff --git a/arangod/Ahuacatl/ahuacatl-grammar.y b/arangod/Ahuacatl/ahuacatl-grammar.yy similarity index 100% rename from arangod/Ahuacatl/ahuacatl-grammar.y rename to arangod/Ahuacatl/ahuacatl-grammar.yy diff --git a/arangod/Ahuacatl/ahuacatl-index.c b/arangod/Ahuacatl/ahuacatl-index.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-index.c rename to arangod/Ahuacatl/ahuacatl-index.cpp diff --git a/arangod/Ahuacatl/ahuacatl-node.c b/arangod/Ahuacatl/ahuacatl-node.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-node.c rename to arangod/Ahuacatl/ahuacatl-node.cpp diff --git a/arangod/Ahuacatl/ahuacatl-optimiser.c b/arangod/Ahuacatl/ahuacatl-optimiser.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-optimiser.c rename to arangod/Ahuacatl/ahuacatl-optimiser.cpp diff --git a/arangod/Ahuacatl/ahuacatl-parser-functions.c b/arangod/Ahuacatl/ahuacatl-parser-functions.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-parser-functions.c rename to arangod/Ahuacatl/ahuacatl-parser-functions.cpp diff --git a/arangod/Ahuacatl/ahuacatl-parser.c b/arangod/Ahuacatl/ahuacatl-parser.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-parser.c rename to arangod/Ahuacatl/ahuacatl-parser.cpp diff --git a/arangod/Ahuacatl/ahuacatl-result.c b/arangod/Ahuacatl/ahuacatl-result.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-result.c rename to arangod/Ahuacatl/ahuacatl-result.cpp diff --git a/arangod/Ahuacatl/ahuacatl-scope.c b/arangod/Ahuacatl/ahuacatl-scope.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-scope.c rename to arangod/Ahuacatl/ahuacatl-scope.cpp diff --git a/arangod/Ahuacatl/ahuacatl-statement-dump.c b/arangod/Ahuacatl/ahuacatl-statement-dump.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-statement-dump.c rename to arangod/Ahuacatl/ahuacatl-statement-dump.cpp diff --git a/arangod/Ahuacatl/ahuacatl-statement-walker.c b/arangod/Ahuacatl/ahuacatl-statement-walker.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-statement-walker.c rename to arangod/Ahuacatl/ahuacatl-statement-walker.cpp diff --git a/arangod/Ahuacatl/ahuacatl-statementlist.c b/arangod/Ahuacatl/ahuacatl-statementlist.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-statementlist.c rename to arangod/Ahuacatl/ahuacatl-statementlist.cpp diff --git a/arangod/Ahuacatl/ahuacatl-tokens.c b/arangod/Ahuacatl/ahuacatl-tokens.cpp similarity index 97% rename from arangod/Ahuacatl/ahuacatl-tokens.c rename to arangod/Ahuacatl/ahuacatl-tokens.cpp index e251a221db..b729760d2c 100644 --- a/arangod/Ahuacatl/ahuacatl-tokens.c +++ b/arangod/Ahuacatl/ahuacatl-tokens.cpp @@ -1,5 +1,5 @@ -#line 3 "arangod/Ahuacatl/ahuacatl-tokens.c" +#line 3 "arangod/Ahuacatl/ahuacatl-tokens.cpp" #define YY_INT_ALIGNED short int @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -158,7 +158,15 @@ typedef void* yyscan_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else #define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -170,11 +178,6 @@ typedef void* yyscan_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 @@ -184,7 +187,7 @@ typedef size_t yy_size_t; * existing scanners that call yyless() from OUTSIDE Ahuacatllex. * One obvious solution it to make yy_act a global. I tried that, and saw * a 5% performance hit in a non-yylineno scanner, because yy_act is - * normally declared as a register variable-- so it is not worth it. + * normally declared as a variable-- so it is not worth it. */ #define YY_LESS_LINENO(n) \ do { \ @@ -210,6 +213,11 @@ typedef size_t yy_size_t; #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -227,7 +235,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -306,7 +314,7 @@ static void Ahuacatl_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscann YY_BUFFER_STATE Ahuacatl_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); YY_BUFFER_STATE Ahuacatl_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE Ahuacatl_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); +YY_BUFFER_STATE Ahuacatl_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); void *Ahuacatlalloc (yy_size_t ,yyscan_t yyscanner ); void *Ahuacatlrealloc (void *,yy_size_t ,yyscan_t yyscanner ); @@ -338,7 +346,7 @@ void Ahuacatlfree (void * ,yyscan_t yyscanner ); /* Begin user sect3 */ -#define Ahuacatlwrap(yyscanner) 1 +#define Ahuacatlwrap(n) 1 #define YY_SKIP_YYWRAP typedef unsigned char YY_CHAR; @@ -657,8 +665,8 @@ struct yyguts_t size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; - yy_size_t yy_n_chars; - yy_size_t yyleng_r; + int yy_n_chars; + int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; @@ -715,7 +723,7 @@ FILE *Ahuacatlget_out (yyscan_t yyscanner ); void Ahuacatlset_out (FILE * out_str ,yyscan_t yyscanner ); -yy_size_t Ahuacatlget_leng (yyscan_t yyscanner ); +int Ahuacatlget_leng (yyscan_t yyscanner ); char *Ahuacatlget_text (yyscan_t yyscanner ); @@ -767,7 +775,12 @@ static int input (yyscan_t yyscanner ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else #define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -866,9 +879,9 @@ extern int Ahuacatllex \ */ YY_DECL { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* --------------------------------------------------------------------------- @@ -921,7 +934,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -948,7 +961,7 @@ yy_find_action: if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) { int yyl; - for ( yyl = 0; yyl < (int) yyleng; ++yyl ) + for ( yyl = 0; yyl < yyleng; ++yyl ) if ( yytext[yyl] == '\n' ) do{ yylineno++; @@ -1610,9 +1623,9 @@ case YY_STATE_EOF(COMMENT_MULTI): static int yy_get_next_buffer (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) @@ -1654,21 +1667,21 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1699,7 +1712,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); + yyg->yy_n_chars, (int) num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } @@ -1744,15 +1757,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner) static yy_state_type yy_get_previous_state (yyscan_t yyscanner) { - register yy_state_type yy_current_state; - register char *yy_cp; + yy_state_type yy_current_state; + char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1777,11 +1790,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) { - register int yy_is_jam; + int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - register char *yy_cp = yyg->yy_c_buf_p; + char *yy_cp = yyg->yy_c_buf_p; - register YY_CHAR yy_c = 1; + YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; @@ -1796,7 +1809,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner) yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 156); - (void)yyg; return yy_is_jam ? 0 : yy_current_state; } @@ -1825,7 +1837,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { /* need more input */ - yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) @@ -1996,6 +2008,10 @@ static void Ahuacatl_load_buffer_state (yyscan_t yyscanner) Ahuacatlfree((void *) b ,yyscanner ); } +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a Ahuacatlrestart() or at EOF. @@ -2112,7 +2128,7 @@ void Ahuacatlpop_buffer_state (yyscan_t yyscanner) */ static void Ahuacatlensure_buffer_stack (yyscan_t yyscanner) { - yy_size_t num_to_alloc; + int num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { @@ -2210,7 +2226,7 @@ YY_BUFFER_STATE Ahuacatl_scan_string (yyconst char * yystr , yyscan_t yyscanner) * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE Ahuacatl_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +YY_BUFFER_STATE Ahuacatl_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; @@ -2223,7 +2239,7 @@ YY_BUFFER_STATE Ahuacatl_scan_bytes (yyconst char * yybytes, yy_size_t _yybyte if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in Ahuacatl_scan_bytes()" ); - for ( i = 0; i < (int) _yybytes_len; ++i ) + for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; @@ -2325,7 +2341,7 @@ FILE *Ahuacatlget_out (yyscan_t yyscanner) /** Get the length of the current token. * @param yyscanner The scanner object. */ -yy_size_t Ahuacatlget_leng (yyscan_t yyscanner) +int Ahuacatlget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; @@ -2361,7 +2377,7 @@ void Ahuacatlset_lineno (int line_number , yyscan_t yyscanner) /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "Ahuacatlset_lineno called with no buffer" ); + yy_fatal_error( "Ahuacatlset_lineno called with no buffer" , yyscanner); yylineno = line_number; } @@ -2376,7 +2392,7 @@ void Ahuacatlset_column (int column_no , yyscan_t yyscanner) /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "Ahuacatlset_column called with no buffer" ); + yy_fatal_error( "Ahuacatlset_column called with no buffer" , yyscanner); yycolumn = column_no; } @@ -2571,7 +2587,7 @@ int Ahuacatllex_destroy (yyscan_t yyscanner) #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) { - register int i; + int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } @@ -2580,7 +2596,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yysca #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) { - register int n; + int n; for ( n = 0; s[n]; ++n ) ; diff --git a/arangod/Ahuacatl/ahuacatl-tokens.l b/arangod/Ahuacatl/ahuacatl-tokens.ll similarity index 100% rename from arangod/Ahuacatl/ahuacatl-tokens.l rename to arangod/Ahuacatl/ahuacatl-tokens.ll diff --git a/arangod/Ahuacatl/ahuacatl-variable.c b/arangod/Ahuacatl/ahuacatl-variable.cpp similarity index 100% rename from arangod/Ahuacatl/ahuacatl-variable.c rename to arangod/Ahuacatl/ahuacatl-variable.cpp diff --git a/arangod/Makefile.files b/arangod/Makefile.files index 0cbcde4b7f..681372fb92 100644 --- a/arangod/Makefile.files +++ b/arangod/Makefile.files @@ -22,29 +22,29 @@ bin_arangod_LDADD = \ bin_arangod_SOURCES = \ arangod/Actions/actions.cpp \ arangod/Actions/RestActionHandler.cpp \ - arangod/Ahuacatl/ahuacatl-access-optimiser.c \ - arangod/Ahuacatl/ahuacatl-ast-node.c \ - arangod/Ahuacatl/ahuacatl-bind-parameter.c \ - arangod/Ahuacatl/ahuacatl-codegen.c \ - arangod/Ahuacatl/ahuacatl-collections.c \ - arangod/Ahuacatl/ahuacatl-context.c \ - arangod/Ahuacatl/ahuacatl-conversions.c \ - arangod/Ahuacatl/ahuacatl-error.c \ - arangod/Ahuacatl/ahuacatl-explain.c \ - arangod/Ahuacatl/ahuacatl-functions.c \ - arangod/Ahuacatl/ahuacatl-grammar.c \ - arangod/Ahuacatl/ahuacatl-index.c \ - arangod/Ahuacatl/ahuacatl-node.c \ - arangod/Ahuacatl/ahuacatl-optimiser.c \ - arangod/Ahuacatl/ahuacatl-parser-functions.c \ - arangod/Ahuacatl/ahuacatl-parser.c \ - arangod/Ahuacatl/ahuacatl-result.c \ - arangod/Ahuacatl/ahuacatl-scope.c \ - arangod/Ahuacatl/ahuacatl-statement-dump.c \ - arangod/Ahuacatl/ahuacatl-statement-walker.c \ - arangod/Ahuacatl/ahuacatl-statementlist.c \ - arangod/Ahuacatl/ahuacatl-tokens.c \ - arangod/Ahuacatl/ahuacatl-variable.c \ + arangod/Ahuacatl/ahuacatl-access-optimiser.cpp \ + arangod/Ahuacatl/ahuacatl-ast-node.cpp \ + arangod/Ahuacatl/ahuacatl-bind-parameter.cpp \ + arangod/Ahuacatl/ahuacatl-codegen.cpp \ + arangod/Ahuacatl/ahuacatl-collections.cpp \ + arangod/Ahuacatl/ahuacatl-context.cpp \ + arangod/Ahuacatl/ahuacatl-conversions.cpp \ + arangod/Ahuacatl/ahuacatl-error.cpp \ + arangod/Ahuacatl/ahuacatl-explain.cpp \ + arangod/Ahuacatl/ahuacatl-functions.cpp \ + arangod/Ahuacatl/ahuacatl-grammar.cpp \ + arangod/Ahuacatl/ahuacatl-index.cpp \ + arangod/Ahuacatl/ahuacatl-node.cpp \ + arangod/Ahuacatl/ahuacatl-optimiser.cpp \ + arangod/Ahuacatl/ahuacatl-parser-functions.cpp \ + arangod/Ahuacatl/ahuacatl-parser.cpp \ + arangod/Ahuacatl/ahuacatl-result.cpp \ + arangod/Ahuacatl/ahuacatl-scope.cpp \ + arangod/Ahuacatl/ahuacatl-statement-dump.cpp \ + arangod/Ahuacatl/ahuacatl-statement-walker.cpp \ + arangod/Ahuacatl/ahuacatl-statementlist.cpp \ + arangod/Ahuacatl/ahuacatl-tokens.cpp \ + arangod/Ahuacatl/ahuacatl-variable.cpp \ arangod/BitIndexes/bitarray.cpp \ arangod/BitIndexes/bitarrayIndex.cpp \ arangod/CapConstraint/cap-constraint.cpp \ @@ -156,21 +156,21 @@ endif ### @brief flex ################################################################################ -FLEX_FILES += \ - arangod/Ahuacatl/ahuacatl-tokens.c +FLEXXX_FILES += \ + arangod/Ahuacatl/ahuacatl-tokens.cpp ################################################################################ ### @brief bison ################################################################################ -BISON_FILES += \ - arangod/Ahuacatl/ahuacatl-grammar.c +BISONXX_FILES += \ + arangod/Ahuacatl/ahuacatl-grammar.cpp if ENABLE_MAINTAINER_MODE CLEANUP += \ arangod/Ahuacatl/ahuacatl-grammar.h \ - arangod/Ahuacatl/ahuacatl-grammar.c + arangod/Ahuacatl/ahuacatl-grammar.cpp endif ################################################################################