#define YYBISON 30802
#define YYBISON_VERSION "3.8.2"
#define YYSKELETON_NAME "yacc.c"
#define YYPURE 1
#define YYPUSH 0
#define YYPULL 1
#line 1 "src/parser.y"
#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "compile.h"
#include "jv_alloc.h"
#include "builtin.h"
#define YYMALLOC jv_mem_alloc
#define YYFREE jv_mem_free
#line 83 "src/parser.c"
# ifndef YY_CAST
# ifdef __cplusplus
# define YY_CAST(Type, Val) static_cast<Type> (Val)
# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
# else
# define YY_CAST(Type, Val) ((Type) (Val))
# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
# endif
# endif
# ifndef YY_NULLPTR
# if defined __cplusplus
# if 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# else
# define YY_NULLPTR ((void*)0)
# endif
# endif
#ifndef YY_YY_SRC_PARSER_H_INCLUDED
# define YY_YY_SRC_PARSER_H_INCLUDED
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int yydebug;
#endif
#line 12 "src/parser.y"
#include "locfile.h"
struct lexer_param;
#define YYLTYPE location
#define YYLLOC_DEFAULT(Loc, Rhs, N) \
do { \
if (N) { \
(Loc).start = YYRHSLOC(Rhs, 1).start; \
(Loc).end = YYRHSLOC(Rhs, N).end; \
} else { \
(Loc).start = YYRHSLOC(Rhs, 0).end; \
(Loc).end = YYRHSLOC(Rhs, 0).end; \
} \
} while (0)
#line 135 "src/parser.c"
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
YYEMPTY = -2,
YYEOF = 0,
YYerror = 256,
YYUNDEF = 257,
INVALID_CHARACTER = 258,
IDENT = 259,
FIELD = 260,
BINDING = 261,
LITERAL = 262,
FORMAT = 263,
REC = 264,
SETMOD = 265,
EQ = 266,
NEQ = 267,
DEFINEDOR = 268,
AS = 269,
DEF = 270,
MODULE = 271,
IMPORT = 272,
INCLUDE = 273,
IF = 274,
THEN = 275,
ELSE = 276,
ELSE_IF = 277,
REDUCE = 278,
FOREACH = 279,
END = 280,
AND = 281,
OR = 282,
TRY = 283,
CATCH = 284,
LABEL = 285,
BREAK = 286,
LOC = 287,
SETPIPE = 288,
SETPLUS = 289,
SETMINUS = 290,
SETMULT = 291,
SETDIV = 292,
SETDEFINEDOR = 293,
LESSEQ = 294,
GREATEREQ = 295,
ALTERNATION = 296,
QQSTRING_START = 297,
QQSTRING_TEXT = 298,
QQSTRING_INTERP_START = 299,
QQSTRING_INTERP_END = 300,
QQSTRING_END = 301,
FUNCDEF = 302,
NONOPT = 303
};
typedef enum yytokentype yytoken_kind_t;
#endif
#define YYEMPTY -2
#define YYEOF 0
#define YYerror 256
#define YYUNDEF 257
#define INVALID_CHARACTER 258
#define IDENT 259
#define FIELD 260
#define BINDING 261
#define LITERAL 262
#define FORMAT 263
#define REC 264
#define SETMOD 265
#define EQ 266
#define NEQ 267
#define DEFINEDOR 268
#define AS 269
#define DEF 270
#define MODULE 271
#define IMPORT 272
#define INCLUDE 273
#define IF 274
#define THEN 275
#define ELSE 276
#define ELSE_IF 277
#define REDUCE 278
#define FOREACH 279
#define END 280
#define AND 281
#define OR 282
#define TRY 283
#define CATCH 284
#define LABEL 285
#define BREAK 286
#define LOC 287
#define SETPIPE 288
#define SETPLUS 289
#define SETMINUS 290
#define SETMULT 291
#define SETDIV 292
#define SETDEFINEDOR 293
#define LESSEQ 294
#define GREATEREQ 295
#define ALTERNATION 296
#define QQSTRING_START 297
#define QQSTRING_TEXT 298
#define QQSTRING_INTERP_START 299
#define QQSTRING_INTERP_END 300
#define QQSTRING_END 301
#define FUNCDEF 302
#define NONOPT 303
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
#line 32 "src/parser.y"
jv literal;
block blk;
#line 256 "src/parser.c"
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif
#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 yyparse (block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr);
#endif
enum yysymbol_kind_t
{
YYSYMBOL_YYEMPTY = -2,
YYSYMBOL_YYEOF = 0,
YYSYMBOL_YYerror = 1,
YYSYMBOL_YYUNDEF = 2,
YYSYMBOL_INVALID_CHARACTER = 3,
YYSYMBOL_IDENT = 4,
YYSYMBOL_FIELD = 5,
YYSYMBOL_BINDING = 6,
YYSYMBOL_LITERAL = 7,
YYSYMBOL_FORMAT = 8,
YYSYMBOL_REC = 9,
YYSYMBOL_SETMOD = 10,
YYSYMBOL_EQ = 11,
YYSYMBOL_NEQ = 12,
YYSYMBOL_DEFINEDOR = 13,
YYSYMBOL_AS = 14,
YYSYMBOL_DEF = 15,
YYSYMBOL_MODULE = 16,
YYSYMBOL_IMPORT = 17,
YYSYMBOL_INCLUDE = 18,
YYSYMBOL_IF = 19,
YYSYMBOL_THEN = 20,
YYSYMBOL_ELSE = 21,
YYSYMBOL_ELSE_IF = 22,
YYSYMBOL_REDUCE = 23,
YYSYMBOL_FOREACH = 24,
YYSYMBOL_END = 25,
YYSYMBOL_AND = 26,
YYSYMBOL_OR = 27,
YYSYMBOL_TRY = 28,
YYSYMBOL_CATCH = 29,
YYSYMBOL_LABEL = 30,
YYSYMBOL_BREAK = 31,
YYSYMBOL_LOC = 32,
YYSYMBOL_SETPIPE = 33,
YYSYMBOL_SETPLUS = 34,
YYSYMBOL_SETMINUS = 35,
YYSYMBOL_SETMULT = 36,
YYSYMBOL_SETDIV = 37,
YYSYMBOL_SETDEFINEDOR = 38,
YYSYMBOL_LESSEQ = 39,
YYSYMBOL_GREATEREQ = 40,
YYSYMBOL_ALTERNATION = 41,
YYSYMBOL_QQSTRING_START = 42,
YYSYMBOL_QQSTRING_TEXT = 43,
YYSYMBOL_QQSTRING_INTERP_START = 44,
YYSYMBOL_QQSTRING_INTERP_END = 45,
YYSYMBOL_QQSTRING_END = 46,
YYSYMBOL_FUNCDEF = 47,
YYSYMBOL_48_ = 48,
YYSYMBOL_49_ = 49,
YYSYMBOL_50_ = 50,
YYSYMBOL_51_ = 51,
YYSYMBOL_52_ = 52,
YYSYMBOL_53_ = 53,
YYSYMBOL_54_ = 54,
YYSYMBOL_55_ = 55,
YYSYMBOL_56_ = 56,
YYSYMBOL_57_ = 57,
YYSYMBOL_NONOPT = 58,
YYSYMBOL_59_ = 59,
YYSYMBOL_60_ = 60,
YYSYMBOL_61_ = 61,
YYSYMBOL_62_ = 62,
YYSYMBOL_63_ = 63,
YYSYMBOL_64_ = 64,
YYSYMBOL_65_ = 65,
YYSYMBOL_66_ = 66,
YYSYMBOL_67_ = 67,
YYSYMBOL_68_ = 68,
YYSYMBOL_69_ = 69,
YYSYMBOL_YYACCEPT = 70,
YYSYMBOL_TopLevel = 71,
YYSYMBOL_Module = 72,
YYSYMBOL_Imports = 73,
YYSYMBOL_FuncDefs = 74,
YYSYMBOL_Exp = 75,
YYSYMBOL_Import = 76,
YYSYMBOL_ImportWhat = 77,
YYSYMBOL_ImportFrom = 78,
YYSYMBOL_FuncDef = 79,
YYSYMBOL_Params = 80,
YYSYMBOL_Param = 81,
YYSYMBOL_StringStart = 82,
YYSYMBOL_String = 83,
YYSYMBOL_QQString = 84,
YYSYMBOL_ElseBody = 85,
YYSYMBOL_ExpD = 86,
YYSYMBOL_Term = 87,
YYSYMBOL_Args = 88,
YYSYMBOL_Arg = 89,
YYSYMBOL_RepPatterns = 90,
YYSYMBOL_Patterns = 91,
YYSYMBOL_Pattern = 92,
YYSYMBOL_ArrayPats = 93,
YYSYMBOL_ObjPats = 94,
YYSYMBOL_ObjPat = 95,
YYSYMBOL_Keyword = 96,
YYSYMBOL_MkDict = 97,
YYSYMBOL_MkDictPair = 98
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
#line 127 "src/parser.y"
#include "lexer.h"
struct lexer_param {
yyscan_t lexer;
};
#define FAIL(loc, msg) \
do { \
location l = loc; \
yyerror(&l, answer, errors, locations, lexer_param_ptr, msg); \
; \
} while (0)
void yyerror(YYLTYPE* loc, block* answer, int* errors,
struct locfile* locations, struct lexer_param* lexer_param_ptr, const char *s){
(*errors)++;
if (strstr(s, "unexpected")) {
#ifdef WIN32
locfile_locate(locations, *loc, "jq: error: %s (Windows cmd shell quoting issues?)", s);
#else
locfile_locate(locations, *loc, "jq: error: %s (Unix shell quoting issues?)", s);
#endif
} else {
locfile_locate(locations, *loc, "jq: error: %s", s);
}
}
int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, block* answer, int* errors,
struct locfile* locations, struct lexer_param* lexer_param_ptr) {
yyscan_t lexer = lexer_param_ptr->lexer;
int tok = jq_yylex(yylval, yylloc, lexer);
if ((tok == LITERAL || tok == QQSTRING_TEXT) && !jv_is_valid(yylval->literal)) {
jv msg = jv_invalid_get_msg(jv_copy(yylval->literal));
if (jv_get_kind(msg) == JV_KIND_STRING) {
FAIL(*yylloc, jv_string_value(msg));
} else {
FAIL(*yylloc, "Invalid literal");
}
jv_free(msg);
jv_free(yylval->literal);
yylval->literal = jv_null();
}
return tok;
}
static jv check_object_key(block k) {
if (block_is_const(k) && block_const_kind(k) != JV_KIND_STRING) {
char errbuf[15];
return jv_string_fmt("Cannot use %s (%s) as object key",
jv_kind_name(block_const_kind(k)),
jv_dump_string_trunc(block_const(k), errbuf, sizeof(errbuf)));
}
return jv_invalid();
}
static block gen_index(block obj, block key) {
return BLOCK(gen_subexp(key), obj, gen_op_simple(INDEX));
}
static block gen_index_opt(block obj, block key) {
return BLOCK(gen_subexp(key), obj, gen_op_simple(INDEX_OPT));
}
static block gen_slice_index(block obj, block start, block end, opcode idx_op) {
block key = BLOCK(gen_subexp(gen_const(jv_object())),
gen_subexp(gen_const(jv_string("start"))),
gen_subexp(start),
gen_op_simple(INSERT),
gen_subexp(gen_const(jv_string("end"))),
gen_subexp(end),
gen_op_simple(INSERT));
return BLOCK(key, obj, gen_op_simple(idx_op));
}
static block constant_fold(block a, block b, int op) {
if (!block_is_single(a) || !block_is_const(a) ||
!block_is_single(b) || !block_is_const(b))
return gen_noop();
jv jv_a = block_const(a);
block_free(a);
jv jv_b = block_const(b);
block_free(b);
jv res = jv_invalid();
switch (op) {
case '+': res = binop_plus(jv_a, jv_b); break;
case '-': res = binop_minus(jv_a, jv_b); break;
case '*': res = binop_multiply(jv_a, jv_b); break;
case '/': res = binop_divide(jv_a, jv_b); break;
case '%': res = binop_mod(jv_a, jv_b); break;
case EQ: res = binop_equal(jv_a, jv_b); break;
case NEQ: res = binop_notequal(jv_a, jv_b); break;
case '<': res = binop_less(jv_a, jv_b); break;
case '>': res = binop_greater(jv_a, jv_b); break;
case LESSEQ: res = binop_lesseq(jv_a, jv_b); break;
case GREATEREQ: res = binop_greatereq(jv_a, jv_b); break;
}
if (jv_is_valid(res))
return gen_const(res);
return gen_error(jv_invalid_get_msg(res));
}
static block gen_binop(block a, block b, int op) {
block folded = constant_fold(a, b, op);
if (!block_is_noop(folded))
return folded;
const char* funcname = 0;
switch (op) {
case '+': funcname = "_plus"; break;
case '-': funcname = "_minus"; break;
case '*': funcname = "_multiply"; break;
case '/': funcname = "_divide"; break;
case '%': funcname = "_mod"; break;
case EQ: funcname = "_equal"; break;
case NEQ: funcname = "_notequal"; break;
case '<': funcname = "_less"; break;
case '>': funcname = "_greater"; break;
case LESSEQ: funcname = "_lesseq"; break;
case GREATEREQ: funcname = "_greatereq"; break;
}
assert(funcname);
return gen_call(funcname, BLOCK(gen_lambda(a), gen_lambda(b)));
}
static block gen_format(block a, jv fmt) {
return BLOCK(a, gen_call("format", gen_lambda(gen_const(fmt))));
}
static block gen_definedor_assign(block object, block val) {
block tmp = gen_op_var_fresh(STOREV, "tmp");
return BLOCK(gen_op_simple(DUP),
val, tmp,
gen_call("_modify", BLOCK(gen_lambda(object),
gen_lambda(gen_definedor(gen_noop(),
gen_op_bound(LOADV, tmp))))));
}
static block gen_update(block object, block val, int optype) {
block tmp = gen_op_var_fresh(STOREV, "tmp");
return BLOCK(gen_op_simple(DUP),
val,
tmp,
gen_call("_modify", BLOCK(gen_lambda(object),
gen_lambda(gen_binop(gen_noop(),
gen_op_bound(LOADV, tmp),
optype)))));
}
static block gen_loc_object(location *loc, struct locfile *locations) {
return gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
jv_string("line"), jv_number(locfile_get_line(locations, loc->start) + 1)));
}
#line 554 "src/parser.c"
#ifdef short
# undef short
#endif
#ifndef __PTRDIFF_MAX__
# include <limits.h>
# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stdint.h>
# define YY_STDINT_H
# endif
#endif
#ifdef __INT_LEAST8_MAX__
typedef __INT_LEAST8_TYPE__ yytype_int8;
#elif defined YY_STDINT_H
typedef int_least8_t yytype_int8;
#else
typedef signed char yytype_int8;
#endif
#ifdef __INT_LEAST16_MAX__
typedef __INT_LEAST16_TYPE__ yytype_int16;
#elif defined YY_STDINT_H
typedef int_least16_t yytype_int16;
#else
typedef short yytype_int16;
#endif
#ifdef __hpux
# undef UINT_LEAST8_MAX
# undef UINT_LEAST16_MAX
# define UINT_LEAST8_MAX 255
# define UINT_LEAST16_MAX 65535
#endif
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
&& UINT_LEAST8_MAX <= INT_MAX)
typedef uint_least8_t yytype_uint8;
#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
typedef unsigned char yytype_uint8;
#else
typedef short yytype_uint8;
#endif
#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
typedef __UINT_LEAST16_TYPE__ yytype_uint16;
#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
&& UINT_LEAST16_MAX <= INT_MAX)
typedef uint_least16_t yytype_uint16;
#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
typedef unsigned short yytype_uint16;
#else
typedef int yytype_uint16;
#endif
#ifndef YYPTRDIFF_T
# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
# define YYPTRDIFF_T __PTRDIFF_TYPE__
# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
# elif defined PTRDIFF_MAX
# ifndef ptrdiff_t
# include <stddef.h>
# endif
# define YYPTRDIFF_T ptrdiff_t
# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
# else
# define YYPTRDIFF_T long
# define YYPTRDIFF_MAXIMUM LONG_MAX
# endif
#endif
#ifndef YYSIZE_T
# ifdef __SIZE_TYPE__
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stddef.h>
# define YYSIZE_T size_t
# else
# define YYSIZE_T unsigned
# endif
#endif
#define YYSIZE_MAXIMUM \
YY_CAST (YYPTRDIFF_T, \
(YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
? YYPTRDIFF_MAXIMUM \
: YY_CAST (YYSIZE_T, -1)))
#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
typedef yytype_int16 yy_state_t;
typedef int yy_state_fast_t;
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h>
# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
# endif
# endif
# ifndef YY_
# define YY_(Msgid) Msgid
# endif
#endif
#ifndef YY_ATTRIBUTE_PURE
# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
# else
# define YY_ATTRIBUTE_PURE
# endif
#endif
#ifndef YY_ATTRIBUTE_UNUSED
# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
# define YY_ATTRIBUTE_UNUSED
# endif
#endif
#if ! defined lint || defined __GNUC__
# define YY_USE(E) ((void) (E))
#else
# define YY_USE(E)
#endif
#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# 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)
#endif
#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
# define YY_IGNORE_USELESS_CAST_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
# define YY_IGNORE_USELESS_CAST_END \
_Pragma ("GCC diagnostic pop")
#endif
#ifndef YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_END
#endif
#define YY_ASSERT(E) ((void) (0 && (E)))
#if 1
# ifdef YYSTACK_USE_ALLOCA
# if YYSTACK_USE_ALLOCA
# ifdef __GNUC__
# define YYSTACK_ALLOC __builtin_alloca
# elif defined __BUILTIN_VA_ARG_INCR
# include <alloca.h>
# elif defined _AIX
# define YYSTACK_ALLOC __alloca
# elif defined _MSC_VER
# include <malloc.h>
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
# include <stdlib.h>
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
# endif
# endif
# endif
# endif
# endif
# ifdef YYSTACK_ALLOC
# define YYSTACK_FREE(Ptr) do { ; } while (0)
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM 4032
# 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 <stdlib.h>
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
# endif
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
# if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T);
# endif
# endif
# ifndef YYFREE
# define YYFREE free
# if ! defined free && ! defined EXIT_SUCCESS
void free (void *);
# endif
# endif
# endif
#endif
#if (! defined yyoverflow \
&& (! defined __cplusplus \
|| (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
&& defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
union yyalloc
{
yy_state_t yyss_alloc;
YYSTYPE yyvs_alloc;
YYLTYPE yyls_alloc;
};
# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
# define YYSTACK_BYTES(N) \
((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
+ YYSIZEOF (YYLTYPE)) \
+ 2 * YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
do \
{ \
YYPTRDIFF_T yynewbytes; \
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
Stack = &yyptr->Stack_alloc; \
yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
yyptr += yynewbytes / YYSIZEOF (*yyptr); \
} \
while (0)
#endif
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
# define YYCOPY(Dst, Src, Count) \
__builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
# else
# define YYCOPY(Dst, Src, Count) \
do \
{ \
YYPTRDIFF_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
while (0)
# endif
# endif
#endif
#define YYFINAL 30
#define YYLAST 2051
#define YYNTOKENS 70
#define YYNNTS 29
#define YYNRULES 169
#define YYNSTATES 315
#define YYMAXUTOK 303
#define YYTRANSLATE(YYX) \
(0 <= (YYX) && (YYX) <= YYMAXUTOK \
? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
: YYSYMBOL_YYUNDEF)
static const yytype_int8 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, 69, 57, 2, 2,
61, 62, 55, 53, 49, 54, 64, 56, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 63, 60,
51, 50, 52, 59, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 65, 2, 66, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 67, 48, 68, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 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, 58
};
#if YYDEBUG
static const yytype_int16 yyrline[] =
{
0, 290, 290, 293, 298, 301, 316, 319, 324, 327,
332, 336, 339, 343, 347, 351, 354, 359, 362, 365,
370, 377, 381, 385, 389, 393, 397, 401, 405, 409,
413, 417, 421, 425, 429, 433, 437, 441, 445, 449,
453, 457, 461, 465, 469, 473, 477, 481, 486, 489,
506, 515, 522, 530, 541, 546, 552, 555, 560, 564,
571, 574, 580, 587, 590, 593, 599, 602, 605, 610,
613, 616, 622, 625, 628, 636, 640, 643, 646, 649,
652, 655, 658, 661, 664, 668, 674, 677, 680, 683,
686, 689, 692, 695, 698, 701, 704, 707, 710, 713,
716, 719, 722, 725, 728, 731, 734, 756, 760, 764,
767, 779, 784, 785, 786, 787, 790, 793, 798, 803,
806, 811, 814, 819, 823, 826, 831, 834, 839, 842,
847, 850, 853, 856, 859, 862, 870, 876, 879, 882,
885, 888, 891, 894, 897, 900, 903, 906, 909, 912,
915, 918, 921, 924, 927, 932, 935, 936, 937, 940,
943, 946, 949, 953, 958, 962, 966, 970, 974, 982
};
#endif
#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
#if 1
static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
static const char *const yytname[] =
{
"\"end of file\"", "error", "\"invalid token\"", "INVALID_CHARACTER",
"IDENT", "FIELD", "BINDING", "LITERAL", "FORMAT", "\"..\"", "\"%=\"",
"\"==\"", "\"!=\"", "\"//\"", "\"as\"", "\"def\"", "\"module\"",
"\"import\"", "\"include\"", "\"if\"", "\"then\"", "\"else\"",
"\"elif\"", "\"reduce\"", "\"foreach\"", "\"end\"", "\"and\"", "\"or\"",
"\"try\"", "\"catch\"", "\"label\"", "\"break\"", "\"$__loc__\"",
"\"|=\"", "\"+=\"", "\"-=\"", "\"*=\"", "\"/=\"", "\"//=\"", "\"<=\"",
"\">=\"", "\"?//\"", "QQSTRING_START", "QQSTRING_TEXT",
"QQSTRING_INTERP_START", "QQSTRING_INTERP_END", "QQSTRING_END",
"FUNCDEF", "'|'", "','", "'='", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'",
"'%'", "NONOPT", "'?'", "';'", "'('", "')'", "':'", "'.'", "'['", "']'",
"'{'", "'}'", "'$'", "$accept", "TopLevel", "Module", "Imports",
"FuncDefs", "Exp", "Import", "ImportWhat", "ImportFrom", "FuncDef",
"Params", "Param", "StringStart", "String", "QQString", "ElseBody",
"ExpD", "Term", "Args", "Arg", "RepPatterns", "Patterns", "Pattern",
"ArrayPats", "ObjPats", "ObjPat", "Keyword", "MkDict", "MkDictPair", YY_NULLPTR
};
static const char *
yysymbol_name (yysymbol_kind_t yysymbol)
{
return yytname[yysymbol];
}
#endif
#define YYPACT_NINF (-157)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
#define YYTABLE_NINF (-156)
#define yytable_value_is_error(Yyn) \
((Yyn) == YYTABLE_NINF)
static const yytype_int16 yypact[] =
{
-14, 881, 15, 62, -33, -23, -157, -157, -9, -157,
37, 881, 912, 912, 881, 40, 2, -157, -157, 881,
193, 282, 415, 595, -18, 1400, 881, -157, -157, 12,
-157, 1, 1, 881, 62, 683, 881, -157, -157, -11,
1756, 17, 49, 26, 10, -157, -157, 14, 21, 1230,
-157, 74, -9, 53, 51, -157, 1041, -26, 63, 64,
-157, -157, -157, -157, -157, -157, -157, -157, -157, -157,
-157, -157, -157, -157, -157, -157, -157, -157, -157, 881,
65, 69, 70, 82, 67, 881, 881, 881, 881, 881,
881, 881, 881, 881, 881, 881, 881, 881, 881, 881,
881, 881, 881, 881, 881, 881, 881, 881, 881, -157,
-157, 1924, 13, 87, -5, -4, 348, 127, -157, -157,
-157, 1924, 881, -157, -157, 1451, 1924, 56, -157, 68,
881, 482, -5, -5, 533, 881, -157, -157, -157, -157,
-157, -157, 651, 513, -157, 513, 513, 1264, 513, 513,
-157, 651, 144, 1992, 113, 113, 1958, 594, 913, 1992,
1992, 1992, 1992, 1992, 1992, 113, 113, 1924, 1958, 1992,
113, 113, 14, 14, 98, 98, 98, -157, 881, -157,
-157, -157, -5, 974, 117, 111, 119, 749, 102, 96,
881, 104, 1007, 116, -157, -157, 881, -157, -157, -157,
61, -157, 1502, -157, 1706, 110, 112, -157, -157, 1924,
-10, -157, 513, 126, 0, 126, 126, 115, 126, 126,
-157, -157, 1790, -157, -37, 118, 120, 121, 881, 122,
-38, -157, 124, -5, 881, 123, 1075, -157, -157, 1109,
-157, 815, 131, -157, -157, -157, 68, 128, -157, 881,
881, -157, -157, 881, 881, -157, 513, 513, -157, -5,
-157, -5, -5, -5, 1298, -5, 974, -157, -5, 134,
1924, -157, 133, 137, 145, 1143, -157, -157, 881, 1840,
1890, 1553, 1604, 126, 126, -157, -157, -157, -157, 130,
-157, -157, -157, -157, -157, -157, 146, 1655, -157, 881,
881, 881, -5, -157, -157, 1706, 1332, 1177, -157, -157,
-157, 881, -157, 1366, -157
};
static const yytype_uint8 yydefact[] =
{
4, 0, 0, 6, 110, 81, 108, 100, 102, 73,
0, 0, 0, 0, 0, 0, 0, 109, 61, 0,
0, 0, 0, 0, 0, 0, 0, 63, 101, 47,
1, 0, 0, 8, 6, 0, 0, 77, 60, 0,
0, 0, 0, 18, 0, 75, 74, 32, 0, 0,
84, 0, 0, 83, 0, 105, 0, 0, 165, 164,
137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
147, 148, 149, 150, 151, 152, 153, 154, 166, 0,
162, 167, 0, 156, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
5, 10, 0, 80, 0, 0, 0, 0, 53, 52,
3, 2, 8, 7, 48, 0, 118, 0, 116, 0,
0, 0, 0, 0, 0, 0, 112, 103, 85, 79,
113, 104, 0, 0, 115, 0, 0, 0, 0, 0,
106, 0, 0, 40, 41, 42, 25, 24, 23, 27,
31, 34, 36, 39, 26, 45, 46, 28, 29, 22,
43, 44, 30, 33, 35, 37, 38, 64, 0, 62,
76, 123, 0, 0, 0, 0, 122, 0, 82, 0,
0, 91, 0, 0, 9, 49, 0, 111, 59, 58,
0, 56, 0, 16, 0, 0, 0, 19, 17, 20,
0, 158, 0, 169, 71, 159, 163, 0, 161, 160,
157, 107, 0, 126, 0, 0, 0, 130, 0, 0,
0, 128, 0, 0, 0, 93, 0, 78, 114, 0,
90, 0, 87, 51, 50, 117, 0, 0, 54, 0,
0, 68, 15, 0, 0, 70, 0, 0, 65, 0,
124, 0, 0, 0, 0, 0, 0, 125, 0, 121,
11, 92, 89, 99, 98, 0, 86, 57, 0, 0,
0, 0, 0, 69, 168, 127, 136, 132, 131, 0,
134, 129, 133, 88, 96, 95, 97, 0, 67, 0,
0, 0, 0, 94, 55, 0, 0, 0, 135, 66,
12, 0, 14, 0, 13
};
static const yytype_int16 yypgoto[] =
{
-157, -157, -157, 169, 57, -1, -157, -157, 148, -13,
-157, -39, -157, -7, -157, -96, -101, -6, -157, 18,
-157, -66, -114, -157, -157, -56, -156, -102, -157
};
static const yytype_uint8 yydefgoto[] =
{
0, 2, 3, 33, 120, 111, 34, 35, 117, 26,
200, 201, 27, 28, 112, 252, 213, 29, 127, 128,
184, 185, 186, 224, 230, 231, 81, 82, 83
};
static const yytype_int16 yytable[] =
{
25, 181, 1, 45, 52, 113, 41, 42, 46, 52,
40, 266, 259, 43, 53, 30, 80, 113, 47, 49,
122, 56, 113, 142, 118, 118, 114, 232, 36, 260,
267, 132, 121, 38, 125, 126, 37, 143, 18, 142,
211, 39, 144, 18, 215, 216, 44, 218, 219, 220,
129, 84, 130, 143, 113, 134, 177, 178, 135, 179,
182, 187, 183, 133, 115, 116, 205, 206, 223, 106,
107, 108, 198, 109, 199, 138, 115, 116, 147, 31,
32, 115, 116, 136, 153, 154, 155, 156, 157, 158,
159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
169, 170, 171, 172, 173, 174, 175, 176, 188, 122,
232, 255, 139, 115, 116, 192, 196, 140, 197, 269,
243, 246, 244, 247, -156, -156, 145, 146, 148, 202,
204, 151, 149, 208, 209, 80, 152, 214, 150, 214,
214, 193, 214, 214, 80, 285, 180, 286, 287, 288,
221, 290, -156, -156, 292, 283, 284, 109, 233, 234,
-120, 237, 238, 240, -156, -156, 104, 105, 106, 107,
108, 253, 109, 254, 256, -119, 229, 222, 257, 194,
119, 261, 271, 262, 263, 265, 236, 268, 308, 239,
276, 278, 293, 302, 48, 126, 294, 4, 5, 6,
7, 8, 9, 123, 295, 303, 214, 277, 10, 309,
291, 0, 11, 0, 245, 0, 12, 13, 0, 0,
0, 14, 0, 15, 16, 17, 0, 264, 0, 0,
0, 0, 0, 270, 0, 18, 0, 0, 0, 0,
275, 0, 0, 0, 0, 0, 0, 19, 279, 280,
214, 214, 281, 282, 20, 0, 0, 21, 22, 229,
23, 0, 24, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 297, 0, 0,
0, 0, -72, 50, 0, 0, 51, -72, 0, 0,
52, 0, -72, -72, -72, -72, -72, 0, 305, 306,
307, 0, -72, -72, -72, 0, 0, -72, -72, -72,
313, -72, 0, 0, 0, -72, -72, -72, -72, -72,
-72, -72, -72, 0, 18, 0, 0, -72, 0, 0,
-72, -72, -72, -72, -72, -72, -72, -72, -72, -72,
0, -72, -72, 0, -72, -72, -72, -72, -72, 189,
-72, 0, 4, 5, 6, 7, 8, 9, 0, 0,
0, 0, 0, 10, 0, 0, 0, 11, 0, 0,
0, 12, 13, 0, 0, 0, 14, 0, 15, 16,
17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 19, 0, 0, 0, 0, 0, 0, 20,
0, 190, 21, 22, 191, 23, 54, 24, 0, 4,
5, 6, 7, 8, 9, 0, 0, 0, 0, 0,
10, 0, 0, 0, 11, 0, 0, 0, 12, 13,
0, 0, 0, 14, 0, 15, 16, 17, 0, 0,
0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 19,
0, 0, 0, 0, 0, 0, 20, 0, 0, 21,
22, 55, 23, 203, 24, 0, 4, 5, 6, 7,
8, 9, 0, 0, 0, 0, 0, 10, 0, 0,
0, 11, 0, 0, 0, 12, 13, 0, 0, 0,
14, 0, 15, 16, 17, 0, 0, 4, 5, 6,
7, 8, 9, 0, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 207, 0, 19, 4, 5, 6,
7, 8, 9, 20, 16, 17, 21, 22, 10, 23,
0, 24, 11, 0, 0, 18, 12, 13, 0, 0,
0, 14, 0, 15, 16, 17, 0, 212, 0, 0,
0, 0, 0, 0, 20, 18, 0, 21, 22, 0,
23, 0, 24, 0, 0, 0, 0, 19, 0, 0,
0, 0, 0, 0, 20, 0, 57, 21, 22, 58,
23, 59, 24, 52, 0, 86, 87, 0, 0, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
0, 0, 0, 97, 98, 0, 0, 18, 0, 0,
0, 0, 0, 0, 0, 102, 103, 104, 105, 106,
107, 108, 210, 109, 0, 58, 79, 59, 0, 52,
0, 0, 0, -155, 0, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 0, 0, 0, 4, 5, 6,
7, 8, 9, 18, 0, 0, 0, 0, 10, 0,
0, 0, 11, 0, 0, 0, 12, 13, 0, 0,
0, 14, 79, 15, 16, 17, 0, 0, 0, -155,
0, 0, 0, 0, 0, 18, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 19, 0, 0,
0, 0, 0, 124, 20, 0, 0, 21, 22, 0,
23, 0, 24, 4, 5, 6, 7, 8, 9, 0,
0, 0, 0, 0, 10, 0, 0, 0, 11, 0,
0, 0, 12, 13, 0, 0, 0, 14, 0, 15,
16, 17, 0, 0, 0, 0, 0, 0, 0, 0,
0, 18, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
20, 0, 0, 21, 22, 235, 23, 0, 24, 4,
5, 6, 7, 8, 9, 0, 0, 0, 0, 0,
10, 0, 0, 0, 11, 0, 0, 0, 12, 13,
0, 0, 0, 14, 0, 15, 16, 17, 0, 0,
0, 0, 0, 0, 0, 0, 0, 18, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 19,
0, 0, 0, 0, 0, 0, 20, 0, 0, 21,
22, 274, 23, 0, 24, 4, 5, 6, 7, 8,
9, 0, 0, 0, 0, 0, 10, 0, 0, 0,
11, 0, 0, 0, 12, 13, 0, 0, 0, 14,
0, 15, 16, 17, 0, 0, 4, 5, 6, 7,
8, 9, 0, 18, 86, 87, 0, 0, 0, 0,
0, 0, 0, 0, 0, 19, 0, 0, 0, 89,
0, 0, 20, 16, 17, 21, 22, 0, 23, 0,
24, 0, 97, 98, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 102, 103, 104, 105, 106, 107,
108, 0, 109, 20, 0, 225, 21, 22, 226, 23,
227, 24, 52, 0, 0, 0, 0, 0, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 18, 85, 86, 87,
88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 89, 90, 228, 0, 0, 0, 0,
91, 92, 93, 94, 95, 96, 97, 98, 0, 0,
0, 85, 86, 87, 88, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 0, 109, 89, 90, 0,
241, 0, 0, 242, 91, 92, 93, 94, 95, 96,
97, 98, 0, 0, 0, 85, 86, 87, 88, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 0,
109, 89, 90, 0, 0, 0, 0, 141, 91, 92,
93, 94, 95, 96, 97, 98, 0, 0, 0, 85,
86, 87, 88, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 0, 109, 89, 90, 0, 0, 0,
0, 272, 91, 92, 93, 94, 95, 96, 97, 98,
0, 0, 0, 85, 86, 87, 88, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 0, 109, 89,
90, 0, 0, 0, 0, 273, 91, 92, 93, 94,
95, 96, 97, 98, 0, 0, 0, 85, 86, 87,
88, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 0, 109, 89, 90, 0, 0, 0, 0, 296,
91, 92, 93, 94, 95, 96, 97, 98, 0, 0,
0, 0, 0, 0, 0, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 0, 109, 311, 0, 312,
85, 86, 87, 88, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 89, 90, 0, 0,
0, 0, 0, 91, 92, 93, 94, 95, 96, 97,
98, 0, 0, 0, 85, 86, 87, 88, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 0, 109,
89, 90, 137, 0, 0, 0, 0, 91, 92, 93,
94, 95, 96, 97, 98, 0, 0, 0, 85, 86,
87, 88, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 0, 109, 89, 90, 217, 0, 0, 0,
0, 91, 92, 93, 94, 95, 96, 97, 98, 0,
0, 0, 85, 86, 87, 88, 99, 100, 101, 102,
103, 104, 105, 106, 107, 108, 0, 109, 89, 90,
289, 0, 0, 0, 0, 91, 92, 93, 94, 95,
96, 97, 98, 0, 0, 0, 85, 86, 87, 88,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
0, 109, 89, 90, 310, 0, 0, 0, 0, 91,
92, 93, 94, 95, 96, 97, 98, 0, 0, 0,
85, 86, 87, 88, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 0, 109, 89, 90, 314, 0,
0, 0, 0, 91, 92, 93, 94, 95, 96, 97,
98, 0, 0, 0, 0, 0, 0, 0, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 0, 109,
110, 85, 86, 87, 88, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 89, 90, 0,
0, 0, 0, 0, 91, 92, 93, 94, 95, 96,
97, 98, 0, 0, 0, 0, 0, 0, 0, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 0,
109, 195, 85, 86, 87, 88, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 89, 90,
0, 0, 0, 0, 0, 91, 92, 93, 94, 95,
96, 97, 98, 0, 0, 0, 0, 0, 0, 0,
99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
0, 109, 248, 85, 86, 87, 88, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 89,
90, 0, 0, 0, 0, 0, 91, 92, 93, 94,
95, 96, 97, 98, 0, 0, 0, 0, 0, 0,
0, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 0, 109, 300, 85, 86, 87, 88, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89, 90, 0, 0, 0, 0, 0, 91, 92, 93,
94, 95, 96, 97, 98, 0, 0, 0, 0, 0,
0, 0, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 0, 109, 301, 85, 86, 87, 88, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 89, 90, 0, 0, 0, 0, 0, 91, 92,
93, 94, 95, 96, 97, 98, 0, 0, 0, 0,
0, 0, 0, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 0, 109, 304, 85, 86, 87, 88,
0, 0, 0, 0, 0, 0, 0, 249, 250, 0,
0, 251, 89, 90, 0, 0, 0, 0, 0, 91,
92, 93, 94, 95, 96, 97, 98, 0, 0, 0,
0, 0, 0, 0, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 0, 109, 85, 86, 87, 88,
0, 0, 0, 0, 0, 0, 131, 0, 0, 0,
0, 0, 89, 90, 0, 0, 0, 0, 0, 91,
92, 93, 94, 95, 96, 97, 98, 0, 0, 0,
85, 86, 87, 88, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 0, 109, 89, 90, 0, 0,
0, 0, 0, 91, 92, 93, 94, 95, 96, 97,
98, 0, 0, 0, 0, 258, 0, 0, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 0, 109,
85, 86, 87, 88, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 298, 89, 90, 0, 0,
0, 0, 0, 91, 92, 93, 94, 95, 96, 97,
98, 0, 0, 0, 0, 0, 0, 0, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 0, 109,
85, 86, 87, 88, 0, 0, 0, 0, 0, 0,
299, 0, 0, 0, 0, 0, 89, 90, 0, 0,
0, 0, 0, 91, 92, 93, 94, 95, 96, 97,
98, 0, 0, 0, 85, 86, 87, 88, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 0, 109,
89, 90, 0, 0, 0, 0, 0, 91, 92, 93,
94, 95, 96, 97, 98, 0, 0, 0, 85, 86,
87, 88, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 0, 109, 89, 90, 0, 0, 0, 0,
0, 91, 92, 93, 94, 95, 96, 97, 98, 0,
0, 0, -156, 86, 87, 0, 0, 0, 101, 102,
103, 104, 105, 106, 107, 108, 0, 109, 89, 90,
0, 0, 0, 0, 0, -156, -156, -156, -156, -156,
-156, 97, 98, 0, 0, 0, 0, 0, 0, 0,
0, 0, -156, 102, 103, 104, 105, 106, 107, 108,
0, 109
};
static const yytype_int16 yycheck[] =
{
1, 6, 16, 1, 8, 5, 12, 13, 6, 8,
11, 49, 49, 14, 21, 0, 23, 5, 19, 20,
33, 22, 5, 49, 31, 32, 14, 183, 61, 66,
68, 14, 33, 42, 35, 36, 59, 63, 42, 49,
142, 4, 68, 42, 145, 146, 6, 148, 149, 151,
61, 69, 63, 63, 5, 29, 43, 44, 48, 46,
65, 65, 67, 14, 64, 65, 132, 133, 182, 55,
56, 57, 4, 59, 6, 1, 64, 65, 79, 17,
18, 64, 65, 62, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 115, 122,
266, 212, 59, 64, 65, 116, 60, 66, 62, 233,
4, 60, 6, 62, 11, 12, 63, 63, 63, 130,
131, 49, 63, 134, 135, 142, 69, 143, 68, 145,
146, 14, 148, 149, 151, 259, 59, 261, 262, 263,
6, 265, 39, 40, 268, 256, 257, 59, 41, 48,
41, 59, 66, 59, 51, 52, 53, 54, 55, 56,
57, 61, 59, 61, 48, 41, 183, 178, 63, 122,
32, 63, 59, 63, 63, 63, 187, 63, 302, 190,
59, 63, 59, 63, 1, 196, 59, 4, 5, 6,
7, 8, 9, 34, 59, 59, 212, 246, 15, 305,
266, -1, 19, -1, 196, -1, 23, 24, -1, -1,
-1, 28, -1, 30, 31, 32, -1, 228, -1, -1,
-1, -1, -1, 234, -1, 42, -1, -1, -1, -1,
241, -1, -1, -1, -1, -1, -1, 54, 249, 250,
256, 257, 253, 254, 61, -1, -1, 64, 65, 266,
67, -1, 69, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 278, -1, -1,
-1, -1, 0, 1, -1, -1, 4, 5, -1, -1,
8, -1, 10, 11, 12, 13, 14, -1, 299, 300,
301, -1, 20, 21, 22, -1, -1, 25, 26, 27,
311, 29, -1, -1, -1, 33, 34, 35, 36, 37,
38, 39, 40, -1, 42, -1, -1, 45, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
-1, 59, 60, -1, 62, 63, 64, 65, 66, 1,
68, -1, 4, 5, 6, 7, 8, 9, -1, -1,
-1, -1, -1, 15, -1, -1, -1, 19, -1, -1,
-1, 23, 24, -1, -1, -1, 28, -1, 30, 31,
32, -1, -1, -1, -1, -1, -1, -1, -1, -1,
42, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 54, -1, -1, -1, -1, -1, -1, 61,
-1, 63, 64, 65, 66, 67, 1, 69, -1, 4,
5, 6, 7, 8, 9, -1, -1, -1, -1, -1,
15, -1, -1, -1, 19, -1, -1, -1, 23, 24,
-1, -1, -1, 28, -1, 30, 31, 32, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 42, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 54,
-1, -1, -1, -1, -1, -1, 61, -1, -1, 64,
65, 66, 67, 1, 69, -1, 4, 5, 6, 7,
8, 9, -1, -1, -1, -1, -1, 15, -1, -1,
-1, 19, -1, -1, -1, 23, 24, -1, -1, -1,
28, -1, 30, 31, 32, -1, -1, 4, 5, 6,
7, 8, 9, -1, 42, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 1, -1, 54, 4, 5, 6,
7, 8, 9, 61, 31, 32, 64, 65, 15, 67,
-1, 69, 19, -1, -1, 42, 23, 24, -1, -1,
-1, 28, -1, 30, 31, 32, -1, 54, -1, -1,
-1, -1, -1, -1, 61, 42, -1, 64, 65, -1,
67, -1, 69, -1, -1, -1, -1, 54, -1, -1,
-1, -1, -1, -1, 61, -1, 1, 64, 65, 4,
67, 6, 69, 8, -1, 11, 12, -1, -1, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, -1, -1,
-1, -1, -1, 39, 40, -1, -1, 42, -1, -1,
-1, -1, -1, -1, -1, 51, 52, 53, 54, 55,
56, 57, 1, 59, -1, 4, 61, 6, -1, 8,
-1, -1, -1, 68, -1, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, -1, -1, -1, 4, 5, 6,
7, 8, 9, 42, -1, -1, -1, -1, 15, -1,
-1, -1, 19, -1, -1, -1, 23, 24, -1, -1,
-1, 28, 61, 30, 31, 32, -1, -1, -1, 68,
-1, -1, -1, -1, -1, 42, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 54, -1, -1,
-1, -1, -1, 60, 61, -1, -1, 64, 65, -1,
67, -1, 69, 4, 5, 6, 7, 8, 9, -1,
-1, -1, -1, -1, 15, -1, -1, -1, 19, -1,
-1, -1, 23, 24, -1, -1, -1, 28, -1, 30,
31, 32, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 42, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 54, -1, -1, -1, -1, -1, -1,
61, -1, -1, 64, 65, 66, 67, -1, 69, 4,
5, 6, 7, 8, 9, -1, -1, -1, -1, -1,
15, -1, -1, -1, 19, -1, -1, -1, 23, 24,
-1, -1, -1, 28, -1, 30, 31, 32, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 42, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 54,
-1, -1, -1, -1, -1, -1, 61, -1, -1, 64,
65, 66, 67, -1, 69, 4, 5, 6, 7, 8,
9, -1, -1, -1, -1, -1, 15, -1, -1, -1,
19, -1, -1, -1, 23, 24, -1, -1, -1, 28,
-1, 30, 31, 32, -1, -1, 4, 5, 6, 7,
8, 9, -1, 42, 11, 12, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 54, -1, -1, -1, 26,
-1, -1, 61, 31, 32, 64, 65, -1, 67, -1,
69, -1, 39, 40, 42, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 51, 52, 53, 54, 55, 56,
57, -1, 59, 61, -1, 1, 64, 65, 4, 67,
6, 69, 8, -1, -1, -1, -1, -1, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 42, 10, 11, 12,
13, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 26, 27, 61, -1, -1, -1, -1,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1,
-1, 10, 11, 12, 13, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, -1, 59, 26, 27, -1,
63, -1, -1, 66, 33, 34, 35, 36, 37, 38,
39, 40, -1, -1, -1, 10, 11, 12, 13, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
59, 26, 27, -1, -1, -1, -1, 66, 33, 34,
35, 36, 37, 38, 39, 40, -1, -1, -1, 10,
11, 12, 13, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, -1, 59, 26, 27, -1, -1, -1,
-1, 66, 33, 34, 35, 36, 37, 38, 39, 40,
-1, -1, -1, 10, 11, 12, 13, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, -1, 59, 26,
27, -1, -1, -1, -1, 66, 33, 34, 35, 36,
37, 38, 39, 40, -1, -1, -1, 10, 11, 12,
13, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, -1, 59, 26, 27, -1, -1, -1, -1, 66,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1,
-1, -1, -1, -1, -1, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
10, 11, 12, 13, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 26, 27, -1, -1,
-1, -1, -1, 33, 34, 35, 36, 37, 38, 39,
40, -1, -1, -1, 10, 11, 12, 13, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
26, 27, 62, -1, -1, -1, -1, 33, 34, 35,
36, 37, 38, 39, 40, -1, -1, -1, 10, 11,
12, 13, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, -1, 59, 26, 27, 62, -1, -1, -1,
-1, 33, 34, 35, 36, 37, 38, 39, 40, -1,
-1, -1, 10, 11, 12, 13, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, -1, 59, 26, 27,
62, -1, -1, -1, -1, 33, 34, 35, 36, 37,
38, 39, 40, -1, -1, -1, 10, 11, 12, 13,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
-1, 59, 26, 27, 62, -1, -1, -1, -1, 33,
34, 35, 36, 37, 38, 39, 40, -1, -1, -1,
10, 11, 12, 13, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, -1, 59, 26, 27, 62, -1,
-1, -1, -1, 33, 34, 35, 36, 37, 38, 39,
40, -1, -1, -1, -1, -1, -1, -1, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
60, 10, 11, 12, 13, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 26, 27, -1,
-1, -1, -1, -1, 33, 34, 35, 36, 37, 38,
39, 40, -1, -1, -1, -1, -1, -1, -1, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
59, 60, 10, 11, 12, 13, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
-1, -1, -1, -1, -1, 33, 34, 35, 36, 37,
38, 39, 40, -1, -1, -1, -1, -1, -1, -1,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
-1, 59, 60, 10, 11, 12, 13, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 26,
27, -1, -1, -1, -1, -1, 33, 34, 35, 36,
37, 38, 39, 40, -1, -1, -1, -1, -1, -1,
-1, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, -1, 59, 60, 10, 11, 12, 13, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
26, 27, -1, -1, -1, -1, -1, 33, 34, 35,
36, 37, 38, 39, 40, -1, -1, -1, -1, -1,
-1, -1, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, -1, 59, 60, 10, 11, 12, 13, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 26, 27, -1, -1, -1, -1, -1, 33, 34,
35, 36, 37, 38, 39, 40, -1, -1, -1, -1,
-1, -1, -1, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, -1, 59, 60, 10, 11, 12, 13,
-1, -1, -1, -1, -1, -1, -1, 21, 22, -1,
-1, 25, 26, 27, -1, -1, -1, -1, -1, 33,
34, 35, 36, 37, 38, 39, 40, -1, -1, -1,
-1, -1, -1, -1, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, -1, 59, 10, 11, 12, 13,
-1, -1, -1, -1, -1, -1, 20, -1, -1, -1,
-1, -1, 26, 27, -1, -1, -1, -1, -1, 33,
34, 35, 36, 37, 38, 39, 40, -1, -1, -1,
10, 11, 12, 13, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, -1, 59, 26, 27, -1, -1,
-1, -1, -1, 33, 34, 35, 36, 37, 38, 39,
40, -1, -1, -1, -1, 45, -1, -1, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
10, 11, 12, 13, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 25, 26, 27, -1, -1,
-1, -1, -1, 33, 34, 35, 36, 37, 38, 39,
40, -1, -1, -1, -1, -1, -1, -1, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
10, 11, 12, 13, -1, -1, -1, -1, -1, -1,
20, -1, -1, -1, -1, -1, 26, 27, -1, -1,
-1, -1, -1, 33, 34, 35, 36, 37, 38, 39,
40, -1, -1, -1, 10, 11, 12, 13, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
26, 27, -1, -1, -1, -1, -1, 33, 34, 35,
36, 37, 38, 39, 40, -1, -1, -1, 10, 11,
12, 13, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, -1, 59, 26, 27, -1, -1, -1, -1,
-1, 33, 34, 35, 36, 37, 38, 39, 40, -1,
-1, -1, 10, 11, 12, -1, -1, -1, 50, 51,
52, 53, 54, 55, 56, 57, -1, 59, 26, 27,
-1, -1, -1, -1, -1, 33, 34, 35, 36, 37,
38, 39, 40, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 50, 51, 52, 53, 54, 55, 56, 57,
-1, 59
};
static const yytype_int8 yystos[] =
{
0, 16, 71, 72, 4, 5, 6, 7, 8, 9,
15, 19, 23, 24, 28, 30, 31, 32, 42, 54,
61, 64, 65, 67, 69, 75, 79, 82, 83, 87,
0, 17, 18, 73, 76, 77, 61, 59, 42, 4,
75, 87, 87, 75, 6, 1, 6, 75, 1, 75,
1, 4, 8, 83, 1, 66, 75, 1, 4, 6,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 61,
83, 96, 97, 98, 69, 10, 11, 12, 13, 26,
27, 33, 34, 35, 36, 37, 38, 39, 40, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 59,
60, 75, 84, 5, 14, 64, 65, 78, 83, 78,
74, 75, 79, 73, 60, 75, 75, 88, 89, 61,
63, 20, 14, 14, 29, 48, 62, 62, 1, 59,
66, 66, 49, 63, 68, 63, 63, 75, 63, 63,
68, 49, 69, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 43, 44, 46,
59, 6, 65, 67, 90, 91, 92, 65, 83, 1,
63, 66, 75, 14, 74, 60, 60, 62, 4, 6,
80, 81, 75, 1, 75, 91, 91, 1, 75, 75,
1, 97, 54, 86, 87, 86, 86, 62, 86, 86,
97, 6, 75, 92, 93, 1, 4, 6, 61, 83,
94, 95, 96, 41, 48, 66, 75, 59, 66, 75,
59, 63, 66, 4, 6, 89, 60, 62, 60, 21,
22, 25, 85, 61, 61, 86, 48, 63, 45, 49,
66, 63, 63, 63, 75, 63, 49, 68, 63, 92,
75, 59, 66, 66, 66, 75, 59, 81, 63, 75,
75, 75, 75, 86, 86, 92, 92, 92, 92, 62,
92, 95, 92, 59, 59, 59, 66, 75, 25, 20,
60, 60, 63, 59, 60, 75, 75, 75, 92, 85,
62, 60, 62, 75, 62
};
static const yytype_int8 yyr1[] =
{
0, 70, 71, 71, 72, 72, 73, 73, 74, 74,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
75, 75, 75, 75, 75, 75, 75, 75, 76, 76,
77, 77, 77, 78, 79, 79, 80, 80, 81, 81,
82, 82, 83, 84, 84, 84, 85, 85, 85, 86,
86, 86, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
87, 87, 87, 87, 87, 87, 88, 88, 89, 90,
90, 91, 91, 92, 92, 92, 93, 93, 94, 94,
95, 95, 95, 95, 95, 95, 95, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 97, 97, 97, 97, 98,
98, 98, 98, 98, 98, 98, 98, 98, 98, 98
};
static const yytype_int8 yyr2[] =
{
0, 2, 3, 3, 0, 3, 0, 2, 0, 2,
2, 5, 9, 11, 9, 5, 4, 4, 2, 4,
4, 2, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 2, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 1, 2, 3,
4, 4, 2, 1, 5, 8, 1, 3, 1, 1,
2, 1, 3, 0, 2, 4, 5, 3, 1, 3,
2, 1, 1, 1, 2, 2, 3, 2, 4, 3,
2, 1, 3, 2, 2, 3, 5, 4, 6, 5,
4, 3, 5, 4, 7, 6, 6, 6, 5, 5,
1, 1, 1, 3, 3, 2, 3, 4, 1, 1,
1, 4, 3, 3, 4, 3, 1, 3, 1, 3,
1, 3, 1, 1, 3, 3, 1, 3, 1, 3,
1, 3, 3, 3, 3, 5, 3, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 3, 3, 3,
3, 3, 1, 3, 1, 1, 1, 1, 5, 3
};
enum { YYENOMEM = -2 };
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
#define YYNOMEM goto yyexhaustedlab
#define YYRECOVERING() (!!yyerrstatus)
#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY) \
{ \
yychar = (Token); \
yylval = (Value); \
YYPOPSTACK (yylen); \
yystate = *yyssp; \
goto yybackup; \
} \
else \
{ \
yyerror (&yylloc, answer, errors, locations, lexer_param_ptr, YY_("syntax error: cannot back up")); \
YYERROR; \
} \
while (0)
#define YYERRCODE YYUNDEF
#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])
#if YYDEBUG
# ifndef YYFPRINTF
# include <stdio.h>
# define YYFPRINTF fprintf
# endif
# define YYDPRINTF(Args) \
do { \
if (yydebug) \
YYFPRINTF Args; \
} while (0)
# ifndef YYLOCATION_PRINT
# if defined YY_LOCATION_PRINT
# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc))
# elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
YY_ATTRIBUTE_UNUSED
static int
yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
{
int 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 YYLOCATION_PRINT yy_location_print_
# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc))
# else
# define YYLOCATION_PRINT(File, Loc) ((void) 0)
# define YY_LOCATION_PRINT YYLOCATION_PRINT
# endif
# endif
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yy_symbol_print (stderr, \
Kind, Value, Location, answer, errors, locations, lexer_param_ptr); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
static void
yy_symbol_value_print (FILE *yyo,
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr)
{
FILE *yyoutput = yyo;
YY_USE (yyoutput);
YY_USE (yylocationp);
YY_USE (answer);
YY_USE (errors);
YY_USE (locations);
YY_USE (lexer_param_ptr);
if (!yyvaluep)
return;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
static void
yy_symbol_print (FILE *yyo,
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr)
{
YYFPRINTF (yyo, "%s %s (",
yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
YYLOCATION_PRINT (yyo, yylocationp);
YYFPRINTF (yyo, ": ");
yy_symbol_value_print (yyo, yykind, yyvaluep, yylocationp, answer, errors, locations, lexer_param_ptr);
YYFPRINTF (yyo, ")");
}
static void
yy_stack_print (yy_state_t *yybottom, yy_state_t *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)
static void
yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp,
int yyrule, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr)
{
int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
yyrule - 1, yylno);
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
&yyvsp[(yyi + 1) - (yynrhs)],
&(yylsp[(yyi + 1) - (yynrhs)]), answer, errors, locations, lexer_param_ptr);
YYFPRINTF (stderr, "\n");
}
}
# define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug) \
yy_reduce_print (yyssp, yyvsp, yylsp, Rule, answer, errors, locations, lexer_param_ptr); \
} while (0)
int yydebug;
#else
# define YYDPRINTF(Args) ((void) 0)
# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
typedef struct
{
yy_state_t *yyssp;
yysymbol_kind_t yytoken;
YYLTYPE *yylloc;
} yypcontext_t;
static int
yypcontext_expected_tokens (const yypcontext_t *yyctx,
yysymbol_kind_t yyarg[], int yyargn)
{
int yycount = 0;
int yyn = yypact[+*yyctx->yyssp];
if (!yypact_value_is_default (yyn))
{
int yyxbegin = yyn < 0 ? -yyn : 0;
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 != YYSYMBOL_YYerror
&& !yytable_value_is_error (yytable[yyx + yyn]))
{
if (!yyarg)
++yycount;
else if (yycount == yyargn)
return 0;
else
yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
}
}
if (yyarg && yycount == 0 && 0 < yyargn)
yyarg[0] = YYSYMBOL_YYEMPTY;
return yycount;
}
#ifndef yystrlen
# if defined __GLIBC__ && defined _STRING_H
# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
# else
static YYPTRDIFF_T
yystrlen (const char *yystr)
{
YYPTRDIFF_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
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
static YYPTRDIFF_T
yytnamerr (char *yyres, const char *yystr)
{
if (*yystr == '"')
{
YYPTRDIFF_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;
else
goto append;
append:
default:
if (yyres)
yyres[yyn] = *yyp;
yyn++;
break;
case '"':
if (yyres)
yyres[yyn] = '\0';
return yyn;
}
do_not_strip_quotes: ;
}
if (yyres)
return yystpcpy (yyres, yystr) - yyres;
else
return yystrlen (yystr);
}
#endif
static int
yy_syntax_error_arguments (const yypcontext_t *yyctx,
yysymbol_kind_t yyarg[], int yyargn)
{
int yycount = 0;
if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
{
int yyn;
if (yyarg)
yyarg[yycount] = yyctx->yytoken;
++yycount;
yyn = yypcontext_expected_tokens (yyctx,
yyarg ? yyarg + 1 : yyarg, yyargn - 1);
if (yyn == YYENOMEM)
return YYENOMEM;
else
yycount += yyn;
}
return yycount;
}
static int
yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
const yypcontext_t *yyctx)
{
enum { YYARGS_MAX = 5 };
const char *yyformat = YY_NULLPTR;
yysymbol_kind_t yyarg[YYARGS_MAX];
YYPTRDIFF_T yysize = 0;
int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
if (yycount == YYENOMEM)
return YYENOMEM;
switch (yycount)
{
#define YYCASE_(N, S) \
case N: \
yyformat = S; \
break
default:
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 = yystrlen (yyformat) - 2 * yycount + 1;
{
int yyi;
for (yyi = 0; yyi < yycount; ++yyi)
{
YYPTRDIFF_T yysize1
= yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
yysize = yysize1;
else
return YYENOMEM;
}
}
if (*yymsg_alloc < yysize)
{
*yymsg_alloc = 2 * yysize;
if (! (yysize <= *yymsg_alloc
&& *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
*yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
return -1;
}
{
char *yyp = *yymsg;
int yyi = 0;
while ((*yyp = *yyformat) != '\0')
if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
yyformat += 2;
}
else
{
++yyp;
++yyformat;
}
}
return 0;
}
static void
yydestruct (const char *yymsg,
yysymbol_kind_t yykind, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr)
{
YY_USE (yyvaluep);
YY_USE (yylocationp);
YY_USE (answer);
YY_USE (errors);
YY_USE (locations);
YY_USE (lexer_param_ptr);
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
switch (yykind)
{
case YYSYMBOL_IDENT:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2176 "src/parser.c"
break;
case YYSYMBOL_FIELD:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2182 "src/parser.c"
break;
case YYSYMBOL_BINDING:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2188 "src/parser.c"
break;
case YYSYMBOL_LITERAL:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2194 "src/parser.c"
break;
case YYSYMBOL_FORMAT:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2200 "src/parser.c"
break;
case YYSYMBOL_QQSTRING_TEXT:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2206 "src/parser.c"
break;
case YYSYMBOL_Module:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2212 "src/parser.c"
break;
case YYSYMBOL_Imports:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2218 "src/parser.c"
break;
case YYSYMBOL_FuncDefs:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2224 "src/parser.c"
break;
case YYSYMBOL_Exp:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2230 "src/parser.c"
break;
case YYSYMBOL_Import:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2236 "src/parser.c"
break;
case YYSYMBOL_ImportWhat:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2242 "src/parser.c"
break;
case YYSYMBOL_ImportFrom:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2248 "src/parser.c"
break;
case YYSYMBOL_FuncDef:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2254 "src/parser.c"
break;
case YYSYMBOL_Params:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2260 "src/parser.c"
break;
case YYSYMBOL_Param:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2266 "src/parser.c"
break;
case YYSYMBOL_StringStart:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2272 "src/parser.c"
break;
case YYSYMBOL_String:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2278 "src/parser.c"
break;
case YYSYMBOL_QQString:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2284 "src/parser.c"
break;
case YYSYMBOL_ElseBody:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2290 "src/parser.c"
break;
case YYSYMBOL_ExpD:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2296 "src/parser.c"
break;
case YYSYMBOL_Term:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2302 "src/parser.c"
break;
case YYSYMBOL_Args:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2308 "src/parser.c"
break;
case YYSYMBOL_Arg:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2314 "src/parser.c"
break;
case YYSYMBOL_RepPatterns:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2320 "src/parser.c"
break;
case YYSYMBOL_Patterns:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2326 "src/parser.c"
break;
case YYSYMBOL_Pattern:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2332 "src/parser.c"
break;
case YYSYMBOL_ArrayPats:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2338 "src/parser.c"
break;
case YYSYMBOL_ObjPats:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2344 "src/parser.c"
break;
case YYSYMBOL_ObjPat:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2350 "src/parser.c"
break;
case YYSYMBOL_Keyword:
#line 37 "src/parser.y"
{ jv_free(((*yyvaluep).literal)); }
#line 2356 "src/parser.c"
break;
case YYSYMBOL_MkDict:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2362 "src/parser.c"
break;
case YYSYMBOL_MkDictPair:
#line 38 "src/parser.y"
{ block_free(((*yyvaluep).blk)); }
#line 2368 "src/parser.c"
break;
default:
break;
}
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
int
yyparse (block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr)
{
int yychar;
YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
static YYLTYPE yyloc_default
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
= { 1, 1, 1, 1 }
# endif
;
YYLTYPE yylloc = yyloc_default;
int yynerrs = 0;
yy_state_fast_t yystate = 0;
int yyerrstatus = 0;
YYPTRDIFF_T yystacksize = YYINITDEPTH;
yy_state_t yyssa[YYINITDEPTH];
yy_state_t *yyss = yyssa;
yy_state_t *yyssp = yyss;
YYSTYPE yyvsa[YYINITDEPTH];
YYSTYPE *yyvs = yyvsa;
YYSTYPE *yyvsp = yyvs;
YYLTYPE yylsa[YYINITDEPTH];
YYLTYPE *yyls = yylsa;
YYLTYPE *yylsp = yyls;
int yyn;
int yyresult;
yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
YYSTYPE yyval;
YYLTYPE yyloc;
YYLTYPE yyerror_range[3];
char yymsgbuf[128];
char *yymsg = yymsgbuf;
YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
int yylen = 0;
YYDPRINTF ((stderr, "Starting parse\n"));
yychar = YYEMPTY;
yylsp[0] = yylloc;
goto yysetstate;
yynewstate:
yyssp++;
yysetstate:
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
YY_IGNORE_USELESS_CAST_BEGIN
*yyssp = YY_CAST (yy_state_t, yystate);
YY_IGNORE_USELESS_CAST_END
YY_STACK_PRINT (yyss, yyssp);
if (yyss + yystacksize - 1 <= yyssp)
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
YYNOMEM;
#else
{
YYPTRDIFF_T yysize = yyssp - yyss + 1;
# if defined yyoverflow
{
yy_state_t *yyss1 = yyss;
YYSTYPE *yyvs1 = yyvs;
YYLTYPE *yyls1 = yyls;
yyoverflow (YY_("memory exhausted"),
&yyss1, yysize * YYSIZEOF (*yyssp),
&yyvs1, yysize * YYSIZEOF (*yyvsp),
&yyls1, yysize * YYSIZEOF (*yylsp),
&yystacksize);
yyss = yyss1;
yyvs = yyvs1;
yyls = yyls1;
}
# else
if (YYMAXDEPTH <= yystacksize)
YYNOMEM;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
yystacksize = YYMAXDEPTH;
{
yy_state_t *yyss1 = yyss;
union yyalloc *yyptr =
YY_CAST (union yyalloc *,
YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
YYNOMEM;
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
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
yylsp = yyls + yysize - 1;
YY_IGNORE_USELESS_CAST_BEGIN
YYDPRINTF ((stderr, "Stack size increased to %ld\n",
YY_CAST (long, yystacksize)));
YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
#endif
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
yybackup:
yyn = yypact[yystate];
if (yypact_value_is_default (yyn))
goto yydefault;
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token\n"));
yychar = yylex (&yylval, &yylloc, answer, errors, locations, lexer_param_ptr);
}
if (yychar <= YYEOF)
{
yychar = YYEOF;
yytoken = YYSYMBOL_YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else if (yychar == YYerror)
{
yychar = YYUNDEF;
yytoken = YYSYMBOL_YYerror;
yyerror_range[1] = yylloc;
goto yyerrlab1;
}
else
{
yytoken = YYTRANSLATE (yychar);
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
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;
}
if (yyerrstatus)
yyerrstatus--;
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
yystate = yyn;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
*++yylsp = yylloc;
yychar = YYEMPTY;
goto yynewstate;
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
yyreduce:
yylen = yyr2[yyn];
yyval = yyvsp[1-yylen];
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
yyerror_range[1] = yyloc;
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
case 2:
#line 290 "src/parser.y"
{
*answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk));
}
#line 2676 "src/parser.c"
break;
case 3:
#line 293 "src/parser.y"
{
*answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
}
#line 2684 "src/parser.c"
break;
case 4:
#line 298 "src/parser.y"
{
(yyval.blk) = gen_noop();
}
#line 2692 "src/parser.c"
break;
case 5:
#line 301 "src/parser.y"
{
if (!block_is_const((yyvsp[-1].blk))) {
FAIL((yyloc), "Module metadata must be constant");
(yyval.blk) = gen_noop();
block_free((yyvsp[-1].blk));
} else if (block_const_kind((yyvsp[-1].blk)) != JV_KIND_OBJECT) {
FAIL((yyloc), "Module metadata must be an object");
(yyval.blk) = gen_noop();
block_free((yyvsp[-1].blk));
} else {
(yyval.blk) = gen_module((yyvsp[-1].blk));
}
}
#line 2710 "src/parser.c"
break;
case 6:
#line 316 "src/parser.y"
{
(yyval.blk) = gen_noop();
}
#line 2718 "src/parser.c"
break;
case 7:
#line 319 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
}
#line 2726 "src/parser.c"
break;
case 8:
#line 324 "src/parser.y"
{
(yyval.blk) = gen_noop();
}
#line 2734 "src/parser.c"
break;
case 9:
#line 327 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-1].blk), (yyvsp[0].blk));
}
#line 2742 "src/parser.c"
break;
case 10:
#line 332 "src/parser.y"
{
(yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
}
#line 2750 "src/parser.c"
break;
case 11:
#line 336 "src/parser.y"
{
(yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2758 "src/parser.c"
break;
case 12:
#line 339 "src/parser.y"
{
(yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
}
#line 2766 "src/parser.c"
break;
case 13:
#line 343 "src/parser.y"
{
(yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
}
#line 2774 "src/parser.c"
break;
case 14:
#line 347 "src/parser.y"
{
(yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
}
#line 2782 "src/parser.c"
break;
case 15:
#line 351 "src/parser.y"
{
(yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
}
#line 2790 "src/parser.c"
break;
case 16:
#line 354 "src/parser.y"
{
FAIL((yyloc), "Possibly unterminated 'if' statement");
(yyval.blk) = (yyvsp[-2].blk);
}
#line 2799 "src/parser.c"
break;
case 17:
#line 359 "src/parser.y"
{
(yyval.blk) = gen_try((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2807 "src/parser.c"
break;
case 18:
#line 362 "src/parser.y"
{
(yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
}
#line 2815 "src/parser.c"
break;
case 19:
#line 365 "src/parser.y"
{
FAIL((yyloc), "Possibly unterminated 'try' statement");
(yyval.blk) = (yyvsp[-2].blk);
}
#line 2824 "src/parser.c"
break;
case 20:
#line 370 "src/parser.y"
{
jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal)));
(yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk)));
jv_free((yyvsp[-2].literal));
jv_free(v);
}
#line 2835 "src/parser.c"
break;
case 21:
#line 377 "src/parser.y"
{
(yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
}
#line 2843 "src/parser.c"
break;
case 22:
#line 381 "src/parser.y"
{
(yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
}
#line 2851 "src/parser.c"
break;
case 23:
#line 385 "src/parser.y"
{
(yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2859 "src/parser.c"
break;
case 24:
#line 389 "src/parser.y"
{
(yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2867 "src/parser.c"
break;
case 25:
#line 393 "src/parser.y"
{
(yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2875 "src/parser.c"
break;
case 26:
#line 397 "src/parser.y"
{
(yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2883 "src/parser.c"
break;
case 27:
#line 401 "src/parser.y"
{
(yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
}
#line 2891 "src/parser.c"
break;
case 28:
#line 405 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2899 "src/parser.c"
break;
case 29:
#line 409 "src/parser.y"
{
(yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 2907 "src/parser.c"
break;
case 30:
#line 413 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
}
#line 2915 "src/parser.c"
break;
case 31:
#line 417 "src/parser.y"
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
}
#line 2923 "src/parser.c"
break;
case 32:
#line 421 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
}
#line 2931 "src/parser.c"
break;
case 33:
#line 425 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
}
#line 2939 "src/parser.c"
break;
case 34:
#line 429 "src/parser.y"
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
}
#line 2947 "src/parser.c"
break;
case 35:
#line 433 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
}
#line 2955 "src/parser.c"
break;
case 36:
#line 437 "src/parser.y"
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
}
#line 2963 "src/parser.c"
break;
case 37:
#line 441 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/');
}
#line 2971 "src/parser.c"
break;
case 38:
#line 445 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%');
}
#line 2979 "src/parser.c"
break;
case 39:
#line 449 "src/parser.y"
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
}
#line 2987 "src/parser.c"
break;
case 40:
#line 453 "src/parser.y"
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
}
#line 2995 "src/parser.c"
break;
case 41:
#line 457 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
}
#line 3003 "src/parser.c"
break;
case 42:
#line 461 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
}
#line 3011 "src/parser.c"
break;
case 43:
#line 465 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
}
#line 3019 "src/parser.c"
break;
case 44:
#line 469 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
}
#line 3027 "src/parser.c"
break;
case 45:
#line 473 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
}
#line 3035 "src/parser.c"
break;
case 46:
#line 477 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
}
#line 3043 "src/parser.c"
break;
case 47:
#line 481 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3051 "src/parser.c"
break;
case 48:
#line 486 "src/parser.y"
{
(yyval.blk) = (yyvsp[-1].blk);
}
#line 3059 "src/parser.c"
break;
case 49:
#line 489 "src/parser.y"
{
if (!block_is_const((yyvsp[-1].blk))) {
FAIL((yyloc), "Module metadata must be constant");
(yyval.blk) = gen_noop();
block_free((yyvsp[-2].blk));
block_free((yyvsp[-1].blk));
} else if (block_const_kind((yyvsp[-1].blk)) != JV_KIND_OBJECT) {
FAIL((yyloc), "Module metadata must be an object");
(yyval.blk) = gen_noop();
block_free((yyvsp[-2].blk));
block_free((yyvsp[-1].blk));
} else {
(yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
}
}
#line 3079 "src/parser.c"
break;
case 50:
#line 506 "src/parser.y"
{
jv v = block_const((yyvsp[-2].blk));
(yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 1);
block_free((yyvsp[-2].blk));
jv_free((yyvsp[0].literal));
jv_free(v);
}
#line 3093 "src/parser.c"
break;
case 51:
#line 515 "src/parser.y"
{
jv v = block_const((yyvsp[-2].blk));
(yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 0);
block_free((yyvsp[-2].blk));
jv_free((yyvsp[0].literal));
jv_free(v);
}
#line 3105 "src/parser.c"
break;
case 52:
#line 522 "src/parser.y"
{
jv v = block_const((yyvsp[0].blk));
(yyval.blk) = gen_import(jv_string_value(v), NULL, 0);
block_free((yyvsp[0].blk));
jv_free(v);
}
#line 3116 "src/parser.c"
break;
case 53:
#line 530 "src/parser.y"
{
if (!block_is_const((yyvsp[0].blk))) {
FAIL((yyloc), "Import path must be constant");
(yyval.blk) = gen_const(jv_string(""));
block_free((yyvsp[0].blk));
} else {
(yyval.blk) = (yyvsp[0].blk);
}
}
#line 3130 "src/parser.c"
break;
case 54:
#line 541 "src/parser.y"
{
(yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
jv_free((yyvsp[-3].literal));
}
#line 3139 "src/parser.c"
break;
case 55:
#line 546 "src/parser.y"
{
(yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
jv_free((yyvsp[-6].literal));
}
#line 3148 "src/parser.c"
break;
case 56:
#line 552 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3156 "src/parser.c"
break;
case 57:
#line 555 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3164 "src/parser.c"
break;
case 58:
#line 560 "src/parser.y"
{
(yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
jv_free((yyvsp[0].literal));
}
#line 3173 "src/parser.c"
break;
case 59:
#line 564 "src/parser.y"
{
(yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
jv_free((yyvsp[0].literal));
}
#line 3182 "src/parser.c"
break;
case 60:
#line 571 "src/parser.y"
{
(yyval.literal) = (yyvsp[-1].literal);
}
#line 3190 "src/parser.c"
break;
case 61:
#line 574 "src/parser.y"
{
(yyval.literal) = jv_string("text");
}
#line 3198 "src/parser.c"
break;
case 62:
#line 580 "src/parser.y"
{
(yyval.blk) = (yyvsp[-1].blk);
jv_free((yyvsp[-2].literal));
}
#line 3207 "src/parser.c"
break;
case 63:
#line 587 "src/parser.y"
{
(yyval.blk) = gen_const(jv_string(""));
}
#line 3215 "src/parser.c"
break;
case 64:
#line 590 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
}
#line 3223 "src/parser.c"
break;
case 65:
#line 593 "src/parser.y"
{
(yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
}
#line 3231 "src/parser.c"
break;
case 66:
#line 599 "src/parser.y"
{
(yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
}
#line 3239 "src/parser.c"
break;
case 67:
#line 602 "src/parser.y"
{
(yyval.blk) = (yyvsp[-1].blk);
}
#line 3247 "src/parser.c"
break;
case 68:
#line 605 "src/parser.y"
{
(yyval.blk) = gen_noop();
}
#line 3255 "src/parser.c"
break;
case 69:
#line 610 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3263 "src/parser.c"
break;
case 70:
#line 613 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
}
#line 3271 "src/parser.c"
break;
case 71:
#line 616 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3279 "src/parser.c"
break;
case 72:
#line 622 "src/parser.y"
{
(yyval.blk) = gen_noop();
}
#line 3287 "src/parser.c"
break;
case 73:
#line 625 "src/parser.y"
{
(yyval.blk) = gen_call("recurse", gen_noop());
}
#line 3295 "src/parser.c"
break;
case 74:
#line 628 "src/parser.y"
{
jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal))); (yyval.blk) = gen_location((yyloc), locations,
BLOCK(gen_op_unbound(LOADV, jv_string_value(v)),
gen_call("error", gen_noop())));
jv_free(v);
jv_free((yyvsp[0].literal));
}
#line 3308 "src/parser.c"
break;
case 75:
#line 636 "src/parser.y"
{
FAIL((yyloc), "break requires a label to break to");
(yyval.blk) = gen_noop();
}
#line 3317 "src/parser.c"
break;
case 76:
#line 640 "src/parser.y"
{
(yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
}
#line 3325 "src/parser.c"
break;
case 77:
#line 643 "src/parser.y"
{
(yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
}
#line 3333 "src/parser.c"
break;
case 78:
#line 646 "src/parser.y"
{
(yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
}
#line 3341 "src/parser.c"
break;
case 79:
#line 649 "src/parser.y"
{
(yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
}
#line 3349 "src/parser.c"
break;
case 80:
#line 652 "src/parser.y"
{
(yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
}
#line 3357 "src/parser.c"
break;
case 81:
#line 655 "src/parser.y"
{
(yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
}
#line 3365 "src/parser.c"
break;
case 82:
#line 658 "src/parser.y"
{
(yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3373 "src/parser.c"
break;
case 83:
#line 661 "src/parser.y"
{
(yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
}
#line 3381 "src/parser.c"
break;
case 84:
#line 664 "src/parser.y"
{
FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
(yyval.blk) = gen_noop();
}
#line 3390 "src/parser.c"
break;
case 85:
#line 668 "src/parser.y"
{
jv_free((yyvsp[-1].literal));
FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
(yyval.blk) = gen_noop();
}
#line 3400 "src/parser.c"
break;
case 86:
#line 674 "src/parser.y"
{
(yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
}
#line 3408 "src/parser.c"
break;
case 87:
#line 677 "src/parser.y"
{
(yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
}
#line 3416 "src/parser.c"
break;
case 88:
#line 680 "src/parser.y"
{
(yyval.blk) = gen_index_opt((yyvsp[-5].blk), (yyvsp[-2].blk));
}
#line 3424 "src/parser.c"
break;
case 89:
#line 683 "src/parser.y"
{
(yyval.blk) = gen_index((yyvsp[-4].blk), (yyvsp[-1].blk));
}
#line 3432 "src/parser.c"
break;
case 90:
#line 686 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
}
#line 3440 "src/parser.c"
break;
case 91:
#line 689 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
}
#line 3448 "src/parser.c"
break;
case 92:
#line 692 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-4].blk), gen_op_simple(EACH_OPT));
}
#line 3456 "src/parser.c"
break;
case 93:
#line 695 "src/parser.y"
{
(yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH));
}
#line 3464 "src/parser.c"
break;
case 94:
#line 698 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
}
#line 3472 "src/parser.c"
break;
case 95:
#line 701 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
}
#line 3480 "src/parser.c"
break;
case 96:
#line 704 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
}
#line 3488 "src/parser.c"
break;
case 97:
#line 707 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
}
#line 3496 "src/parser.c"
break;
case 98:
#line 710 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
}
#line 3504 "src/parser.c"
break;
case 99:
#line 713 "src/parser.y"
{
(yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
}
#line 3512 "src/parser.c"
break;
case 100:
#line 716 "src/parser.y"
{
(yyval.blk) = gen_const((yyvsp[0].literal));
}
#line 3520 "src/parser.c"
break;
case 101:
#line 719 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3528 "src/parser.c"
break;
case 102:
#line 722 "src/parser.y"
{
(yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
}
#line 3536 "src/parser.c"
break;
case 103:
#line 725 "src/parser.y"
{
(yyval.blk) = (yyvsp[-1].blk);
}
#line 3544 "src/parser.c"
break;
case 104:
#line 728 "src/parser.y"
{
(yyval.blk) = gen_collect((yyvsp[-1].blk));
}
#line 3552 "src/parser.c"
break;
case 105:
#line 731 "src/parser.y"
{
(yyval.blk) = gen_const(jv_array());
}
#line 3560 "src/parser.c"
break;
case 106:
#line 734 "src/parser.y"
{
block o = gen_const_object((yyvsp[-1].blk));
if (o.first != NULL)
(yyval.blk) = o;
else
(yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
}
#line 3572 "src/parser.c"
break;
case 107:
#line 756 "src/parser.y"
{
(yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADVN, jv_string_value((yyvsp[0].literal))));
jv_free((yyvsp[0].literal));
}
#line 3581 "src/parser.c"
break;
case 108:
#line 760 "src/parser.y"
{
(yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
jv_free((yyvsp[0].literal));
}
#line 3590 "src/parser.c"
break;
case 109:
#line 764 "src/parser.y"
{
(yyval.blk) = gen_loc_object(&(yyloc), locations);
}
#line 3598 "src/parser.c"
break;
case 110:
#line 767 "src/parser.y"
{
const char *s = jv_string_value((yyvsp[0].literal));
if (strcmp(s, "false") == 0)
(yyval.blk) = gen_const(jv_false());
else if (strcmp(s, "true") == 0)
(yyval.blk) = gen_const(jv_true());
else if (strcmp(s, "null") == 0)
(yyval.blk) = gen_const(jv_null());
else
(yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
jv_free((yyvsp[0].literal));
}
#line 3615 "src/parser.c"
break;
case 111:
#line 779 "src/parser.y"
{
(yyval.blk) = gen_call(jv_string_value((yyvsp[-3].literal)), (yyvsp[-1].blk));
(yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk));
jv_free((yyvsp[-3].literal));
}
#line 3625 "src/parser.c"
break;
case 112:
#line 784 "src/parser.y"
{ (yyval.blk) = gen_noop(); }
#line 3631 "src/parser.c"
break;
case 113:
#line 785 "src/parser.y"
{ (yyval.blk) = gen_noop(); }
#line 3637 "src/parser.c"
break;
case 114:
#line 786 "src/parser.y"
{ (yyval.blk) = (yyvsp[-3].blk); }
#line 3643 "src/parser.c"
break;
case 115:
#line 787 "src/parser.y"
{ (yyval.blk) = gen_noop(); }
#line 3649 "src/parser.c"
break;
case 116:
#line 790 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3657 "src/parser.c"
break;
case 117:
#line 793 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3665 "src/parser.c"
break;
case 118:
#line 798 "src/parser.y"
{
(yyval.blk) = gen_lambda((yyvsp[0].blk));
}
#line 3673 "src/parser.c"
break;
case 119:
#line 803 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), gen_destructure_alt((yyvsp[0].blk)));
}
#line 3681 "src/parser.c"
break;
case 120:
#line 806 "src/parser.y"
{
(yyval.blk) = gen_destructure_alt((yyvsp[0].blk));
}
#line 3689 "src/parser.c"
break;
case 121:
#line 811 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3697 "src/parser.c"
break;
case 122:
#line 814 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3705 "src/parser.c"
break;
case 123:
#line 819 "src/parser.y"
{
(yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)));
jv_free((yyvsp[0].literal));
}
#line 3714 "src/parser.c"
break;
case 124:
#line 823 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
}
#line 3722 "src/parser.c"
break;
case 125:
#line 826 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP));
}
#line 3730 "src/parser.c"
break;
case 126:
#line 831 "src/parser.y"
{
(yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk));
}
#line 3738 "src/parser.c"
break;
case 127:
#line 834 "src/parser.y"
{
(yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3746 "src/parser.c"
break;
case 128:
#line 839 "src/parser.y"
{
(yyval.blk) = (yyvsp[0].blk);
}
#line 3754 "src/parser.c"
break;
case 129:
#line 842 "src/parser.y"
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3762 "src/parser.c"
break;
case 130:
#line 847 "src/parser.y"
{
(yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))));
}
#line 3770 "src/parser.c"
break;
case 131:
#line 850 "src/parser.y"
{
(yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), BLOCK(gen_op_simple(DUP), gen_op_unbound(STOREV, jv_string_value((yyvsp[-2].literal))), (yyvsp[0].blk)));
}
#line 3778 "src/parser.c"
break;
case 132:
#line 853 "src/parser.y"
{
(yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
}
#line 3786 "src/parser.c"
break;
case 133:
#line 856 "src/parser.y"
{
(yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
}
#line 3794 "src/parser.c"
break;
case 134:
#line 859 "src/parser.y"
{
(yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 3802 "src/parser.c"
break;
case 135:
#line 862 "src/parser.y"
{
jv msg = check_object_key((yyvsp[-3].blk));
if (jv_is_valid(msg)) {
FAIL((yyloc), jv_string_value(msg));
}
jv_free(msg);
(yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk));
}
#line 3815 "src/parser.c"
break;
case 136:
#line 870 "src/parser.y"
{
FAIL((yyloc), "May need parentheses around object key expression");
(yyval.blk) = (yyvsp[0].blk);
}
#line 3824 "src/parser.c"
break;
case 137:
#line 876 "src/parser.y"
{
(yyval.literal) = jv_string("as");
}
#line 3832 "src/parser.c"
break;
case 138:
#line 879 "src/parser.y"
{
(yyval.literal) = jv_string("def");
}
#line 3840 "src/parser.c"
break;
case 139:
#line 882 "src/parser.y"
{
(yyval.literal) = jv_string("module");
}
#line 3848 "src/parser.c"
break;
case 140:
#line 885 "src/parser.y"
{
(yyval.literal) = jv_string("import");
}
#line 3856 "src/parser.c"
break;
case 141:
#line 888 "src/parser.y"
{
(yyval.literal) = jv_string("include");
}
#line 3864 "src/parser.c"
break;
case 142:
#line 891 "src/parser.y"
{
(yyval.literal) = jv_string("if");
}
#line 3872 "src/parser.c"
break;
case 143:
#line 894 "src/parser.y"
{
(yyval.literal) = jv_string("then");
}
#line 3880 "src/parser.c"
break;
case 144:
#line 897 "src/parser.y"
{
(yyval.literal) = jv_string("else");
}
#line 3888 "src/parser.c"
break;
case 145:
#line 900 "src/parser.y"
{
(yyval.literal) = jv_string("elif");
}
#line 3896 "src/parser.c"
break;
case 146:
#line 903 "src/parser.y"
{
(yyval.literal) = jv_string("reduce");
}
#line 3904 "src/parser.c"
break;
case 147:
#line 906 "src/parser.y"
{
(yyval.literal) = jv_string("foreach");
}
#line 3912 "src/parser.c"
break;
case 148:
#line 909 "src/parser.y"
{
(yyval.literal) = jv_string("end");
}
#line 3920 "src/parser.c"
break;
case 149:
#line 912 "src/parser.y"
{
(yyval.literal) = jv_string("and");
}
#line 3928 "src/parser.c"
break;
case 150:
#line 915 "src/parser.y"
{
(yyval.literal) = jv_string("or");
}
#line 3936 "src/parser.c"
break;
case 151:
#line 918 "src/parser.y"
{
(yyval.literal) = jv_string("try");
}
#line 3944 "src/parser.c"
break;
case 152:
#line 921 "src/parser.y"
{
(yyval.literal) = jv_string("catch");
}
#line 3952 "src/parser.c"
break;
case 153:
#line 924 "src/parser.y"
{
(yyval.literal) = jv_string("label");
}
#line 3960 "src/parser.c"
break;
case 154:
#line 927 "src/parser.y"
{
(yyval.literal) = jv_string("break");
}
#line 3968 "src/parser.c"
break;
case 155:
#line 932 "src/parser.y"
{
(yyval.blk)=gen_noop();
}
#line 3976 "src/parser.c"
break;
case 156:
#line 935 "src/parser.y"
{ (yyval.blk) = (yyvsp[0].blk); }
#line 3982 "src/parser.c"
break;
case 157:
#line 936 "src/parser.y"
{ (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); }
#line 3988 "src/parser.c"
break;
case 158:
#line 937 "src/parser.y"
{ (yyval.blk) = (yyvsp[0].blk); }
#line 3994 "src/parser.c"
break;
case 159:
#line 940 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
}
#line 4002 "src/parser.c"
break;
case 160:
#line 943 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk));
}
#line 4010 "src/parser.c"
break;
case 161:
#line 946 "src/parser.y"
{
(yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk));
}
#line 4018 "src/parser.c"
break;
case 162:
#line 949 "src/parser.y"
{
(yyval.blk) = gen_dictpair((yyvsp[0].blk), BLOCK(gen_op_simple(POP), gen_op_simple(DUP2),
gen_op_simple(DUP2), gen_op_simple(INDEX)));
}
#line 4027 "src/parser.c"
break;
case 163:
#line 953 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[-2].literal)))),
(yyvsp[0].blk));
jv_free((yyvsp[-2].literal));
}
#line 4037 "src/parser.c"
break;
case 164:
#line 958 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)),
gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))));
}
#line 4046 "src/parser.c"
break;
case 165:
#line 962 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
}
#line 4055 "src/parser.c"
break;
case 166:
#line 966 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const(jv_string("__loc__")),
gen_loc_object(&(yyloc), locations));
}
#line 4064 "src/parser.c"
break;
case 167:
#line 970 "src/parser.y"
{
(yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))),
gen_index(gen_noop(), gen_const((yyvsp[0].literal))));
}
#line 4073 "src/parser.c"
break;
case 168:
#line 974 "src/parser.y"
{
jv msg = check_object_key((yyvsp[-3].blk));
if (jv_is_valid(msg)) {
FAIL((yyloc), jv_string_value(msg));
}
jv_free(msg);
(yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk));
}
#line 4086 "src/parser.c"
break;
case 169:
#line 982 "src/parser.y"
{
FAIL((yyloc), "May need parentheses around object key expression");
(yyval.blk) = (yyvsp[0].blk);
}
#line 4095 "src/parser.c"
break;
#line 4099 "src/parser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
YYPOPSTACK (yylen);
yylen = 0;
*++yyvsp = yyval;
*++yylsp = yyloc;
{
const int yylhs = yyr1[yyn] - YYNTOKENS;
const int yyi = yypgoto[yylhs] + *yyssp;
yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
? yytable[yyi]
: yydefgoto[yylhs]);
}
goto yynewstate;
yyerrlab:
yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
if (!yyerrstatus)
{
++yynerrs;
{
yypcontext_t yyctx
= {yyssp, yytoken, &yylloc};
char const *yymsgp = YY_("syntax error");
int yysyntax_error_status;
yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
if (yysyntax_error_status == 0)
yymsgp = yymsg;
else if (yysyntax_error_status == -1)
{
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
yymsg = YY_CAST (char *,
YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
if (yymsg)
{
yysyntax_error_status
= yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
yymsgp = yymsg;
}
else
{
yymsg = yymsgbuf;
yymsg_alloc = sizeof yymsgbuf;
yysyntax_error_status = YYENOMEM;
}
}
yyerror (&yylloc, answer, errors, locations, lexer_param_ptr, yymsgp);
if (yysyntax_error_status == YYENOMEM)
YYNOMEM;
}
}
yyerror_range[1] = yylloc;
if (yyerrstatus == 3)
{
if (yychar <= YYEOF)
{
if (yychar == YYEOF)
YYABORT;
}
else
{
yydestruct ("Error: discarding",
yytoken, &yylval, &yylloc, answer, errors, locations, lexer_param_ptr);
yychar = YYEMPTY;
}
}
goto yyerrlab1;
yyerrorlab:
if (0)
YYERROR;
++yynerrs;
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
yystate = *yyssp;
goto yyerrlab1;
yyerrlab1:
yyerrstatus = 3;
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
{
yyn += YYSYMBOL_YYerror;
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
{
yyn = yytable[yyn];
if (0 < yyn)
break;
}
}
if (yyssp == yyss)
YYABORT;
yyerror_range[1] = *yylsp;
yydestruct ("Error: popping",
YY_ACCESSING_SYMBOL (yystate), yyvsp, yylsp, answer, errors, locations, lexer_param_ptr);
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;
++yylsp;
YYLLOC_DEFAULT (*yylsp, yyerror_range, 2);
YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
yyacceptlab:
yyresult = 0;
goto yyreturnlab;
yyabortlab:
yyresult = 1;
goto yyreturnlab;
yyexhaustedlab:
yyerror (&yylloc, answer, errors, locations, lexer_param_ptr, YY_("memory exhausted"));
yyresult = 2;
goto yyreturnlab;
yyreturnlab:
if (yychar != YYEMPTY)
{
yytoken = YYTRANSLATE (yychar);
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval, &yylloc, answer, errors, locations, lexer_param_ptr);
}
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, yylsp, answer, errors, locations, lexer_param_ptr);
YYPOPSTACK (1);
}
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
return yyresult;
}
#line 986 "src/parser.y"
int jq_parse(struct locfile* locations, block* answer) {
struct lexer_param scanner;
YY_BUFFER_STATE buf;
jq_yylex_init_extra(0, &scanner.lexer);
buf = jq_yy_scan_bytes(locations->data, locations->length, scanner.lexer);
int errors = 0;
*answer = gen_noop();
yyparse(answer, &errors, locations, &scanner);
jq_yy_delete_buffer(buf, scanner.lexer);
jq_yylex_destroy(scanner.lexer);
if (errors > 0) {
block_free(*answer);
*answer = gen_noop();
}
return errors;
}
int jq_parse_library(struct locfile* locations, block* answer) {
int errs = jq_parse(locations, answer);
if (errs) return errs;
if (block_has_main(*answer)) {
locfile_locate(locations, UNKNOWN_LOCATION, "jq: error: library should only have function definitions, not a main expression");
return 1;
}
assert(block_has_only_binders_and_imports(*answer, OP_IS_CALL_PSEUDO));
return 0;
}