From 5a453c679969eb1a869e81934d59889a7aa64ef2 Mon Sep 17 00:00:00 2001 From: xensik Date: Fri, 23 Jul 2021 21:59:49 +0200 Subject: [PATCH] implement ternary operator --- gen/h1/lexer.lpp | 1 + gen/h1/parser.ypp | 9 + gen/h2/lexer.lpp | 1 + gen/h2/parser.ypp | 9 + gen/iw5/lexer.lpp | 1 + gen/iw5/parser.ypp | 9 + gen/iw6/lexer.lpp | 1 + gen/iw6/parser.ypp | 9 + gen/iw7/lexer.lpp | 1 + gen/iw7/parser.ypp | 9 + gen/s1/lexer.lpp | 1 + gen/s1/parser.ypp | 9 + gen/s2/lexer.lpp | 1 + gen/s2/parser.ypp | 9 + src/h1/xsk/assembler.cpp | 1 - src/h1/xsk/compiler.cpp | 31 +- src/h1/xsk/compiler.hpp | 1 + src/h1/xsk/decompiler.cpp | 40 + src/h1/xsk/decompiler.hpp | 3 + src/h1/xsk/lexer.cpp | 575 ++++---- src/h1/xsk/lexer.hpp | 2 +- src/h1/xsk/parser.cpp | 2283 +++++++++++++++---------------- src/h1/xsk/parser.hpp | 388 +++--- src/h2/xsk/assembler.cpp | 1 - src/h2/xsk/compiler.cpp | 31 +- src/h2/xsk/compiler.hpp | 1 + src/h2/xsk/decompiler.cpp | 40 + src/h2/xsk/decompiler.hpp | 3 + src/h2/xsk/lexer.cpp | 575 ++++---- src/h2/xsk/lexer.hpp | 2 +- src/h2/xsk/parser.cpp | 2283 +++++++++++++++---------------- src/h2/xsk/parser.hpp | 388 +++--- src/iw5/xsk/compiler.cpp | 31 +- src/iw5/xsk/compiler.hpp | 1 + src/iw5/xsk/decompiler.cpp | 40 + src/iw5/xsk/decompiler.hpp | 3 + src/iw5/xsk/lexer.cpp | 569 ++++---- src/iw5/xsk/lexer.hpp | 2 +- src/iw5/xsk/parser.cpp | 2291 +++++++++++++++++--------------- src/iw5/xsk/parser.hpp | 386 +++--- src/iw6/xsk/assembler.cpp | 1 - src/iw6/xsk/compiler.cpp | 31 +- src/iw6/xsk/compiler.hpp | 1 + src/iw6/xsk/decompiler.cpp | 40 + src/iw6/xsk/decompiler.hpp | 3 + src/iw6/xsk/lexer.cpp | 569 ++++---- src/iw6/xsk/lexer.hpp | 2 +- src/iw6/xsk/parser.cpp | 2284 ++++++++++++++++--------------- src/iw6/xsk/parser.hpp | 386 +++--- src/iw7/xsk/assembler.cpp | 1 - src/iw7/xsk/compiler.cpp | 31 +- src/iw7/xsk/compiler.hpp | 1 + src/iw7/xsk/decompiler.cpp | 40 + src/iw7/xsk/decompiler.hpp | 3 + src/iw7/xsk/lexer.cpp | 569 ++++---- src/iw7/xsk/lexer.hpp | 2 +- src/iw7/xsk/parser.cpp | 2284 ++++++++++++++++--------------- src/iw7/xsk/parser.hpp | 386 +++--- src/s1/xsk/assembler.cpp | 1 - src/s1/xsk/compiler.cpp | 31 +- src/s1/xsk/compiler.hpp | 1 + src/s1/xsk/decompiler.cpp | 40 + src/s1/xsk/decompiler.hpp | 3 + src/s1/xsk/lexer.cpp | 575 ++++---- src/s1/xsk/lexer.hpp | 2 +- src/s1/xsk/parser.cpp | 2283 +++++++++++++++---------------- src/s1/xsk/parser.hpp | 388 +++--- src/s2/xsk/assembler.cpp | 1 - src/s2/xsk/compiler.cpp | 31 +- src/s2/xsk/compiler.hpp | 1 + src/s2/xsk/decompiler.cpp | 40 + src/s2/xsk/decompiler.hpp | 3 + src/s2/xsk/lexer.cpp | 575 ++++---- src/s2/xsk/lexer.hpp | 2 +- src/s2/xsk/parser.cpp | 2283 +++++++++++++++---------------- src/s2/xsk/parser.hpp | 388 +++--- src/utils/xsk/gsc/nodetree.hpp | 22 + 77 files changed, 12345 insertions(+), 11000 deletions(-) diff --git a/gen/h1/lexer.lpp b/gen/h1/lexer.lpp index a68c64f3..000bd49c 100644 --- a/gen/h1/lexer.lpp +++ b/gen/h1/lexer.lpp @@ -103,6 +103,7 @@ RGX_DEFAULT (.|\n) \:\: { return h1::parser::make_DOUBLECOLON(loc); } \: { return h1::parser::make_COLON(loc); } \; { return h1::parser::make_SEMICOLON(loc); } +\? { return h1::parser::make_QMARK(loc); } \+\+ { return h1::parser::make_INCREMENT(loc); } \-\- { return h1::parser::make_DECREMENT(loc); } \<\<\= { return h1::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/h1/parser.ypp b/gen/h1/parser.ypp index e09125f7..e35ee032 100644 --- a/gen/h1/parser.ypp +++ b/gen/h1/parser.ypp @@ -93,6 +93,7 @@ xsk::gsc::h1::parser::symbol_type H1lex(yyscan_t yyscanner, xsk::gsc::location& %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -171,6 +172,7 @@ xsk::gsc::h1::parser::symbol_type H1lex(yyscan_t yyscanner, xsk::gsc::location& %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -214,6 +216,8 @@ xsk::gsc::h1::parser::symbol_type H1lex(yyscan_t yyscanner, xsk::gsc::location& %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -470,6 +474,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -503,6 +508,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/h2/lexer.lpp b/gen/h2/lexer.lpp index dae735f5..3a3086d5 100644 --- a/gen/h2/lexer.lpp +++ b/gen/h2/lexer.lpp @@ -103,6 +103,7 @@ RGX_DEFAULT (.|\n) \:\: { return h2::parser::make_DOUBLECOLON(loc); } \: { return h2::parser::make_COLON(loc); } \; { return h2::parser::make_SEMICOLON(loc); } +\? { return h2::parser::make_QMARK(loc); } \+\+ { return h2::parser::make_INCREMENT(loc); } \-\- { return h2::parser::make_DECREMENT(loc); } \<\<\= { return h2::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/h2/parser.ypp b/gen/h2/parser.ypp index 09920f9f..fe1cf10f 100644 --- a/gen/h2/parser.ypp +++ b/gen/h2/parser.ypp @@ -93,6 +93,7 @@ xsk::gsc::h2::parser::symbol_type H2lex(yyscan_t yyscanner, xsk::gsc::location& %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -171,6 +172,7 @@ xsk::gsc::h2::parser::symbol_type H2lex(yyscan_t yyscanner, xsk::gsc::location& %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -214,6 +216,8 @@ xsk::gsc::h2::parser::symbol_type H2lex(yyscan_t yyscanner, xsk::gsc::location& %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -470,6 +474,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -503,6 +508,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/iw5/lexer.lpp b/gen/iw5/lexer.lpp index be24c558..ed10df1d 100644 --- a/gen/iw5/lexer.lpp +++ b/gen/iw5/lexer.lpp @@ -102,6 +102,7 @@ RGX_DEFAULT (.|\n) \:\: { return iw5::parser::make_DOUBLECOLON(loc); } \: { return iw5::parser::make_COLON(loc); } \; { return iw5::parser::make_SEMICOLON(loc); } +\? { return iw5::parser::make_QMARK(loc); } \+\+ { return iw5::parser::make_INCREMENT(loc); } \-\- { return iw5::parser::make_DECREMENT(loc); } \<\<\= { return iw5::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/iw5/parser.ypp b/gen/iw5/parser.ypp index 47013dd2..046cffe5 100644 --- a/gen/iw5/parser.ypp +++ b/gen/iw5/parser.ypp @@ -92,6 +92,7 @@ xsk::gsc::iw5::parser::symbol_type IW5lex(yyscan_t yyscanner, xsk::gsc::location %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -169,6 +170,7 @@ xsk::gsc::iw5::parser::symbol_type IW5lex(yyscan_t yyscanner, xsk::gsc::location %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -212,6 +214,8 @@ xsk::gsc::iw5::parser::symbol_type IW5lex(yyscan_t yyscanner, xsk::gsc::location %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -460,6 +464,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -493,6 +498,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/iw6/lexer.lpp b/gen/iw6/lexer.lpp index 3960d1a9..0925726a 100644 --- a/gen/iw6/lexer.lpp +++ b/gen/iw6/lexer.lpp @@ -102,6 +102,7 @@ RGX_DEFAULT (.|\n) \:\: { return iw6::parser::make_DOUBLECOLON(loc); } \: { return iw6::parser::make_COLON(loc); } \; { return iw6::parser::make_SEMICOLON(loc); } +\? { return iw6::parser::make_QMARK(loc); } \+\+ { return iw6::parser::make_INCREMENT(loc); } \-\- { return iw6::parser::make_DECREMENT(loc); } \<\<\= { return iw6::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/iw6/parser.ypp b/gen/iw6/parser.ypp index a63b2202..2828bd5c 100644 --- a/gen/iw6/parser.ypp +++ b/gen/iw6/parser.ypp @@ -92,6 +92,7 @@ xsk::gsc::iw6::parser::symbol_type IW6lex(yyscan_t yyscanner, xsk::gsc::location %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -169,6 +170,7 @@ xsk::gsc::iw6::parser::symbol_type IW6lex(yyscan_t yyscanner, xsk::gsc::location %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -212,6 +214,8 @@ xsk::gsc::iw6::parser::symbol_type IW6lex(yyscan_t yyscanner, xsk::gsc::location %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -460,6 +464,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -493,6 +498,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/iw7/lexer.lpp b/gen/iw7/lexer.lpp index b8cbe4af..c89316f5 100644 --- a/gen/iw7/lexer.lpp +++ b/gen/iw7/lexer.lpp @@ -102,6 +102,7 @@ RGX_DEFAULT (.|\n) \:\: { return iw7::parser::make_DOUBLECOLON(loc); } \: { return iw7::parser::make_COLON(loc); } \; { return iw7::parser::make_SEMICOLON(loc); } +\? { return iw7::parser::make_QMARK(loc); } \+\+ { return iw7::parser::make_INCREMENT(loc); } \-\- { return iw7::parser::make_DECREMENT(loc); } \<\<\= { return iw7::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/iw7/parser.ypp b/gen/iw7/parser.ypp index 836764ca..6492a42f 100644 --- a/gen/iw7/parser.ypp +++ b/gen/iw7/parser.ypp @@ -92,6 +92,7 @@ xsk::gsc::iw7::parser::symbol_type IW7lex(yyscan_t yyscanner, xsk::gsc::location %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -169,6 +170,7 @@ xsk::gsc::iw7::parser::symbol_type IW7lex(yyscan_t yyscanner, xsk::gsc::location %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -212,6 +214,8 @@ xsk::gsc::iw7::parser::symbol_type IW7lex(yyscan_t yyscanner, xsk::gsc::location %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -460,6 +464,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -493,6 +498,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/s1/lexer.lpp b/gen/s1/lexer.lpp index b21de29e..2a6f7bc0 100644 --- a/gen/s1/lexer.lpp +++ b/gen/s1/lexer.lpp @@ -103,6 +103,7 @@ RGX_DEFAULT (.|\n) \:\: { return s1::parser::make_DOUBLECOLON(loc); } \: { return s1::parser::make_COLON(loc); } \; { return s1::parser::make_SEMICOLON(loc); } +\? { return s1::parser::make_QMARK(loc); } \+\+ { return s1::parser::make_INCREMENT(loc); } \-\- { return s1::parser::make_DECREMENT(loc); } \<\<\= { return s1::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/s1/parser.ypp b/gen/s1/parser.ypp index 91ff410c..cc2ad564 100644 --- a/gen/s1/parser.ypp +++ b/gen/s1/parser.ypp @@ -93,6 +93,7 @@ xsk::gsc::s1::parser::symbol_type S1lex(yyscan_t yyscanner, xsk::gsc::location& %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -171,6 +172,7 @@ xsk::gsc::s1::parser::symbol_type S1lex(yyscan_t yyscanner, xsk::gsc::location& %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -214,6 +216,8 @@ xsk::gsc::s1::parser::symbol_type S1lex(yyscan_t yyscanner, xsk::gsc::location& %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -470,6 +474,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -503,6 +508,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/gen/s2/lexer.lpp b/gen/s2/lexer.lpp index cd493e09..be66167f 100644 --- a/gen/s2/lexer.lpp +++ b/gen/s2/lexer.lpp @@ -103,6 +103,7 @@ RGX_DEFAULT (.|\n) \:\: { return s2::parser::make_DOUBLECOLON(loc); } \: { return s2::parser::make_COLON(loc); } \; { return s2::parser::make_SEMICOLON(loc); } +\? { return s2::parser::make_QMARK(loc); } \+\+ { return s2::parser::make_INCREMENT(loc); } \-\- { return s2::parser::make_DECREMENT(loc); } \<\<\= { return s2::parser::make_ASSIGN_LSHIFT(loc); } diff --git a/gen/s2/parser.ypp b/gen/s2/parser.ypp index 3d77407c..b221220f 100644 --- a/gen/s2/parser.ypp +++ b/gen/s2/parser.ypp @@ -93,6 +93,7 @@ xsk::gsc::s2::parser::symbol_type S2lex(yyscan_t yyscanner, xsk::gsc::location& %token DOUBLECOLON "::" %token COLON ":" %token SEMICOLON ";" +%token QMARK "?" %token INCREMENT "++" %token DECREMENT "--" %token LSHIFT "<<" @@ -171,6 +172,7 @@ xsk::gsc::s2::parser::symbol_type S2lex(yyscan_t yyscanner, xsk::gsc::location& %type expr_assign %type expr %type expr_compare +%type expr_ternary %type expr_binary %type expr_primitive %type expr_call @@ -214,6 +216,8 @@ xsk::gsc::s2::parser::symbol_type S2lex(yyscan_t yyscanner, xsk::gsc::location& %nonassoc ELSE %nonassoc INCREMENT DECREMENT +%precedence TERN +%right QMARK %left OR %left AND %left BITWISE_OR @@ -470,6 +474,7 @@ for_expr expr : expr_compare { $$ = std::move($1); } + | expr_ternary { $$ = std::move($1); } | expr_binary { $$ = std::move($1); } | expr_primitive { $$ = std::move($1); } ; @@ -503,6 +508,10 @@ expr_compare | expr GREATER expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } ; +expr_ternary + : expr QMARK expr COLON expr %prec TERN { $$.as_node = std::make_unique(@$, std::move($1), std::move($3), std::move($5)); } + ; + expr_binary : expr BITWISE_OR expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } | expr BITWISE_AND expr { $$.as_node = std::make_unique(@$, std::move($1), std::move($3)); } diff --git a/src/h1/xsk/assembler.cpp b/src/h1/xsk/assembler.cpp index 6fed6206..6f212ba6 100644 --- a/src/h1/xsk/assembler.cpp +++ b/src/h1/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/h1/xsk/compiler.cpp b/src/h1/xsk/compiler.cpp index 5ddb2fc2..2fb5aacc 100644 --- a/src/h1/xsk/compiler.cpp +++ b/src/h1/xsk/compiler.cpp @@ -409,7 +409,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -465,7 +465,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -540,7 +540,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -752,6 +752,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -849,6 +850,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/h1/xsk/compiler.hpp b/src/h1/xsk/compiler.hpp index 283e2a9d..8ea1b811 100644 --- a/src/h1/xsk/compiler.hpp +++ b/src/h1/xsk/compiler.hpp @@ -68,6 +68,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/h1/xsk/decompiler.cpp b/src/h1/xsk/decompiler.cpp index 509269f0..5769f0ec 100644 --- a/src/h1/xsk/decompiler.cpp +++ b/src/h1/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1833,6 +1841,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1916,6 +1925,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3006,6 +3038,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3106,6 +3139,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/h1/xsk/decompiler.hpp b/src/h1/xsk/decompiler.hpp index b23c6267..b1e31310 100644 --- a/src/h1/xsk/decompiler.hpp +++ b/src/h1/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/h1/xsk/lexer.cpp b/src/h1/xsk/lexer.cpp index 2f998569..805e5a4e 100644 --- a/src/h1/xsk/lexer.cpp +++ b/src/h1/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 100 -#define YY_END_OF_BUFFER 101 +#define YY_NUM_RULES 101 +#define YY_END_OF_BUFFER 102 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,42 +562,42 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[305] = +static const flex_int16_t yy_accept[306] = { 0, - 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, - 88, 99, 99, 87, 91, 99, 49, 50, 85, 83, - 55, 84, 56, 86, 98, 58, 59, 72, 82, 73, - 94, 53, 54, 92, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 51, 90, 52, 89, 5, 6, 5, 9, 10, 9, - 69, 0, 96, 0, 0, 0, 0, 78, 0, 67, - 0, 80, 0, 0, 76, 60, 74, 61, 75, 97, - 0, 8, 4, 3, 77, 97, 98, 0, 0, 57, - 64, 70, 68, 71, 65, 94, 81, 94, 94, 94, + 0, 0, 0, 0, 0, 0, 102, 100, 1, 2, + 89, 100, 100, 88, 92, 100, 49, 50, 86, 84, + 55, 85, 56, 87, 99, 58, 59, 73, 83, 74, + 60, 95, 53, 54, 93, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 51, 91, 52, 90, 5, 6, 5, 9, 10, + 9, 70, 0, 97, 0, 0, 0, 0, 79, 0, + 68, 0, 81, 0, 0, 77, 61, 75, 62, 76, + 98, 0, 8, 4, 3, 78, 98, 99, 0, 0, + 57, 65, 71, 69, 72, 66, 95, 82, 95, 95, - 94, 94, 94, 94, 94, 94, 94, 94, 25, 30, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 79, 66, 7, 11, 0, 96, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 96, 0, 97, - 0, 3, 97, 97, 93, 62, 63, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 28, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 0, 0, 0, 0, 95, 0, 0, 95, 0, - 0, 47, 94, 40, 32, 94, 94, 94, 26, 94, - 94, 94, 45, 94, 94, 94, 94, 46, 94, 94, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 25, + 30, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 80, 67, 7, 11, 0, 97, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, + 98, 0, 3, 98, 98, 94, 63, 64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 28, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 0, 0, 0, 0, 96, 0, 0, 96, + 0, 0, 47, 95, 40, 32, 95, 95, 95, 26, + 95, 95, 95, 45, 95, 95, 95, 95, 46, 95, - 94, 41, 94, 20, 94, 0, 0, 0, 44, 34, - 94, 94, 94, 18, 42, 94, 48, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 27, 0, 0, 0, - 94, 94, 94, 94, 94, 19, 94, 94, 36, 31, - 94, 37, 94, 94, 94, 0, 0, 0, 94, 94, - 94, 33, 29, 94, 94, 94, 94, 94, 94, 0, - 15, 0, 94, 94, 35, 94, 14, 94, 94, 94, - 21, 17, 0, 94, 94, 94, 94, 43, 24, 94, - 94, 0, 12, 94, 13, 39, 94, 94, 0, 38, - 94, 94, 0, 94, 94, 0, 94, 22, 0, 94, + 95, 95, 41, 95, 20, 95, 0, 0, 0, 44, + 34, 95, 95, 95, 18, 42, 95, 48, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 27, 0, 0, + 0, 95, 95, 95, 95, 95, 19, 95, 95, 36, + 31, 95, 37, 95, 95, 95, 0, 0, 0, 95, + 95, 95, 33, 29, 95, 95, 95, 95, 95, 95, + 0, 15, 0, 95, 95, 35, 95, 14, 95, 95, + 95, 21, 17, 0, 95, 95, 95, 95, 43, 24, + 95, 95, 0, 12, 95, 13, 39, 95, 95, 0, + 38, 95, 95, 0, 95, 95, 0, 95, 22, 0, - 16, 94, 23, 0 + 95, 16, 95, 23, 0 } ; static const YY_CHAR yy_ec[256] = @@ -608,14 +608,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -632,240 +632,240 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[319] = +static const flex_int16_t yy_base[320] = { 0, - 0, 0, 54, 55, 56, 57, 574, 575, 575, 575, - 551, 56, 35, 550, 63, 55, 575, 575, 549, 56, - 575, 55, 56, 74, 71, 551, 575, 54, 547, 70, - 542, 575, 575, 545, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 575, 96, 575, 575, 575, 575, 549, 575, 575, 548, - 575, 120, 575, 127, 522, 521, 516, 575, 122, 575, - 115, 575, 126, 140, 575, 575, 575, 575, 575, 120, - 523, 575, 575, 0, 575, 121, 141, 135, 0, 575, - 538, 575, 575, 575, 537, 532, 575, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 575, 576, 576, 576, + 552, 57, 34, 551, 66, 60, 576, 576, 550, 57, + 576, 63, 48, 74, 74, 552, 576, 55, 548, 59, + 576, 542, 576, 576, 546, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 576, 100, 576, 576, 576, 576, 550, 576, 576, + 549, 576, 120, 576, 136, 522, 521, 516, 576, 122, + 576, 123, 576, 126, 143, 576, 576, 576, 576, 576, + 118, 523, 576, 576, 0, 576, 125, 140, 132, 0, + 576, 539, 576, 576, 576, 538, 532, 576, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 531, 530, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 575, 575, 575, 575, 189, 197, 202, 517, 522, - 515, 204, 575, 207, 205, 208, 209, 210, 213, 575, - 500, 0, 202, 575, 525, 575, 575, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 509, 509, 506, 268, 269, 276, 271, 273, 283, - 513, 520, 261, 519, 518, 258, 263, 262, 517, 270, - 272, 277, 516, 278, 279, 282, 287, 515, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 531, + 530, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 576, 576, 576, 576, 186, 204, 211, 517, + 522, 515, 205, 576, 212, 202, 215, 210, 213, 217, + 576, 500, 0, 205, 576, 525, 576, 576, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 509, 509, 506, 273, 274, 277, 275, 276, + 284, 513, 520, 104, 519, 518, 262, 268, 264, 517, + 265, 270, 279, 516, 271, 282, 287, 288, 515, 289, - 293, 514, 291, 294, 296, 492, 490, 501, 575, 298, - 299, 301, 305, 510, 509, 302, 508, 307, 313, 309, - 312, 322, 324, 314, 310, 327, 507, 487, 498, 501, - 328, 330, 334, 336, 335, 503, 340, 337, 502, 501, - 342, 500, 338, 343, 344, 491, 490, 493, 350, 349, - 351, 496, 495, 355, 360, 363, 364, 366, 369, 486, - 575, 477, 370, 374, 492, 373, 491, 375, 377, 380, - 378, 575, 478, 376, 390, 389, 391, 489, 488, 392, - 395, 472, 486, 396, 472, 424, 400, 401, 402, 421, - 402, 406, 397, 407, 408, 406, 410, 352, 259, 409, + 272, 292, 514, 294, 297, 300, 492, 490, 501, 576, + 298, 299, 301, 305, 510, 509, 304, 508, 302, 321, + 309, 311, 312, 324, 328, 313, 330, 507, 487, 498, + 501, 333, 334, 314, 335, 337, 503, 338, 339, 502, + 501, 341, 500, 343, 347, 344, 491, 490, 493, 349, + 352, 354, 496, 495, 353, 357, 365, 366, 367, 369, + 486, 576, 477, 368, 370, 492, 375, 491, 372, 379, + 377, 380, 576, 478, 381, 388, 390, 391, 489, 488, + 393, 396, 472, 473, 394, 425, 424, 399, 397, 402, + 422, 404, 405, 398, 407, 409, 405, 408, 315, 193, - 575, 413, 200, 575, 451, 456, 461, 466, 469, 471, - 476, 481, 486, 491, 496, 84, 501, 506 + 410, 576, 414, 159, 576, 453, 458, 463, 468, 471, + 473, 478, 483, 488, 493, 498, 68, 503, 508 } ; -static const flex_int16_t yy_def[319] = +static const flex_int16_t yy_def[320] = { 0, - 304, 1, 305, 305, 306, 306, 304, 304, 304, 304, - 304, 307, 304, 304, 304, 308, 304, 304, 304, 304, - 304, 304, 304, 304, 309, 304, 304, 304, 304, 304, - 310, 304, 304, 304, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 307, 304, 311, 304, 304, 304, 304, 312, 304, - 313, 304, 308, 314, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 315, 304, 304, 309, 309, 316, 304, - 304, 304, 304, 304, 304, 310, 304, 310, 310, 310, + 305, 1, 306, 306, 307, 307, 305, 305, 305, 305, + 305, 308, 305, 305, 305, 309, 305, 305, 305, 305, + 305, 305, 305, 305, 310, 305, 305, 305, 305, 305, + 305, 311, 305, 305, 305, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 308, 305, 312, 305, 305, 305, 305, 313, + 305, 314, 305, 309, 315, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 316, 305, 305, 310, 310, 317, + 305, 305, 305, 305, 305, 305, 311, 305, 311, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 304, 307, 307, 311, 304, 304, - 304, 312, 304, 317, 313, 318, 308, 308, 314, 304, - 304, 315, 304, 304, 316, 304, 304, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 312, 312, 317, 313, 313, 318, - 304, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 305, 308, 308, 312, 305, + 305, 305, 313, 305, 318, 314, 319, 309, 309, 315, + 305, 305, 316, 305, 305, 317, 305, 305, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 313, 313, 318, 314, 314, + 319, 305, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 310, 310, 310, 310, 310, 304, 304, 304, 304, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 304, 304, 304, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 304, 304, 304, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 304, - 304, 304, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 310, 310, 310, 310, 310, 310, 304, 310, - 310, 310, 304, 310, 310, 304, 310, 310, 304, 310, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 305, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 305, 305, + 305, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 305, 305, 305, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 311, 311, 311, 311, 311, 311, 305, + 311, 311, 311, 305, 311, 311, 305, 311, 311, 305, - 304, 310, 310, 0, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304 + 311, 305, 311, 311, 0, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305 } ; -static const flex_int16_t yy_nxt[632] = +static const flex_int16_t yy_nxt[634] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 304, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 305, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 301, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 302, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 225, 227, - 89, 220, 89, 235, 89, 89, 222, 89, 89, 89, - 226, 231, 233, 237, 234, 232, 238, 89, 240, 89, - 239, 243, 89, 89, 244, 89, 242, 236, 241, 89, - 89, 89, 89, 89, 245, 89, 250, 89, 89, 89, - 249, 253, 258, 254, 89, 89, 89, 89, 255, 257, - 89, 251, 252, 259, 265, 89, 256, 263, 89, 89, - 266, 89, 267, 264, 89, 89, 268, 269, 89, 89, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 226, 221, 228, 90, 236, 90, 90, 90, + 90, 90, 232, 234, 227, 235, 233, 90, 241, 242, + 90, 240, 238, 237, 90, 239, 90, 243, 245, 90, + 90, 90, 252, 90, 90, 90, 244, 90, 246, 90, + 90, 251, 255, 90, 254, 90, 250, 259, 90, 90, + 90, 256, 253, 90, 260, 258, 257, 264, 266, 267, + 268, 90, 90, 90, 90, 90, 90, 265, 90, 269, - 89, 89, 89, 89, 277, 89, 270, 275, 271, 278, - 276, 274, 280, 279, 89, 89, 89, 89, 281, 284, - 89, 89, 283, 286, 288, 89, 89, 89, 290, 291, - 285, 89, 89, 89, 89, 89, 287, 295, 89, 299, - 297, 296, 294, 300, 298, 303, 89, 292, 293, 89, - 302, 55, 55, 55, 55, 55, 58, 58, 58, 58, - 58, 62, 62, 62, 62, 62, 73, 73, 73, 73, - 73, 88, 88, 88, 96, 96, 126, 126, 126, 126, - 126, 132, 132, 132, 132, 132, 135, 135, 135, 135, - 135, 137, 137, 137, 137, 137, 142, 89, 142, 142, + 270, 90, 278, 90, 276, 90, 90, 90, 271, 272, + 275, 280, 279, 277, 90, 281, 90, 90, 285, 90, + 90, 282, 90, 90, 287, 90, 289, 291, 284, 292, + 90, 90, 286, 90, 90, 90, 90, 296, 288, 300, + 90, 298, 301, 297, 293, 295, 299, 304, 90, 294, + 90, 90, 303, 56, 56, 56, 56, 56, 59, 59, + 59, 59, 59, 63, 63, 63, 63, 63, 74, 74, + 74, 74, 74, 89, 89, 89, 97, 97, 127, 127, + 127, 127, 127, 133, 133, 133, 133, 133, 136, 136, + 136, 136, 136, 138, 138, 138, 138, 138, 143, 90, - 142, 175, 175, 175, 175, 175, 178, 178, 178, 178, - 178, 89, 289, 89, 89, 282, 89, 89, 273, 272, - 89, 89, 262, 261, 260, 89, 89, 89, 89, 248, - 247, 246, 89, 89, 89, 89, 230, 229, 228, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 304, 7, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 143, 143, 143, 176, 176, 176, 176, 176, 179, 179, + 179, 179, 179, 290, 90, 90, 283, 90, 90, 274, + 273, 90, 90, 263, 262, 261, 90, 90, 90, 90, + 249, 248, 247, 90, 90, 90, 90, 231, 230, 229, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 305, 7, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; -static const flex_int16_t yy_chk[632] = +static const flex_int16_t yy_chk[634] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 316, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 317, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 304, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 303, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 299, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 300, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 204, 205, - 213, 197, 218, 216, 220, 225, 200, 221, 219, 224, - 204, 210, 212, 219, 213, 211, 219, 222, 221, 223, - 220, 224, 226, 231, 225, 232, 223, 218, 222, 233, - 235, 234, 238, 243, 226, 237, 232, 241, 244, 245, - 231, 235, 244, 237, 250, 249, 251, 298, 238, 243, - 254, 233, 234, 245, 251, 255, 241, 249, 256, 257, - 254, 258, 255, 250, 259, 263, 256, 257, 266, 264, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 211, 212, 206, 213, 219, 204, + 217, 214, 205, 198, 206, 221, 217, 222, 223, 226, + 234, 299, 211, 213, 205, 214, 212, 220, 222, 223, + 224, 221, 220, 219, 225, 220, 227, 224, 226, 232, + 233, 235, 234, 236, 238, 239, 225, 242, 227, 244, + 246, 233, 238, 245, 236, 250, 232, 245, 251, 255, + 252, 239, 235, 256, 246, 244, 242, 250, 252, 255, + 256, 257, 258, 259, 264, 260, 265, 251, 269, 257, - 268, 274, 269, 271, 268, 270, 258, 264, 259, 269, - 266, 263, 271, 270, 276, 275, 277, 280, 271, 275, - 281, 284, 274, 277, 281, 287, 288, 291, 284, 287, - 276, 292, 294, 295, 300, 297, 280, 292, 302, 296, - 294, 293, 291, 297, 295, 302, 290, 288, 289, 286, - 300, 305, 305, 305, 305, 305, 306, 306, 306, 306, - 306, 307, 307, 307, 307, 307, 308, 308, 308, 308, - 308, 309, 309, 309, 310, 310, 311, 311, 311, 311, - 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, - 313, 314, 314, 314, 314, 314, 315, 285, 315, 315, + 258, 267, 269, 271, 265, 270, 272, 275, 259, 260, + 264, 271, 270, 267, 276, 272, 277, 278, 276, 281, + 285, 272, 282, 289, 278, 288, 282, 285, 275, 288, + 292, 293, 277, 295, 298, 296, 301, 293, 281, 297, + 303, 295, 298, 294, 289, 292, 296, 303, 291, 290, + 287, 286, 301, 306, 306, 306, 306, 306, 307, 307, + 307, 307, 307, 308, 308, 308, 308, 308, 309, 309, + 309, 309, 309, 310, 310, 310, 311, 311, 312, 312, + 312, 312, 312, 313, 313, 313, 313, 313, 314, 314, + 314, 314, 314, 315, 315, 315, 315, 315, 316, 284, - 315, 317, 317, 317, 317, 317, 318, 318, 318, 318, - 318, 283, 282, 279, 278, 273, 267, 265, 262, 260, - 253, 252, 248, 247, 246, 242, 240, 239, 236, 230, - 229, 228, 227, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 316, 316, 316, 318, 318, 318, 318, 318, 319, 319, + 319, 319, 319, 283, 280, 279, 274, 268, 266, 263, + 261, 254, 253, 249, 248, 247, 243, 241, 240, 237, + 231, 230, 229, 228, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; /* The intent behind this definition is that it'll catch @@ -1183,13 +1183,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 304 ); + while ( yy_current_state != 305 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1510,218 +1510,223 @@ YY_RULE_SETUP case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return h1::parser::make_INCREMENT(loc); } +{ return h1::parser::make_QMARK(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return h1::parser::make_DECREMENT(loc); } +{ return h1::parser::make_INCREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return h1::parser::make_ASSIGN_LSHIFT(loc); } +{ return h1::parser::make_DECREMENT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return h1::parser::make_ASSIGN_RSHIFT(loc); } +{ return h1::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return h1::parser::make_LSHIFT(loc); } +{ return h1::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return h1::parser::make_RSHIFT(loc); } +{ return h1::parser::make_LSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return h1::parser::make_OR(loc); } +{ return h1::parser::make_RSHIFT(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return h1::parser::make_AND(loc); } +{ return h1::parser::make_OR(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return h1::parser::make_EQUALITY(loc); } +{ return h1::parser::make_AND(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return h1::parser::make_INEQUALITY(loc); } +{ return h1::parser::make_EQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return h1::parser::make_LESS_EQUAL(loc); } +{ return h1::parser::make_INEQUALITY(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return h1::parser::make_GREATER_EQUAL(loc); } +{ return h1::parser::make_LESS_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return h1::parser::make_LESS(loc); } +{ return h1::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return h1::parser::make_GREATER(loc); } +{ return h1::parser::make_LESS(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return h1::parser::make_ASSIGN_ADD(loc); } +{ return h1::parser::make_GREATER(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return h1::parser::make_ASSIGN_SUB(loc); } +{ return h1::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return h1::parser::make_ASSIGN_MULT(loc); } +{ return h1::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return h1::parser::make_ASSIGN_DIV(loc); } +{ return h1::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return h1::parser::make_ASSIGN_MOD(loc); } +{ return h1::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return h1::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return h1::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return h1::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return h1::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return h1::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return h1::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return h1::parser::make_ASSIGN(loc); } +{ return h1::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return h1::parser::make_ADD(loc); } +{ return h1::parser::make_ASSIGN(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return h1::parser::make_SUB(loc); } +{ return h1::parser::make_ADD(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return h1::parser::make_MULT(loc); } +{ return h1::parser::make_SUB(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return h1::parser::make_DIV(loc); } +{ return h1::parser::make_MULT(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return h1::parser::make_MOD(loc); } +{ return h1::parser::make_DIV(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return h1::parser::make_NOT(loc); } +{ return h1::parser::make_MOD(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return h1::parser::make_COMPLEMENT(loc); } +{ return h1::parser::make_NOT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return h1::parser::make_BITWISE_OR(loc); } +{ return h1::parser::make_COMPLEMENT(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return h1::parser::make_BITWISE_AND(loc); } +{ return h1::parser::make_BITWISE_OR(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return h1::parser::make_BITWISE_EXOR(loc); } +{ return h1::parser::make_BITWISE_AND(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return h1::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return h1::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 94: YY_RULE_SETUP #line 141 "lexer.lpp" -{ return h1::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return h1::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 95: -/* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return h1::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return h1::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 96: /* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return h1::parser::make_STRING(std::string(yytext), loc); } +{ return h1::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 97: +/* rule 97 can match eol */ YY_RULE_SETUP #line 144 "lexer.lpp" -{ return h1::parser::make_FLOAT(std::string(yytext), loc); } +{ return h1::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 98: YY_RULE_SETUP #line 145 "lexer.lpp" +{ return h1::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 146 "lexer.lpp" { return h1::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { return h1::parser::make_H1EOF(loc); } YY_BREAK -case 99: -/* rule 99 can match eol */ +case 100: +/* rule 100 can match eol */ YY_RULE_SETUP -#line 147 "lexer.lpp" +#line 148 "lexer.lpp" { throw h1::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" ECHO; YY_BREAK -#line 1724 "lexer.cpp" +#line 1729 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2019,7 +2024,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2048,11 +2053,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 304); + yy_is_jam = (yy_current_state == 305); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2851,6 +2856,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" diff --git a/src/h1/xsk/lexer.hpp b/src/h1/xsk/lexer.hpp index 9614e734..36a8948d 100644 --- a/src/h1/xsk/lexer.hpp +++ b/src/h1/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/h1/xsk/parser.cpp b/src/h1/xsk/parser.cpp index ac0457da..f70144e9 100644 --- a/src/h1/xsk/parser.cpp +++ b/src/h1/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -530,6 +531,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -796,6 +798,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1061,6 +1064,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1581,6 +1585,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1805,1213 +1810,1225 @@ namespace xsk { namespace gsc { namespace h1 { switch (yyn) { case 2: // root: program -#line 239 "parser.ypp" +#line 243 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1811 "parser.cpp" +#line 1816 "parser.cpp" break; case 3: // root: %empty -#line 240 "parser.ypp" +#line 244 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1817 "parser.cpp" +#line 1822 "parser.cpp" break; case 4: // program: program include -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1823 "parser.cpp" +#line 1828 "parser.cpp" break; case 5: // program: program define -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1829 "parser.cpp" +#line 1834 "parser.cpp" break; case 6: // program: include -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1835 "parser.cpp" +#line 1840 "parser.cpp" break; case 7: // program: define -#line 251 "parser.ypp" +#line 255 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1841 "parser.cpp" +#line 1846 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 256 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1847 "parser.cpp" +#line 1852 "parser.cpp" break; case 9: // define: usingtree -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1853 "parser.cpp" +#line 1858 "parser.cpp" break; case 10: // define: constant -#line 261 "parser.ypp" +#line 265 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1859 "parser.cpp" +#line 1864 "parser.cpp" break; case 11: // define: thread -#line 262 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1865 "parser.cpp" +#line 1870 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 267 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1871 "parser.cpp" +#line 1876 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 272 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1877 "parser.cpp" +#line 1882 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 277 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1883 "parser.cpp" +#line 1888 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1889 "parser.cpp" +#line 1894 "parser.cpp" break; case 16: // parameters: name -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1895 "parser.cpp" +#line 1900 "parser.cpp" break; case 17: // parameters: %empty -#line 286 "parser.ypp" +#line 290 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1901 "parser.cpp" +#line 1906 "parser.cpp" break; case 18: // stmt: stmt_block -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1907 "parser.cpp" +#line 1912 "parser.cpp" break; case 19: // stmt: stmt_call -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1913 "parser.cpp" +#line 1918 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1919 "parser.cpp" +#line 1924 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1925 "parser.cpp" +#line 1930 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1931 "parser.cpp" +#line 1936 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1937 "parser.cpp" +#line 1942 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1943 "parser.cpp" +#line 1948 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1949 "parser.cpp" +#line 1954 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1955 "parser.cpp" +#line 1960 "parser.cpp" break; case 27: // stmt: stmt_waitframe -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waitframe = std::move(yystack_[0].value.as < stmt_waitframe_ptr > ()); } -#line 1961 "parser.cpp" +#line 1966 "parser.cpp" break; case 28: // stmt: stmt_if -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1967 "parser.cpp" +#line 1972 "parser.cpp" break; case 29: // stmt: stmt_ifelse -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1973 "parser.cpp" +#line 1978 "parser.cpp" break; case 30: // stmt: stmt_while -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1979 "parser.cpp" +#line 1984 "parser.cpp" break; case 31: // stmt: stmt_for -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 32: // stmt: stmt_foreach -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 33: // stmt: stmt_switch -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 34: // stmt: stmt_case -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 35: // stmt: stmt_default -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 36: // stmt: stmt_break -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 37: // stmt: stmt_continue -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 38: // stmt: stmt_return -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 39: // stmt: stmt_breakpoint -#line 311 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 40: // stmt: stmt_prof_begin -#line 312 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 41: // stmt: stmt_prof_end -#line 313 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 42: // stmt_block: "{" stmt_list "}" -#line 317 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 43: // stmt_block: "{" "}" -#line 318 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 44: // stmt_list: stmt_list stmt -#line 323 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 45: // stmt_list: stmt -#line 325 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 46: // stmt_call: expr_call ";" -#line 330 "parser.ypp" +#line 334 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 47: // stmt_call: expr_call_thread ";" -#line 332 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 48: // stmt_assign: expr_assign ";" -#line 337 "parser.ypp" +#line 341 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 49: // stmt_endon: object "endon" "(" expr ")" ";" -#line 342 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 347 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 51: // stmt_notify: object "notify" "(" expr ")" ";" -#line 349 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 52: // stmt_wait: "wait" expr ";" -#line 354 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 359 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 54: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 361 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 366 "parser.ypp" +#line 370 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 56: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 57: // stmt_waittillframeend: "waittillframeend" ";" -#line 373 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 58: // stmt_waitframe: "waitframe" ";" -#line 378 "parser.ypp" +#line 382 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 59: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 60: // stmt_if: "if" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 61: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 62: // stmt_while: "while" "(" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 63: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 400 "parser.ypp" +#line 404 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 64: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 405 "parser.ypp" +#line 409 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 65: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 66: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 412 "parser.ypp" +#line 416 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 67: // stmt_case: "case" integer ":" -#line 417 "parser.ypp" +#line 421 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 68: // stmt_case: "case" neg_integer ":" -#line 419 "parser.ypp" +#line 423 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 69: // stmt_case: "case" string ":" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 70: // stmt_default: "default" ":" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 71: // stmt_break: "break" ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 72: // stmt_continue: "continue" ";" -#line 436 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 73: // stmt_return: "return" expr ";" -#line 441 "parser.ypp" +#line 445 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 74: // stmt_return: "return" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 75: // stmt_breakpoint: "breakpoint" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 76: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 77: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 78: // for_stmt: expr_assign -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 79: // for_stmt: %empty -#line 463 "parser.ypp" +#line 467 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 80: // for_expr: expr -#line 467 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 81: // for_expr: %empty -#line 468 "parser.ypp" +#line 472 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 82: // expr: expr_compare -#line 472 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; - case 83: // expr: expr_binary -#line 473 "parser.ypp" + case 83: // expr: expr_ternary +#line 477 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; - case 84: // expr: expr_primitive -#line 474 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2303 "parser.cpp" - break; - - case 85: // expr_assign: "++" object + case 84: // expr: expr_binary #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2309 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2308 "parser.cpp" break; - case 86: // expr_assign: "--" object + case 85: // expr: expr_primitive #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2315 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2314 "parser.cpp" break; - case 87: // expr_assign: object "++" -#line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2321 "parser.cpp" - break; - - case 88: // expr_assign: object "--" -#line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2327 "parser.cpp" - break; - - case 89: // expr_assign: object "=" expr -#line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2333 "parser.cpp" - break; - - case 90: // expr_assign: object "|=" expr + case 86: // expr_assign: "++" object #line 483 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2339 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2320 "parser.cpp" break; - case 91: // expr_assign: object "&=" expr + case 87: // expr_assign: "--" object #line 484 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2345 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2326 "parser.cpp" break; - case 92: // expr_assign: object "^=" expr + case 88: // expr_assign: object "++" #line 485 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2351 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2332 "parser.cpp" break; - case 93: // expr_assign: object "<<=" expr + case 89: // expr_assign: object "--" #line 486 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2357 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2338 "parser.cpp" break; - case 94: // expr_assign: object ">>=" expr + case 90: // expr_assign: object "=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2363 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2344 "parser.cpp" break; - case 95: // expr_assign: object "+=" expr + case 91: // expr_assign: object "|=" expr #line 488 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2369 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2350 "parser.cpp" break; - case 96: // expr_assign: object "-=" expr + case 92: // expr_assign: object "&=" expr #line 489 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2375 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2356 "parser.cpp" break; - case 97: // expr_assign: object "*=" expr + case 93: // expr_assign: object "^=" expr #line 490 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2381 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2362 "parser.cpp" break; - case 98: // expr_assign: object "/=" expr + case 94: // expr_assign: object "<<=" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2387 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2368 "parser.cpp" break; - case 99: // expr_assign: object "%=" expr + case 95: // expr_assign: object ">>=" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2393 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2374 "parser.cpp" break; - case 100: // expr_compare: expr "||" expr + case 96: // expr_assign: object "+=" expr +#line 493 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2380 "parser.cpp" + break; + + case 97: // expr_assign: object "-=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2386 "parser.cpp" + break; + + case 98: // expr_assign: object "*=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2392 "parser.cpp" + break; + + case 99: // expr_assign: object "/=" expr #line 496 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2399 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2398 "parser.cpp" break; - case 101: // expr_compare: expr "&&" expr + case 100: // expr_assign: object "%=" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2405 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2404 "parser.cpp" break; - case 102: // expr_compare: expr "==" expr -#line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2411 "parser.cpp" - break; - - case 103: // expr_compare: expr "!=" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2417 "parser.cpp" - break; - - case 104: // expr_compare: expr "<=" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2423 "parser.cpp" - break; - - case 105: // expr_compare: expr ">=" expr + case 101: // expr_compare: expr "||" expr #line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2429 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2410 "parser.cpp" break; - case 106: // expr_compare: expr "<" expr + case 102: // expr_compare: expr "&&" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2435 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2416 "parser.cpp" break; - case 107: // expr_compare: expr ">" expr + case 103: // expr_compare: expr "==" expr #line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2441 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2422 "parser.cpp" break; - case 108: // expr_binary: expr "|" expr + case 104: // expr_compare: expr "!=" expr +#line 504 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2428 "parser.cpp" + break; + + case 105: // expr_compare: expr "<=" expr +#line 505 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2434 "parser.cpp" + break; + + case 106: // expr_compare: expr ">=" expr +#line 506 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2440 "parser.cpp" + break; + + case 107: // expr_compare: expr "<" expr #line 507 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2447 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2446 "parser.cpp" break; - case 109: // expr_binary: expr "&" expr + case 108: // expr_compare: expr ">" expr #line 508 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2453 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2452 "parser.cpp" break; - case 110: // expr_binary: expr "^" expr -#line 509 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2459 "parser.cpp" - break; - - case 111: // expr_binary: expr "<<" expr -#line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2465 "parser.cpp" - break; - - case 112: // expr_binary: expr ">>" expr -#line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2471 "parser.cpp" - break; - - case 113: // expr_binary: expr "+" expr + case 109: // expr_ternary: expr "?" expr ":" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2477 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2458 "parser.cpp" break; - case 114: // expr_binary: expr "-" expr -#line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2483 "parser.cpp" - break; - - case 115: // expr_binary: expr "*" expr -#line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2489 "parser.cpp" - break; - - case 116: // expr_binary: expr "/" expr -#line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2495 "parser.cpp" - break; - - case 117: // expr_binary: expr "%" expr + case 110: // expr_binary: expr "|" expr #line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2501 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2464 "parser.cpp" break; - case 118: // expr_primitive: "(" expr ")" + case 111: // expr_binary: expr "&" expr +#line 517 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2470 "parser.cpp" + break; + + case 112: // expr_binary: expr "^" expr +#line 518 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2476 "parser.cpp" + break; + + case 113: // expr_binary: expr "<<" expr +#line 519 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2482 "parser.cpp" + break; + + case 114: // expr_binary: expr ">>" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2507 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2488 "parser.cpp" break; - case 119: // expr_primitive: "~" expr + case 115: // expr_binary: expr "+" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2513 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2494 "parser.cpp" break; - case 120: // expr_primitive: "!" expr + case 116: // expr_binary: expr "-" expr #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2519 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2500 "parser.cpp" break; - case 121: // expr_primitive: expr_call + case 117: // expr_binary: expr "*" expr #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2525 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2506 "parser.cpp" break; - case 122: // expr_primitive: expr_call_thread + case 118: // expr_binary: expr "/" expr #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2531 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2512 "parser.cpp" break; - case 123: // expr_primitive: expr_call_childthread + case 119: // expr_binary: expr "%" expr #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2537 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2518 "parser.cpp" break; - case 124: // expr_primitive: expr_function -#line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2543 "parser.cpp" - break; - - case 125: // expr_primitive: expr_add_array -#line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2549 "parser.cpp" - break; - - case 126: // expr_primitive: expr_array -#line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2555 "parser.cpp" - break; - - case 127: // expr_primitive: expr_field + case 120: // expr_primitive: "(" expr ")" #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2561 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2524 "parser.cpp" break; - case 128: // expr_primitive: expr_size + case 121: // expr_primitive: "~" expr #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2567 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2530 "parser.cpp" break; - case 129: // expr_primitive: thisthread + case 122: // expr_primitive: "!" expr #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2573 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2536 "parser.cpp" break; - case 130: // expr_primitive: empty_array + case 123: // expr_primitive: expr_call #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2579 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2542 "parser.cpp" break; - case 131: // expr_primitive: undefined + case 124: // expr_primitive: expr_call_thread #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2585 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2548 "parser.cpp" break; - case 132: // expr_primitive: game + case 125: // expr_primitive: expr_call_childthread #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2591 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2554 "parser.cpp" break; - case 133: // expr_primitive: self + case 126: // expr_primitive: expr_function #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2597 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2560 "parser.cpp" break; - case 134: // expr_primitive: anim + case 127: // expr_primitive: expr_add_array #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2603 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2566 "parser.cpp" break; - case 135: // expr_primitive: level + case 128: // expr_primitive: expr_array #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2609 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2572 "parser.cpp" break; - case 136: // expr_primitive: animation + case 129: // expr_primitive: expr_field #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2615 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2578 "parser.cpp" break; - case 137: // expr_primitive: animtree + case 130: // expr_primitive: expr_size #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2621 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2584 "parser.cpp" break; - case 138: // expr_primitive: name + case 131: // expr_primitive: thisthread #line 540 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2627 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2590 "parser.cpp" break; - case 139: // expr_primitive: istring + case 132: // expr_primitive: empty_array #line 541 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2633 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2596 "parser.cpp" break; - case 140: // expr_primitive: string + case 133: // expr_primitive: undefined #line 542 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2639 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2602 "parser.cpp" break; - case 141: // expr_primitive: vector + case 134: // expr_primitive: game #line 543 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2645 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2608 "parser.cpp" break; - case 142: // expr_primitive: neg_float + case 135: // expr_primitive: self #line 544 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2651 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2614 "parser.cpp" break; - case 143: // expr_primitive: neg_integer + case 136: // expr_primitive: anim #line 545 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2657 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2620 "parser.cpp" break; - case 144: // expr_primitive: float + case 137: // expr_primitive: level #line 546 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2663 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2626 "parser.cpp" break; - case 145: // expr_primitive: integer + case 138: // expr_primitive: animation #line 547 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2669 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2632 "parser.cpp" break; - case 146: // expr_primitive: false + case 139: // expr_primitive: animtree #line 548 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2675 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2638 "parser.cpp" break; - case 147: // expr_primitive: true + case 140: // expr_primitive: name #line 549 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2681 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2644 "parser.cpp" break; - case 148: // expr_call: expr_call_function + case 141: // expr_primitive: istring +#line 550 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2650 "parser.cpp" + break; + + case 142: // expr_primitive: string +#line 551 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2656 "parser.cpp" + break; + + case 143: // expr_primitive: vector +#line 552 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2662 "parser.cpp" + break; + + case 144: // expr_primitive: neg_float #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2687 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2668 "parser.cpp" break; - case 149: // expr_call: expr_call_pointer + case 145: // expr_primitive: neg_integer #line 554 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2693 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2674 "parser.cpp" break; - case 150: // expr_call: object expr_call_function + case 146: // expr_primitive: float #line 555 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2699 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2680 "parser.cpp" break; - case 151: // expr_call: object expr_call_pointer + case 147: // expr_primitive: integer #line 556 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2705 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2686 "parser.cpp" break; - case 152: // expr_call_thread: "thread" expr_call_function -#line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2711 "parser.cpp" + case 148: // expr_primitive: false +#line 557 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2692 "parser.cpp" break; - case 153: // expr_call_thread: "thread" expr_call_pointer -#line 561 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2717 "parser.cpp" + case 149: // expr_primitive: true +#line 558 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2698 "parser.cpp" break; - case 154: // expr_call_thread: object "thread" expr_call_function + case 150: // expr_call: expr_call_function #line 562 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2723 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2704 "parser.cpp" break; - case 155: // expr_call_thread: object "thread" expr_call_pointer + case 151: // expr_call: expr_call_pointer #line 563 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2729 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2710 "parser.cpp" break; - case 156: // expr_call_childthread: "childthread" expr_call_function -#line 567 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2735 "parser.cpp" + case 152: // expr_call: object expr_call_function +#line 564 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2716 "parser.cpp" break; - case 157: // expr_call_childthread: "childthread" expr_call_pointer -#line 568 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2741 "parser.cpp" + case 153: // expr_call: object expr_call_pointer +#line 565 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2722 "parser.cpp" break; - case 158: // expr_call_childthread: object "childthread" expr_call_function + case 154: // expr_call_thread: "thread" expr_call_function #line 569 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2747 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2728 "parser.cpp" break; - case 159: // expr_call_childthread: object "childthread" expr_call_pointer + case 155: // expr_call_thread: "thread" expr_call_pointer #line 570 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2753 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2734 "parser.cpp" break; - case 160: // expr_call_function: name "(" expr_arguments ")" -#line 575 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2759 "parser.cpp" + case 156: // expr_call_thread: object "thread" expr_call_function +#line 571 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2740 "parser.cpp" break; - case 161: // expr_call_function: file "::" name "(" expr_arguments ")" + case 157: // expr_call_thread: object "thread" expr_call_pointer +#line 572 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2746 "parser.cpp" + break; + + case 158: // expr_call_childthread: "childthread" expr_call_function +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2752 "parser.cpp" + break; + + case 159: // expr_call_childthread: "childthread" expr_call_pointer #line 577 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2765 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2758 "parser.cpp" break; - case 162: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 582 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2771 "parser.cpp" + case 160: // expr_call_childthread: object "childthread" expr_call_function +#line 578 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2764 "parser.cpp" break; - case 163: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 161: // expr_call_childthread: object "childthread" expr_call_pointer +#line 579 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2770 "parser.cpp" + break; + + case 162: // expr_call_function: name "(" expr_arguments ")" #line 584 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2776 "parser.cpp" + break; + + case 163: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 586 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2782 "parser.cpp" + break; + + case 164: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 591 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2788 "parser.cpp" + break; + + case 165: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 593 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2777 "parser.cpp" +#line 2794 "parser.cpp" break; - case 164: // expr_arguments: expr_arguments_filled -#line 588 "parser.ypp" + case 166: // expr_arguments: expr_arguments_filled +#line 597 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2783 "parser.cpp" +#line 2800 "parser.cpp" break; - case 165: // expr_arguments: expr_arguments_empty -#line 589 "parser.ypp" + case 167: // expr_arguments: expr_arguments_empty +#line 598 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2789 "parser.cpp" +#line 2806 "parser.cpp" break; - case 166: // expr_arguments_filled: expr_arguments "," expr -#line 594 "parser.ypp" + case 168: // expr_arguments_filled: expr_arguments "," expr +#line 603 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2795 "parser.cpp" +#line 2812 "parser.cpp" break; - case 167: // expr_arguments_filled: expr -#line 596 "parser.ypp" + case 169: // expr_arguments_filled: expr +#line 605 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2801 "parser.cpp" +#line 2818 "parser.cpp" break; - case 168: // expr_arguments_empty: %empty -#line 601 "parser.ypp" + case 170: // expr_arguments_empty: %empty +#line 610 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2807 "parser.cpp" +#line 2824 "parser.cpp" break; - case 169: // expr_function: "::" name -#line 606 "parser.ypp" + case 171: // expr_function: "::" name +#line 615 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2813 "parser.cpp" +#line 2830 "parser.cpp" break; - case 170: // expr_function: file "::" name -#line 608 "parser.ypp" + case 172: // expr_function: file "::" name +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2819 "parser.cpp" +#line 2836 "parser.cpp" break; - case 171: // expr_add_array: "[" expr_arguments_filled "]" -#line 613 "parser.ypp" + case 173: // expr_add_array: "[" expr_arguments_filled "]" +#line 622 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2825 "parser.cpp" +#line 2842 "parser.cpp" break; - case 172: // expr_array: object "[" expr "]" -#line 618 "parser.ypp" + case 174: // expr_array: object "[" expr "]" +#line 627 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2831 "parser.cpp" +#line 2848 "parser.cpp" break; - case 173: // expr_field: object "." name -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2837 "parser.cpp" - break; - - case 174: // expr_size: object ".size" -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2843 "parser.cpp" - break; - - case 175: // object: expr_call + case 175: // expr_field: object "." name #line 632 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2849 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2854 "parser.cpp" break; - case 176: // object: expr_array -#line 633 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2855 "parser.cpp" - break; - - case 177: // object: expr_field -#line 634 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2861 "parser.cpp" - break; - - case 178: // object: game -#line 635 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2867 "parser.cpp" - break; - - case 179: // object: self -#line 636 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2873 "parser.cpp" - break; - - case 180: // object: anim + case 176: // expr_size: object ".size" #line 637 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2879 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2860 "parser.cpp" break; - case 181: // object: level -#line 638 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2885 "parser.cpp" + case 177: // object: expr_call +#line 641 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2866 "parser.cpp" break; - case 182: // object: name -#line 639 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2891 "parser.cpp" - break; - - case 183: // thisthread: "thisthread" + case 178: // object: expr_array #line 642 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2897 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2872 "parser.cpp" break; - case 184: // empty_array: "[" "]" + case 179: // object: expr_field #line 643 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2903 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2878 "parser.cpp" break; - case 185: // undefined: "undefined" + case 180: // object: game #line 644 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2909 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2884 "parser.cpp" break; - case 186: // game: "game" + case 181: // object: self #line 645 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2915 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2890 "parser.cpp" break; - case 187: // self: "self" + case 182: // object: anim #line 646 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2921 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2896 "parser.cpp" break; - case 188: // anim: "anim" + case 183: // object: level #line 647 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2927 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2902 "parser.cpp" break; - case 189: // level: "level" + case 184: // object: name #line 648 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2933 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2908 "parser.cpp" break; - case 190: // animation: "%" "identifier" -#line 649 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2939 "parser.cpp" - break; - - case 191: // animtree: "#animtree" -#line 650 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2945 "parser.cpp" - break; - - case 192: // name: "identifier" + case 185: // thisthread: "thisthread" #line 651 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2951 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2914 "parser.cpp" break; - case 193: // file: "file path" + case 186: // empty_array: "[" "]" #line 652 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2957 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2920 "parser.cpp" break; - case 194: // istring: "localized string" + case 187: // undefined: "undefined" #line 653 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2963 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2926 "parser.cpp" break; - case 195: // string: "string literal" + case 188: // game: "game" #line 654 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2969 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2932 "parser.cpp" break; - case 196: // vector: "(" expr "," expr "," expr ")" + case 189: // self: "self" #line 655 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2975 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2938 "parser.cpp" break; - case 197: // neg_float: "-" "float" + case 190: // anim: "anim" #line 656 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2981 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2944 "parser.cpp" break; - case 198: // neg_integer: "-" "int" + case 191: // level: "level" #line 657 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2987 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2950 "parser.cpp" break; - case 199: // float: "float" + case 192: // animation: "%" "identifier" #line 658 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2993 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2956 "parser.cpp" break; - case 200: // integer: "int" + case 193: // animtree: "#animtree" #line 659 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2999 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2962 "parser.cpp" break; - case 201: // false: "false" + case 194: // name: "identifier" #line 660 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 3005 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2968 "parser.cpp" break; - case 202: // true: "true" + case 195: // file: "file path" #line 661 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2974 "parser.cpp" + break; + + case 196: // istring: "localized string" +#line 662 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2980 "parser.cpp" + break; + + case 197: // string: "string literal" +#line 663 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2986 "parser.cpp" + break; + + case 198: // vector: "(" expr "," expr "," expr ")" +#line 664 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2992 "parser.cpp" + break; + + case 199: // neg_float: "-" "float" +#line 665 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2998 "parser.cpp" + break; + + case 200: // neg_integer: "-" "int" +#line 666 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 3004 "parser.cpp" + break; + + case 201: // float: "float" +#line 667 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3010 "parser.cpp" + break; + + case 202: // integer: "int" +#line 668 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3016 "parser.cpp" + break; + + case 203: // false: "false" +#line 669 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 3022 "parser.cpp" + break; + + case 204: // true: "true" +#line 670 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 3011 "parser.cpp" +#line 3028 "parser.cpp" break; -#line 3015 "parser.cpp" +#line 3032 "parser.cpp" default: break; @@ -3202,11 +3219,11 @@ namespace xsk { namespace gsc { namespace h1 { "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", "level", "(", ")", "{", "}", "[", "]", - ",", ".", "::", ":", ";", "++", "--", "<<", ">>", "||", "&&", "==", "!=", - "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", - "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", + ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", + "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", + "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", - "int", "ADD_ARRAY", "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", + "int", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "include", "define", "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", @@ -3215,8 +3232,8 @@ namespace xsk { namespace gsc { namespace h1 { "stmt_while", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", "stmt_prof_end", "for_stmt", - "for_expr", "expr", "expr_assign", "expr_compare", "expr_binary", - "expr_primitive", "expr_call", "expr_call_thread", + "for_expr", "expr", "expr_assign", "expr_compare", "expr_ternary", + "expr_binary", "expr_primitive", "expr_call", "expr_call_thread", "expr_call_childthread", "expr_call_function", "expr_call_pointer", "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", "expr_field", @@ -3488,532 +3505,572 @@ namespace xsk { namespace gsc { namespace h1 { } - const short parser::yypact_ninf_ = -236; + const short parser::yypact_ninf_ = -242; - const short parser::yytable_ninf_ = -183; + const short parser::yytable_ninf_ = -185; const short parser::yypact_[] = { - 8, -65, -6, -236, 25, 8, -236, -236, -236, -236, - -236, -32, -236, -8, -28, -236, -236, -236, -17, 774, - -236, -236, 21, 30, -236, -236, 6, 6, -236, 51, - -236, -236, -236, -236, -236, -236, -236, 774, 377, -17, - 774, 774, 10, -3, -236, -236, -236, 1403, -236, -236, - -236, 20, -236, -236, -236, -236, -236, -236, 403, 449, - -236, 472, -236, -236, -236, 739, 798, 858, 930, -236, - -236, 12, 17, -236, -236, -236, -236, -236, -236, -236, - -236, -236, 24, 50, -17, 63, -236, -236, 76, 79, - -236, -236, 80, 967, 377, -236, 1481, 71, 89, -236, - -236, -236, -236, -236, -236, -236, -236, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 6, 6, -236, 836, -17, - -236, -236, 774, -17, -236, 599, -236, -236, 774, -17, - 774, -236, 774, 1274, 774, -236, 106, 106, 1491, 1000, - 1563, 1563, 130, 130, 130, 130, 1043, 1532, 1522, -37, - -37, -236, -236, -236, -236, -236, -236, -236, 1313, -236, - 31, -236, 96, 87, 101, 104, 774, 88, -20, 123, - 124, 127, 131, 134, -26, 121, 147, 152, 712, -236, - -15, -15, -236, -236, 643, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, 153, 155, - 157, -236, -236, 882, -236, -236, -236, -236, 76, 1274, - 96, 1352, 1390, 132, 1481, -236, -236, 774, -236, 774, - 774, 1437, -236, 140, -236, 774, 774, 544, -17, 774, - 117, 159, 166, 172, -236, -236, -236, -236, 1450, -236, - 173, 173, -236, -236, -236, -236, -236, 182, 184, 187, - 189, -236, -236, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 186, 774, 199, 39, 40, 42, - -236, 190, 1106, 1139, 191, -236, 932, -11, 1149, -236, - -236, -236, -236, 774, 774, 774, 774, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 205, 1182, - 774, -236, 196, 200, -236, 687, 687, 774, 774, -17, - 50, 1192, 1010, 1053, 1096, 774, -236, 48, -236, -236, - 225, -236, 203, 1481, 1225, 234, -236, 206, 209, 774, - 212, 774, 213, 774, 65, -236, 687, 544, 687, 774, - -236, -236, 69, -236, 73, -236, 82, -236, -236, 223, - -236, 1235, 217, 220, 222, 687, 687, -236, -236, -236, - -236, -236 + 8, -74, -23, -242, 25, 8, -242, -242, -242, -242, + -242, -21, -242, -16, -59, -242, -242, -242, -14, 810, + -242, -242, 20, -6, -242, -242, 7, 7, -242, 43, + -242, -242, -242, -242, -242, -242, -242, 810, 684, -14, + 810, 810, -43, 3, -242, -242, -242, 1562, -242, -242, + -242, -242, 21, -242, -242, -242, -242, -242, -242, 53, + 177, -242, 367, -242, -242, -242, 391, 426, 466, 707, + -242, -242, 13, 15, -242, -242, -242, -242, -242, -242, + -242, -242, -242, 14, 59, -14, 60, -242, -242, 65, + 68, -242, -242, 75, 1002, 684, -242, 1645, 80, 91, + -242, -242, -242, -242, -242, -242, -242, -242, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 7, 7, -242, + 873, -14, -242, -242, 810, -14, -242, 568, -242, -242, + 810, -14, 810, -242, 810, 806, 810, -242, 1527, 262, + 262, 1676, 1686, 454, 454, 203, 203, 203, 203, 1717, + 1758, 1727, 127, 127, -242, -242, -242, -242, -242, -242, + -242, 1412, -242, 32, -242, 100, 93, 104, 126, 810, + 117, 19, 130, 133, 134, 140, 144, -4, 139, 142, + 150, 747, -242, -15, -15, -242, -242, 613, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, 153, 163, 164, -242, -242, 920, -242, -242, -242, + -242, 65, 806, 100, 1452, 1491, 171, 1645, 810, -242, + -242, 810, -242, 810, 810, 1597, -242, 149, -242, 810, + 810, 770, -14, 810, 132, 168, 174, 176, -242, -242, + -242, -242, 1632, -242, -11, -11, -242, -242, -242, -242, + -242, 180, 187, 188, 192, -242, -242, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 189, 810, + 196, 1645, 49, 50, 71, -242, 191, 1168, 1202, 194, + -242, 966, 9, 1236, -242, -242, -242, -242, 810, 810, + 810, 810, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + 1645, 1645, 1645, 198, 1270, 810, -242, 209, 210, -242, + 658, 658, 810, 810, -14, 59, 1304, 1046, 1090, 1134, + 810, -242, 72, -242, -242, 225, -242, 211, 1645, 1338, + 229, -242, 216, 217, 810, 218, 810, 223, 810, 83, + -242, 658, 770, 658, 810, -242, -242, 84, -242, 141, + -242, 145, -242, -242, 212, -242, 1372, 224, 231, 240, + 658, 658, -242, -242, -242, -242, -242 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 192, 0, 2, 6, 7, 9, 10, - 11, 0, 193, 0, 0, 1, 4, 5, 17, 0, - 8, 195, 0, 0, 16, 191, 0, 0, 183, 0, - 202, 201, 185, 186, 187, 188, 189, 0, 168, 0, - 0, 0, 0, 0, 194, 199, 200, 0, 82, 83, - 84, 121, 122, 123, 148, 149, 124, 125, 126, 127, - 128, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 0, 0, 0, 0, 152, 153, 0, 0, - 156, 157, 0, 0, 168, 184, 167, 0, 164, 165, - 169, 120, 119, 197, 198, 190, 13, 0, 0, 0, + 3, 0, 0, 194, 0, 2, 6, 7, 9, 10, + 11, 0, 195, 0, 0, 1, 4, 5, 17, 0, + 8, 197, 0, 0, 16, 193, 0, 0, 185, 0, + 204, 203, 187, 188, 189, 190, 191, 0, 170, 0, + 0, 0, 0, 0, 196, 201, 202, 0, 82, 83, + 84, 85, 123, 124, 125, 150, 151, 126, 127, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 0, 0, 0, 0, 154, 155, 0, + 0, 158, 159, 0, 0, 170, 186, 169, 0, 166, + 167, 171, 122, 121, 199, 200, 192, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 150, 151, 168, 0, 12, 0, 14, 15, 0, 0, - 0, 118, 0, 167, 0, 171, 111, 112, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, - 114, 115, 116, 117, 154, 155, 158, 159, 0, 173, - 0, 164, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 45, 18, 0, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 0, 175, - 0, 176, 177, 0, 178, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 166, 172, 160, 168, 75, 168, - 168, 0, 57, 0, 58, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 70, 71, 72, 74, 0, 175, - 85, 86, 42, 44, 48, 46, 47, 0, 0, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 152, 153, 170, 0, 12, 0, 14, 15, + 0, 0, 0, 120, 0, 169, 0, 173, 0, 113, + 114, 101, 102, 103, 104, 105, 106, 107, 108, 110, + 111, 112, 115, 116, 117, 118, 119, 156, 157, 160, + 161, 0, 175, 0, 166, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 78, 0, 0, 0, 69, - 68, 67, 73, 0, 0, 0, 0, 89, 95, 96, - 97, 98, 99, 90, 91, 92, 94, 93, 0, 0, - 168, 161, 0, 0, 59, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 168, 196, 0, 76, 77, - 60, 62, 0, 80, 0, 0, 66, 0, 0, 168, - 0, 168, 0, 168, 0, 162, 0, 79, 0, 0, - 49, 51, 0, 54, 0, 56, 0, 163, 61, 0, - 64, 0, 0, 0, 0, 0, 0, 50, 53, 55, - 63, 65 + 0, 0, 43, 0, 0, 45, 18, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 0, 177, 0, 178, 179, 0, 180, 181, 182, + 183, 184, 0, 0, 0, 0, 0, 168, 0, 174, + 162, 170, 75, 170, 170, 0, 57, 0, 58, 0, + 0, 79, 0, 0, 0, 0, 0, 0, 70, 71, + 72, 74, 0, 177, 86, 87, 42, 44, 48, 46, + 47, 0, 0, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 52, 0, 0, 0, 0, + 78, 0, 0, 0, 69, 68, 67, 73, 0, 0, + 0, 0, 90, 96, 97, 98, 99, 100, 91, 92, + 93, 95, 94, 0, 0, 170, 163, 0, 0, 59, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, + 170, 198, 0, 76, 77, 60, 62, 0, 80, 0, + 0, 66, 0, 0, 170, 0, 170, 0, 170, 0, + 164, 0, 79, 0, 0, 49, 51, 0, 54, 0, + 56, 0, 165, 61, 0, 64, 0, 0, 0, 0, + 0, 0, 50, 53, 55, 63, 65 }; const short parser::yypgoto_[] = { - -236, -236, -236, 272, 273, -236, -236, -236, -236, -183, - -76, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -78, -236, 38, -235, -236, - -236, -236, -82, -107, -236, -25, -23, -119, -21, -236, - -236, -236, -22, 98, -236, 156, -236, -236, -236, 192, - 197, 202, 236, -236, -236, 0, 5, -236, -5, -236, - -236, 97, -236, 102, -236, -236 + -242, -242, -242, 286, 288, -242, -242, -242, -242, -185, + -81, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -68, -242, 39, -241, -242, + -242, -242, -242, -83, 52, -242, -25, -19, -121, -29, + -242, -242, -242, -22, 78, -242, 106, -242, -242, -242, + 118, 159, 195, 200, -242, -242, 0, 5, -242, -10, + -242, -242, 108, -242, 115, -242, -242 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 294, 342, 96, 218, 48, - 49, 50, 51, 52, 53, 54, 55, 97, 171, 99, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 299, 347, 97, 221, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 98, 174, + 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81 + 76, 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 86, 90, 87, 91, 11, 13, 136, 18, 22, - 328, 263, 295, 170, 1, 2, 29, 98, 24, 12, - 243, 33, 34, 35, 36, 15, 88, 88, 220, 85, - 244, 89, 89, 19, 14, 329, 130, 29, 131, 100, - -182, -182, 20, -182, 122, 123, 124, -182, -175, -175, - 85, -175, 132, 219, 250, -175, -182, 47, 21, -182, - 21, 88, 82, 46, -175, 133, 89, -175, 3, 12, - 3, 83, 236, 98, 134, 93, 84, 144, 101, 102, - 321, 322, 105, 323, 137, 144, 144, 220, 144, 355, - 12, 3, 135, 3, 144, 92, -182, -182, 103, 104, - 164, 166, 165, 167, -175, -175, 367, 138, 259, 259, - 372, 144, 219, 221, 373, 144, 132, 144, 287, 144, - 288, 289, 295, 374, 140, 88, 88, 139, 144, 169, - 89, 89, 143, 172, 145, 228, 237, 238, 242, 230, - 89, 239, 340, 341, 240, 146, 147, 148, 149, 150, + 11, 87, 91, 138, 22, 11, 13, 88, 92, 99, + 300, 12, 267, 173, 1, 2, 29, 14, 24, 18, + 29, 33, 34, 35, 36, 15, 89, 89, 21, 86, + 333, 90, 90, 130, 20, 84, 131, 132, 29, 101, + 85, -184, -184, 133, -184, 19, 104, 105, -184, -177, + -177, 86, -177, 134, 222, 334, -177, -184, 47, 247, + -184, 83, 89, 135, 136, -177, 99, 90, -177, 248, + 12, 3, 3, 240, 12, 3, 94, 254, 146, 102, + 103, -178, -178, 21, -178, 139, 46, 93, -178, 106, + 326, 327, 12, 3, 3, 146, 146, -178, -184, -184, + -178, 137, 167, 169, 140, 134, -177, -177, 168, 170, + 263, 263, 328, 360, 222, 224, 141, 146, 146, 142, + 292, 300, 293, 294, 372, 377, 146, 89, 89, 146, + 146, 172, 90, 90, 145, 175, 147, 231, -178, -178, + 241, 233, 90, 242, 243, 345, 346, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 245, 246, 259, 168, 247, 221, 221, - 254, 248, 221, 368, 249, 370, 229, 286, 231, 251, - 232, 291, 234, 107, 108, 120, 121, 122, 123, 124, - 228, 228, 380, 381, 228, 89, 89, 255, 130, 89, - 131, 337, 256, 264, 29, 265, 104, 266, 299, 120, - 121, 122, 123, 124, 241, 300, 354, 128, 220, 220, - 129, 301, 303, 88, 304, 221, 258, 305, 89, 306, - 362, 318, 364, 222, 366, 130, 130, 131, 131, 320, - 324, 327, 356, 219, 219, 335, 338, 228, 297, 220, - 339, 220, 89, 357, 346, 359, 360, 12, 3, 361, - 88, 88, 363, 365, 375, 89, 89, 377, 220, 220, - 378, 130, 379, 131, 219, 259, 219, 16, 17, 369, - 0, 252, 0, 292, 293, 0, 253, 298, 222, 222, - 0, 223, 222, 219, 219, 0, 88, 0, 0, 0, - 0, 89, 0, 221, 221, 0, 0, 0, 0, 0, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 0, 319, 0, 228, 228, 224, 0, 345, - 89, 89, 225, 0, 221, 221, 221, 226, 0, 0, - 0, 331, 332, 333, 334, 222, 260, 261, 0, 0, - 223, 0, 0, 221, 221, 0, 228, 228, 228, 0, - 0, 89, 89, 89, 0, 343, 344, 0, 0, 0, - 0, 227, 0, 0, 0, 228, 228, 0, 0, 0, - 89, 89, 224, 224, 0, 25, 224, 225, 225, 0, - 0, 225, 226, 226, 0, 0, 226, 371, 0, 0, - 0, 0, 0, 296, 0, 26, 27, 28, 29, 30, + 161, 162, 163, 164, 165, 166, 244, 246, 263, 171, + 249, 224, 224, 250, 251, 224, 373, 255, 375, 232, + 252, 234, 378, 235, 253, 237, 379, 146, 258, 223, + 296, 146, 259, 231, 231, 385, 386, 231, 90, 90, + 260, 132, 90, 268, 342, -179, -179, 133, -179, 124, + 125, 126, -179, 269, 270, 225, 290, 304, 245, 359, + 308, -179, 105, 305, -179, 306, 89, 309, 310, 224, + 262, 90, 311, 367, 323, 369, 325, 371, 340, 132, + 132, 329, 361, 226, 332, 133, 133, 222, 222, 223, + 364, 231, 302, 380, 351, 227, 90, 109, 110, 343, + 344, 362, -179, -179, 89, 89, 365, 366, 368, 90, + 90, 225, 225, 370, 382, 225, 132, 291, 222, 263, + 222, 383, 133, 122, 123, 124, 125, 126, 297, 298, + 384, 16, 303, 17, 374, 256, 228, 222, 222, 264, + 265, 89, 257, 226, 0, 0, 90, 0, 224, 224, + 0, 227, 227, 0, 0, 227, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 0, 324, 225, + 231, 231, 229, 0, 350, 90, 90, 230, 0, 224, + 224, 224, 122, 123, 124, 125, 126, 336, 337, 338, + 339, 0, 228, 228, 0, 0, 228, 301, 224, 224, + 0, 231, 231, 231, 0, 0, 90, 90, 90, 227, + 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, + 231, 231, 223, 223, 0, 90, 90, 0, 229, 229, + 0, 0, 229, 230, 230, 127, 128, 230, 29, 0, + 0, 0, 129, 376, 0, 0, 0, 0, 225, 225, + 228, 130, 0, 223, 131, 223, 0, 0, 0, -180, + -180, 0, -180, 0, 0, 0, -180, 0, 0, 0, + 0, 0, 223, 223, 0, -180, 226, 226, -180, 225, + 225, 225, 0, 0, 0, 0, 229, 0, 227, 227, + 0, 230, 12, 3, -181, -181, 0, -181, 225, 225, + 0, -181, 0, 0, 0, 0, 0, 226, 301, 226, + -181, 0, 0, -181, 0, 0, -180, -180, 0, 227, + 227, 227, 0, 0, 0, 0, 226, 226, 0, 228, + 228, 0, 0, 0, -182, -182, 0, -182, 227, 227, + 0, -182, 0, 0, 0, 0, 0, 0, 109, 110, + -182, -181, -181, -182, 115, 116, 117, 118, 0, 0, + 228, 228, 228, 0, 0, 229, 229, 0, 0, 0, + 230, 230, 0, 0, 122, 123, 124, 125, 126, 228, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -182, -182, 0, 0, 0, 229, 229, 229, 0, + 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 178, 0, 229, 229, 0, 0, 179, + 230, 230, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, + 137, 192, 86, 0, 0, 0, 176, 177, 178, 0, + 193, 194, 0, 0, 179, 0, 0, 180, 181, 182, + 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, + 191, 26, 0, 0, 29, 0, 0, 0, 0, 33, + 34, 35, 36, 12, 3, 137, 266, 86, 0, 0, + 0, 176, 177, 178, 0, 193, 194, 0, 0, 179, + 0, 0, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 25, 0, 33, 34, 35, 36, 12, 3, + 137, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 193, 194, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, 96, + 0, 0, 39, 0, 0, -183, -183, 0, -183, 0, + 0, 0, -183, 12, 3, 0, 0, 0, 40, 41, + 0, -183, 0, 0, -183, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, + 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, - 0, 94, 95, 222, 222, 39, 227, 227, 0, 0, - 227, -176, -176, 0, -176, 0, 0, 0, -176, 224, - 40, 41, 0, 0, 225, 0, 0, -176, 0, 226, - -176, 0, 0, 0, 222, 222, 222, 42, 0, 0, - 43, 12, 3, 21, 44, 45, 46, 0, 0, 0, - 0, 0, 0, 222, 222, 0, 0, -177, -177, 0, - -177, 223, 223, 227, -177, 0, 0, -176, -176, 0, - 0, 0, 0, -177, 0, 0, -177, 0, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 0, 0, - 0, 0, 223, 296, 223, 0, 128, 224, 224, 129, - 0, 0, 225, 225, 0, 0, 0, 226, 226, 0, - 0, 223, 223, -177, -177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, - 224, 0, 0, 225, 225, 225, 12, 3, 226, 226, - 226, 227, 227, 0, 0, 0, 0, 224, 224, 0, - 0, 0, 225, 225, 0, 29, 0, 226, 226, 0, - 33, 34, 35, 36, 0, 0, 0, 0, 85, 0, - 0, 0, 227, 227, 227, 190, 191, 0, 0, 0, - 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, - 176, 227, 227, 177, 178, 179, 0, 180, 181, 182, - 0, 183, 184, 185, 186, 187, 188, 26, 12, 3, - 29, 0, 0, 0, 0, 33, 34, 35, 36, 0, - 0, 135, 189, 85, 0, 0, 173, 174, 175, 0, - 190, 191, 0, 0, 176, 0, 0, 177, 178, 179, - 0, 180, 181, 182, 0, 183, 184, 185, 186, 187, - 188, 26, 0, 0, 29, 0, 0, 0, 0, 33, - 34, 35, 36, 12, 3, 135, 262, 85, 0, 0, - 173, 174, 175, 0, 190, 191, 0, 0, 176, 0, - 0, 177, 178, 179, 0, 180, 181, 182, 0, 183, - 184, 185, 186, 187, 188, 26, 0, 0, 29, 0, - 25, 0, 0, 33, 34, 35, 36, 12, 3, 135, - 0, 85, 0, 0, 0, 0, 0, 0, 190, 191, - 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, - 35, 36, 37, 0, 0, 0, 38, 0, 0, 0, - 39, 0, 257, 0, 0, 0, 0, -178, -178, 0, - -178, 12, 3, 0, -178, 40, 41, 0, 0, 0, - 0, 0, 25, -178, 0, 0, -178, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, - 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, - 33, 34, 35, 36, 37, 0, 0, 0, 38, 0, - 0, 0, 39, -178, -178, 0, -179, -179, 0, -179, - 0, 0, 0, -179, 0, 0, 0, 40, 41, 0, - 0, 0, -179, 0, 25, -179, 0, 0, 0, 0, - 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, - 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, - 94, 0, -179, -179, 39, 0, -180, -180, 0, -180, - 0, 267, 268, -180, 269, 270, 0, 0, 0, 40, - 41, 0, -180, 0, 0, -180, 0, 0, 0, 0, - 125, 0, 0, 29, 0, 0, 42, 0, 0, 43, - 12, 3, 21, 44, 45, 46, 128, 0, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, -180, -180, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, -181, -181, - 0, -181, 0, 29, 0, -181, 12, 3, 0, 0, - 0, 0, 0, 0, -181, 0, 128, -181, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 141, 0, - 0, 0, 0, 142, -181, -181, 12, 3, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 0, 38, -183, -183, 0, 39, 0, 261, 0, 0, + 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, + 0, 40, 41, 0, 86, 0, 0, 0, 25, 0, + 0, 0, 193, 194, 0, 0, 0, 0, 42, 0, + 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 236, 0, 0, 38, 12, 3, 108, 39, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, + 0, 25, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 42, 0, 0, 43, 12, 3, 21, 44, 45, + 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, + 34, 35, 36, 37, 0, 0, 0, 95, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 273, 274, 0, 0, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 0, 29, 0, 0, 42, 0, 0, 43, 12, 3, + 21, 44, 45, 46, 130, 0, 0, 131, 0, 0, + 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 29, 0, 0, + 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, + 130, 0, 0, 131, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 348, 0, 107, 108, 0, 349, 111, 112, 113, - 114, 115, 116, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 350, 0, 107, 108, 0, 351, - 111, 112, 113, 114, 115, 116, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 352, 0, 0, - 0, 0, 353, 0, 0, 0, 0, 325, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 326, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 330, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 336, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 347, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 358, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 376, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 233, - 0, 0, 0, 0, 0, 0, 0, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, + 0, 0, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 143, 0, 0, 0, 0, 144, 0, + 0, 12, 3, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 353, 0, 0, + 0, 0, 354, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 235, 0, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 284, 0, 0, - 0, 0, 0, 0, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 285, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 106, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 290, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 302, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 0, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 118, - 0, 120, 121, 122, 123, 124, 0, 0, 0, 0, - 0, 120, 121, 122, 123, 124, 107, 108, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 355, 0, 0, 0, 0, 356, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 357, 0, 0, 0, 0, + 358, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 331, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 120, 121, 122, 123, 124 + 0, 341, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 381, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 239, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 288, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 289, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 238, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 107, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 295, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 307, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 109, 110, 0, 112, 113, 114, 115, 116, 117, 118, + 109, 110, 0, 0, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 120, 121, 122, 123, 124, + 125, 126, 0, 0, 0, 120, 0, 122, 123, 124, + 125, 126, 109, 110, 0, 0, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, + 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 26, 27, 26, 27, 5, 1, 83, 40, 14, - 21, 194, 247, 132, 6, 7, 31, 38, 18, 84, - 40, 36, 37, 38, 39, 0, 26, 27, 135, 44, - 50, 26, 27, 65, 40, 46, 61, 31, 61, 39, - 28, 29, 50, 31, 81, 82, 83, 35, 28, 29, - 44, 31, 40, 135, 80, 35, 44, 19, 86, 47, - 86, 61, 41, 89, 44, 48, 61, 47, 85, 84, - 85, 41, 41, 94, 50, 37, 46, 46, 40, 41, - 41, 41, 85, 41, 84, 46, 46, 194, 46, 41, - 84, 85, 42, 85, 46, 44, 84, 85, 88, 89, - 125, 126, 125, 126, 84, 85, 41, 44, 190, 191, - 41, 46, 194, 135, 41, 46, 40, 46, 237, 46, - 239, 240, 357, 41, 44, 125, 126, 48, 46, 129, - 125, 126, 94, 133, 45, 135, 40, 50, 50, 139, - 135, 40, 325, 326, 40, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 40, 40, 247, 128, 40, 190, 191, - 49, 40, 194, 356, 40, 358, 138, 45, 140, 184, - 142, 41, 144, 53, 54, 79, 80, 81, 82, 83, - 190, 191, 375, 376, 194, 190, 191, 50, 223, 194, - 223, 320, 50, 50, 31, 50, 89, 50, 49, 79, - 80, 81, 82, 83, 176, 49, 335, 44, 325, 326, - 47, 49, 40, 223, 40, 247, 188, 40, 223, 40, - 349, 45, 351, 135, 353, 260, 261, 260, 261, 40, - 50, 50, 17, 325, 326, 40, 50, 247, 248, 356, - 50, 358, 247, 50, 330, 21, 50, 84, 85, 50, - 260, 261, 50, 50, 41, 260, 261, 50, 375, 376, - 50, 296, 50, 296, 356, 357, 358, 5, 5, 357, - -1, 184, -1, 245, 246, -1, 184, 249, 190, 191, - -1, 135, 194, 375, 376, -1, 296, -1, -1, -1, - -1, 296, -1, 325, 326, -1, -1, -1, -1, -1, - -1, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, -1, 285, -1, 325, 326, 135, -1, 329, - 325, 326, 135, -1, 356, 357, 358, 135, -1, -1, - -1, 303, 304, 305, 306, 247, 190, 191, -1, -1, - 194, -1, -1, 375, 376, -1, 356, 357, 358, -1, - -1, 356, 357, 358, -1, 327, 328, -1, -1, -1, - -1, 135, -1, -1, -1, 375, 376, -1, -1, -1, - 375, 376, 190, 191, -1, 8, 194, 190, 191, -1, - -1, 194, 190, 191, -1, -1, 194, 359, -1, -1, - -1, -1, -1, 247, -1, 28, 29, 30, 31, 32, - 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, - -1, 44, 45, 325, 326, 48, 190, 191, -1, -1, - 194, 28, 29, -1, 31, -1, -1, -1, 35, 247, - 63, 64, -1, -1, 247, -1, -1, 44, -1, 247, - 47, -1, -1, -1, 356, 357, 358, 80, -1, -1, - 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, 375, 376, -1, -1, 28, 29, -1, - 31, 325, 326, 247, 35, -1, -1, 84, 85, -1, - -1, -1, -1, 44, -1, -1, 47, -1, -1, -1, - 28, 29, -1, 31, -1, -1, -1, 35, -1, -1, - -1, -1, 356, 357, 358, -1, 44, 325, 326, 47, - -1, -1, 325, 326, -1, -1, -1, 325, 326, -1, - -1, 375, 376, 84, 85, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, - 358, -1, -1, 356, 357, 358, 84, 85, 356, 357, - 358, 325, 326, -1, -1, -1, -1, 375, 376, -1, - -1, -1, 375, 376, -1, 31, -1, 375, 376, -1, - 36, 37, 38, 39, -1, -1, -1, -1, 44, -1, - -1, -1, 356, 357, 358, 51, 52, -1, -1, -1, - -1, -1, 3, 4, 5, -1, -1, -1, -1, -1, - 11, 375, 376, 14, 15, 16, -1, 18, 19, 20, - -1, 22, 23, 24, 25, 26, 27, 28, 84, 85, - 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, - -1, 42, 43, 44, -1, -1, 3, 4, 5, -1, - 51, 52, -1, -1, 11, -1, -1, 14, 15, 16, + 0, 26, 27, 84, 14, 5, 1, 26, 27, 38, + 251, 85, 197, 134, 6, 7, 31, 40, 18, 40, + 31, 36, 37, 38, 39, 0, 26, 27, 87, 44, + 21, 26, 27, 44, 50, 41, 47, 62, 31, 39, + 46, 28, 29, 62, 31, 66, 89, 90, 35, 28, + 29, 44, 31, 40, 137, 46, 35, 44, 19, 40, + 47, 41, 62, 48, 50, 44, 95, 62, 47, 50, + 85, 86, 86, 41, 85, 86, 37, 81, 46, 40, + 41, 28, 29, 87, 31, 85, 90, 44, 35, 86, + 41, 41, 85, 86, 86, 46, 46, 44, 85, 86, + 47, 42, 127, 128, 44, 40, 85, 86, 127, 128, + 193, 194, 41, 41, 197, 137, 48, 46, 46, 44, + 241, 362, 243, 244, 41, 41, 46, 127, 128, 46, + 46, 131, 127, 128, 95, 135, 45, 137, 85, 86, + 40, 141, 137, 50, 40, 330, 331, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 40, 50, 251, 130, + 40, 193, 194, 40, 40, 197, 361, 187, 363, 140, + 40, 142, 41, 144, 40, 146, 41, 46, 49, 137, + 41, 46, 50, 193, 194, 380, 381, 197, 193, 194, + 50, 226, 197, 50, 325, 28, 29, 226, 31, 82, + 83, 84, 35, 50, 50, 137, 45, 49, 179, 340, + 40, 44, 90, 49, 47, 49, 226, 40, 40, 251, + 191, 226, 40, 354, 45, 356, 40, 358, 40, 264, + 265, 50, 17, 137, 50, 264, 265, 330, 331, 197, + 21, 251, 252, 41, 335, 137, 251, 54, 55, 50, + 50, 50, 85, 86, 264, 265, 50, 50, 50, 264, + 265, 193, 194, 50, 50, 197, 301, 238, 361, 362, + 363, 50, 301, 80, 81, 82, 83, 84, 249, 250, + 50, 5, 253, 5, 362, 187, 137, 380, 381, 193, + 194, 301, 187, 197, -1, -1, 301, -1, 330, 331, + -1, 193, 194, -1, -1, 197, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, -1, 289, 251, + 330, 331, 137, -1, 334, 330, 331, 137, -1, 361, + 362, 363, 80, 81, 82, 83, 84, 308, 309, 310, + 311, -1, 193, 194, -1, -1, 197, 251, 380, 381, + -1, 361, 362, 363, -1, -1, 361, 362, 363, 251, + -1, 332, 333, -1, -1, -1, -1, -1, -1, -1, + 380, 381, 330, 331, -1, 380, 381, -1, 193, 194, + -1, -1, 197, 193, 194, 28, 29, 197, 31, -1, + -1, -1, 35, 364, -1, -1, -1, -1, 330, 331, + 251, 44, -1, 361, 47, 363, -1, -1, -1, 28, + 29, -1, 31, -1, -1, -1, 35, -1, -1, -1, + -1, -1, 380, 381, -1, 44, 330, 331, 47, 361, + 362, 363, -1, -1, -1, -1, 251, -1, 330, 331, + -1, 251, 85, 86, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, 361, 362, 363, + 44, -1, -1, 47, -1, -1, 85, 86, -1, 361, + 362, 363, -1, -1, -1, -1, 380, 381, -1, 330, + 331, -1, -1, -1, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, -1, 54, 55, + 44, 85, 86, 47, 60, 61, 62, 63, -1, -1, + 361, 362, 363, -1, -1, 330, 331, -1, -1, -1, + 330, 331, -1, -1, 80, 81, 82, 83, 84, 380, + 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, -1, -1, -1, 361, 362, 363, -1, + -1, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 3, 4, 5, -1, 380, 381, -1, -1, 11, + 380, 381, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, + 42, 43, 44, -1, -1, -1, 3, 4, 5, -1, + 52, 53, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, -1, -1, -1, 36, - 37, 38, 39, 84, 85, 42, 43, 44, -1, -1, - 3, 4, 5, -1, 51, 52, -1, -1, 11, -1, - -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, - 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, - 8, -1, -1, 36, 37, 38, 39, 84, 85, 42, - -1, 44, -1, -1, -1, -1, -1, -1, 51, 52, - 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, - 38, 39, 40, -1, -1, -1, 44, -1, -1, -1, - 48, -1, 50, -1, -1, -1, -1, 28, 29, -1, - 31, 84, 85, -1, 35, 63, 64, -1, -1, -1, - -1, -1, 8, 44, -1, -1, 47, -1, -1, -1, - -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 28, 29, 30, 31, 32, 33, 34, -1, - 36, 37, 38, 39, 40, -1, -1, -1, 44, -1, - -1, -1, 48, 84, 85, -1, 28, 29, -1, 31, - -1, -1, -1, 35, -1, -1, -1, 63, 64, -1, - -1, -1, 44, -1, 8, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 28, 29, 30, 31, 32, 33, - 34, -1, 36, 37, 38, 39, 40, -1, -1, -1, - 44, -1, 84, 85, 48, -1, 28, 29, -1, 31, - -1, 9, 10, 35, 12, 13, -1, -1, -1, 63, - 64, -1, 44, -1, -1, 47, -1, -1, -1, -1, - 28, -1, -1, 31, -1, -1, 80, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 44, -1, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 28, 29, - -1, 31, -1, 31, -1, 35, 84, 85, -1, -1, - -1, -1, -1, -1, 44, -1, 44, 47, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 41, -1, - -1, -1, -1, 46, 84, 85, 84, 85, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 37, 38, 39, 85, 86, 42, 43, 44, -1, -1, + -1, 3, 4, 5, -1, 52, 53, -1, -1, 11, + -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, 8, -1, 36, 37, 38, 39, 85, 86, + 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 52, 53, 28, 29, 30, 31, 32, 33, 34, -1, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, 48, -1, -1, 28, 29, -1, 31, -1, + -1, -1, 35, 85, 86, -1, -1, -1, 64, 65, + -1, 44, -1, -1, 47, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, 84, 85, + 86, 87, 88, 89, 90, 28, 29, 30, 31, 32, + 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, + -1, 44, 85, 86, -1, 48, -1, 50, -1, -1, + -1, 31, -1, -1, -1, -1, 36, 37, 38, 39, + -1, 64, 65, -1, 44, -1, -1, -1, 8, -1, + -1, -1, 52, 53, -1, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 28, 29, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 45, -1, -1, 44, 85, 86, 51, 48, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + -1, -1, -1, -1, 64, 65, -1, -1, -1, -1, + -1, 8, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 81, -1, -1, 84, 85, 86, 87, 88, 89, + 90, 28, 29, 30, 31, 32, 33, 34, -1, 36, + 37, 38, 39, 40, -1, -1, -1, 44, -1, -1, + -1, 48, -1, -1, -1, -1, -1, -1, -1, 9, + 10, -1, 12, 13, -1, -1, -1, 64, 65, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, + -1, 31, -1, -1, 81, -1, -1, 84, 85, 86, + 87, 88, 89, 90, 44, -1, -1, 47, -1, -1, + -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 31, -1, -1, + -1, -1, -1, -1, -1, 85, 86, -1, -1, -1, + 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, - 83, 41, -1, 53, 54, -1, 46, 57, 58, 59, - 60, 61, 62, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 41, -1, 53, 54, -1, 46, - 57, 58, 59, 60, 61, 62, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - 77, 78, 79, 80, 81, 82, 83, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 41, -1, -1, - -1, -1, 46, -1, -1, -1, -1, 41, -1, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, - -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, -1, -1, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, 45, - -1, -1, -1, -1, -1, -1, -1, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 41, -1, -1, -1, -1, 46, -1, + -1, 85, 86, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 41, -1, -1, + -1, -1, 46, -1, -1, -1, -1, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 76, 77, 78, 79, 80, 81, 82, 83, 45, -1, - -1, -1, -1, -1, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 45, -1, -1, - -1, -1, -1, -1, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 46, -1, -1, -1, - -1, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 50, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 50, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 53, 54, -1, 56, 57, 58, - 59, 60, 61, 62, -1, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, 77, - -1, 79, 80, 81, 82, 83, -1, -1, -1, -1, - -1, 79, 80, 81, 82, 83, 53, 54, -1, -1, - -1, -1, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 41, -1, -1, -1, -1, 46, -1, -1, -1, + -1, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 41, -1, -1, -1, -1, + 46, -1, -1, -1, -1, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 41, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, 80, 81, 82, 83 + -1, 41, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 46, -1, -1, + -1, -1, 51, -1, -1, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 49, -1, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 50, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 51, -1, -1, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, -1, -1, -1, + -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 54, 55, -1, -1, 58, 59, 60, 61, 62, 63, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, 78, 79, 80, 81, 82, + 83, 84, -1, -1, -1, 78, -1, 80, 81, 82, + 83, 84, 54, 55, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 85, 99, 100, 101, 102, 103, 104, - 105, 163, 84, 164, 40, 0, 101, 102, 40, 65, - 50, 86, 166, 106, 163, 8, 28, 29, 30, 31, + 0, 6, 7, 86, 101, 102, 103, 104, 105, 106, + 107, 166, 85, 167, 40, 0, 103, 104, 40, 66, + 50, 87, 169, 108, 166, 8, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 44, 48, - 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, - 139, 140, 141, 142, 143, 144, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 41, 41, 46, 44, 143, 144, 163, 164, - 143, 144, 44, 135, 44, 45, 135, 145, 146, 147, - 163, 135, 135, 88, 89, 85, 50, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 76, 77, 78, - 79, 80, 81, 82, 83, 28, 29, 35, 44, 47, - 143, 144, 40, 48, 50, 42, 108, 163, 44, 48, - 44, 41, 46, 135, 46, 45, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 143, 144, 143, 144, 135, 163, - 145, 146, 163, 3, 4, 5, 11, 14, 15, 16, - 18, 19, 20, 22, 23, 24, 25, 26, 27, 43, - 51, 52, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 136, 140, - 141, 150, 151, 153, 157, 158, 159, 160, 163, 135, - 163, 135, 135, 45, 135, 45, 41, 40, 50, 40, - 40, 135, 50, 40, 50, 40, 40, 40, 40, 40, - 80, 166, 169, 171, 49, 50, 50, 50, 135, 140, - 153, 153, 43, 107, 50, 50, 50, 9, 10, 12, - 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 45, 46, 45, 145, 145, 145, - 50, 41, 135, 135, 133, 136, 153, 163, 135, 49, - 49, 49, 50, 40, 40, 40, 40, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 45, 135, - 40, 41, 41, 41, 50, 41, 41, 50, 21, 46, - 41, 135, 135, 135, 135, 40, 41, 145, 50, 50, - 107, 107, 134, 135, 135, 163, 108, 41, 41, 46, - 41, 46, 41, 46, 145, 41, 17, 50, 41, 21, - 50, 50, 145, 50, 145, 50, 145, 41, 107, 133, - 107, 135, 41, 41, 41, 41, 41, 50, 50, 50, - 107, 107 + 64, 65, 81, 84, 88, 89, 90, 137, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 41, 41, 46, 44, 146, 147, 166, + 167, 146, 147, 44, 137, 44, 45, 137, 148, 149, + 150, 166, 137, 137, 89, 90, 86, 50, 51, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, 28, 29, 35, + 44, 47, 146, 147, 40, 48, 50, 42, 110, 166, + 44, 48, 44, 41, 46, 137, 46, 45, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 146, 147, 146, + 147, 137, 166, 148, 149, 166, 3, 4, 5, 11, + 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, + 26, 27, 43, 52, 53, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 138, 143, 144, 153, 154, 156, 160, 161, 162, + 163, 166, 137, 166, 137, 137, 45, 137, 49, 45, + 41, 40, 50, 40, 40, 137, 50, 40, 50, 40, + 40, 40, 40, 40, 81, 169, 172, 174, 49, 50, + 50, 50, 137, 143, 156, 156, 43, 109, 50, 50, + 50, 9, 10, 12, 13, 52, 53, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 45, 46, + 45, 137, 148, 148, 148, 50, 41, 137, 137, 135, + 138, 156, 166, 137, 49, 49, 49, 50, 40, 40, + 40, 40, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 45, 137, 40, 41, 41, 41, 50, + 41, 41, 50, 21, 46, 41, 137, 137, 137, 137, + 40, 41, 148, 50, 50, 109, 109, 136, 137, 137, + 166, 110, 41, 41, 46, 41, 46, 41, 46, 148, + 41, 17, 50, 41, 21, 50, 50, 148, 50, 148, + 50, 148, 41, 109, 135, 109, 137, 41, 41, 41, + 41, 41, 50, 50, 50, 109, 109 }; const unsigned char parser::yyr1_[] = { - 0, 98, 99, 99, 100, 100, 100, 100, 101, 102, - 102, 102, 103, 104, 105, 106, 106, 106, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 108, 108, 109, 109, 110, 110, 111, 112, - 113, 113, 114, 115, 115, 116, 116, 117, 118, 118, - 119, 120, 121, 122, 123, 123, 124, 125, 125, 125, - 126, 127, 128, 129, 129, 130, 131, 132, 133, 133, - 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, - 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, - 143, 143, 144, 144, 145, 145, 146, 146, 147, 148, - 148, 149, 150, 151, 152, 153, 153, 153, 153, 153, - 153, 153, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173 + 0, 100, 101, 101, 102, 102, 102, 102, 103, 104, + 104, 104, 105, 106, 107, 108, 108, 108, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 110, 110, 111, 111, 112, 112, 113, 114, + 115, 115, 116, 117, 117, 118, 118, 119, 120, 120, + 121, 122, 123, 124, 125, 125, 126, 127, 127, 127, + 128, 129, 130, 131, 131, 132, 133, 134, 135, 135, + 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 143, 143, 143, 143, 144, 144, 144, 144, 145, 145, + 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 150, 151, 151, 152, 153, 154, 155, 156, 156, 156, + 156, 156, 156, 156, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176 }; const signed char @@ -4027,19 +4084,19 @@ namespace xsk { namespace gsc { namespace h1 { 8, 6, 3, 8, 6, 8, 6, 2, 2, 4, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, - 1, 0, 1, 1, 1, 2, 2, 2, 2, 3, + 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, - 4, 6, 8, 9, 1, 1, 3, 1, 0, 2, - 3, 3, 4, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 7, 2, 2, 1, - 1, 1, 1 + 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, + 3, 3, 4, 6, 8, 9, 1, 1, 3, 1, + 0, 2, 3, 3, 4, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 7, 2, + 2, 1, 1, 1, 1 }; @@ -4049,27 +4106,27 @@ namespace xsk { namespace gsc { namespace h1 { const short parser::yyrline_[] = { - 0, 239, 239, 240, 244, 246, 248, 250, 255, 260, - 261, 262, 266, 271, 276, 281, 283, 286, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 317, 318, 322, 324, 329, 331, 336, 341, - 346, 348, 353, 358, 360, 365, 367, 372, 377, 379, - 384, 389, 394, 399, 404, 406, 411, 416, 418, 420, - 425, 430, 435, 440, 442, 447, 452, 457, 462, 463, - 467, 468, 472, 473, 474, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 496, 497, 498, 499, 500, 501, 502, 503, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 553, 554, - 555, 556, 560, 561, 562, 563, 567, 568, 569, 570, - 574, 576, 581, 583, 588, 589, 593, 595, 601, 605, - 607, 612, 617, 622, 627, 632, 633, 634, 635, 636, - 637, 638, 639, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 661 + 0, 243, 243, 244, 248, 250, 252, 254, 259, 264, + 265, 266, 270, 275, 280, 285, 287, 290, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 321, 322, 326, 328, 333, 335, 340, 345, + 350, 352, 357, 362, 364, 369, 371, 376, 381, 383, + 388, 393, 398, 403, 408, 410, 415, 420, 422, 424, + 429, 434, 439, 444, 446, 451, 456, 461, 466, 467, + 471, 472, 476, 477, 478, 479, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 501, 502, 503, 504, 505, 506, 507, 508, 512, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 562, 563, 564, 565, 569, 570, 571, 572, 576, 577, + 578, 579, 583, 585, 590, 592, 597, 598, 602, 604, + 610, 614, 616, 621, 626, 631, 636, 641, 642, 643, + 644, 645, 646, 647, 648, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670 }; void @@ -4102,9 +4159,9 @@ namespace xsk { namespace gsc { namespace h1 { #line 13 "parser.ypp" } } } // xsk::gsc::h1 -#line 4106 "parser.cpp" +#line 4163 "parser.cpp" -#line 663 "parser.ypp" +#line 672 "parser.ypp" void xsk::gsc::h1::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/h1/xsk/parser.hpp b/src/h1/xsk/parser.hpp index 58fd840b..09bd2240 100644 --- a/src/h1/xsk/parser.hpp +++ b/src/h1/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace h1 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -700,53 +701,55 @@ namespace xsk { namespace gsc { namespace h1 { DOUBLECOLON = 48, // "::" COLON = 49, // ":" SEMICOLON = 50, // ";" - INCREMENT = 51, // "++" - DECREMENT = 52, // "--" - LSHIFT = 53, // "<<" - RSHIFT = 54, // ">>" - OR = 55, // "||" - AND = 56, // "&&" - EQUALITY = 57, // "==" - INEQUALITY = 58, // "!=" - LESS_EQUAL = 59, // "<=" - GREATER_EQUAL = 60, // ">=" - LESS = 61, // "<" - GREATER = 62, // ">" - NOT = 63, // "!" - COMPLEMENT = 64, // "~" - ASSIGN = 65, // "=" - ASSIGN_ADD = 66, // "+=" - ASSIGN_SUB = 67, // "-=" - ASSIGN_MULT = 68, // "*=" - ASSIGN_DIV = 69, // "/=" - ASSIGN_MOD = 70, // "%=" - ASSIGN_BITWISE_OR = 71, // "|=" - ASSIGN_BITWISE_AND = 72, // "&=" - ASSIGN_BITWISE_EXOR = 73, // "^=" - ASSIGN_RSHIFT = 74, // ">>=" - ASSIGN_LSHIFT = 75, // "<<=" - BITWISE_OR = 76, // "|" - BITWISE_AND = 77, // "&" - BITWISE_EXOR = 78, // "^" - ADD = 79, // "+" - SUB = 80, // "-" - MULT = 81, // "*" - DIV = 82, // "/" - MOD = 83, // "%" - FILE = 84, // "file path" - NAME = 85, // "identifier" - STRING = 86, // "string literal" - ISTRING = 87, // "localized string" - FLOAT = 88, // "float" - INTEGER = 89, // "int" - ADD_ARRAY = 90, // ADD_ARRAY - THEN = 91, // THEN - NEG = 92, // NEG - ANIMREF = 93, // ANIMREF - PREINC = 94, // PREINC - PREDEC = 95, // PREDEC - POSTINC = 96, // POSTINC - POSTDEC = 97 // POSTDEC + QMARK = 51, // "?" + INCREMENT = 52, // "++" + DECREMENT = 53, // "--" + LSHIFT = 54, // "<<" + RSHIFT = 55, // ">>" + OR = 56, // "||" + AND = 57, // "&&" + EQUALITY = 58, // "==" + INEQUALITY = 59, // "!=" + LESS_EQUAL = 60, // "<=" + GREATER_EQUAL = 61, // ">=" + LESS = 62, // "<" + GREATER = 63, // ">" + NOT = 64, // "!" + COMPLEMENT = 65, // "~" + ASSIGN = 66, // "=" + ASSIGN_ADD = 67, // "+=" + ASSIGN_SUB = 68, // "-=" + ASSIGN_MULT = 69, // "*=" + ASSIGN_DIV = 70, // "/=" + ASSIGN_MOD = 71, // "%=" + ASSIGN_BITWISE_OR = 72, // "|=" + ASSIGN_BITWISE_AND = 73, // "&=" + ASSIGN_BITWISE_EXOR = 74, // "^=" + ASSIGN_RSHIFT = 75, // ">>=" + ASSIGN_LSHIFT = 76, // "<<=" + BITWISE_OR = 77, // "|" + BITWISE_AND = 78, // "&" + BITWISE_EXOR = 79, // "^" + ADD = 80, // "+" + SUB = 81, // "-" + MULT = 82, // "*" + DIV = 83, // "/" + MOD = 84, // "%" + FILE = 85, // "file path" + NAME = 86, // "identifier" + STRING = 87, // "string literal" + ISTRING = 88, // "localized string" + FLOAT = 89, // "float" + INTEGER = 90, // "int" + ADD_ARRAY = 91, // ADD_ARRAY + THEN = 92, // THEN + TERN = 93, // TERN + NEG = 94, // NEG + ANIMREF = 95, // ANIMREF + PREINC = 96, // PREINC + PREDEC = 97, // PREDEC + POSTINC = 98, // POSTINC + POSTDEC = 99 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -763,7 +766,7 @@ namespace xsk { namespace gsc { namespace h1 { { enum symbol_kind_type { - YYNTOKENS = 98, ///< Number of tokens. + YYNTOKENS = 100, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -816,129 +819,132 @@ namespace xsk { namespace gsc { namespace h1 { S_DOUBLECOLON = 48, // "::" S_COLON = 49, // ":" S_SEMICOLON = 50, // ";" - S_INCREMENT = 51, // "++" - S_DECREMENT = 52, // "--" - S_LSHIFT = 53, // "<<" - S_RSHIFT = 54, // ">>" - S_OR = 55, // "||" - S_AND = 56, // "&&" - S_EQUALITY = 57, // "==" - S_INEQUALITY = 58, // "!=" - S_LESS_EQUAL = 59, // "<=" - S_GREATER_EQUAL = 60, // ">=" - S_LESS = 61, // "<" - S_GREATER = 62, // ">" - S_NOT = 63, // "!" - S_COMPLEMENT = 64, // "~" - S_ASSIGN = 65, // "=" - S_ASSIGN_ADD = 66, // "+=" - S_ASSIGN_SUB = 67, // "-=" - S_ASSIGN_MULT = 68, // "*=" - S_ASSIGN_DIV = 69, // "/=" - S_ASSIGN_MOD = 70, // "%=" - S_ASSIGN_BITWISE_OR = 71, // "|=" - S_ASSIGN_BITWISE_AND = 72, // "&=" - S_ASSIGN_BITWISE_EXOR = 73, // "^=" - S_ASSIGN_RSHIFT = 74, // ">>=" - S_ASSIGN_LSHIFT = 75, // "<<=" - S_BITWISE_OR = 76, // "|" - S_BITWISE_AND = 77, // "&" - S_BITWISE_EXOR = 78, // "^" - S_ADD = 79, // "+" - S_SUB = 80, // "-" - S_MULT = 81, // "*" - S_DIV = 82, // "/" - S_MOD = 83, // "%" - S_FILE = 84, // "file path" - S_NAME = 85, // "identifier" - S_STRING = 86, // "string literal" - S_ISTRING = 87, // "localized string" - S_FLOAT = 88, // "float" - S_INTEGER = 89, // "int" - S_ADD_ARRAY = 90, // ADD_ARRAY - S_THEN = 91, // THEN - S_NEG = 92, // NEG - S_ANIMREF = 93, // ANIMREF - S_PREINC = 94, // PREINC - S_PREDEC = 95, // PREDEC - S_POSTINC = 96, // POSTINC - S_POSTDEC = 97, // POSTDEC - S_YYACCEPT = 98, // $accept - S_root = 99, // root - S_program = 100, // program - S_include = 101, // include - S_define = 102, // define - S_usingtree = 103, // usingtree - S_constant = 104, // constant - S_thread = 105, // thread - S_parameters = 106, // parameters - S_stmt = 107, // stmt - S_stmt_block = 108, // stmt_block - S_stmt_list = 109, // stmt_list - S_stmt_call = 110, // stmt_call - S_stmt_assign = 111, // stmt_assign - S_stmt_endon = 112, // stmt_endon - S_stmt_notify = 113, // stmt_notify - S_stmt_wait = 114, // stmt_wait - S_stmt_waittill = 115, // stmt_waittill - S_stmt_waittillmatch = 116, // stmt_waittillmatch - S_stmt_waittillframeend = 117, // stmt_waittillframeend - S_stmt_waitframe = 118, // stmt_waitframe - S_stmt_if = 119, // stmt_if - S_stmt_ifelse = 120, // stmt_ifelse - S_stmt_while = 121, // stmt_while - S_stmt_for = 122, // stmt_for - S_stmt_foreach = 123, // stmt_foreach - S_stmt_switch = 124, // stmt_switch - S_stmt_case = 125, // stmt_case - S_stmt_default = 126, // stmt_default - S_stmt_break = 127, // stmt_break - S_stmt_continue = 128, // stmt_continue - S_stmt_return = 129, // stmt_return - S_stmt_breakpoint = 130, // stmt_breakpoint - S_stmt_prof_begin = 131, // stmt_prof_begin - S_stmt_prof_end = 132, // stmt_prof_end - S_for_stmt = 133, // for_stmt - S_for_expr = 134, // for_expr - S_expr = 135, // expr - S_expr_assign = 136, // expr_assign - S_expr_compare = 137, // expr_compare - S_expr_binary = 138, // expr_binary - S_expr_primitive = 139, // expr_primitive - S_expr_call = 140, // expr_call - S_expr_call_thread = 141, // expr_call_thread - S_expr_call_childthread = 142, // expr_call_childthread - S_expr_call_function = 143, // expr_call_function - S_expr_call_pointer = 144, // expr_call_pointer - S_expr_arguments = 145, // expr_arguments - S_expr_arguments_filled = 146, // expr_arguments_filled - S_expr_arguments_empty = 147, // expr_arguments_empty - S_expr_function = 148, // expr_function - S_expr_add_array = 149, // expr_add_array - S_expr_array = 150, // expr_array - S_expr_field = 151, // expr_field - S_expr_size = 152, // expr_size - S_object = 153, // object - S_thisthread = 154, // thisthread - S_empty_array = 155, // empty_array - S_undefined = 156, // undefined - S_game = 157, // game - S_self = 158, // self - S_anim = 159, // anim - S_level = 160, // level - S_animation = 161, // animation - S_animtree = 162, // animtree - S_name = 163, // name - S_file = 164, // file - S_istring = 165, // istring - S_string = 166, // string - S_vector = 167, // vector - S_neg_float = 168, // neg_float - S_neg_integer = 169, // neg_integer - S_float = 170, // float - S_integer = 171, // integer - S_false = 172, // false - S_true = 173 // true + S_QMARK = 51, // "?" + S_INCREMENT = 52, // "++" + S_DECREMENT = 53, // "--" + S_LSHIFT = 54, // "<<" + S_RSHIFT = 55, // ">>" + S_OR = 56, // "||" + S_AND = 57, // "&&" + S_EQUALITY = 58, // "==" + S_INEQUALITY = 59, // "!=" + S_LESS_EQUAL = 60, // "<=" + S_GREATER_EQUAL = 61, // ">=" + S_LESS = 62, // "<" + S_GREATER = 63, // ">" + S_NOT = 64, // "!" + S_COMPLEMENT = 65, // "~" + S_ASSIGN = 66, // "=" + S_ASSIGN_ADD = 67, // "+=" + S_ASSIGN_SUB = 68, // "-=" + S_ASSIGN_MULT = 69, // "*=" + S_ASSIGN_DIV = 70, // "/=" + S_ASSIGN_MOD = 71, // "%=" + S_ASSIGN_BITWISE_OR = 72, // "|=" + S_ASSIGN_BITWISE_AND = 73, // "&=" + S_ASSIGN_BITWISE_EXOR = 74, // "^=" + S_ASSIGN_RSHIFT = 75, // ">>=" + S_ASSIGN_LSHIFT = 76, // "<<=" + S_BITWISE_OR = 77, // "|" + S_BITWISE_AND = 78, // "&" + S_BITWISE_EXOR = 79, // "^" + S_ADD = 80, // "+" + S_SUB = 81, // "-" + S_MULT = 82, // "*" + S_DIV = 83, // "/" + S_MOD = 84, // "%" + S_FILE = 85, // "file path" + S_NAME = 86, // "identifier" + S_STRING = 87, // "string literal" + S_ISTRING = 88, // "localized string" + S_FLOAT = 89, // "float" + S_INTEGER = 90, // "int" + S_ADD_ARRAY = 91, // ADD_ARRAY + S_THEN = 92, // THEN + S_TERN = 93, // TERN + S_NEG = 94, // NEG + S_ANIMREF = 95, // ANIMREF + S_PREINC = 96, // PREINC + S_PREDEC = 97, // PREDEC + S_POSTINC = 98, // POSTINC + S_POSTDEC = 99, // POSTDEC + S_YYACCEPT = 100, // $accept + S_root = 101, // root + S_program = 102, // program + S_include = 103, // include + S_define = 104, // define + S_usingtree = 105, // usingtree + S_constant = 106, // constant + S_thread = 107, // thread + S_parameters = 108, // parameters + S_stmt = 109, // stmt + S_stmt_block = 110, // stmt_block + S_stmt_list = 111, // stmt_list + S_stmt_call = 112, // stmt_call + S_stmt_assign = 113, // stmt_assign + S_stmt_endon = 114, // stmt_endon + S_stmt_notify = 115, // stmt_notify + S_stmt_wait = 116, // stmt_wait + S_stmt_waittill = 117, // stmt_waittill + S_stmt_waittillmatch = 118, // stmt_waittillmatch + S_stmt_waittillframeend = 119, // stmt_waittillframeend + S_stmt_waitframe = 120, // stmt_waitframe + S_stmt_if = 121, // stmt_if + S_stmt_ifelse = 122, // stmt_ifelse + S_stmt_while = 123, // stmt_while + S_stmt_for = 124, // stmt_for + S_stmt_foreach = 125, // stmt_foreach + S_stmt_switch = 126, // stmt_switch + S_stmt_case = 127, // stmt_case + S_stmt_default = 128, // stmt_default + S_stmt_break = 129, // stmt_break + S_stmt_continue = 130, // stmt_continue + S_stmt_return = 131, // stmt_return + S_stmt_breakpoint = 132, // stmt_breakpoint + S_stmt_prof_begin = 133, // stmt_prof_begin + S_stmt_prof_end = 134, // stmt_prof_end + S_for_stmt = 135, // for_stmt + S_for_expr = 136, // for_expr + S_expr = 137, // expr + S_expr_assign = 138, // expr_assign + S_expr_compare = 139, // expr_compare + S_expr_ternary = 140, // expr_ternary + S_expr_binary = 141, // expr_binary + S_expr_primitive = 142, // expr_primitive + S_expr_call = 143, // expr_call + S_expr_call_thread = 144, // expr_call_thread + S_expr_call_childthread = 145, // expr_call_childthread + S_expr_call_function = 146, // expr_call_function + S_expr_call_pointer = 147, // expr_call_pointer + S_expr_arguments = 148, // expr_arguments + S_expr_arguments_filled = 149, // expr_arguments_filled + S_expr_arguments_empty = 150, // expr_arguments_empty + S_expr_function = 151, // expr_function + S_expr_add_array = 152, // expr_add_array + S_expr_array = 153, // expr_array + S_expr_field = 154, // expr_field + S_expr_size = 155, // expr_size + S_object = 156, // object + S_thisthread = 157, // thisthread + S_empty_array = 158, // empty_array + S_undefined = 159, // undefined + S_game = 160, // game + S_self = 161, // self + S_anim = 162, // anim + S_level = 163, // level + S_animation = 164, // animation + S_animtree = 165, // animtree + S_name = 166, // name + S_file = 167, // file + S_istring = 168, // istring + S_string = 169, // string + S_vector = 170, // vector + S_neg_float = 171, // neg_float + S_neg_integer = 172, // neg_integer + S_float = 173, // float + S_integer = 174, // integer + S_false = 175, // false + S_true = 176 // true }; }; @@ -1023,6 +1029,7 @@ namespace xsk { namespace gsc { namespace h1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2117,6 +2124,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3241,6 +3249,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3856,6 +3879,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4290,8 +4328,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1646, ///< Last index in yytable_. - yynnts_ = 76, ///< Number of nonterminal symbols. + yylast_ = 1842, ///< Last index in yytable_. + yynnts_ = 77, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4367,6 +4405,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4647,6 +4686,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4913,7 +4953,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::h1 -#line 4917 "parser.hpp" +#line 4957 "parser.hpp" diff --git a/src/h2/xsk/assembler.cpp b/src/h2/xsk/assembler.cpp index fb31b91a..5a1683e5 100644 --- a/src/h2/xsk/assembler.cpp +++ b/src/h2/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/h2/xsk/compiler.cpp b/src/h2/xsk/compiler.cpp index 97c9a613..1fea9204 100644 --- a/src/h2/xsk/compiler.cpp +++ b/src/h2/xsk/compiler.cpp @@ -409,7 +409,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -465,7 +465,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -540,7 +540,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -752,6 +752,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -849,6 +850,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/h2/xsk/compiler.hpp b/src/h2/xsk/compiler.hpp index f517d986..6e51b7d1 100644 --- a/src/h2/xsk/compiler.hpp +++ b/src/h2/xsk/compiler.hpp @@ -68,6 +68,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/h2/xsk/decompiler.cpp b/src/h2/xsk/decompiler.cpp index e21004c8..8f7e49f2 100644 --- a/src/h2/xsk/decompiler.cpp +++ b/src/h2/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1833,6 +1841,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1916,6 +1925,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3006,6 +3038,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3106,6 +3139,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/h2/xsk/decompiler.hpp b/src/h2/xsk/decompiler.hpp index 337a5312..dfa59f08 100644 --- a/src/h2/xsk/decompiler.hpp +++ b/src/h2/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/h2/xsk/lexer.cpp b/src/h2/xsk/lexer.cpp index ec6340b8..0a65aa4f 100644 --- a/src/h2/xsk/lexer.cpp +++ b/src/h2/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 100 -#define YY_END_OF_BUFFER 101 +#define YY_NUM_RULES 101 +#define YY_END_OF_BUFFER 102 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,42 +562,42 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[305] = +static const flex_int16_t yy_accept[306] = { 0, - 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, - 88, 99, 99, 87, 91, 99, 49, 50, 85, 83, - 55, 84, 56, 86, 98, 58, 59, 72, 82, 73, - 94, 53, 54, 92, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 51, 90, 52, 89, 5, 6, 5, 9, 10, 9, - 69, 0, 96, 0, 0, 0, 0, 78, 0, 67, - 0, 80, 0, 0, 76, 60, 74, 61, 75, 97, - 0, 8, 4, 3, 77, 97, 98, 0, 0, 57, - 64, 70, 68, 71, 65, 94, 81, 94, 94, 94, + 0, 0, 0, 0, 0, 0, 102, 100, 1, 2, + 89, 100, 100, 88, 92, 100, 49, 50, 86, 84, + 55, 85, 56, 87, 99, 58, 59, 73, 83, 74, + 60, 95, 53, 54, 93, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 51, 91, 52, 90, 5, 6, 5, 9, 10, + 9, 70, 0, 97, 0, 0, 0, 0, 79, 0, + 68, 0, 81, 0, 0, 77, 61, 75, 62, 76, + 98, 0, 8, 4, 3, 78, 98, 99, 0, 0, + 57, 65, 71, 69, 72, 66, 95, 82, 95, 95, - 94, 94, 94, 94, 94, 94, 94, 94, 25, 30, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 79, 66, 7, 11, 0, 96, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 96, 0, 97, - 0, 3, 97, 97, 93, 62, 63, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 28, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 0, 0, 0, 0, 95, 0, 0, 95, 0, - 0, 47, 94, 40, 32, 94, 94, 94, 26, 94, - 94, 94, 45, 94, 94, 94, 94, 46, 94, 94, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 25, + 30, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 80, 67, 7, 11, 0, 97, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, + 98, 0, 3, 98, 98, 94, 63, 64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 28, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 0, 0, 0, 0, 96, 0, 0, 96, + 0, 0, 47, 95, 40, 32, 95, 95, 95, 26, + 95, 95, 95, 45, 95, 95, 95, 95, 46, 95, - 94, 41, 94, 20, 94, 0, 0, 0, 44, 34, - 94, 94, 94, 18, 42, 94, 48, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 27, 0, 0, 0, - 94, 94, 94, 94, 94, 19, 94, 94, 36, 31, - 94, 37, 94, 94, 94, 0, 0, 0, 94, 94, - 94, 33, 29, 94, 94, 94, 94, 94, 94, 0, - 15, 0, 94, 94, 35, 94, 14, 94, 94, 94, - 21, 17, 0, 94, 94, 94, 94, 43, 24, 94, - 94, 0, 12, 94, 13, 39, 94, 94, 0, 38, - 94, 94, 0, 94, 94, 0, 94, 22, 0, 94, + 95, 95, 41, 95, 20, 95, 0, 0, 0, 44, + 34, 95, 95, 95, 18, 42, 95, 48, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 27, 0, 0, + 0, 95, 95, 95, 95, 95, 19, 95, 95, 36, + 31, 95, 37, 95, 95, 95, 0, 0, 0, 95, + 95, 95, 33, 29, 95, 95, 95, 95, 95, 95, + 0, 15, 0, 95, 95, 35, 95, 14, 95, 95, + 95, 21, 17, 0, 95, 95, 95, 95, 43, 24, + 95, 95, 0, 12, 95, 13, 39, 95, 95, 0, + 38, 95, 95, 0, 95, 95, 0, 95, 22, 0, - 16, 94, 23, 0 + 95, 16, 95, 23, 0 } ; static const YY_CHAR yy_ec[256] = @@ -608,14 +608,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -632,240 +632,240 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[319] = +static const flex_int16_t yy_base[320] = { 0, - 0, 0, 54, 55, 56, 57, 574, 575, 575, 575, - 551, 56, 35, 550, 63, 55, 575, 575, 549, 56, - 575, 55, 56, 74, 71, 551, 575, 54, 547, 70, - 542, 575, 575, 545, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 575, 96, 575, 575, 575, 575, 549, 575, 575, 548, - 575, 120, 575, 127, 522, 521, 516, 575, 122, 575, - 115, 575, 126, 140, 575, 575, 575, 575, 575, 120, - 523, 575, 575, 0, 575, 121, 141, 135, 0, 575, - 538, 575, 575, 575, 537, 532, 575, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 575, 576, 576, 576, + 552, 57, 34, 551, 66, 60, 576, 576, 550, 57, + 576, 63, 48, 74, 74, 552, 576, 55, 548, 59, + 576, 542, 576, 576, 546, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 576, 100, 576, 576, 576, 576, 550, 576, 576, + 549, 576, 120, 576, 136, 522, 521, 516, 576, 122, + 576, 123, 576, 126, 143, 576, 576, 576, 576, 576, + 118, 523, 576, 576, 0, 576, 125, 140, 132, 0, + 576, 539, 576, 576, 576, 538, 532, 576, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 531, 530, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 575, 575, 575, 575, 189, 197, 202, 517, 522, - 515, 204, 575, 207, 205, 208, 209, 210, 213, 575, - 500, 0, 202, 575, 525, 575, 575, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 509, 509, 506, 268, 269, 276, 271, 273, 283, - 513, 520, 261, 519, 518, 258, 263, 262, 517, 270, - 272, 277, 516, 278, 279, 282, 287, 515, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 531, + 530, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 576, 576, 576, 576, 186, 204, 211, 517, + 522, 515, 205, 576, 212, 202, 215, 210, 213, 217, + 576, 500, 0, 205, 576, 525, 576, 576, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 509, 509, 506, 273, 274, 277, 275, 276, + 284, 513, 520, 104, 519, 518, 262, 268, 264, 517, + 265, 270, 279, 516, 271, 282, 287, 288, 515, 289, - 293, 514, 291, 294, 296, 492, 490, 501, 575, 298, - 299, 301, 305, 510, 509, 302, 508, 307, 313, 309, - 312, 322, 324, 314, 310, 327, 507, 487, 498, 501, - 328, 330, 334, 336, 335, 503, 340, 337, 502, 501, - 342, 500, 338, 343, 344, 491, 490, 493, 350, 349, - 351, 496, 495, 355, 360, 363, 364, 366, 369, 486, - 575, 477, 370, 374, 492, 373, 491, 375, 377, 380, - 378, 575, 478, 376, 390, 389, 391, 489, 488, 392, - 395, 472, 486, 396, 472, 424, 400, 401, 402, 421, - 402, 406, 397, 407, 408, 406, 410, 352, 259, 409, + 272, 292, 514, 294, 297, 300, 492, 490, 501, 576, + 298, 299, 301, 305, 510, 509, 304, 508, 302, 321, + 309, 311, 312, 324, 328, 313, 330, 507, 487, 498, + 501, 333, 334, 314, 335, 337, 503, 338, 339, 502, + 501, 341, 500, 343, 347, 344, 491, 490, 493, 349, + 352, 354, 496, 495, 353, 357, 365, 366, 367, 369, + 486, 576, 477, 368, 370, 492, 375, 491, 372, 379, + 377, 380, 576, 478, 381, 388, 390, 391, 489, 488, + 393, 396, 472, 473, 394, 425, 424, 399, 397, 402, + 422, 404, 405, 398, 407, 409, 405, 408, 315, 193, - 575, 413, 200, 575, 451, 456, 461, 466, 469, 471, - 476, 481, 486, 491, 496, 84, 501, 506 + 410, 576, 414, 159, 576, 453, 458, 463, 468, 471, + 473, 478, 483, 488, 493, 498, 68, 503, 508 } ; -static const flex_int16_t yy_def[319] = +static const flex_int16_t yy_def[320] = { 0, - 304, 1, 305, 305, 306, 306, 304, 304, 304, 304, - 304, 307, 304, 304, 304, 308, 304, 304, 304, 304, - 304, 304, 304, 304, 309, 304, 304, 304, 304, 304, - 310, 304, 304, 304, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 307, 304, 311, 304, 304, 304, 304, 312, 304, - 313, 304, 308, 314, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 315, 304, 304, 309, 309, 316, 304, - 304, 304, 304, 304, 304, 310, 304, 310, 310, 310, + 305, 1, 306, 306, 307, 307, 305, 305, 305, 305, + 305, 308, 305, 305, 305, 309, 305, 305, 305, 305, + 305, 305, 305, 305, 310, 305, 305, 305, 305, 305, + 305, 311, 305, 305, 305, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 308, 305, 312, 305, 305, 305, 305, 313, + 305, 314, 305, 309, 315, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 316, 305, 305, 310, 310, 317, + 305, 305, 305, 305, 305, 305, 311, 305, 311, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 304, 307, 307, 311, 304, 304, - 304, 312, 304, 317, 313, 318, 308, 308, 314, 304, - 304, 315, 304, 304, 316, 304, 304, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 312, 312, 317, 313, 313, 318, - 304, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 305, 308, 308, 312, 305, + 305, 305, 313, 305, 318, 314, 319, 309, 309, 315, + 305, 305, 316, 305, 305, 317, 305, 305, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 313, 313, 318, 314, 314, + 319, 305, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 310, 310, 310, 310, 310, 304, 304, 304, 304, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 304, 304, 304, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 304, 304, 304, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 304, - 304, 304, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 310, 310, 310, 310, 310, 310, 304, 310, - 310, 310, 304, 310, 310, 304, 310, 310, 304, 310, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 305, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 305, 305, + 305, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 305, 305, 305, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 311, 311, 311, 311, 311, 311, 305, + 311, 311, 311, 305, 311, 311, 305, 311, 311, 305, - 304, 310, 310, 0, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304 + 311, 305, 311, 311, 0, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305 } ; -static const flex_int16_t yy_nxt[632] = +static const flex_int16_t yy_nxt[634] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 304, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 305, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 301, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 302, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 225, 227, - 89, 220, 89, 235, 89, 89, 222, 89, 89, 89, - 226, 231, 233, 237, 234, 232, 238, 89, 240, 89, - 239, 243, 89, 89, 244, 89, 242, 236, 241, 89, - 89, 89, 89, 89, 245, 89, 250, 89, 89, 89, - 249, 253, 258, 254, 89, 89, 89, 89, 255, 257, - 89, 251, 252, 259, 265, 89, 256, 263, 89, 89, - 266, 89, 267, 264, 89, 89, 268, 269, 89, 89, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 226, 221, 228, 90, 236, 90, 90, 90, + 90, 90, 232, 234, 227, 235, 233, 90, 241, 242, + 90, 240, 238, 237, 90, 239, 90, 243, 245, 90, + 90, 90, 252, 90, 90, 90, 244, 90, 246, 90, + 90, 251, 255, 90, 254, 90, 250, 259, 90, 90, + 90, 256, 253, 90, 260, 258, 257, 264, 266, 267, + 268, 90, 90, 90, 90, 90, 90, 265, 90, 269, - 89, 89, 89, 89, 277, 89, 270, 275, 271, 278, - 276, 274, 280, 279, 89, 89, 89, 89, 281, 284, - 89, 89, 283, 286, 288, 89, 89, 89, 290, 291, - 285, 89, 89, 89, 89, 89, 287, 295, 89, 299, - 297, 296, 294, 300, 298, 303, 89, 292, 293, 89, - 302, 55, 55, 55, 55, 55, 58, 58, 58, 58, - 58, 62, 62, 62, 62, 62, 73, 73, 73, 73, - 73, 88, 88, 88, 96, 96, 126, 126, 126, 126, - 126, 132, 132, 132, 132, 132, 135, 135, 135, 135, - 135, 137, 137, 137, 137, 137, 142, 89, 142, 142, + 270, 90, 278, 90, 276, 90, 90, 90, 271, 272, + 275, 280, 279, 277, 90, 281, 90, 90, 285, 90, + 90, 282, 90, 90, 287, 90, 289, 291, 284, 292, + 90, 90, 286, 90, 90, 90, 90, 296, 288, 300, + 90, 298, 301, 297, 293, 295, 299, 304, 90, 294, + 90, 90, 303, 56, 56, 56, 56, 56, 59, 59, + 59, 59, 59, 63, 63, 63, 63, 63, 74, 74, + 74, 74, 74, 89, 89, 89, 97, 97, 127, 127, + 127, 127, 127, 133, 133, 133, 133, 133, 136, 136, + 136, 136, 136, 138, 138, 138, 138, 138, 143, 90, - 142, 175, 175, 175, 175, 175, 178, 178, 178, 178, - 178, 89, 289, 89, 89, 282, 89, 89, 273, 272, - 89, 89, 262, 261, 260, 89, 89, 89, 89, 248, - 247, 246, 89, 89, 89, 89, 230, 229, 228, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 304, 7, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 143, 143, 143, 176, 176, 176, 176, 176, 179, 179, + 179, 179, 179, 290, 90, 90, 283, 90, 90, 274, + 273, 90, 90, 263, 262, 261, 90, 90, 90, 90, + 249, 248, 247, 90, 90, 90, 90, 231, 230, 229, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 305, 7, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; -static const flex_int16_t yy_chk[632] = +static const flex_int16_t yy_chk[634] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 316, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 317, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 304, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 303, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 299, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 300, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 204, 205, - 213, 197, 218, 216, 220, 225, 200, 221, 219, 224, - 204, 210, 212, 219, 213, 211, 219, 222, 221, 223, - 220, 224, 226, 231, 225, 232, 223, 218, 222, 233, - 235, 234, 238, 243, 226, 237, 232, 241, 244, 245, - 231, 235, 244, 237, 250, 249, 251, 298, 238, 243, - 254, 233, 234, 245, 251, 255, 241, 249, 256, 257, - 254, 258, 255, 250, 259, 263, 256, 257, 266, 264, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 211, 212, 206, 213, 219, 204, + 217, 214, 205, 198, 206, 221, 217, 222, 223, 226, + 234, 299, 211, 213, 205, 214, 212, 220, 222, 223, + 224, 221, 220, 219, 225, 220, 227, 224, 226, 232, + 233, 235, 234, 236, 238, 239, 225, 242, 227, 244, + 246, 233, 238, 245, 236, 250, 232, 245, 251, 255, + 252, 239, 235, 256, 246, 244, 242, 250, 252, 255, + 256, 257, 258, 259, 264, 260, 265, 251, 269, 257, - 268, 274, 269, 271, 268, 270, 258, 264, 259, 269, - 266, 263, 271, 270, 276, 275, 277, 280, 271, 275, - 281, 284, 274, 277, 281, 287, 288, 291, 284, 287, - 276, 292, 294, 295, 300, 297, 280, 292, 302, 296, - 294, 293, 291, 297, 295, 302, 290, 288, 289, 286, - 300, 305, 305, 305, 305, 305, 306, 306, 306, 306, - 306, 307, 307, 307, 307, 307, 308, 308, 308, 308, - 308, 309, 309, 309, 310, 310, 311, 311, 311, 311, - 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, - 313, 314, 314, 314, 314, 314, 315, 285, 315, 315, + 258, 267, 269, 271, 265, 270, 272, 275, 259, 260, + 264, 271, 270, 267, 276, 272, 277, 278, 276, 281, + 285, 272, 282, 289, 278, 288, 282, 285, 275, 288, + 292, 293, 277, 295, 298, 296, 301, 293, 281, 297, + 303, 295, 298, 294, 289, 292, 296, 303, 291, 290, + 287, 286, 301, 306, 306, 306, 306, 306, 307, 307, + 307, 307, 307, 308, 308, 308, 308, 308, 309, 309, + 309, 309, 309, 310, 310, 310, 311, 311, 312, 312, + 312, 312, 312, 313, 313, 313, 313, 313, 314, 314, + 314, 314, 314, 315, 315, 315, 315, 315, 316, 284, - 315, 317, 317, 317, 317, 317, 318, 318, 318, 318, - 318, 283, 282, 279, 278, 273, 267, 265, 262, 260, - 253, 252, 248, 247, 246, 242, 240, 239, 236, 230, - 229, 228, 227, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 316, 316, 316, 318, 318, 318, 318, 318, 319, 319, + 319, 319, 319, 283, 280, 279, 274, 268, 266, 263, + 261, 254, 253, 249, 248, 247, 243, 241, 240, 237, + 231, 230, 229, 228, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; /* The intent behind this definition is that it'll catch @@ -1183,13 +1183,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 304 ); + while ( yy_current_state != 305 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1510,218 +1510,223 @@ YY_RULE_SETUP case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return h2::parser::make_INCREMENT(loc); } +{ return h2::parser::make_QMARK(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return h2::parser::make_DECREMENT(loc); } +{ return h2::parser::make_INCREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return h2::parser::make_ASSIGN_LSHIFT(loc); } +{ return h2::parser::make_DECREMENT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return h2::parser::make_ASSIGN_RSHIFT(loc); } +{ return h2::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return h2::parser::make_LSHIFT(loc); } +{ return h2::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return h2::parser::make_RSHIFT(loc); } +{ return h2::parser::make_LSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return h2::parser::make_OR(loc); } +{ return h2::parser::make_RSHIFT(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return h2::parser::make_AND(loc); } +{ return h2::parser::make_OR(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return h2::parser::make_EQUALITY(loc); } +{ return h2::parser::make_AND(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return h2::parser::make_INEQUALITY(loc); } +{ return h2::parser::make_EQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return h2::parser::make_LESS_EQUAL(loc); } +{ return h2::parser::make_INEQUALITY(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return h2::parser::make_GREATER_EQUAL(loc); } +{ return h2::parser::make_LESS_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return h2::parser::make_LESS(loc); } +{ return h2::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return h2::parser::make_GREATER(loc); } +{ return h2::parser::make_LESS(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return h2::parser::make_ASSIGN_ADD(loc); } +{ return h2::parser::make_GREATER(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return h2::parser::make_ASSIGN_SUB(loc); } +{ return h2::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return h2::parser::make_ASSIGN_MULT(loc); } +{ return h2::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return h2::parser::make_ASSIGN_DIV(loc); } +{ return h2::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return h2::parser::make_ASSIGN_MOD(loc); } +{ return h2::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return h2::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return h2::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return h2::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return h2::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return h2::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return h2::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return h2::parser::make_ASSIGN(loc); } +{ return h2::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return h2::parser::make_ADD(loc); } +{ return h2::parser::make_ASSIGN(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return h2::parser::make_SUB(loc); } +{ return h2::parser::make_ADD(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return h2::parser::make_MULT(loc); } +{ return h2::parser::make_SUB(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return h2::parser::make_DIV(loc); } +{ return h2::parser::make_MULT(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return h2::parser::make_MOD(loc); } +{ return h2::parser::make_DIV(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return h2::parser::make_NOT(loc); } +{ return h2::parser::make_MOD(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return h2::parser::make_COMPLEMENT(loc); } +{ return h2::parser::make_NOT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return h2::parser::make_BITWISE_OR(loc); } +{ return h2::parser::make_COMPLEMENT(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return h2::parser::make_BITWISE_AND(loc); } +{ return h2::parser::make_BITWISE_OR(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return h2::parser::make_BITWISE_EXOR(loc); } +{ return h2::parser::make_BITWISE_AND(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return h2::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return h2::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 94: YY_RULE_SETUP #line 141 "lexer.lpp" -{ return h2::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return h2::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 95: -/* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return h2::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return h2::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 96: /* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return h2::parser::make_STRING(std::string(yytext), loc); } +{ return h2::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 97: +/* rule 97 can match eol */ YY_RULE_SETUP #line 144 "lexer.lpp" -{ return h2::parser::make_FLOAT(std::string(yytext), loc); } +{ return h2::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 98: YY_RULE_SETUP #line 145 "lexer.lpp" +{ return h2::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 146 "lexer.lpp" { return h2::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { return h2::parser::make_H2EOF(loc); } YY_BREAK -case 99: -/* rule 99 can match eol */ +case 100: +/* rule 100 can match eol */ YY_RULE_SETUP -#line 147 "lexer.lpp" +#line 148 "lexer.lpp" { throw h2::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" ECHO; YY_BREAK -#line 1724 "lexer.cpp" +#line 1729 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2019,7 +2024,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2048,11 +2053,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 304); + yy_is_jam = (yy_current_state == 305); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2851,6 +2856,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" diff --git a/src/h2/xsk/lexer.hpp b/src/h2/xsk/lexer.hpp index ab2cd5ba..aba754c7 100644 --- a/src/h2/xsk/lexer.hpp +++ b/src/h2/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/h2/xsk/parser.cpp b/src/h2/xsk/parser.cpp index c167c71a..368f9aa7 100644 --- a/src/h2/xsk/parser.cpp +++ b/src/h2/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -530,6 +531,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -796,6 +798,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1061,6 +1064,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1581,6 +1585,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1805,1213 +1810,1225 @@ namespace xsk { namespace gsc { namespace h2 { switch (yyn) { case 2: // root: program -#line 239 "parser.ypp" +#line 243 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1811 "parser.cpp" +#line 1816 "parser.cpp" break; case 3: // root: %empty -#line 240 "parser.ypp" +#line 244 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1817 "parser.cpp" +#line 1822 "parser.cpp" break; case 4: // program: program include -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1823 "parser.cpp" +#line 1828 "parser.cpp" break; case 5: // program: program define -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1829 "parser.cpp" +#line 1834 "parser.cpp" break; case 6: // program: include -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1835 "parser.cpp" +#line 1840 "parser.cpp" break; case 7: // program: define -#line 251 "parser.ypp" +#line 255 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1841 "parser.cpp" +#line 1846 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 256 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1847 "parser.cpp" +#line 1852 "parser.cpp" break; case 9: // define: usingtree -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1853 "parser.cpp" +#line 1858 "parser.cpp" break; case 10: // define: constant -#line 261 "parser.ypp" +#line 265 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1859 "parser.cpp" +#line 1864 "parser.cpp" break; case 11: // define: thread -#line 262 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1865 "parser.cpp" +#line 1870 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 267 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1871 "parser.cpp" +#line 1876 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 272 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1877 "parser.cpp" +#line 1882 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 277 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1883 "parser.cpp" +#line 1888 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1889 "parser.cpp" +#line 1894 "parser.cpp" break; case 16: // parameters: name -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1895 "parser.cpp" +#line 1900 "parser.cpp" break; case 17: // parameters: %empty -#line 286 "parser.ypp" +#line 290 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1901 "parser.cpp" +#line 1906 "parser.cpp" break; case 18: // stmt: stmt_block -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1907 "parser.cpp" +#line 1912 "parser.cpp" break; case 19: // stmt: stmt_call -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1913 "parser.cpp" +#line 1918 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1919 "parser.cpp" +#line 1924 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1925 "parser.cpp" +#line 1930 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1931 "parser.cpp" +#line 1936 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1937 "parser.cpp" +#line 1942 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1943 "parser.cpp" +#line 1948 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1949 "parser.cpp" +#line 1954 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1955 "parser.cpp" +#line 1960 "parser.cpp" break; case 27: // stmt: stmt_waitframe -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waitframe = std::move(yystack_[0].value.as < stmt_waitframe_ptr > ()); } -#line 1961 "parser.cpp" +#line 1966 "parser.cpp" break; case 28: // stmt: stmt_if -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1967 "parser.cpp" +#line 1972 "parser.cpp" break; case 29: // stmt: stmt_ifelse -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1973 "parser.cpp" +#line 1978 "parser.cpp" break; case 30: // stmt: stmt_while -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1979 "parser.cpp" +#line 1984 "parser.cpp" break; case 31: // stmt: stmt_for -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 32: // stmt: stmt_foreach -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 33: // stmt: stmt_switch -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 34: // stmt: stmt_case -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 35: // stmt: stmt_default -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 36: // stmt: stmt_break -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 37: // stmt: stmt_continue -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 38: // stmt: stmt_return -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 39: // stmt: stmt_breakpoint -#line 311 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 40: // stmt: stmt_prof_begin -#line 312 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 41: // stmt: stmt_prof_end -#line 313 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 42: // stmt_block: "{" stmt_list "}" -#line 317 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 43: // stmt_block: "{" "}" -#line 318 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 44: // stmt_list: stmt_list stmt -#line 323 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 45: // stmt_list: stmt -#line 325 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 46: // stmt_call: expr_call ";" -#line 330 "parser.ypp" +#line 334 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 47: // stmt_call: expr_call_thread ";" -#line 332 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 48: // stmt_assign: expr_assign ";" -#line 337 "parser.ypp" +#line 341 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 49: // stmt_endon: object "endon" "(" expr ")" ";" -#line 342 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 347 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 51: // stmt_notify: object "notify" "(" expr ")" ";" -#line 349 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 52: // stmt_wait: "wait" expr ";" -#line 354 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 359 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 54: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 361 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 366 "parser.ypp" +#line 370 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 56: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 57: // stmt_waittillframeend: "waittillframeend" ";" -#line 373 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 58: // stmt_waitframe: "waitframe" ";" -#line 378 "parser.ypp" +#line 382 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 59: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 60: // stmt_if: "if" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 61: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 62: // stmt_while: "while" "(" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 63: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 400 "parser.ypp" +#line 404 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 64: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 405 "parser.ypp" +#line 409 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 65: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 66: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 412 "parser.ypp" +#line 416 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 67: // stmt_case: "case" integer ":" -#line 417 "parser.ypp" +#line 421 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 68: // stmt_case: "case" neg_integer ":" -#line 419 "parser.ypp" +#line 423 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 69: // stmt_case: "case" string ":" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 70: // stmt_default: "default" ":" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 71: // stmt_break: "break" ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 72: // stmt_continue: "continue" ";" -#line 436 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 73: // stmt_return: "return" expr ";" -#line 441 "parser.ypp" +#line 445 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 74: // stmt_return: "return" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 75: // stmt_breakpoint: "breakpoint" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 76: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 77: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 78: // for_stmt: expr_assign -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 79: // for_stmt: %empty -#line 463 "parser.ypp" +#line 467 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 80: // for_expr: expr -#line 467 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 81: // for_expr: %empty -#line 468 "parser.ypp" +#line 472 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 82: // expr: expr_compare -#line 472 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; - case 83: // expr: expr_binary -#line 473 "parser.ypp" + case 83: // expr: expr_ternary +#line 477 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; - case 84: // expr: expr_primitive -#line 474 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2303 "parser.cpp" - break; - - case 85: // expr_assign: "++" object + case 84: // expr: expr_binary #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2309 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2308 "parser.cpp" break; - case 86: // expr_assign: "--" object + case 85: // expr: expr_primitive #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2315 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2314 "parser.cpp" break; - case 87: // expr_assign: object "++" -#line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2321 "parser.cpp" - break; - - case 88: // expr_assign: object "--" -#line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2327 "parser.cpp" - break; - - case 89: // expr_assign: object "=" expr -#line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2333 "parser.cpp" - break; - - case 90: // expr_assign: object "|=" expr + case 86: // expr_assign: "++" object #line 483 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2339 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2320 "parser.cpp" break; - case 91: // expr_assign: object "&=" expr + case 87: // expr_assign: "--" object #line 484 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2345 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2326 "parser.cpp" break; - case 92: // expr_assign: object "^=" expr + case 88: // expr_assign: object "++" #line 485 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2351 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2332 "parser.cpp" break; - case 93: // expr_assign: object "<<=" expr + case 89: // expr_assign: object "--" #line 486 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2357 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2338 "parser.cpp" break; - case 94: // expr_assign: object ">>=" expr + case 90: // expr_assign: object "=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2363 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2344 "parser.cpp" break; - case 95: // expr_assign: object "+=" expr + case 91: // expr_assign: object "|=" expr #line 488 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2369 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2350 "parser.cpp" break; - case 96: // expr_assign: object "-=" expr + case 92: // expr_assign: object "&=" expr #line 489 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2375 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2356 "parser.cpp" break; - case 97: // expr_assign: object "*=" expr + case 93: // expr_assign: object "^=" expr #line 490 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2381 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2362 "parser.cpp" break; - case 98: // expr_assign: object "/=" expr + case 94: // expr_assign: object "<<=" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2387 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2368 "parser.cpp" break; - case 99: // expr_assign: object "%=" expr + case 95: // expr_assign: object ">>=" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2393 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2374 "parser.cpp" break; - case 100: // expr_compare: expr "||" expr + case 96: // expr_assign: object "+=" expr +#line 493 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2380 "parser.cpp" + break; + + case 97: // expr_assign: object "-=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2386 "parser.cpp" + break; + + case 98: // expr_assign: object "*=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2392 "parser.cpp" + break; + + case 99: // expr_assign: object "/=" expr #line 496 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2399 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2398 "parser.cpp" break; - case 101: // expr_compare: expr "&&" expr + case 100: // expr_assign: object "%=" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2405 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2404 "parser.cpp" break; - case 102: // expr_compare: expr "==" expr -#line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2411 "parser.cpp" - break; - - case 103: // expr_compare: expr "!=" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2417 "parser.cpp" - break; - - case 104: // expr_compare: expr "<=" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2423 "parser.cpp" - break; - - case 105: // expr_compare: expr ">=" expr + case 101: // expr_compare: expr "||" expr #line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2429 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2410 "parser.cpp" break; - case 106: // expr_compare: expr "<" expr + case 102: // expr_compare: expr "&&" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2435 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2416 "parser.cpp" break; - case 107: // expr_compare: expr ">" expr + case 103: // expr_compare: expr "==" expr #line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2441 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2422 "parser.cpp" break; - case 108: // expr_binary: expr "|" expr + case 104: // expr_compare: expr "!=" expr +#line 504 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2428 "parser.cpp" + break; + + case 105: // expr_compare: expr "<=" expr +#line 505 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2434 "parser.cpp" + break; + + case 106: // expr_compare: expr ">=" expr +#line 506 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2440 "parser.cpp" + break; + + case 107: // expr_compare: expr "<" expr #line 507 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2447 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2446 "parser.cpp" break; - case 109: // expr_binary: expr "&" expr + case 108: // expr_compare: expr ">" expr #line 508 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2453 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2452 "parser.cpp" break; - case 110: // expr_binary: expr "^" expr -#line 509 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2459 "parser.cpp" - break; - - case 111: // expr_binary: expr "<<" expr -#line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2465 "parser.cpp" - break; - - case 112: // expr_binary: expr ">>" expr -#line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2471 "parser.cpp" - break; - - case 113: // expr_binary: expr "+" expr + case 109: // expr_ternary: expr "?" expr ":" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2477 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2458 "parser.cpp" break; - case 114: // expr_binary: expr "-" expr -#line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2483 "parser.cpp" - break; - - case 115: // expr_binary: expr "*" expr -#line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2489 "parser.cpp" - break; - - case 116: // expr_binary: expr "/" expr -#line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2495 "parser.cpp" - break; - - case 117: // expr_binary: expr "%" expr + case 110: // expr_binary: expr "|" expr #line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2501 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2464 "parser.cpp" break; - case 118: // expr_primitive: "(" expr ")" + case 111: // expr_binary: expr "&" expr +#line 517 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2470 "parser.cpp" + break; + + case 112: // expr_binary: expr "^" expr +#line 518 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2476 "parser.cpp" + break; + + case 113: // expr_binary: expr "<<" expr +#line 519 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2482 "parser.cpp" + break; + + case 114: // expr_binary: expr ">>" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2507 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2488 "parser.cpp" break; - case 119: // expr_primitive: "~" expr + case 115: // expr_binary: expr "+" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2513 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2494 "parser.cpp" break; - case 120: // expr_primitive: "!" expr + case 116: // expr_binary: expr "-" expr #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2519 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2500 "parser.cpp" break; - case 121: // expr_primitive: expr_call + case 117: // expr_binary: expr "*" expr #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2525 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2506 "parser.cpp" break; - case 122: // expr_primitive: expr_call_thread + case 118: // expr_binary: expr "/" expr #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2531 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2512 "parser.cpp" break; - case 123: // expr_primitive: expr_call_childthread + case 119: // expr_binary: expr "%" expr #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2537 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2518 "parser.cpp" break; - case 124: // expr_primitive: expr_function -#line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2543 "parser.cpp" - break; - - case 125: // expr_primitive: expr_add_array -#line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2549 "parser.cpp" - break; - - case 126: // expr_primitive: expr_array -#line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2555 "parser.cpp" - break; - - case 127: // expr_primitive: expr_field + case 120: // expr_primitive: "(" expr ")" #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2561 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2524 "parser.cpp" break; - case 128: // expr_primitive: expr_size + case 121: // expr_primitive: "~" expr #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2567 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2530 "parser.cpp" break; - case 129: // expr_primitive: thisthread + case 122: // expr_primitive: "!" expr #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2573 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2536 "parser.cpp" break; - case 130: // expr_primitive: empty_array + case 123: // expr_primitive: expr_call #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2579 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2542 "parser.cpp" break; - case 131: // expr_primitive: undefined + case 124: // expr_primitive: expr_call_thread #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2585 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2548 "parser.cpp" break; - case 132: // expr_primitive: game + case 125: // expr_primitive: expr_call_childthread #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2591 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2554 "parser.cpp" break; - case 133: // expr_primitive: self + case 126: // expr_primitive: expr_function #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2597 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2560 "parser.cpp" break; - case 134: // expr_primitive: anim + case 127: // expr_primitive: expr_add_array #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2603 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2566 "parser.cpp" break; - case 135: // expr_primitive: level + case 128: // expr_primitive: expr_array #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2609 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2572 "parser.cpp" break; - case 136: // expr_primitive: animation + case 129: // expr_primitive: expr_field #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2615 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2578 "parser.cpp" break; - case 137: // expr_primitive: animtree + case 130: // expr_primitive: expr_size #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2621 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2584 "parser.cpp" break; - case 138: // expr_primitive: name + case 131: // expr_primitive: thisthread #line 540 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2627 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2590 "parser.cpp" break; - case 139: // expr_primitive: istring + case 132: // expr_primitive: empty_array #line 541 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2633 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2596 "parser.cpp" break; - case 140: // expr_primitive: string + case 133: // expr_primitive: undefined #line 542 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2639 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2602 "parser.cpp" break; - case 141: // expr_primitive: vector + case 134: // expr_primitive: game #line 543 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2645 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2608 "parser.cpp" break; - case 142: // expr_primitive: neg_float + case 135: // expr_primitive: self #line 544 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2651 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2614 "parser.cpp" break; - case 143: // expr_primitive: neg_integer + case 136: // expr_primitive: anim #line 545 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2657 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2620 "parser.cpp" break; - case 144: // expr_primitive: float + case 137: // expr_primitive: level #line 546 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2663 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2626 "parser.cpp" break; - case 145: // expr_primitive: integer + case 138: // expr_primitive: animation #line 547 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2669 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2632 "parser.cpp" break; - case 146: // expr_primitive: false + case 139: // expr_primitive: animtree #line 548 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2675 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2638 "parser.cpp" break; - case 147: // expr_primitive: true + case 140: // expr_primitive: name #line 549 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2681 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2644 "parser.cpp" break; - case 148: // expr_call: expr_call_function + case 141: // expr_primitive: istring +#line 550 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2650 "parser.cpp" + break; + + case 142: // expr_primitive: string +#line 551 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2656 "parser.cpp" + break; + + case 143: // expr_primitive: vector +#line 552 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2662 "parser.cpp" + break; + + case 144: // expr_primitive: neg_float #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2687 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2668 "parser.cpp" break; - case 149: // expr_call: expr_call_pointer + case 145: // expr_primitive: neg_integer #line 554 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2693 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2674 "parser.cpp" break; - case 150: // expr_call: object expr_call_function + case 146: // expr_primitive: float #line 555 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2699 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2680 "parser.cpp" break; - case 151: // expr_call: object expr_call_pointer + case 147: // expr_primitive: integer #line 556 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2705 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2686 "parser.cpp" break; - case 152: // expr_call_thread: "thread" expr_call_function -#line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2711 "parser.cpp" + case 148: // expr_primitive: false +#line 557 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2692 "parser.cpp" break; - case 153: // expr_call_thread: "thread" expr_call_pointer -#line 561 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2717 "parser.cpp" + case 149: // expr_primitive: true +#line 558 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2698 "parser.cpp" break; - case 154: // expr_call_thread: object "thread" expr_call_function + case 150: // expr_call: expr_call_function #line 562 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2723 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2704 "parser.cpp" break; - case 155: // expr_call_thread: object "thread" expr_call_pointer + case 151: // expr_call: expr_call_pointer #line 563 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2729 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2710 "parser.cpp" break; - case 156: // expr_call_childthread: "childthread" expr_call_function -#line 567 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2735 "parser.cpp" + case 152: // expr_call: object expr_call_function +#line 564 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2716 "parser.cpp" break; - case 157: // expr_call_childthread: "childthread" expr_call_pointer -#line 568 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2741 "parser.cpp" + case 153: // expr_call: object expr_call_pointer +#line 565 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2722 "parser.cpp" break; - case 158: // expr_call_childthread: object "childthread" expr_call_function + case 154: // expr_call_thread: "thread" expr_call_function #line 569 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2747 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2728 "parser.cpp" break; - case 159: // expr_call_childthread: object "childthread" expr_call_pointer + case 155: // expr_call_thread: "thread" expr_call_pointer #line 570 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2753 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2734 "parser.cpp" break; - case 160: // expr_call_function: name "(" expr_arguments ")" -#line 575 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2759 "parser.cpp" + case 156: // expr_call_thread: object "thread" expr_call_function +#line 571 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2740 "parser.cpp" break; - case 161: // expr_call_function: file "::" name "(" expr_arguments ")" + case 157: // expr_call_thread: object "thread" expr_call_pointer +#line 572 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2746 "parser.cpp" + break; + + case 158: // expr_call_childthread: "childthread" expr_call_function +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2752 "parser.cpp" + break; + + case 159: // expr_call_childthread: "childthread" expr_call_pointer #line 577 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2765 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2758 "parser.cpp" break; - case 162: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 582 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2771 "parser.cpp" + case 160: // expr_call_childthread: object "childthread" expr_call_function +#line 578 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2764 "parser.cpp" break; - case 163: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 161: // expr_call_childthread: object "childthread" expr_call_pointer +#line 579 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2770 "parser.cpp" + break; + + case 162: // expr_call_function: name "(" expr_arguments ")" #line 584 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2776 "parser.cpp" + break; + + case 163: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 586 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2782 "parser.cpp" + break; + + case 164: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 591 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2788 "parser.cpp" + break; + + case 165: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 593 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2777 "parser.cpp" +#line 2794 "parser.cpp" break; - case 164: // expr_arguments: expr_arguments_filled -#line 588 "parser.ypp" + case 166: // expr_arguments: expr_arguments_filled +#line 597 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2783 "parser.cpp" +#line 2800 "parser.cpp" break; - case 165: // expr_arguments: expr_arguments_empty -#line 589 "parser.ypp" + case 167: // expr_arguments: expr_arguments_empty +#line 598 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2789 "parser.cpp" +#line 2806 "parser.cpp" break; - case 166: // expr_arguments_filled: expr_arguments "," expr -#line 594 "parser.ypp" + case 168: // expr_arguments_filled: expr_arguments "," expr +#line 603 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2795 "parser.cpp" +#line 2812 "parser.cpp" break; - case 167: // expr_arguments_filled: expr -#line 596 "parser.ypp" + case 169: // expr_arguments_filled: expr +#line 605 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2801 "parser.cpp" +#line 2818 "parser.cpp" break; - case 168: // expr_arguments_empty: %empty -#line 601 "parser.ypp" + case 170: // expr_arguments_empty: %empty +#line 610 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2807 "parser.cpp" +#line 2824 "parser.cpp" break; - case 169: // expr_function: "::" name -#line 606 "parser.ypp" + case 171: // expr_function: "::" name +#line 615 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2813 "parser.cpp" +#line 2830 "parser.cpp" break; - case 170: // expr_function: file "::" name -#line 608 "parser.ypp" + case 172: // expr_function: file "::" name +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2819 "parser.cpp" +#line 2836 "parser.cpp" break; - case 171: // expr_add_array: "[" expr_arguments_filled "]" -#line 613 "parser.ypp" + case 173: // expr_add_array: "[" expr_arguments_filled "]" +#line 622 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2825 "parser.cpp" +#line 2842 "parser.cpp" break; - case 172: // expr_array: object "[" expr "]" -#line 618 "parser.ypp" + case 174: // expr_array: object "[" expr "]" +#line 627 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2831 "parser.cpp" +#line 2848 "parser.cpp" break; - case 173: // expr_field: object "." name -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2837 "parser.cpp" - break; - - case 174: // expr_size: object ".size" -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2843 "parser.cpp" - break; - - case 175: // object: expr_call + case 175: // expr_field: object "." name #line 632 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2849 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2854 "parser.cpp" break; - case 176: // object: expr_array -#line 633 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2855 "parser.cpp" - break; - - case 177: // object: expr_field -#line 634 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2861 "parser.cpp" - break; - - case 178: // object: game -#line 635 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2867 "parser.cpp" - break; - - case 179: // object: self -#line 636 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2873 "parser.cpp" - break; - - case 180: // object: anim + case 176: // expr_size: object ".size" #line 637 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2879 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2860 "parser.cpp" break; - case 181: // object: level -#line 638 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2885 "parser.cpp" + case 177: // object: expr_call +#line 641 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2866 "parser.cpp" break; - case 182: // object: name -#line 639 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2891 "parser.cpp" - break; - - case 183: // thisthread: "thisthread" + case 178: // object: expr_array #line 642 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2897 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2872 "parser.cpp" break; - case 184: // empty_array: "[" "]" + case 179: // object: expr_field #line 643 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2903 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2878 "parser.cpp" break; - case 185: // undefined: "undefined" + case 180: // object: game #line 644 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2909 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2884 "parser.cpp" break; - case 186: // game: "game" + case 181: // object: self #line 645 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2915 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2890 "parser.cpp" break; - case 187: // self: "self" + case 182: // object: anim #line 646 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2921 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2896 "parser.cpp" break; - case 188: // anim: "anim" + case 183: // object: level #line 647 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2927 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2902 "parser.cpp" break; - case 189: // level: "level" + case 184: // object: name #line 648 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2933 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2908 "parser.cpp" break; - case 190: // animation: "%" "identifier" -#line 649 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2939 "parser.cpp" - break; - - case 191: // animtree: "#animtree" -#line 650 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2945 "parser.cpp" - break; - - case 192: // name: "identifier" + case 185: // thisthread: "thisthread" #line 651 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2951 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2914 "parser.cpp" break; - case 193: // file: "file path" + case 186: // empty_array: "[" "]" #line 652 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2957 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2920 "parser.cpp" break; - case 194: // istring: "localized string" + case 187: // undefined: "undefined" #line 653 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2963 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2926 "parser.cpp" break; - case 195: // string: "string literal" + case 188: // game: "game" #line 654 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2969 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2932 "parser.cpp" break; - case 196: // vector: "(" expr "," expr "," expr ")" + case 189: // self: "self" #line 655 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2975 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2938 "parser.cpp" break; - case 197: // neg_float: "-" "float" + case 190: // anim: "anim" #line 656 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2981 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2944 "parser.cpp" break; - case 198: // neg_integer: "-" "int" + case 191: // level: "level" #line 657 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2987 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2950 "parser.cpp" break; - case 199: // float: "float" + case 192: // animation: "%" "identifier" #line 658 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2993 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2956 "parser.cpp" break; - case 200: // integer: "int" + case 193: // animtree: "#animtree" #line 659 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2999 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2962 "parser.cpp" break; - case 201: // false: "false" + case 194: // name: "identifier" #line 660 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 3005 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2968 "parser.cpp" break; - case 202: // true: "true" + case 195: // file: "file path" #line 661 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2974 "parser.cpp" + break; + + case 196: // istring: "localized string" +#line 662 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2980 "parser.cpp" + break; + + case 197: // string: "string literal" +#line 663 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2986 "parser.cpp" + break; + + case 198: // vector: "(" expr "," expr "," expr ")" +#line 664 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2992 "parser.cpp" + break; + + case 199: // neg_float: "-" "float" +#line 665 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2998 "parser.cpp" + break; + + case 200: // neg_integer: "-" "int" +#line 666 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 3004 "parser.cpp" + break; + + case 201: // float: "float" +#line 667 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3010 "parser.cpp" + break; + + case 202: // integer: "int" +#line 668 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3016 "parser.cpp" + break; + + case 203: // false: "false" +#line 669 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 3022 "parser.cpp" + break; + + case 204: // true: "true" +#line 670 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 3011 "parser.cpp" +#line 3028 "parser.cpp" break; -#line 3015 "parser.cpp" +#line 3032 "parser.cpp" default: break; @@ -3202,11 +3219,11 @@ namespace xsk { namespace gsc { namespace h2 { "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", "level", "(", ")", "{", "}", "[", "]", - ",", ".", "::", ":", ";", "++", "--", "<<", ">>", "||", "&&", "==", "!=", - "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", - "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", + ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", + "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", + "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", - "int", "ADD_ARRAY", "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", + "int", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "include", "define", "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", @@ -3215,8 +3232,8 @@ namespace xsk { namespace gsc { namespace h2 { "stmt_while", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", "stmt_prof_end", "for_stmt", - "for_expr", "expr", "expr_assign", "expr_compare", "expr_binary", - "expr_primitive", "expr_call", "expr_call_thread", + "for_expr", "expr", "expr_assign", "expr_compare", "expr_ternary", + "expr_binary", "expr_primitive", "expr_call", "expr_call_thread", "expr_call_childthread", "expr_call_function", "expr_call_pointer", "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", "expr_field", @@ -3488,532 +3505,572 @@ namespace xsk { namespace gsc { namespace h2 { } - const short parser::yypact_ninf_ = -236; + const short parser::yypact_ninf_ = -242; - const short parser::yytable_ninf_ = -183; + const short parser::yytable_ninf_ = -185; const short parser::yypact_[] = { - 8, -65, -6, -236, 25, 8, -236, -236, -236, -236, - -236, -32, -236, -8, -28, -236, -236, -236, -17, 774, - -236, -236, 21, 30, -236, -236, 6, 6, -236, 51, - -236, -236, -236, -236, -236, -236, -236, 774, 377, -17, - 774, 774, 10, -3, -236, -236, -236, 1403, -236, -236, - -236, 20, -236, -236, -236, -236, -236, -236, 403, 449, - -236, 472, -236, -236, -236, 739, 798, 858, 930, -236, - -236, 12, 17, -236, -236, -236, -236, -236, -236, -236, - -236, -236, 24, 50, -17, 63, -236, -236, 76, 79, - -236, -236, 80, 967, 377, -236, 1481, 71, 89, -236, - -236, -236, -236, -236, -236, -236, -236, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 6, 6, -236, 836, -17, - -236, -236, 774, -17, -236, 599, -236, -236, 774, -17, - 774, -236, 774, 1274, 774, -236, 106, 106, 1491, 1000, - 1563, 1563, 130, 130, 130, 130, 1043, 1532, 1522, -37, - -37, -236, -236, -236, -236, -236, -236, -236, 1313, -236, - 31, -236, 96, 87, 101, 104, 774, 88, -20, 123, - 124, 127, 131, 134, -26, 121, 147, 152, 712, -236, - -15, -15, -236, -236, 643, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, 153, 155, - 157, -236, -236, 882, -236, -236, -236, -236, 76, 1274, - 96, 1352, 1390, 132, 1481, -236, -236, 774, -236, 774, - 774, 1437, -236, 140, -236, 774, 774, 544, -17, 774, - 117, 159, 166, 172, -236, -236, -236, -236, 1450, -236, - 173, 173, -236, -236, -236, -236, -236, 182, 184, 187, - 189, -236, -236, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 186, 774, 199, 39, 40, 42, - -236, 190, 1106, 1139, 191, -236, 932, -11, 1149, -236, - -236, -236, -236, 774, 774, 774, 774, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 205, 1182, - 774, -236, 196, 200, -236, 687, 687, 774, 774, -17, - 50, 1192, 1010, 1053, 1096, 774, -236, 48, -236, -236, - 225, -236, 203, 1481, 1225, 234, -236, 206, 209, 774, - 212, 774, 213, 774, 65, -236, 687, 544, 687, 774, - -236, -236, 69, -236, 73, -236, 82, -236, -236, 223, - -236, 1235, 217, 220, 222, 687, 687, -236, -236, -236, - -236, -236 + 8, -74, -23, -242, 25, 8, -242, -242, -242, -242, + -242, -21, -242, -16, -59, -242, -242, -242, -14, 810, + -242, -242, 20, -6, -242, -242, 7, 7, -242, 43, + -242, -242, -242, -242, -242, -242, -242, 810, 684, -14, + 810, 810, -43, 3, -242, -242, -242, 1562, -242, -242, + -242, -242, 21, -242, -242, -242, -242, -242, -242, 53, + 177, -242, 367, -242, -242, -242, 391, 426, 466, 707, + -242, -242, 13, 15, -242, -242, -242, -242, -242, -242, + -242, -242, -242, 14, 59, -14, 60, -242, -242, 65, + 68, -242, -242, 75, 1002, 684, -242, 1645, 80, 91, + -242, -242, -242, -242, -242, -242, -242, -242, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 7, 7, -242, + 873, -14, -242, -242, 810, -14, -242, 568, -242, -242, + 810, -14, 810, -242, 810, 806, 810, -242, 1527, 262, + 262, 1676, 1686, 454, 454, 203, 203, 203, 203, 1717, + 1758, 1727, 127, 127, -242, -242, -242, -242, -242, -242, + -242, 1412, -242, 32, -242, 100, 93, 104, 126, 810, + 117, 19, 130, 133, 134, 140, 144, -4, 139, 142, + 150, 747, -242, -15, -15, -242, -242, 613, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, 153, 163, 164, -242, -242, 920, -242, -242, -242, + -242, 65, 806, 100, 1452, 1491, 171, 1645, 810, -242, + -242, 810, -242, 810, 810, 1597, -242, 149, -242, 810, + 810, 770, -14, 810, 132, 168, 174, 176, -242, -242, + -242, -242, 1632, -242, -11, -11, -242, -242, -242, -242, + -242, 180, 187, 188, 192, -242, -242, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 189, 810, + 196, 1645, 49, 50, 71, -242, 191, 1168, 1202, 194, + -242, 966, 9, 1236, -242, -242, -242, -242, 810, 810, + 810, 810, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + 1645, 1645, 1645, 198, 1270, 810, -242, 209, 210, -242, + 658, 658, 810, 810, -14, 59, 1304, 1046, 1090, 1134, + 810, -242, 72, -242, -242, 225, -242, 211, 1645, 1338, + 229, -242, 216, 217, 810, 218, 810, 223, 810, 83, + -242, 658, 770, 658, 810, -242, -242, 84, -242, 141, + -242, 145, -242, -242, 212, -242, 1372, 224, 231, 240, + 658, 658, -242, -242, -242, -242, -242 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 192, 0, 2, 6, 7, 9, 10, - 11, 0, 193, 0, 0, 1, 4, 5, 17, 0, - 8, 195, 0, 0, 16, 191, 0, 0, 183, 0, - 202, 201, 185, 186, 187, 188, 189, 0, 168, 0, - 0, 0, 0, 0, 194, 199, 200, 0, 82, 83, - 84, 121, 122, 123, 148, 149, 124, 125, 126, 127, - 128, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 0, 0, 0, 0, 152, 153, 0, 0, - 156, 157, 0, 0, 168, 184, 167, 0, 164, 165, - 169, 120, 119, 197, 198, 190, 13, 0, 0, 0, + 3, 0, 0, 194, 0, 2, 6, 7, 9, 10, + 11, 0, 195, 0, 0, 1, 4, 5, 17, 0, + 8, 197, 0, 0, 16, 193, 0, 0, 185, 0, + 204, 203, 187, 188, 189, 190, 191, 0, 170, 0, + 0, 0, 0, 0, 196, 201, 202, 0, 82, 83, + 84, 85, 123, 124, 125, 150, 151, 126, 127, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 0, 0, 0, 0, 154, 155, 0, + 0, 158, 159, 0, 0, 170, 186, 169, 0, 166, + 167, 171, 122, 121, 199, 200, 192, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 150, 151, 168, 0, 12, 0, 14, 15, 0, 0, - 0, 118, 0, 167, 0, 171, 111, 112, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, - 114, 115, 116, 117, 154, 155, 158, 159, 0, 173, - 0, 164, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 45, 18, 0, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 0, 175, - 0, 176, 177, 0, 178, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 166, 172, 160, 168, 75, 168, - 168, 0, 57, 0, 58, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 70, 71, 72, 74, 0, 175, - 85, 86, 42, 44, 48, 46, 47, 0, 0, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 152, 153, 170, 0, 12, 0, 14, 15, + 0, 0, 0, 120, 0, 169, 0, 173, 0, 113, + 114, 101, 102, 103, 104, 105, 106, 107, 108, 110, + 111, 112, 115, 116, 117, 118, 119, 156, 157, 160, + 161, 0, 175, 0, 166, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 78, 0, 0, 0, 69, - 68, 67, 73, 0, 0, 0, 0, 89, 95, 96, - 97, 98, 99, 90, 91, 92, 94, 93, 0, 0, - 168, 161, 0, 0, 59, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 168, 196, 0, 76, 77, - 60, 62, 0, 80, 0, 0, 66, 0, 0, 168, - 0, 168, 0, 168, 0, 162, 0, 79, 0, 0, - 49, 51, 0, 54, 0, 56, 0, 163, 61, 0, - 64, 0, 0, 0, 0, 0, 0, 50, 53, 55, - 63, 65 + 0, 0, 43, 0, 0, 45, 18, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 0, 177, 0, 178, 179, 0, 180, 181, 182, + 183, 184, 0, 0, 0, 0, 0, 168, 0, 174, + 162, 170, 75, 170, 170, 0, 57, 0, 58, 0, + 0, 79, 0, 0, 0, 0, 0, 0, 70, 71, + 72, 74, 0, 177, 86, 87, 42, 44, 48, 46, + 47, 0, 0, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 52, 0, 0, 0, 0, + 78, 0, 0, 0, 69, 68, 67, 73, 0, 0, + 0, 0, 90, 96, 97, 98, 99, 100, 91, 92, + 93, 95, 94, 0, 0, 170, 163, 0, 0, 59, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, + 170, 198, 0, 76, 77, 60, 62, 0, 80, 0, + 0, 66, 0, 0, 170, 0, 170, 0, 170, 0, + 164, 0, 79, 0, 0, 49, 51, 0, 54, 0, + 56, 0, 165, 61, 0, 64, 0, 0, 0, 0, + 0, 0, 50, 53, 55, 63, 65 }; const short parser::yypgoto_[] = { - -236, -236, -236, 272, 273, -236, -236, -236, -236, -183, - -76, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -78, -236, 38, -235, -236, - -236, -236, -82, -107, -236, -25, -23, -119, -21, -236, - -236, -236, -22, 98, -236, 156, -236, -236, -236, 192, - 197, 202, 236, -236, -236, 0, 5, -236, -5, -236, - -236, 97, -236, 102, -236, -236 + -242, -242, -242, 286, 288, -242, -242, -242, -242, -185, + -81, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -68, -242, 39, -241, -242, + -242, -242, -242, -83, 52, -242, -25, -19, -121, -29, + -242, -242, -242, -22, 78, -242, 106, -242, -242, -242, + 118, 159, 195, 200, -242, -242, 0, 5, -242, -10, + -242, -242, 108, -242, 115, -242, -242 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 294, 342, 96, 218, 48, - 49, 50, 51, 52, 53, 54, 55, 97, 171, 99, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 299, 347, 97, 221, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 98, 174, + 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81 + 76, 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 86, 90, 87, 91, 11, 13, 136, 18, 22, - 328, 263, 295, 170, 1, 2, 29, 98, 24, 12, - 243, 33, 34, 35, 36, 15, 88, 88, 220, 85, - 244, 89, 89, 19, 14, 329, 130, 29, 131, 100, - -182, -182, 20, -182, 122, 123, 124, -182, -175, -175, - 85, -175, 132, 219, 250, -175, -182, 47, 21, -182, - 21, 88, 82, 46, -175, 133, 89, -175, 3, 12, - 3, 83, 236, 98, 134, 93, 84, 144, 101, 102, - 321, 322, 105, 323, 137, 144, 144, 220, 144, 355, - 12, 3, 135, 3, 144, 92, -182, -182, 103, 104, - 164, 166, 165, 167, -175, -175, 367, 138, 259, 259, - 372, 144, 219, 221, 373, 144, 132, 144, 287, 144, - 288, 289, 295, 374, 140, 88, 88, 139, 144, 169, - 89, 89, 143, 172, 145, 228, 237, 238, 242, 230, - 89, 239, 340, 341, 240, 146, 147, 148, 149, 150, + 11, 87, 91, 138, 22, 11, 13, 88, 92, 99, + 300, 12, 267, 173, 1, 2, 29, 14, 24, 18, + 29, 33, 34, 35, 36, 15, 89, 89, 21, 86, + 333, 90, 90, 130, 20, 84, 131, 132, 29, 101, + 85, -184, -184, 133, -184, 19, 104, 105, -184, -177, + -177, 86, -177, 134, 222, 334, -177, -184, 47, 247, + -184, 83, 89, 135, 136, -177, 99, 90, -177, 248, + 12, 3, 3, 240, 12, 3, 94, 254, 146, 102, + 103, -178, -178, 21, -178, 139, 46, 93, -178, 106, + 326, 327, 12, 3, 3, 146, 146, -178, -184, -184, + -178, 137, 167, 169, 140, 134, -177, -177, 168, 170, + 263, 263, 328, 360, 222, 224, 141, 146, 146, 142, + 292, 300, 293, 294, 372, 377, 146, 89, 89, 146, + 146, 172, 90, 90, 145, 175, 147, 231, -178, -178, + 241, 233, 90, 242, 243, 345, 346, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 245, 246, 259, 168, 247, 221, 221, - 254, 248, 221, 368, 249, 370, 229, 286, 231, 251, - 232, 291, 234, 107, 108, 120, 121, 122, 123, 124, - 228, 228, 380, 381, 228, 89, 89, 255, 130, 89, - 131, 337, 256, 264, 29, 265, 104, 266, 299, 120, - 121, 122, 123, 124, 241, 300, 354, 128, 220, 220, - 129, 301, 303, 88, 304, 221, 258, 305, 89, 306, - 362, 318, 364, 222, 366, 130, 130, 131, 131, 320, - 324, 327, 356, 219, 219, 335, 338, 228, 297, 220, - 339, 220, 89, 357, 346, 359, 360, 12, 3, 361, - 88, 88, 363, 365, 375, 89, 89, 377, 220, 220, - 378, 130, 379, 131, 219, 259, 219, 16, 17, 369, - 0, 252, 0, 292, 293, 0, 253, 298, 222, 222, - 0, 223, 222, 219, 219, 0, 88, 0, 0, 0, - 0, 89, 0, 221, 221, 0, 0, 0, 0, 0, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 0, 319, 0, 228, 228, 224, 0, 345, - 89, 89, 225, 0, 221, 221, 221, 226, 0, 0, - 0, 331, 332, 333, 334, 222, 260, 261, 0, 0, - 223, 0, 0, 221, 221, 0, 228, 228, 228, 0, - 0, 89, 89, 89, 0, 343, 344, 0, 0, 0, - 0, 227, 0, 0, 0, 228, 228, 0, 0, 0, - 89, 89, 224, 224, 0, 25, 224, 225, 225, 0, - 0, 225, 226, 226, 0, 0, 226, 371, 0, 0, - 0, 0, 0, 296, 0, 26, 27, 28, 29, 30, + 161, 162, 163, 164, 165, 166, 244, 246, 263, 171, + 249, 224, 224, 250, 251, 224, 373, 255, 375, 232, + 252, 234, 378, 235, 253, 237, 379, 146, 258, 223, + 296, 146, 259, 231, 231, 385, 386, 231, 90, 90, + 260, 132, 90, 268, 342, -179, -179, 133, -179, 124, + 125, 126, -179, 269, 270, 225, 290, 304, 245, 359, + 308, -179, 105, 305, -179, 306, 89, 309, 310, 224, + 262, 90, 311, 367, 323, 369, 325, 371, 340, 132, + 132, 329, 361, 226, 332, 133, 133, 222, 222, 223, + 364, 231, 302, 380, 351, 227, 90, 109, 110, 343, + 344, 362, -179, -179, 89, 89, 365, 366, 368, 90, + 90, 225, 225, 370, 382, 225, 132, 291, 222, 263, + 222, 383, 133, 122, 123, 124, 125, 126, 297, 298, + 384, 16, 303, 17, 374, 256, 228, 222, 222, 264, + 265, 89, 257, 226, 0, 0, 90, 0, 224, 224, + 0, 227, 227, 0, 0, 227, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 0, 324, 225, + 231, 231, 229, 0, 350, 90, 90, 230, 0, 224, + 224, 224, 122, 123, 124, 125, 126, 336, 337, 338, + 339, 0, 228, 228, 0, 0, 228, 301, 224, 224, + 0, 231, 231, 231, 0, 0, 90, 90, 90, 227, + 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, + 231, 231, 223, 223, 0, 90, 90, 0, 229, 229, + 0, 0, 229, 230, 230, 127, 128, 230, 29, 0, + 0, 0, 129, 376, 0, 0, 0, 0, 225, 225, + 228, 130, 0, 223, 131, 223, 0, 0, 0, -180, + -180, 0, -180, 0, 0, 0, -180, 0, 0, 0, + 0, 0, 223, 223, 0, -180, 226, 226, -180, 225, + 225, 225, 0, 0, 0, 0, 229, 0, 227, 227, + 0, 230, 12, 3, -181, -181, 0, -181, 225, 225, + 0, -181, 0, 0, 0, 0, 0, 226, 301, 226, + -181, 0, 0, -181, 0, 0, -180, -180, 0, 227, + 227, 227, 0, 0, 0, 0, 226, 226, 0, 228, + 228, 0, 0, 0, -182, -182, 0, -182, 227, 227, + 0, -182, 0, 0, 0, 0, 0, 0, 109, 110, + -182, -181, -181, -182, 115, 116, 117, 118, 0, 0, + 228, 228, 228, 0, 0, 229, 229, 0, 0, 0, + 230, 230, 0, 0, 122, 123, 124, 125, 126, 228, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -182, -182, 0, 0, 0, 229, 229, 229, 0, + 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 178, 0, 229, 229, 0, 0, 179, + 230, 230, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, + 137, 192, 86, 0, 0, 0, 176, 177, 178, 0, + 193, 194, 0, 0, 179, 0, 0, 180, 181, 182, + 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, + 191, 26, 0, 0, 29, 0, 0, 0, 0, 33, + 34, 35, 36, 12, 3, 137, 266, 86, 0, 0, + 0, 176, 177, 178, 0, 193, 194, 0, 0, 179, + 0, 0, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 25, 0, 33, 34, 35, 36, 12, 3, + 137, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 193, 194, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, 96, + 0, 0, 39, 0, 0, -183, -183, 0, -183, 0, + 0, 0, -183, 12, 3, 0, 0, 0, 40, 41, + 0, -183, 0, 0, -183, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, + 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, - 0, 94, 95, 222, 222, 39, 227, 227, 0, 0, - 227, -176, -176, 0, -176, 0, 0, 0, -176, 224, - 40, 41, 0, 0, 225, 0, 0, -176, 0, 226, - -176, 0, 0, 0, 222, 222, 222, 42, 0, 0, - 43, 12, 3, 21, 44, 45, 46, 0, 0, 0, - 0, 0, 0, 222, 222, 0, 0, -177, -177, 0, - -177, 223, 223, 227, -177, 0, 0, -176, -176, 0, - 0, 0, 0, -177, 0, 0, -177, 0, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 0, 0, - 0, 0, 223, 296, 223, 0, 128, 224, 224, 129, - 0, 0, 225, 225, 0, 0, 0, 226, 226, 0, - 0, 223, 223, -177, -177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, - 224, 0, 0, 225, 225, 225, 12, 3, 226, 226, - 226, 227, 227, 0, 0, 0, 0, 224, 224, 0, - 0, 0, 225, 225, 0, 29, 0, 226, 226, 0, - 33, 34, 35, 36, 0, 0, 0, 0, 85, 0, - 0, 0, 227, 227, 227, 190, 191, 0, 0, 0, - 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, - 176, 227, 227, 177, 178, 179, 0, 180, 181, 182, - 0, 183, 184, 185, 186, 187, 188, 26, 12, 3, - 29, 0, 0, 0, 0, 33, 34, 35, 36, 0, - 0, 135, 189, 85, 0, 0, 173, 174, 175, 0, - 190, 191, 0, 0, 176, 0, 0, 177, 178, 179, - 0, 180, 181, 182, 0, 183, 184, 185, 186, 187, - 188, 26, 0, 0, 29, 0, 0, 0, 0, 33, - 34, 35, 36, 12, 3, 135, 262, 85, 0, 0, - 173, 174, 175, 0, 190, 191, 0, 0, 176, 0, - 0, 177, 178, 179, 0, 180, 181, 182, 0, 183, - 184, 185, 186, 187, 188, 26, 0, 0, 29, 0, - 25, 0, 0, 33, 34, 35, 36, 12, 3, 135, - 0, 85, 0, 0, 0, 0, 0, 0, 190, 191, - 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, - 35, 36, 37, 0, 0, 0, 38, 0, 0, 0, - 39, 0, 257, 0, 0, 0, 0, -178, -178, 0, - -178, 12, 3, 0, -178, 40, 41, 0, 0, 0, - 0, 0, 25, -178, 0, 0, -178, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, - 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, - 33, 34, 35, 36, 37, 0, 0, 0, 38, 0, - 0, 0, 39, -178, -178, 0, -179, -179, 0, -179, - 0, 0, 0, -179, 0, 0, 0, 40, 41, 0, - 0, 0, -179, 0, 25, -179, 0, 0, 0, 0, - 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, - 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, - 94, 0, -179, -179, 39, 0, -180, -180, 0, -180, - 0, 267, 268, -180, 269, 270, 0, 0, 0, 40, - 41, 0, -180, 0, 0, -180, 0, 0, 0, 0, - 125, 0, 0, 29, 0, 0, 42, 0, 0, 43, - 12, 3, 21, 44, 45, 46, 128, 0, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, -180, -180, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, -181, -181, - 0, -181, 0, 29, 0, -181, 12, 3, 0, 0, - 0, 0, 0, 0, -181, 0, 128, -181, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 141, 0, - 0, 0, 0, 142, -181, -181, 12, 3, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 0, 38, -183, -183, 0, 39, 0, 261, 0, 0, + 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, + 0, 40, 41, 0, 86, 0, 0, 0, 25, 0, + 0, 0, 193, 194, 0, 0, 0, 0, 42, 0, + 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 236, 0, 0, 38, 12, 3, 108, 39, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, + 0, 25, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 42, 0, 0, 43, 12, 3, 21, 44, 45, + 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, + 34, 35, 36, 37, 0, 0, 0, 95, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 273, 274, 0, 0, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 0, 29, 0, 0, 42, 0, 0, 43, 12, 3, + 21, 44, 45, 46, 130, 0, 0, 131, 0, 0, + 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 29, 0, 0, + 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, + 130, 0, 0, 131, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 348, 0, 107, 108, 0, 349, 111, 112, 113, - 114, 115, 116, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 350, 0, 107, 108, 0, 351, - 111, 112, 113, 114, 115, 116, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 352, 0, 0, - 0, 0, 353, 0, 0, 0, 0, 325, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 326, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 330, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 336, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 347, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 358, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 376, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 233, - 0, 0, 0, 0, 0, 0, 0, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, + 0, 0, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 143, 0, 0, 0, 0, 144, 0, + 0, 12, 3, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 353, 0, 0, + 0, 0, 354, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 235, 0, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 284, 0, 0, - 0, 0, 0, 0, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 285, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 106, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 290, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 302, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 0, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 118, - 0, 120, 121, 122, 123, 124, 0, 0, 0, 0, - 0, 120, 121, 122, 123, 124, 107, 108, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 355, 0, 0, 0, 0, 356, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 357, 0, 0, 0, 0, + 358, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 331, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 120, 121, 122, 123, 124 + 0, 341, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 381, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 239, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 288, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 289, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 238, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 107, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 295, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 307, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 109, 110, 0, 112, 113, 114, 115, 116, 117, 118, + 109, 110, 0, 0, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 120, 121, 122, 123, 124, + 125, 126, 0, 0, 0, 120, 0, 122, 123, 124, + 125, 126, 109, 110, 0, 0, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, + 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 26, 27, 26, 27, 5, 1, 83, 40, 14, - 21, 194, 247, 132, 6, 7, 31, 38, 18, 84, - 40, 36, 37, 38, 39, 0, 26, 27, 135, 44, - 50, 26, 27, 65, 40, 46, 61, 31, 61, 39, - 28, 29, 50, 31, 81, 82, 83, 35, 28, 29, - 44, 31, 40, 135, 80, 35, 44, 19, 86, 47, - 86, 61, 41, 89, 44, 48, 61, 47, 85, 84, - 85, 41, 41, 94, 50, 37, 46, 46, 40, 41, - 41, 41, 85, 41, 84, 46, 46, 194, 46, 41, - 84, 85, 42, 85, 46, 44, 84, 85, 88, 89, - 125, 126, 125, 126, 84, 85, 41, 44, 190, 191, - 41, 46, 194, 135, 41, 46, 40, 46, 237, 46, - 239, 240, 357, 41, 44, 125, 126, 48, 46, 129, - 125, 126, 94, 133, 45, 135, 40, 50, 50, 139, - 135, 40, 325, 326, 40, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 40, 40, 247, 128, 40, 190, 191, - 49, 40, 194, 356, 40, 358, 138, 45, 140, 184, - 142, 41, 144, 53, 54, 79, 80, 81, 82, 83, - 190, 191, 375, 376, 194, 190, 191, 50, 223, 194, - 223, 320, 50, 50, 31, 50, 89, 50, 49, 79, - 80, 81, 82, 83, 176, 49, 335, 44, 325, 326, - 47, 49, 40, 223, 40, 247, 188, 40, 223, 40, - 349, 45, 351, 135, 353, 260, 261, 260, 261, 40, - 50, 50, 17, 325, 326, 40, 50, 247, 248, 356, - 50, 358, 247, 50, 330, 21, 50, 84, 85, 50, - 260, 261, 50, 50, 41, 260, 261, 50, 375, 376, - 50, 296, 50, 296, 356, 357, 358, 5, 5, 357, - -1, 184, -1, 245, 246, -1, 184, 249, 190, 191, - -1, 135, 194, 375, 376, -1, 296, -1, -1, -1, - -1, 296, -1, 325, 326, -1, -1, -1, -1, -1, - -1, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, -1, 285, -1, 325, 326, 135, -1, 329, - 325, 326, 135, -1, 356, 357, 358, 135, -1, -1, - -1, 303, 304, 305, 306, 247, 190, 191, -1, -1, - 194, -1, -1, 375, 376, -1, 356, 357, 358, -1, - -1, 356, 357, 358, -1, 327, 328, -1, -1, -1, - -1, 135, -1, -1, -1, 375, 376, -1, -1, -1, - 375, 376, 190, 191, -1, 8, 194, 190, 191, -1, - -1, 194, 190, 191, -1, -1, 194, 359, -1, -1, - -1, -1, -1, 247, -1, 28, 29, 30, 31, 32, - 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, - -1, 44, 45, 325, 326, 48, 190, 191, -1, -1, - 194, 28, 29, -1, 31, -1, -1, -1, 35, 247, - 63, 64, -1, -1, 247, -1, -1, 44, -1, 247, - 47, -1, -1, -1, 356, 357, 358, 80, -1, -1, - 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, 375, 376, -1, -1, 28, 29, -1, - 31, 325, 326, 247, 35, -1, -1, 84, 85, -1, - -1, -1, -1, 44, -1, -1, 47, -1, -1, -1, - 28, 29, -1, 31, -1, -1, -1, 35, -1, -1, - -1, -1, 356, 357, 358, -1, 44, 325, 326, 47, - -1, -1, 325, 326, -1, -1, -1, 325, 326, -1, - -1, 375, 376, 84, 85, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, - 358, -1, -1, 356, 357, 358, 84, 85, 356, 357, - 358, 325, 326, -1, -1, -1, -1, 375, 376, -1, - -1, -1, 375, 376, -1, 31, -1, 375, 376, -1, - 36, 37, 38, 39, -1, -1, -1, -1, 44, -1, - -1, -1, 356, 357, 358, 51, 52, -1, -1, -1, - -1, -1, 3, 4, 5, -1, -1, -1, -1, -1, - 11, 375, 376, 14, 15, 16, -1, 18, 19, 20, - -1, 22, 23, 24, 25, 26, 27, 28, 84, 85, - 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, - -1, 42, 43, 44, -1, -1, 3, 4, 5, -1, - 51, 52, -1, -1, 11, -1, -1, 14, 15, 16, + 0, 26, 27, 84, 14, 5, 1, 26, 27, 38, + 251, 85, 197, 134, 6, 7, 31, 40, 18, 40, + 31, 36, 37, 38, 39, 0, 26, 27, 87, 44, + 21, 26, 27, 44, 50, 41, 47, 62, 31, 39, + 46, 28, 29, 62, 31, 66, 89, 90, 35, 28, + 29, 44, 31, 40, 137, 46, 35, 44, 19, 40, + 47, 41, 62, 48, 50, 44, 95, 62, 47, 50, + 85, 86, 86, 41, 85, 86, 37, 81, 46, 40, + 41, 28, 29, 87, 31, 85, 90, 44, 35, 86, + 41, 41, 85, 86, 86, 46, 46, 44, 85, 86, + 47, 42, 127, 128, 44, 40, 85, 86, 127, 128, + 193, 194, 41, 41, 197, 137, 48, 46, 46, 44, + 241, 362, 243, 244, 41, 41, 46, 127, 128, 46, + 46, 131, 127, 128, 95, 135, 45, 137, 85, 86, + 40, 141, 137, 50, 40, 330, 331, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 40, 50, 251, 130, + 40, 193, 194, 40, 40, 197, 361, 187, 363, 140, + 40, 142, 41, 144, 40, 146, 41, 46, 49, 137, + 41, 46, 50, 193, 194, 380, 381, 197, 193, 194, + 50, 226, 197, 50, 325, 28, 29, 226, 31, 82, + 83, 84, 35, 50, 50, 137, 45, 49, 179, 340, + 40, 44, 90, 49, 47, 49, 226, 40, 40, 251, + 191, 226, 40, 354, 45, 356, 40, 358, 40, 264, + 265, 50, 17, 137, 50, 264, 265, 330, 331, 197, + 21, 251, 252, 41, 335, 137, 251, 54, 55, 50, + 50, 50, 85, 86, 264, 265, 50, 50, 50, 264, + 265, 193, 194, 50, 50, 197, 301, 238, 361, 362, + 363, 50, 301, 80, 81, 82, 83, 84, 249, 250, + 50, 5, 253, 5, 362, 187, 137, 380, 381, 193, + 194, 301, 187, 197, -1, -1, 301, -1, 330, 331, + -1, 193, 194, -1, -1, 197, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, -1, 289, 251, + 330, 331, 137, -1, 334, 330, 331, 137, -1, 361, + 362, 363, 80, 81, 82, 83, 84, 308, 309, 310, + 311, -1, 193, 194, -1, -1, 197, 251, 380, 381, + -1, 361, 362, 363, -1, -1, 361, 362, 363, 251, + -1, 332, 333, -1, -1, -1, -1, -1, -1, -1, + 380, 381, 330, 331, -1, 380, 381, -1, 193, 194, + -1, -1, 197, 193, 194, 28, 29, 197, 31, -1, + -1, -1, 35, 364, -1, -1, -1, -1, 330, 331, + 251, 44, -1, 361, 47, 363, -1, -1, -1, 28, + 29, -1, 31, -1, -1, -1, 35, -1, -1, -1, + -1, -1, 380, 381, -1, 44, 330, 331, 47, 361, + 362, 363, -1, -1, -1, -1, 251, -1, 330, 331, + -1, 251, 85, 86, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, 361, 362, 363, + 44, -1, -1, 47, -1, -1, 85, 86, -1, 361, + 362, 363, -1, -1, -1, -1, 380, 381, -1, 330, + 331, -1, -1, -1, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, -1, 54, 55, + 44, 85, 86, 47, 60, 61, 62, 63, -1, -1, + 361, 362, 363, -1, -1, 330, 331, -1, -1, -1, + 330, 331, -1, -1, 80, 81, 82, 83, 84, 380, + 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, -1, -1, -1, 361, 362, 363, -1, + -1, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 3, 4, 5, -1, 380, 381, -1, -1, 11, + 380, 381, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, + 42, 43, 44, -1, -1, -1, 3, 4, 5, -1, + 52, 53, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, -1, -1, -1, 36, - 37, 38, 39, 84, 85, 42, 43, 44, -1, -1, - 3, 4, 5, -1, 51, 52, -1, -1, 11, -1, - -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, - 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, - 8, -1, -1, 36, 37, 38, 39, 84, 85, 42, - -1, 44, -1, -1, -1, -1, -1, -1, 51, 52, - 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, - 38, 39, 40, -1, -1, -1, 44, -1, -1, -1, - 48, -1, 50, -1, -1, -1, -1, 28, 29, -1, - 31, 84, 85, -1, 35, 63, 64, -1, -1, -1, - -1, -1, 8, 44, -1, -1, 47, -1, -1, -1, - -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 28, 29, 30, 31, 32, 33, 34, -1, - 36, 37, 38, 39, 40, -1, -1, -1, 44, -1, - -1, -1, 48, 84, 85, -1, 28, 29, -1, 31, - -1, -1, -1, 35, -1, -1, -1, 63, 64, -1, - -1, -1, 44, -1, 8, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 28, 29, 30, 31, 32, 33, - 34, -1, 36, 37, 38, 39, 40, -1, -1, -1, - 44, -1, 84, 85, 48, -1, 28, 29, -1, 31, - -1, 9, 10, 35, 12, 13, -1, -1, -1, 63, - 64, -1, 44, -1, -1, 47, -1, -1, -1, -1, - 28, -1, -1, 31, -1, -1, 80, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 44, -1, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 28, 29, - -1, 31, -1, 31, -1, 35, 84, 85, -1, -1, - -1, -1, -1, -1, 44, -1, 44, 47, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 41, -1, - -1, -1, -1, 46, 84, 85, 84, 85, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 37, 38, 39, 85, 86, 42, 43, 44, -1, -1, + -1, 3, 4, 5, -1, 52, 53, -1, -1, 11, + -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, 8, -1, 36, 37, 38, 39, 85, 86, + 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 52, 53, 28, 29, 30, 31, 32, 33, 34, -1, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, 48, -1, -1, 28, 29, -1, 31, -1, + -1, -1, 35, 85, 86, -1, -1, -1, 64, 65, + -1, 44, -1, -1, 47, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, 84, 85, + 86, 87, 88, 89, 90, 28, 29, 30, 31, 32, + 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, + -1, 44, 85, 86, -1, 48, -1, 50, -1, -1, + -1, 31, -1, -1, -1, -1, 36, 37, 38, 39, + -1, 64, 65, -1, 44, -1, -1, -1, 8, -1, + -1, -1, 52, 53, -1, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 28, 29, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 45, -1, -1, 44, 85, 86, 51, 48, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + -1, -1, -1, -1, 64, 65, -1, -1, -1, -1, + -1, 8, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 81, -1, -1, 84, 85, 86, 87, 88, 89, + 90, 28, 29, 30, 31, 32, 33, 34, -1, 36, + 37, 38, 39, 40, -1, -1, -1, 44, -1, -1, + -1, 48, -1, -1, -1, -1, -1, -1, -1, 9, + 10, -1, 12, 13, -1, -1, -1, 64, 65, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, + -1, 31, -1, -1, 81, -1, -1, 84, 85, 86, + 87, 88, 89, 90, 44, -1, -1, 47, -1, -1, + -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 31, -1, -1, + -1, -1, -1, -1, -1, 85, 86, -1, -1, -1, + 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, - 83, 41, -1, 53, 54, -1, 46, 57, 58, 59, - 60, 61, 62, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 41, -1, 53, 54, -1, 46, - 57, 58, 59, 60, 61, 62, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - 77, 78, 79, 80, 81, 82, 83, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 41, -1, -1, - -1, -1, 46, -1, -1, -1, -1, 41, -1, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, - -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, -1, -1, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, 45, - -1, -1, -1, -1, -1, -1, -1, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 41, -1, -1, -1, -1, 46, -1, + -1, 85, 86, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 41, -1, -1, + -1, -1, 46, -1, -1, -1, -1, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 76, 77, 78, 79, 80, 81, 82, 83, 45, -1, - -1, -1, -1, -1, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 45, -1, -1, - -1, -1, -1, -1, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 46, -1, -1, -1, - -1, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 50, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 50, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 53, 54, -1, 56, 57, 58, - 59, 60, 61, 62, -1, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, 77, - -1, 79, 80, 81, 82, 83, -1, -1, -1, -1, - -1, 79, 80, 81, 82, 83, 53, 54, -1, -1, - -1, -1, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 41, -1, -1, -1, -1, 46, -1, -1, -1, + -1, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 41, -1, -1, -1, -1, + 46, -1, -1, -1, -1, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 41, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, 80, 81, 82, 83 + -1, 41, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 46, -1, -1, + -1, -1, 51, -1, -1, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 49, -1, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 50, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 51, -1, -1, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, -1, -1, -1, + -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 54, 55, -1, -1, 58, 59, 60, 61, 62, 63, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, 78, 79, 80, 81, 82, + 83, 84, -1, -1, -1, 78, -1, 80, 81, 82, + 83, 84, 54, 55, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 85, 99, 100, 101, 102, 103, 104, - 105, 163, 84, 164, 40, 0, 101, 102, 40, 65, - 50, 86, 166, 106, 163, 8, 28, 29, 30, 31, + 0, 6, 7, 86, 101, 102, 103, 104, 105, 106, + 107, 166, 85, 167, 40, 0, 103, 104, 40, 66, + 50, 87, 169, 108, 166, 8, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 44, 48, - 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, - 139, 140, 141, 142, 143, 144, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 41, 41, 46, 44, 143, 144, 163, 164, - 143, 144, 44, 135, 44, 45, 135, 145, 146, 147, - 163, 135, 135, 88, 89, 85, 50, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 76, 77, 78, - 79, 80, 81, 82, 83, 28, 29, 35, 44, 47, - 143, 144, 40, 48, 50, 42, 108, 163, 44, 48, - 44, 41, 46, 135, 46, 45, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 143, 144, 143, 144, 135, 163, - 145, 146, 163, 3, 4, 5, 11, 14, 15, 16, - 18, 19, 20, 22, 23, 24, 25, 26, 27, 43, - 51, 52, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 136, 140, - 141, 150, 151, 153, 157, 158, 159, 160, 163, 135, - 163, 135, 135, 45, 135, 45, 41, 40, 50, 40, - 40, 135, 50, 40, 50, 40, 40, 40, 40, 40, - 80, 166, 169, 171, 49, 50, 50, 50, 135, 140, - 153, 153, 43, 107, 50, 50, 50, 9, 10, 12, - 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 45, 46, 45, 145, 145, 145, - 50, 41, 135, 135, 133, 136, 153, 163, 135, 49, - 49, 49, 50, 40, 40, 40, 40, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 45, 135, - 40, 41, 41, 41, 50, 41, 41, 50, 21, 46, - 41, 135, 135, 135, 135, 40, 41, 145, 50, 50, - 107, 107, 134, 135, 135, 163, 108, 41, 41, 46, - 41, 46, 41, 46, 145, 41, 17, 50, 41, 21, - 50, 50, 145, 50, 145, 50, 145, 41, 107, 133, - 107, 135, 41, 41, 41, 41, 41, 50, 50, 50, - 107, 107 + 64, 65, 81, 84, 88, 89, 90, 137, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 41, 41, 46, 44, 146, 147, 166, + 167, 146, 147, 44, 137, 44, 45, 137, 148, 149, + 150, 166, 137, 137, 89, 90, 86, 50, 51, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, 28, 29, 35, + 44, 47, 146, 147, 40, 48, 50, 42, 110, 166, + 44, 48, 44, 41, 46, 137, 46, 45, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 146, 147, 146, + 147, 137, 166, 148, 149, 166, 3, 4, 5, 11, + 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, + 26, 27, 43, 52, 53, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 138, 143, 144, 153, 154, 156, 160, 161, 162, + 163, 166, 137, 166, 137, 137, 45, 137, 49, 45, + 41, 40, 50, 40, 40, 137, 50, 40, 50, 40, + 40, 40, 40, 40, 81, 169, 172, 174, 49, 50, + 50, 50, 137, 143, 156, 156, 43, 109, 50, 50, + 50, 9, 10, 12, 13, 52, 53, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 45, 46, + 45, 137, 148, 148, 148, 50, 41, 137, 137, 135, + 138, 156, 166, 137, 49, 49, 49, 50, 40, 40, + 40, 40, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 45, 137, 40, 41, 41, 41, 50, + 41, 41, 50, 21, 46, 41, 137, 137, 137, 137, + 40, 41, 148, 50, 50, 109, 109, 136, 137, 137, + 166, 110, 41, 41, 46, 41, 46, 41, 46, 148, + 41, 17, 50, 41, 21, 50, 50, 148, 50, 148, + 50, 148, 41, 109, 135, 109, 137, 41, 41, 41, + 41, 41, 50, 50, 50, 109, 109 }; const unsigned char parser::yyr1_[] = { - 0, 98, 99, 99, 100, 100, 100, 100, 101, 102, - 102, 102, 103, 104, 105, 106, 106, 106, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 108, 108, 109, 109, 110, 110, 111, 112, - 113, 113, 114, 115, 115, 116, 116, 117, 118, 118, - 119, 120, 121, 122, 123, 123, 124, 125, 125, 125, - 126, 127, 128, 129, 129, 130, 131, 132, 133, 133, - 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, - 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, - 143, 143, 144, 144, 145, 145, 146, 146, 147, 148, - 148, 149, 150, 151, 152, 153, 153, 153, 153, 153, - 153, 153, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173 + 0, 100, 101, 101, 102, 102, 102, 102, 103, 104, + 104, 104, 105, 106, 107, 108, 108, 108, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 110, 110, 111, 111, 112, 112, 113, 114, + 115, 115, 116, 117, 117, 118, 118, 119, 120, 120, + 121, 122, 123, 124, 125, 125, 126, 127, 127, 127, + 128, 129, 130, 131, 131, 132, 133, 134, 135, 135, + 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 143, 143, 143, 143, 144, 144, 144, 144, 145, 145, + 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 150, 151, 151, 152, 153, 154, 155, 156, 156, 156, + 156, 156, 156, 156, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176 }; const signed char @@ -4027,19 +4084,19 @@ namespace xsk { namespace gsc { namespace h2 { 8, 6, 3, 8, 6, 8, 6, 2, 2, 4, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, - 1, 0, 1, 1, 1, 2, 2, 2, 2, 3, + 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, - 4, 6, 8, 9, 1, 1, 3, 1, 0, 2, - 3, 3, 4, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 7, 2, 2, 1, - 1, 1, 1 + 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, + 3, 3, 4, 6, 8, 9, 1, 1, 3, 1, + 0, 2, 3, 3, 4, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 7, 2, + 2, 1, 1, 1, 1 }; @@ -4049,27 +4106,27 @@ namespace xsk { namespace gsc { namespace h2 { const short parser::yyrline_[] = { - 0, 239, 239, 240, 244, 246, 248, 250, 255, 260, - 261, 262, 266, 271, 276, 281, 283, 286, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 317, 318, 322, 324, 329, 331, 336, 341, - 346, 348, 353, 358, 360, 365, 367, 372, 377, 379, - 384, 389, 394, 399, 404, 406, 411, 416, 418, 420, - 425, 430, 435, 440, 442, 447, 452, 457, 462, 463, - 467, 468, 472, 473, 474, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 496, 497, 498, 499, 500, 501, 502, 503, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 553, 554, - 555, 556, 560, 561, 562, 563, 567, 568, 569, 570, - 574, 576, 581, 583, 588, 589, 593, 595, 601, 605, - 607, 612, 617, 622, 627, 632, 633, 634, 635, 636, - 637, 638, 639, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 661 + 0, 243, 243, 244, 248, 250, 252, 254, 259, 264, + 265, 266, 270, 275, 280, 285, 287, 290, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 321, 322, 326, 328, 333, 335, 340, 345, + 350, 352, 357, 362, 364, 369, 371, 376, 381, 383, + 388, 393, 398, 403, 408, 410, 415, 420, 422, 424, + 429, 434, 439, 444, 446, 451, 456, 461, 466, 467, + 471, 472, 476, 477, 478, 479, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 501, 502, 503, 504, 505, 506, 507, 508, 512, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 562, 563, 564, 565, 569, 570, 571, 572, 576, 577, + 578, 579, 583, 585, 590, 592, 597, 598, 602, 604, + 610, 614, 616, 621, 626, 631, 636, 641, 642, 643, + 644, 645, 646, 647, 648, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670 }; void @@ -4102,9 +4159,9 @@ namespace xsk { namespace gsc { namespace h2 { #line 13 "parser.ypp" } } } // xsk::gsc::h2 -#line 4106 "parser.cpp" +#line 4163 "parser.cpp" -#line 663 "parser.ypp" +#line 672 "parser.ypp" void xsk::gsc::h2::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/h2/xsk/parser.hpp b/src/h2/xsk/parser.hpp index 219e31d7..8b562228 100644 --- a/src/h2/xsk/parser.hpp +++ b/src/h2/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace h2 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -700,53 +701,55 @@ namespace xsk { namespace gsc { namespace h2 { DOUBLECOLON = 48, // "::" COLON = 49, // ":" SEMICOLON = 50, // ";" - INCREMENT = 51, // "++" - DECREMENT = 52, // "--" - LSHIFT = 53, // "<<" - RSHIFT = 54, // ">>" - OR = 55, // "||" - AND = 56, // "&&" - EQUALITY = 57, // "==" - INEQUALITY = 58, // "!=" - LESS_EQUAL = 59, // "<=" - GREATER_EQUAL = 60, // ">=" - LESS = 61, // "<" - GREATER = 62, // ">" - NOT = 63, // "!" - COMPLEMENT = 64, // "~" - ASSIGN = 65, // "=" - ASSIGN_ADD = 66, // "+=" - ASSIGN_SUB = 67, // "-=" - ASSIGN_MULT = 68, // "*=" - ASSIGN_DIV = 69, // "/=" - ASSIGN_MOD = 70, // "%=" - ASSIGN_BITWISE_OR = 71, // "|=" - ASSIGN_BITWISE_AND = 72, // "&=" - ASSIGN_BITWISE_EXOR = 73, // "^=" - ASSIGN_RSHIFT = 74, // ">>=" - ASSIGN_LSHIFT = 75, // "<<=" - BITWISE_OR = 76, // "|" - BITWISE_AND = 77, // "&" - BITWISE_EXOR = 78, // "^" - ADD = 79, // "+" - SUB = 80, // "-" - MULT = 81, // "*" - DIV = 82, // "/" - MOD = 83, // "%" - FILE = 84, // "file path" - NAME = 85, // "identifier" - STRING = 86, // "string literal" - ISTRING = 87, // "localized string" - FLOAT = 88, // "float" - INTEGER = 89, // "int" - ADD_ARRAY = 90, // ADD_ARRAY - THEN = 91, // THEN - NEG = 92, // NEG - ANIMREF = 93, // ANIMREF - PREINC = 94, // PREINC - PREDEC = 95, // PREDEC - POSTINC = 96, // POSTINC - POSTDEC = 97 // POSTDEC + QMARK = 51, // "?" + INCREMENT = 52, // "++" + DECREMENT = 53, // "--" + LSHIFT = 54, // "<<" + RSHIFT = 55, // ">>" + OR = 56, // "||" + AND = 57, // "&&" + EQUALITY = 58, // "==" + INEQUALITY = 59, // "!=" + LESS_EQUAL = 60, // "<=" + GREATER_EQUAL = 61, // ">=" + LESS = 62, // "<" + GREATER = 63, // ">" + NOT = 64, // "!" + COMPLEMENT = 65, // "~" + ASSIGN = 66, // "=" + ASSIGN_ADD = 67, // "+=" + ASSIGN_SUB = 68, // "-=" + ASSIGN_MULT = 69, // "*=" + ASSIGN_DIV = 70, // "/=" + ASSIGN_MOD = 71, // "%=" + ASSIGN_BITWISE_OR = 72, // "|=" + ASSIGN_BITWISE_AND = 73, // "&=" + ASSIGN_BITWISE_EXOR = 74, // "^=" + ASSIGN_RSHIFT = 75, // ">>=" + ASSIGN_LSHIFT = 76, // "<<=" + BITWISE_OR = 77, // "|" + BITWISE_AND = 78, // "&" + BITWISE_EXOR = 79, // "^" + ADD = 80, // "+" + SUB = 81, // "-" + MULT = 82, // "*" + DIV = 83, // "/" + MOD = 84, // "%" + FILE = 85, // "file path" + NAME = 86, // "identifier" + STRING = 87, // "string literal" + ISTRING = 88, // "localized string" + FLOAT = 89, // "float" + INTEGER = 90, // "int" + ADD_ARRAY = 91, // ADD_ARRAY + THEN = 92, // THEN + TERN = 93, // TERN + NEG = 94, // NEG + ANIMREF = 95, // ANIMREF + PREINC = 96, // PREINC + PREDEC = 97, // PREDEC + POSTINC = 98, // POSTINC + POSTDEC = 99 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -763,7 +766,7 @@ namespace xsk { namespace gsc { namespace h2 { { enum symbol_kind_type { - YYNTOKENS = 98, ///< Number of tokens. + YYNTOKENS = 100, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -816,129 +819,132 @@ namespace xsk { namespace gsc { namespace h2 { S_DOUBLECOLON = 48, // "::" S_COLON = 49, // ":" S_SEMICOLON = 50, // ";" - S_INCREMENT = 51, // "++" - S_DECREMENT = 52, // "--" - S_LSHIFT = 53, // "<<" - S_RSHIFT = 54, // ">>" - S_OR = 55, // "||" - S_AND = 56, // "&&" - S_EQUALITY = 57, // "==" - S_INEQUALITY = 58, // "!=" - S_LESS_EQUAL = 59, // "<=" - S_GREATER_EQUAL = 60, // ">=" - S_LESS = 61, // "<" - S_GREATER = 62, // ">" - S_NOT = 63, // "!" - S_COMPLEMENT = 64, // "~" - S_ASSIGN = 65, // "=" - S_ASSIGN_ADD = 66, // "+=" - S_ASSIGN_SUB = 67, // "-=" - S_ASSIGN_MULT = 68, // "*=" - S_ASSIGN_DIV = 69, // "/=" - S_ASSIGN_MOD = 70, // "%=" - S_ASSIGN_BITWISE_OR = 71, // "|=" - S_ASSIGN_BITWISE_AND = 72, // "&=" - S_ASSIGN_BITWISE_EXOR = 73, // "^=" - S_ASSIGN_RSHIFT = 74, // ">>=" - S_ASSIGN_LSHIFT = 75, // "<<=" - S_BITWISE_OR = 76, // "|" - S_BITWISE_AND = 77, // "&" - S_BITWISE_EXOR = 78, // "^" - S_ADD = 79, // "+" - S_SUB = 80, // "-" - S_MULT = 81, // "*" - S_DIV = 82, // "/" - S_MOD = 83, // "%" - S_FILE = 84, // "file path" - S_NAME = 85, // "identifier" - S_STRING = 86, // "string literal" - S_ISTRING = 87, // "localized string" - S_FLOAT = 88, // "float" - S_INTEGER = 89, // "int" - S_ADD_ARRAY = 90, // ADD_ARRAY - S_THEN = 91, // THEN - S_NEG = 92, // NEG - S_ANIMREF = 93, // ANIMREF - S_PREINC = 94, // PREINC - S_PREDEC = 95, // PREDEC - S_POSTINC = 96, // POSTINC - S_POSTDEC = 97, // POSTDEC - S_YYACCEPT = 98, // $accept - S_root = 99, // root - S_program = 100, // program - S_include = 101, // include - S_define = 102, // define - S_usingtree = 103, // usingtree - S_constant = 104, // constant - S_thread = 105, // thread - S_parameters = 106, // parameters - S_stmt = 107, // stmt - S_stmt_block = 108, // stmt_block - S_stmt_list = 109, // stmt_list - S_stmt_call = 110, // stmt_call - S_stmt_assign = 111, // stmt_assign - S_stmt_endon = 112, // stmt_endon - S_stmt_notify = 113, // stmt_notify - S_stmt_wait = 114, // stmt_wait - S_stmt_waittill = 115, // stmt_waittill - S_stmt_waittillmatch = 116, // stmt_waittillmatch - S_stmt_waittillframeend = 117, // stmt_waittillframeend - S_stmt_waitframe = 118, // stmt_waitframe - S_stmt_if = 119, // stmt_if - S_stmt_ifelse = 120, // stmt_ifelse - S_stmt_while = 121, // stmt_while - S_stmt_for = 122, // stmt_for - S_stmt_foreach = 123, // stmt_foreach - S_stmt_switch = 124, // stmt_switch - S_stmt_case = 125, // stmt_case - S_stmt_default = 126, // stmt_default - S_stmt_break = 127, // stmt_break - S_stmt_continue = 128, // stmt_continue - S_stmt_return = 129, // stmt_return - S_stmt_breakpoint = 130, // stmt_breakpoint - S_stmt_prof_begin = 131, // stmt_prof_begin - S_stmt_prof_end = 132, // stmt_prof_end - S_for_stmt = 133, // for_stmt - S_for_expr = 134, // for_expr - S_expr = 135, // expr - S_expr_assign = 136, // expr_assign - S_expr_compare = 137, // expr_compare - S_expr_binary = 138, // expr_binary - S_expr_primitive = 139, // expr_primitive - S_expr_call = 140, // expr_call - S_expr_call_thread = 141, // expr_call_thread - S_expr_call_childthread = 142, // expr_call_childthread - S_expr_call_function = 143, // expr_call_function - S_expr_call_pointer = 144, // expr_call_pointer - S_expr_arguments = 145, // expr_arguments - S_expr_arguments_filled = 146, // expr_arguments_filled - S_expr_arguments_empty = 147, // expr_arguments_empty - S_expr_function = 148, // expr_function - S_expr_add_array = 149, // expr_add_array - S_expr_array = 150, // expr_array - S_expr_field = 151, // expr_field - S_expr_size = 152, // expr_size - S_object = 153, // object - S_thisthread = 154, // thisthread - S_empty_array = 155, // empty_array - S_undefined = 156, // undefined - S_game = 157, // game - S_self = 158, // self - S_anim = 159, // anim - S_level = 160, // level - S_animation = 161, // animation - S_animtree = 162, // animtree - S_name = 163, // name - S_file = 164, // file - S_istring = 165, // istring - S_string = 166, // string - S_vector = 167, // vector - S_neg_float = 168, // neg_float - S_neg_integer = 169, // neg_integer - S_float = 170, // float - S_integer = 171, // integer - S_false = 172, // false - S_true = 173 // true + S_QMARK = 51, // "?" + S_INCREMENT = 52, // "++" + S_DECREMENT = 53, // "--" + S_LSHIFT = 54, // "<<" + S_RSHIFT = 55, // ">>" + S_OR = 56, // "||" + S_AND = 57, // "&&" + S_EQUALITY = 58, // "==" + S_INEQUALITY = 59, // "!=" + S_LESS_EQUAL = 60, // "<=" + S_GREATER_EQUAL = 61, // ">=" + S_LESS = 62, // "<" + S_GREATER = 63, // ">" + S_NOT = 64, // "!" + S_COMPLEMENT = 65, // "~" + S_ASSIGN = 66, // "=" + S_ASSIGN_ADD = 67, // "+=" + S_ASSIGN_SUB = 68, // "-=" + S_ASSIGN_MULT = 69, // "*=" + S_ASSIGN_DIV = 70, // "/=" + S_ASSIGN_MOD = 71, // "%=" + S_ASSIGN_BITWISE_OR = 72, // "|=" + S_ASSIGN_BITWISE_AND = 73, // "&=" + S_ASSIGN_BITWISE_EXOR = 74, // "^=" + S_ASSIGN_RSHIFT = 75, // ">>=" + S_ASSIGN_LSHIFT = 76, // "<<=" + S_BITWISE_OR = 77, // "|" + S_BITWISE_AND = 78, // "&" + S_BITWISE_EXOR = 79, // "^" + S_ADD = 80, // "+" + S_SUB = 81, // "-" + S_MULT = 82, // "*" + S_DIV = 83, // "/" + S_MOD = 84, // "%" + S_FILE = 85, // "file path" + S_NAME = 86, // "identifier" + S_STRING = 87, // "string literal" + S_ISTRING = 88, // "localized string" + S_FLOAT = 89, // "float" + S_INTEGER = 90, // "int" + S_ADD_ARRAY = 91, // ADD_ARRAY + S_THEN = 92, // THEN + S_TERN = 93, // TERN + S_NEG = 94, // NEG + S_ANIMREF = 95, // ANIMREF + S_PREINC = 96, // PREINC + S_PREDEC = 97, // PREDEC + S_POSTINC = 98, // POSTINC + S_POSTDEC = 99, // POSTDEC + S_YYACCEPT = 100, // $accept + S_root = 101, // root + S_program = 102, // program + S_include = 103, // include + S_define = 104, // define + S_usingtree = 105, // usingtree + S_constant = 106, // constant + S_thread = 107, // thread + S_parameters = 108, // parameters + S_stmt = 109, // stmt + S_stmt_block = 110, // stmt_block + S_stmt_list = 111, // stmt_list + S_stmt_call = 112, // stmt_call + S_stmt_assign = 113, // stmt_assign + S_stmt_endon = 114, // stmt_endon + S_stmt_notify = 115, // stmt_notify + S_stmt_wait = 116, // stmt_wait + S_stmt_waittill = 117, // stmt_waittill + S_stmt_waittillmatch = 118, // stmt_waittillmatch + S_stmt_waittillframeend = 119, // stmt_waittillframeend + S_stmt_waitframe = 120, // stmt_waitframe + S_stmt_if = 121, // stmt_if + S_stmt_ifelse = 122, // stmt_ifelse + S_stmt_while = 123, // stmt_while + S_stmt_for = 124, // stmt_for + S_stmt_foreach = 125, // stmt_foreach + S_stmt_switch = 126, // stmt_switch + S_stmt_case = 127, // stmt_case + S_stmt_default = 128, // stmt_default + S_stmt_break = 129, // stmt_break + S_stmt_continue = 130, // stmt_continue + S_stmt_return = 131, // stmt_return + S_stmt_breakpoint = 132, // stmt_breakpoint + S_stmt_prof_begin = 133, // stmt_prof_begin + S_stmt_prof_end = 134, // stmt_prof_end + S_for_stmt = 135, // for_stmt + S_for_expr = 136, // for_expr + S_expr = 137, // expr + S_expr_assign = 138, // expr_assign + S_expr_compare = 139, // expr_compare + S_expr_ternary = 140, // expr_ternary + S_expr_binary = 141, // expr_binary + S_expr_primitive = 142, // expr_primitive + S_expr_call = 143, // expr_call + S_expr_call_thread = 144, // expr_call_thread + S_expr_call_childthread = 145, // expr_call_childthread + S_expr_call_function = 146, // expr_call_function + S_expr_call_pointer = 147, // expr_call_pointer + S_expr_arguments = 148, // expr_arguments + S_expr_arguments_filled = 149, // expr_arguments_filled + S_expr_arguments_empty = 150, // expr_arguments_empty + S_expr_function = 151, // expr_function + S_expr_add_array = 152, // expr_add_array + S_expr_array = 153, // expr_array + S_expr_field = 154, // expr_field + S_expr_size = 155, // expr_size + S_object = 156, // object + S_thisthread = 157, // thisthread + S_empty_array = 158, // empty_array + S_undefined = 159, // undefined + S_game = 160, // game + S_self = 161, // self + S_anim = 162, // anim + S_level = 163, // level + S_animation = 164, // animation + S_animtree = 165, // animtree + S_name = 166, // name + S_file = 167, // file + S_istring = 168, // istring + S_string = 169, // string + S_vector = 170, // vector + S_neg_float = 171, // neg_float + S_neg_integer = 172, // neg_integer + S_float = 173, // float + S_integer = 174, // integer + S_false = 175, // false + S_true = 176 // true }; }; @@ -1023,6 +1029,7 @@ namespace xsk { namespace gsc { namespace h2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2117,6 +2124,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3241,6 +3249,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3856,6 +3879,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4290,8 +4328,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1646, ///< Last index in yytable_. - yynnts_ = 76, ///< Number of nonterminal symbols. + yylast_ = 1842, ///< Last index in yytable_. + yynnts_ = 77, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4367,6 +4405,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4647,6 +4686,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4913,7 +4953,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::h2 -#line 4917 "parser.hpp" +#line 4957 "parser.hpp" diff --git a/src/iw5/xsk/compiler.cpp b/src/iw5/xsk/compiler.cpp index c6bb21ed..c6a4a0c1 100644 --- a/src/iw5/xsk/compiler.cpp +++ b/src/iw5/xsk/compiler.cpp @@ -403,7 +403,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -459,7 +459,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -534,7 +534,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -746,6 +746,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -843,6 +844,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/iw5/xsk/compiler.hpp b/src/iw5/xsk/compiler.hpp index e2b96739..a1acfb47 100644 --- a/src/iw5/xsk/compiler.hpp +++ b/src/iw5/xsk/compiler.hpp @@ -67,6 +67,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw5/xsk/decompiler.cpp b/src/iw5/xsk/decompiler.cpp index a00a2cdf..ecce2c7f 100644 --- a/src/iw5/xsk/decompiler.cpp +++ b/src/iw5/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1827,6 +1835,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1910,6 +1919,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3000,6 +3032,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3100,6 +3133,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/iw5/xsk/decompiler.hpp b/src/iw5/xsk/decompiler.hpp index f4b5e0fb..b1986fc5 100644 --- a/src/iw5/xsk/decompiler.hpp +++ b/src/iw5/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw5/xsk/lexer.cpp b/src/iw5/xsk/lexer.cpp index c509172c..be25637b 100644 --- a/src/iw5/xsk/lexer.cpp +++ b/src/iw5/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 99 -#define YY_END_OF_BUFFER 100 +#define YY_NUM_RULES 100 +#define YY_END_OF_BUFFER 101 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,40 +562,40 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[300] = +static const flex_int16_t yy_accept[301] = { 0, - 0, 0, 0, 0, 0, 0, 100, 98, 1, 2, - 87, 98, 98, 86, 90, 98, 48, 49, 84, 82, - 54, 83, 55, 85, 97, 57, 58, 71, 81, 72, - 93, 52, 53, 91, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 50, 89, 51, 88, 5, 6, 5, 9, 10, 9, - 68, 0, 95, 0, 0, 0, 0, 77, 0, 66, - 0, 79, 0, 0, 75, 59, 73, 60, 74, 96, - 0, 8, 4, 3, 76, 96, 97, 0, 0, 56, - 63, 69, 67, 70, 64, 93, 80, 93, 93, 93, + 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, + 88, 99, 99, 87, 91, 99, 48, 49, 85, 83, + 54, 84, 55, 86, 98, 57, 58, 72, 82, 73, + 59, 94, 52, 53, 92, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 50, 90, 51, 89, 5, 6, 5, 9, 10, + 9, 69, 0, 96, 0, 0, 0, 0, 78, 0, + 67, 0, 80, 0, 0, 76, 60, 74, 61, 75, + 97, 0, 8, 4, 3, 77, 97, 98, 0, 0, + 56, 64, 70, 68, 71, 65, 94, 81, 94, 94, - 93, 93, 93, 93, 93, 93, 93, 93, 24, 29, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 78, 65, 7, 11, 0, 95, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 95, 0, 96, - 0, 3, 96, 96, 92, 61, 62, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 27, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 0, 0, 0, 0, 94, 0, 0, 94, 0, - 0, 46, 93, 39, 31, 93, 93, 93, 25, 93, - 93, 93, 44, 93, 93, 93, 93, 45, 93, 93, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 24, + 29, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 79, 66, 7, 11, 0, 96, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, + 97, 0, 3, 97, 97, 93, 62, 63, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 27, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 0, 0, 0, 0, 95, 0, 0, 95, + 0, 0, 46, 94, 39, 31, 94, 94, 94, 25, + 94, 94, 94, 44, 94, 94, 94, 94, 45, 94, - 93, 40, 93, 20, 93, 0, 0, 0, 43, 33, - 93, 93, 93, 18, 41, 93, 47, 93, 93, 93, - 93, 93, 93, 93, 93, 26, 0, 0, 0, 93, - 93, 93, 93, 93, 19, 93, 93, 35, 30, 93, - 36, 93, 93, 0, 0, 0, 93, 93, 93, 32, - 28, 93, 93, 93, 93, 93, 0, 15, 0, 93, - 93, 34, 93, 14, 93, 93, 21, 17, 0, 93, - 93, 93, 93, 42, 93, 93, 0, 12, 93, 13, - 38, 93, 93, 0, 37, 93, 93, 0, 93, 93, - 0, 93, 22, 0, 93, 16, 93, 23, 0 + 94, 94, 40, 94, 20, 94, 0, 0, 0, 43, + 33, 94, 94, 94, 18, 41, 94, 47, 94, 94, + 94, 94, 94, 94, 94, 94, 26, 0, 0, 0, + 94, 94, 94, 94, 94, 19, 94, 94, 35, 30, + 94, 36, 94, 94, 0, 0, 0, 94, 94, 94, + 32, 28, 94, 94, 94, 94, 94, 0, 15, 0, + 94, 94, 34, 94, 14, 94, 94, 21, 17, 0, + 94, 94, 94, 94, 42, 94, 94, 0, 12, 94, + 13, 38, 94, 94, 0, 37, 94, 94, 0, 94, + 94, 0, 94, 22, 0, 94, 16, 94, 23, 0 } ; @@ -607,14 +607,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -631,238 +631,238 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[314] = +static const flex_int16_t yy_base[315] = { 0, - 0, 0, 54, 55, 56, 57, 564, 565, 565, 565, - 541, 56, 35, 540, 63, 55, 565, 565, 539, 56, - 565, 55, 56, 74, 71, 541, 565, 54, 537, 70, - 532, 565, 565, 535, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 565, 96, 565, 565, 565, 565, 539, 565, 565, 538, - 565, 120, 565, 127, 512, 511, 506, 565, 122, 565, - 115, 565, 126, 140, 565, 565, 565, 565, 565, 120, - 513, 565, 565, 0, 565, 121, 141, 135, 0, 565, - 528, 565, 565, 565, 527, 522, 565, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 565, 566, 566, 566, + 542, 57, 34, 541, 66, 60, 566, 566, 540, 57, + 566, 63, 48, 74, 74, 542, 566, 55, 538, 59, + 566, 532, 566, 566, 536, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 566, 100, 566, 566, 566, 566, 540, 566, 566, + 539, 566, 120, 566, 136, 512, 511, 506, 566, 122, + 566, 123, 566, 126, 143, 566, 566, 566, 566, 566, + 118, 513, 566, 566, 0, 566, 125, 140, 132, 0, + 566, 529, 566, 566, 566, 528, 522, 566, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 521, 520, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 565, 565, 565, 565, 189, 197, 202, 507, 512, - 505, 204, 565, 207, 205, 208, 209, 210, 213, 565, - 490, 0, 202, 565, 515, 565, 565, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 499, 499, 496, 268, 269, 276, 271, 273, 283, - 503, 510, 261, 509, 508, 258, 263, 262, 507, 270, - 272, 277, 506, 278, 279, 282, 287, 505, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 521, + 520, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 566, 566, 566, 566, 186, 204, 211, 507, + 512, 505, 205, 566, 212, 202, 215, 210, 213, 217, + 566, 490, 0, 205, 566, 515, 566, 566, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 499, 499, 496, 273, 274, 277, 275, 276, + 284, 503, 510, 104, 509, 508, 262, 268, 264, 507, + 265, 270, 279, 506, 271, 282, 287, 288, 505, 289, - 293, 504, 291, 294, 296, 482, 480, 491, 565, 298, - 299, 301, 305, 500, 499, 302, 498, 303, 313, 307, - 314, 322, 324, 326, 327, 497, 477, 488, 491, 312, - 330, 310, 334, 335, 493, 336, 337, 492, 491, 340, - 490, 342, 343, 481, 480, 483, 348, 345, 354, 486, - 485, 351, 349, 363, 365, 352, 476, 565, 467, 367, - 368, 482, 369, 481, 370, 372, 375, 565, 468, 377, - 378, 380, 385, 466, 386, 387, 403, 417, 388, 416, - 414, 389, 394, 389, 408, 397, 400, 331, 399, 402, - 339, 401, 309, 259, 403, 565, 404, 200, 565, 445, + 272, 292, 504, 294, 297, 298, 482, 480, 491, 566, + 299, 300, 304, 301, 500, 499, 302, 498, 305, 311, + 309, 312, 313, 322, 314, 327, 497, 477, 488, 491, + 328, 331, 310, 333, 335, 493, 336, 334, 492, 491, + 337, 490, 341, 338, 481, 480, 483, 343, 340, 353, + 486, 485, 348, 360, 362, 363, 351, 476, 566, 467, + 364, 366, 482, 369, 481, 368, 375, 376, 566, 455, + 373, 379, 377, 388, 419, 378, 386, 403, 417, 389, + 416, 414, 398, 384, 392, 412, 392, 400, 368, 401, + 399, 341, 403, 347, 193, 404, 566, 408, 159, 566, - 450, 455, 460, 463, 465, 470, 475, 480, 485, 490, - 84, 495, 500 + 447, 452, 457, 462, 465, 467, 472, 477, 482, 487, + 492, 68, 497, 502 } ; -static const flex_int16_t yy_def[314] = +static const flex_int16_t yy_def[315] = { 0, - 299, 1, 300, 300, 301, 301, 299, 299, 299, 299, - 299, 302, 299, 299, 299, 303, 299, 299, 299, 299, - 299, 299, 299, 299, 304, 299, 299, 299, 299, 299, - 305, 299, 299, 299, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 302, 299, 306, 299, 299, 299, 299, 307, 299, - 308, 299, 303, 309, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 310, 299, 299, 304, 304, 311, 299, - 299, 299, 299, 299, 299, 305, 299, 305, 305, 305, + 300, 1, 301, 301, 302, 302, 300, 300, 300, 300, + 300, 303, 300, 300, 300, 304, 300, 300, 300, 300, + 300, 300, 300, 300, 305, 300, 300, 300, 300, 300, + 300, 306, 300, 300, 300, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 303, 300, 307, 300, 300, 300, 300, 308, + 300, 309, 300, 304, 310, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 311, 300, 300, 305, 305, 312, + 300, 300, 300, 300, 300, 300, 306, 300, 306, 306, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 299, 302, 302, 306, 299, 299, - 299, 307, 299, 312, 308, 313, 303, 303, 309, 299, - 299, 310, 299, 299, 311, 299, 299, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 307, 307, 312, 308, 308, 313, - 299, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 300, 303, 303, 307, 300, + 300, 300, 308, 300, 313, 309, 314, 304, 304, 310, + 300, 300, 311, 300, 300, 312, 300, 300, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 308, 308, 313, 309, 309, + 314, 300, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 305, 305, 305, 305, 305, 299, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 299, 299, 299, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 299, 305, 305, 305, - 305, 305, 305, 299, 305, 305, 305, 299, 305, 305, - 299, 305, 305, 299, 305, 299, 305, 305, 0, 299, + 306, 306, 306, 306, 306, 306, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 300, 300, 300, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 300, 306, 306, + 306, 306, 306, 306, 300, 306, 306, 306, 300, 306, + 306, 300, 306, 306, 300, 306, 300, 306, 306, 0, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300 } ; -static const flex_int16_t yy_nxt[622] = +static const flex_int16_t yy_nxt[624] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 299, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 300, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 296, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 297, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 89, 226, - 89, 220, 89, 234, 89, 89, 222, 89, 89, 89, - 225, 230, 232, 236, 233, 231, 237, 89, 238, 89, - 239, 89, 89, 235, 247, 89, 241, 249, 240, 89, - 89, 89, 89, 242, 243, 89, 248, 89, 89, 252, - 89, 251, 294, 89, 89, 291, 89, 89, 253, 89, - 250, 264, 256, 255, 254, 260, 263, 262, 89, 261, - 89, 267, 89, 89, 89, 89, 265, 89, 266, 273, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 227, 221, 235, 90, 90, 90, 90, 90, + 90, 234, 237, 231, 226, 238, 233, 232, 90, 240, + 241, 239, 243, 90, 90, 242, 236, 90, 250, 90, + 90, 90, 90, 90, 90, 244, 90, 90, 249, 90, + 253, 248, 252, 90, 90, 295, 254, 90, 257, 90, + 251, 261, 255, 256, 264, 262, 90, 263, 90, 90, + 90, 268, 90, 265, 90, 90, 266, 267, 274, 90, - 89, 271, 89, 89, 274, 89, 272, 279, 270, 275, - 89, 89, 89, 89, 89, 276, 283, 281, 286, 89, - 285, 280, 89, 278, 89, 89, 89, 89, 89, 89, - 282, 290, 292, 89, 295, 288, 298, 289, 293, 89, - 287, 89, 89, 284, 297, 55, 55, 55, 55, 55, - 58, 58, 58, 58, 58, 62, 62, 62, 62, 62, - 73, 73, 73, 73, 73, 88, 88, 88, 96, 96, - 126, 126, 126, 126, 126, 132, 132, 132, 132, 132, - 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, - 142, 89, 142, 142, 142, 175, 175, 175, 175, 175, + 272, 90, 90, 90, 90, 90, 271, 273, 275, 280, + 90, 276, 90, 292, 90, 90, 284, 277, 90, 281, + 279, 282, 286, 283, 90, 90, 90, 90, 287, 90, + 90, 288, 291, 290, 90, 293, 294, 296, 90, 289, + 90, 299, 90, 90, 285, 90, 298, 56, 56, 56, + 56, 56, 59, 59, 59, 59, 59, 63, 63, 63, + 63, 63, 74, 74, 74, 74, 74, 89, 89, 89, + 97, 97, 127, 127, 127, 127, 127, 133, 133, 133, + 133, 133, 136, 136, 136, 136, 136, 138, 138, 138, + 138, 138, 143, 278, 143, 143, 143, 176, 176, 176, - 178, 178, 178, 178, 178, 277, 89, 89, 269, 268, - 89, 89, 259, 258, 257, 89, 89, 89, 89, 246, - 245, 244, 89, 89, 89, 89, 229, 228, 227, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 299, 7, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 176, 176, 179, 179, 179, 179, 179, 90, 90, 270, + 269, 90, 90, 260, 259, 258, 90, 90, 90, 90, + 247, 246, 245, 90, 90, 90, 90, 230, 229, 228, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 300, 7, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; -static const flex_int16_t yy_chk[622] = +static const flex_int16_t yy_chk[624] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 311, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 312, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 299, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 298, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 294, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 295, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 218, 205, - 213, 197, 220, 216, 293, 232, 200, 230, 219, 221, - 204, 210, 212, 219, 213, 211, 219, 222, 220, 223, - 221, 224, 225, 218, 230, 231, 223, 232, 222, 233, - 234, 236, 237, 224, 225, 240, 231, 242, 243, 236, - 248, 234, 291, 247, 253, 288, 252, 256, 237, 249, - 233, 253, 243, 242, 240, 247, 252, 249, 254, 248, - 255, 256, 260, 261, 263, 265, 254, 266, 255, 265, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 206, 211, 212, 214, 217, 204, + 213, 219, 206, 198, 217, 221, 233, 220, 222, 223, + 225, 214, 220, 211, 205, 220, 213, 212, 224, 222, + 223, 221, 225, 226, 231, 224, 219, 232, 233, 234, + 238, 235, 237, 241, 244, 226, 249, 243, 232, 248, + 237, 231, 235, 294, 253, 292, 238, 257, 244, 250, + 234, 248, 241, 243, 253, 249, 254, 250, 255, 256, + 261, 257, 262, 254, 266, 264, 255, 256, 266, 271, - 267, 261, 270, 271, 266, 272, 263, 271, 260, 267, - 273, 275, 276, 279, 282, 267, 276, 273, 282, 283, - 279, 272, 286, 270, 289, 287, 292, 290, 295, 297, - 275, 287, 289, 285, 292, 284, 297, 286, 290, 281, - 283, 280, 278, 277, 295, 300, 300, 300, 300, 300, - 301, 301, 301, 301, 301, 302, 302, 302, 302, 302, - 303, 303, 303, 303, 303, 304, 304, 304, 305, 305, - 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, - 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, - 310, 274, 310, 310, 310, 312, 312, 312, 312, 312, + 262, 267, 268, 273, 276, 272, 261, 264, 267, 272, + 284, 268, 277, 289, 274, 280, 277, 268, 287, 273, + 271, 274, 280, 276, 283, 291, 288, 290, 283, 293, + 296, 284, 288, 287, 298, 290, 291, 293, 286, 285, + 282, 298, 281, 279, 278, 275, 296, 301, 301, 301, + 301, 301, 302, 302, 302, 302, 302, 303, 303, 303, + 303, 303, 304, 304, 304, 304, 304, 305, 305, 305, + 306, 306, 307, 307, 307, 307, 307, 308, 308, 308, + 308, 308, 309, 309, 309, 309, 309, 310, 310, 310, + 310, 310, 311, 270, 311, 311, 311, 313, 313, 313, - 313, 313, 313, 313, 313, 269, 264, 262, 259, 257, - 251, 250, 246, 245, 244, 241, 239, 238, 235, 229, - 228, 227, 226, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 313, 313, 314, 314, 314, 314, 314, 265, 263, 260, + 258, 252, 251, 247, 246, 245, 242, 240, 239, 236, + 230, 229, 228, 227, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; /* The intent behind this definition is that it'll catch @@ -1180,13 +1180,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 299 ); + while ( yy_current_state != 300 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1502,218 +1502,223 @@ YY_RULE_SETUP case 59: YY_RULE_SETUP #line 106 "lexer.lpp" -{ return iw5::parser::make_INCREMENT(loc); } +{ return iw5::parser::make_QMARK(loc); } YY_BREAK case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return iw5::parser::make_DECREMENT(loc); } +{ return iw5::parser::make_INCREMENT(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_LSHIFT(loc); } +{ return iw5::parser::make_DECREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_RSHIFT(loc); } +{ return iw5::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return iw5::parser::make_LSHIFT(loc); } +{ return iw5::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return iw5::parser::make_RSHIFT(loc); } +{ return iw5::parser::make_LSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return iw5::parser::make_OR(loc); } +{ return iw5::parser::make_RSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return iw5::parser::make_AND(loc); } +{ return iw5::parser::make_OR(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return iw5::parser::make_EQUALITY(loc); } +{ return iw5::parser::make_AND(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return iw5::parser::make_INEQUALITY(loc); } +{ return iw5::parser::make_EQUALITY(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return iw5::parser::make_LESS_EQUAL(loc); } +{ return iw5::parser::make_INEQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return iw5::parser::make_GREATER_EQUAL(loc); } +{ return iw5::parser::make_LESS_EQUAL(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return iw5::parser::make_LESS(loc); } +{ return iw5::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return iw5::parser::make_GREATER(loc); } +{ return iw5::parser::make_LESS(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_ADD(loc); } +{ return iw5::parser::make_GREATER(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_SUB(loc); } +{ return iw5::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_MULT(loc); } +{ return iw5::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_DIV(loc); } +{ return iw5::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_MOD(loc); } +{ return iw5::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return iw5::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return iw5::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return iw5::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return iw5::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return iw5::parser::make_ASSIGN(loc); } +{ return iw5::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return iw5::parser::make_ADD(loc); } +{ return iw5::parser::make_ASSIGN(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return iw5::parser::make_SUB(loc); } +{ return iw5::parser::make_ADD(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return iw5::parser::make_MULT(loc); } +{ return iw5::parser::make_SUB(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return iw5::parser::make_DIV(loc); } +{ return iw5::parser::make_MULT(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return iw5::parser::make_MOD(loc); } +{ return iw5::parser::make_DIV(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return iw5::parser::make_NOT(loc); } +{ return iw5::parser::make_MOD(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return iw5::parser::make_COMPLEMENT(loc); } +{ return iw5::parser::make_NOT(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return iw5::parser::make_BITWISE_OR(loc); } +{ return iw5::parser::make_COMPLEMENT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return iw5::parser::make_BITWISE_AND(loc); } +{ return iw5::parser::make_BITWISE_OR(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return iw5::parser::make_BITWISE_EXOR(loc); } +{ return iw5::parser::make_BITWISE_AND(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return iw5::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return iw5::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return iw5::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return iw5::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 94: -/* rule 94 can match eol */ YY_RULE_SETUP #line 141 "lexer.lpp" -{ return iw5::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return iw5::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 95: /* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return iw5::parser::make_STRING(std::string(yytext), loc); } +{ return iw5::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 96: +/* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return iw5::parser::make_FLOAT(std::string(yytext), loc); } +{ return iw5::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 97: YY_RULE_SETUP #line 144 "lexer.lpp" +{ return iw5::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 145 "lexer.lpp" { return iw5::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 145 "lexer.lpp" +#line 146 "lexer.lpp" { return iw5::parser::make_IW5EOF(loc); } YY_BREAK -case 98: -/* rule 98 can match eol */ +case 99: +/* rule 99 can match eol */ YY_RULE_SETUP -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { throw iw5::parser::syntax_error(loc, "bad token: '" + std::string(yytext) + "'"); } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" ECHO; YY_BREAK -#line 1716 "lexer.cpp" +#line 1721 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2011,7 +2016,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2040,11 +2045,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 299); + yy_is_jam = (yy_current_state == 300); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2843,6 +2848,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" diff --git a/src/iw5/xsk/lexer.hpp b/src/iw5/xsk/lexer.hpp index e1848bc6..c4a60c54 100644 --- a/src/iw5/xsk/lexer.hpp +++ b/src/iw5/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/iw5/xsk/parser.cpp b/src/iw5/xsk/parser.cpp index a4c8ba85..e096f516 100644 --- a/src/iw5/xsk/parser.cpp +++ b/src/iw5/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -526,6 +527,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -788,6 +790,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1049,6 +1052,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1565,6 +1569,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1785,1195 +1790,1207 @@ namespace xsk { namespace gsc { namespace iw5 { switch (yyn) { case 2: // root: program -#line 237 "parser.ypp" +#line 241 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1791 "parser.cpp" +#line 1796 "parser.cpp" break; case 3: // root: %empty -#line 238 "parser.ypp" +#line 242 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1797 "parser.cpp" +#line 1802 "parser.cpp" break; case 4: // program: program include -#line 243 "parser.ypp" +#line 247 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1803 "parser.cpp" +#line 1808 "parser.cpp" break; case 5: // program: program define -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1809 "parser.cpp" +#line 1814 "parser.cpp" break; case 6: // program: include -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1815 "parser.cpp" +#line 1820 "parser.cpp" break; case 7: // program: define -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1821 "parser.cpp" +#line 1826 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 254 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1827 "parser.cpp" +#line 1832 "parser.cpp" break; case 9: // define: usingtree -#line 258 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1833 "parser.cpp" +#line 1838 "parser.cpp" break; case 10: // define: constant -#line 259 "parser.ypp" +#line 263 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1839 "parser.cpp" +#line 1844 "parser.cpp" break; case 11: // define: thread -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1845 "parser.cpp" +#line 1850 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 265 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1851 "parser.cpp" +#line 1856 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 270 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1857 "parser.cpp" +#line 1862 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 275 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1863 "parser.cpp" +#line 1868 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 280 "parser.ypp" +#line 284 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1869 "parser.cpp" +#line 1874 "parser.cpp" break; case 16: // parameters: name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1875 "parser.cpp" +#line 1880 "parser.cpp" break; case 17: // parameters: %empty -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1881 "parser.cpp" +#line 1886 "parser.cpp" break; case 18: // stmt: stmt_block -#line 288 "parser.ypp" +#line 292 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1887 "parser.cpp" +#line 1892 "parser.cpp" break; case 19: // stmt: stmt_call -#line 289 "parser.ypp" +#line 293 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1893 "parser.cpp" +#line 1898 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1899 "parser.cpp" +#line 1904 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1905 "parser.cpp" +#line 1910 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1911 "parser.cpp" +#line 1916 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1917 "parser.cpp" +#line 1922 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1923 "parser.cpp" +#line 1928 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1929 "parser.cpp" +#line 1934 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1935 "parser.cpp" +#line 1940 "parser.cpp" break; case 27: // stmt: stmt_if -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1941 "parser.cpp" +#line 1946 "parser.cpp" break; case 28: // stmt: stmt_ifelse -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1947 "parser.cpp" +#line 1952 "parser.cpp" break; case 29: // stmt: stmt_while -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1953 "parser.cpp" +#line 1958 "parser.cpp" break; case 30: // stmt: stmt_for -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1959 "parser.cpp" +#line 1964 "parser.cpp" break; case 31: // stmt: stmt_foreach -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 32: // stmt: stmt_switch -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 33: // stmt: stmt_case -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 34: // stmt: stmt_default -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 35: // stmt: stmt_break -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 36: // stmt: stmt_continue -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 37: // stmt: stmt_return -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 38: // stmt: stmt_breakpoint -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 39: // stmt: stmt_prof_begin -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 40: // stmt: stmt_prof_end -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 41: // stmt_block: "{" stmt_list "}" -#line 314 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 42: // stmt_block: "{" "}" -#line 315 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 43: // stmt_list: stmt_list stmt -#line 320 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 44: // stmt_list: stmt -#line 322 "parser.ypp" +#line 326 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 45: // stmt_call: expr_call ";" -#line 327 "parser.ypp" +#line 331 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 46: // stmt_call: expr_call_thread ";" -#line 329 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 47: // stmt_assign: expr_assign ";" -#line 334 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 48: // stmt_endon: object "endon" "(" expr ")" ";" -#line 339 "parser.ypp" +#line 343 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 49: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 344 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr ")" ";" -#line 346 "parser.ypp" +#line 350 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 51: // stmt_wait: "wait" expr ";" -#line 351 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 52: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 356 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 358 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 54: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 363 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 365 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 56: // stmt_waittillframeend: "waittillframeend" ";" -#line 370 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 57: // stmt_if: "if" "(" expr ")" stmt -#line 375 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 58: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 59: // stmt_while: "while" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 60: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 61: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 62: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 397 "parser.ypp" +#line 401 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 63: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 402 "parser.ypp" +#line 406 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 64: // stmt_case: "case" integer ":" -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 65: // stmt_case: "case" neg_integer ":" -#line 409 "parser.ypp" +#line 413 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 66: // stmt_case: "case" string ":" -#line 411 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 67: // stmt_default: "default" ":" -#line 416 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 68: // stmt_break: "break" ";" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 69: // stmt_continue: "continue" ";" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 70: // stmt_return: "return" expr ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 71: // stmt_return: "return" ";" -#line 433 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 72: // stmt_breakpoint: "breakpoint" ";" -#line 438 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 73: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 74: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 75: // for_stmt: expr_assign -#line 452 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 76: // for_stmt: %empty -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 77: // for_expr: expr -#line 457 "parser.ypp" +#line 461 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 78: // for_expr: %empty -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 79: // expr: expr_compare -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; - case 80: // expr: expr_binary -#line 463 "parser.ypp" + case 80: // expr: expr_ternary +#line 467 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; - case 81: // expr: expr_primitive -#line 464 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2265 "parser.cpp" - break; - - case 82: // expr_assign: "++" object + case 81: // expr: expr_binary #line 468 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2271 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2270 "parser.cpp" break; - case 83: // expr_assign: "--" object + case 82: // expr: expr_primitive #line 469 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2277 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2276 "parser.cpp" break; - case 84: // expr_assign: object "++" -#line 470 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2283 "parser.cpp" - break; - - case 85: // expr_assign: object "--" -#line 471 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2289 "parser.cpp" - break; - - case 86: // expr_assign: object "=" expr -#line 472 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2295 "parser.cpp" - break; - - case 87: // expr_assign: object "|=" expr + case 83: // expr_assign: "++" object #line 473 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2301 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2282 "parser.cpp" break; - case 88: // expr_assign: object "&=" expr + case 84: // expr_assign: "--" object #line 474 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2307 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2288 "parser.cpp" break; - case 89: // expr_assign: object "^=" expr + case 85: // expr_assign: object "++" #line 475 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2313 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2294 "parser.cpp" break; - case 90: // expr_assign: object "<<=" expr + case 86: // expr_assign: object "--" #line 476 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2319 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2300 "parser.cpp" break; - case 91: // expr_assign: object ">>=" expr + case 87: // expr_assign: object "=" expr #line 477 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2325 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2306 "parser.cpp" break; - case 92: // expr_assign: object "+=" expr + case 88: // expr_assign: object "|=" expr #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2331 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2312 "parser.cpp" break; - case 93: // expr_assign: object "-=" expr + case 89: // expr_assign: object "&=" expr #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2337 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2318 "parser.cpp" break; - case 94: // expr_assign: object "*=" expr + case 90: // expr_assign: object "^=" expr #line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2343 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2324 "parser.cpp" break; - case 95: // expr_assign: object "/=" expr + case 91: // expr_assign: object "<<=" expr #line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2349 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2330 "parser.cpp" break; - case 96: // expr_assign: object "%=" expr + case 92: // expr_assign: object ">>=" expr #line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2355 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2336 "parser.cpp" break; - case 97: // expr_compare: expr "||" expr + case 93: // expr_assign: object "+=" expr +#line 483 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2342 "parser.cpp" + break; + + case 94: // expr_assign: object "-=" expr +#line 484 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2348 "parser.cpp" + break; + + case 95: // expr_assign: object "*=" expr +#line 485 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2354 "parser.cpp" + break; + + case 96: // expr_assign: object "/=" expr #line 486 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2361 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2360 "parser.cpp" break; - case 98: // expr_compare: expr "&&" expr + case 97: // expr_assign: object "%=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2367 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2366 "parser.cpp" break; - case 99: // expr_compare: expr "==" expr -#line 488 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2373 "parser.cpp" - break; - - case 100: // expr_compare: expr "!=" expr -#line 489 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2379 "parser.cpp" - break; - - case 101: // expr_compare: expr "<=" expr -#line 490 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2385 "parser.cpp" - break; - - case 102: // expr_compare: expr ">=" expr + case 98: // expr_compare: expr "||" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2391 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2372 "parser.cpp" break; - case 103: // expr_compare: expr "<" expr + case 99: // expr_compare: expr "&&" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2397 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2378 "parser.cpp" break; - case 104: // expr_compare: expr ">" expr + case 100: // expr_compare: expr "==" expr #line 493 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2403 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2384 "parser.cpp" break; - case 105: // expr_binary: expr "|" expr + case 101: // expr_compare: expr "!=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2390 "parser.cpp" + break; + + case 102: // expr_compare: expr "<=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2396 "parser.cpp" + break; + + case 103: // expr_compare: expr ">=" expr +#line 496 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2402 "parser.cpp" + break; + + case 104: // expr_compare: expr "<" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2409 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2408 "parser.cpp" break; - case 106: // expr_binary: expr "&" expr + case 105: // expr_compare: expr ">" expr #line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2415 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2414 "parser.cpp" break; - case 107: // expr_binary: expr "^" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2421 "parser.cpp" - break; - - case 108: // expr_binary: expr "<<" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2427 "parser.cpp" - break; - - case 109: // expr_binary: expr ">>" expr -#line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2433 "parser.cpp" - break; - - case 110: // expr_binary: expr "+" expr + case 106: // expr_ternary: expr "?" expr ":" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2439 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2420 "parser.cpp" break; - case 111: // expr_binary: expr "-" expr -#line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2445 "parser.cpp" - break; - - case 112: // expr_binary: expr "*" expr -#line 504 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2451 "parser.cpp" - break; - - case 113: // expr_binary: expr "/" expr -#line 505 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2457 "parser.cpp" - break; - - case 114: // expr_binary: expr "%" expr + case 107: // expr_binary: expr "|" expr #line 506 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2463 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2426 "parser.cpp" break; - case 115: // expr_primitive: "(" expr ")" + case 108: // expr_binary: expr "&" expr +#line 507 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2432 "parser.cpp" + break; + + case 109: // expr_binary: expr "^" expr +#line 508 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2438 "parser.cpp" + break; + + case 110: // expr_binary: expr "<<" expr +#line 509 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2444 "parser.cpp" + break; + + case 111: // expr_binary: expr ">>" expr #line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2469 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2450 "parser.cpp" break; - case 116: // expr_primitive: "~" expr + case 112: // expr_binary: expr "+" expr #line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2475 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2456 "parser.cpp" break; - case 117: // expr_primitive: "!" expr + case 113: // expr_binary: expr "-" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2481 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2462 "parser.cpp" break; - case 118: // expr_primitive: expr_call + case 114: // expr_binary: expr "*" expr #line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2487 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2468 "parser.cpp" break; - case 119: // expr_primitive: expr_call_thread + case 115: // expr_binary: expr "/" expr #line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2493 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2474 "parser.cpp" break; - case 120: // expr_primitive: expr_call_childthread + case 116: // expr_binary: expr "%" expr #line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2499 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2480 "parser.cpp" break; - case 121: // expr_primitive: expr_function -#line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2505 "parser.cpp" - break; - - case 122: // expr_primitive: expr_add_array -#line 517 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2511 "parser.cpp" - break; - - case 123: // expr_primitive: expr_array -#line 518 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2517 "parser.cpp" - break; - - case 124: // expr_primitive: expr_field + case 117: // expr_primitive: "(" expr ")" #line 519 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2523 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2486 "parser.cpp" break; - case 125: // expr_primitive: expr_size + case 118: // expr_primitive: "~" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2529 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2492 "parser.cpp" break; - case 126: // expr_primitive: thisthread + case 119: // expr_primitive: "!" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2535 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2498 "parser.cpp" break; - case 127: // expr_primitive: empty_array + case 120: // expr_primitive: expr_call #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2541 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2504 "parser.cpp" break; - case 128: // expr_primitive: undefined + case 121: // expr_primitive: expr_call_thread #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2547 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2510 "parser.cpp" break; - case 129: // expr_primitive: game + case 122: // expr_primitive: expr_call_childthread #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2553 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2516 "parser.cpp" break; - case 130: // expr_primitive: self + case 123: // expr_primitive: expr_function #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2559 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2522 "parser.cpp" break; - case 131: // expr_primitive: anim + case 124: // expr_primitive: expr_add_array #line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2565 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2528 "parser.cpp" break; - case 132: // expr_primitive: level + case 125: // expr_primitive: expr_array #line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2571 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2534 "parser.cpp" break; - case 133: // expr_primitive: animation + case 126: // expr_primitive: expr_field #line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2577 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2540 "parser.cpp" break; - case 134: // expr_primitive: animtree + case 127: // expr_primitive: expr_size #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2583 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2546 "parser.cpp" break; - case 135: // expr_primitive: name + case 128: // expr_primitive: thisthread #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2589 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2552 "parser.cpp" break; - case 136: // expr_primitive: istring + case 129: // expr_primitive: empty_array #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2595 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2558 "parser.cpp" break; - case 137: // expr_primitive: string + case 130: // expr_primitive: undefined #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2601 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2564 "parser.cpp" break; - case 138: // expr_primitive: vector + case 131: // expr_primitive: game #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2607 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2570 "parser.cpp" break; - case 139: // expr_primitive: neg_float + case 132: // expr_primitive: self #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2613 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2576 "parser.cpp" break; - case 140: // expr_primitive: neg_integer + case 133: // expr_primitive: anim #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2619 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2582 "parser.cpp" break; - case 141: // expr_primitive: float + case 134: // expr_primitive: level #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2625 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2588 "parser.cpp" break; - case 142: // expr_primitive: integer + case 135: // expr_primitive: animation #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2631 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2594 "parser.cpp" break; - case 143: // expr_primitive: false + case 136: // expr_primitive: animtree #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2637 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2600 "parser.cpp" break; - case 144: // expr_primitive: true + case 137: // expr_primitive: name #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2643 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2606 "parser.cpp" break; - case 145: // expr_call: expr_call_function + case 138: // expr_primitive: istring +#line 540 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2612 "parser.cpp" + break; + + case 139: // expr_primitive: string +#line 541 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2618 "parser.cpp" + break; + + case 140: // expr_primitive: vector +#line 542 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2624 "parser.cpp" + break; + + case 141: // expr_primitive: neg_float #line 543 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2649 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2630 "parser.cpp" break; - case 146: // expr_call: expr_call_pointer + case 142: // expr_primitive: neg_integer #line 544 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2655 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2636 "parser.cpp" break; - case 147: // expr_call: object expr_call_function + case 143: // expr_primitive: float #line 545 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2661 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2642 "parser.cpp" break; - case 148: // expr_call: object expr_call_pointer + case 144: // expr_primitive: integer #line 546 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2667 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2648 "parser.cpp" break; - case 149: // expr_call_thread: "thread" expr_call_function -#line 550 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2673 "parser.cpp" + case 145: // expr_primitive: false +#line 547 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2654 "parser.cpp" break; - case 150: // expr_call_thread: "thread" expr_call_pointer -#line 551 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2679 "parser.cpp" + case 146: // expr_primitive: true +#line 548 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2660 "parser.cpp" break; - case 151: // expr_call_thread: object "thread" expr_call_function + case 147: // expr_call: expr_call_function #line 552 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2685 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2666 "parser.cpp" break; - case 152: // expr_call_thread: object "thread" expr_call_pointer + case 148: // expr_call: expr_call_pointer #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2691 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2672 "parser.cpp" break; - case 153: // expr_call_childthread: "childthread" expr_call_function -#line 557 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2697 "parser.cpp" + case 149: // expr_call: object expr_call_function +#line 554 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2678 "parser.cpp" break; - case 154: // expr_call_childthread: "childthread" expr_call_pointer -#line 558 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2703 "parser.cpp" + case 150: // expr_call: object expr_call_pointer +#line 555 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2684 "parser.cpp" break; - case 155: // expr_call_childthread: object "childthread" expr_call_function + case 151: // expr_call_thread: "thread" expr_call_function #line 559 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2709 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2690 "parser.cpp" break; - case 156: // expr_call_childthread: object "childthread" expr_call_pointer + case 152: // expr_call_thread: "thread" expr_call_pointer #line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2715 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2696 "parser.cpp" break; - case 157: // expr_call_function: name "(" expr_arguments ")" -#line 565 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2721 "parser.cpp" + case 153: // expr_call_thread: object "thread" expr_call_function +#line 561 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2702 "parser.cpp" break; - case 158: // expr_call_function: file "::" name "(" expr_arguments ")" + case 154: // expr_call_thread: object "thread" expr_call_pointer +#line 562 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2708 "parser.cpp" + break; + + case 155: // expr_call_childthread: "childthread" expr_call_function +#line 566 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2714 "parser.cpp" + break; + + case 156: // expr_call_childthread: "childthread" expr_call_pointer #line 567 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2727 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2720 "parser.cpp" break; - case 159: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 572 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2733 "parser.cpp" + case 157: // expr_call_childthread: object "childthread" expr_call_function +#line 568 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2726 "parser.cpp" break; - case 160: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 158: // expr_call_childthread: object "childthread" expr_call_pointer +#line 569 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2732 "parser.cpp" + break; + + case 159: // expr_call_function: name "(" expr_arguments ")" #line 574 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2738 "parser.cpp" + break; + + case 160: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2744 "parser.cpp" + break; + + case 161: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 581 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2750 "parser.cpp" + break; + + case 162: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 583 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2739 "parser.cpp" +#line 2756 "parser.cpp" break; - case 161: // expr_arguments: expr_arguments_filled -#line 578 "parser.ypp" + case 163: // expr_arguments: expr_arguments_filled +#line 587 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2745 "parser.cpp" +#line 2762 "parser.cpp" break; - case 162: // expr_arguments: expr_arguments_empty -#line 579 "parser.ypp" + case 164: // expr_arguments: expr_arguments_empty +#line 588 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2751 "parser.cpp" +#line 2768 "parser.cpp" break; - case 163: // expr_arguments_filled: expr_arguments_filled "," expr -#line 584 "parser.ypp" + case 165: // expr_arguments_filled: expr_arguments_filled "," expr +#line 593 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2757 "parser.cpp" +#line 2774 "parser.cpp" break; - case 164: // expr_arguments_filled: expr -#line 586 "parser.ypp" + case 166: // expr_arguments_filled: expr +#line 595 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2763 "parser.cpp" +#line 2780 "parser.cpp" break; - case 165: // expr_arguments_empty: %empty -#line 591 "parser.ypp" + case 167: // expr_arguments_empty: %empty +#line 600 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2769 "parser.cpp" +#line 2786 "parser.cpp" break; - case 166: // expr_function: "::" name -#line 596 "parser.ypp" + case 168: // expr_function: "::" name +#line 605 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2775 "parser.cpp" +#line 2792 "parser.cpp" break; - case 167: // expr_function: file "::" name -#line 598 "parser.ypp" + case 169: // expr_function: file "::" name +#line 607 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2781 "parser.cpp" +#line 2798 "parser.cpp" break; - case 168: // expr_add_array: "[" expr_arguments_filled "]" -#line 603 "parser.ypp" + case 170: // expr_add_array: "[" expr_arguments_filled "]" +#line 612 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2787 "parser.cpp" +#line 2804 "parser.cpp" break; - case 169: // expr_array: object "[" expr "]" -#line 608 "parser.ypp" + case 171: // expr_array: object "[" expr "]" +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2793 "parser.cpp" +#line 2810 "parser.cpp" break; - case 170: // expr_field: object "." name -#line 613 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2799 "parser.cpp" - break; - - case 171: // expr_size: object ".size" -#line 618 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2805 "parser.cpp" - break; - - case 172: // object: expr_call + case 172: // expr_field: object "." name #line 622 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2811 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2816 "parser.cpp" break; - case 173: // object: expr_array -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2817 "parser.cpp" - break; - - case 174: // object: expr_field -#line 624 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2823 "parser.cpp" - break; - - case 175: // object: game -#line 625 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2829 "parser.cpp" - break; - - case 176: // object: self -#line 626 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2835 "parser.cpp" - break; - - case 177: // object: anim + case 173: // expr_size: object ".size" #line 627 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2841 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2822 "parser.cpp" break; - case 178: // object: level -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2847 "parser.cpp" + case 174: // object: expr_call +#line 631 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2828 "parser.cpp" break; - case 179: // object: name -#line 629 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2853 "parser.cpp" - break; - - case 180: // thisthread: "thisthread" + case 175: // object: expr_array #line 632 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2859 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2834 "parser.cpp" break; - case 181: // empty_array: "[" "]" + case 176: // object: expr_field #line 633 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2865 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2840 "parser.cpp" break; - case 182: // undefined: "undefined" + case 177: // object: game #line 634 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2871 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2846 "parser.cpp" break; - case 183: // game: "game" + case 178: // object: self #line 635 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2877 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2852 "parser.cpp" break; - case 184: // self: "self" + case 179: // object: anim #line 636 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2883 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2858 "parser.cpp" break; - case 185: // anim: "anim" + case 180: // object: level #line 637 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2889 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2864 "parser.cpp" break; - case 186: // level: "level" + case 181: // object: name #line 638 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2895 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2870 "parser.cpp" break; - case 187: // animation: "%" "identifier" -#line 639 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2901 "parser.cpp" - break; - - case 188: // animtree: "#animtree" -#line 640 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2907 "parser.cpp" - break; - - case 189: // name: "identifier" + case 182: // thisthread: "thisthread" #line 641 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2913 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2876 "parser.cpp" break; - case 190: // file: "file path" + case 183: // empty_array: "[" "]" #line 642 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2919 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2882 "parser.cpp" break; - case 191: // istring: "localized string" + case 184: // undefined: "undefined" #line 643 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2925 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2888 "parser.cpp" break; - case 192: // string: "string literal" + case 185: // game: "game" #line 644 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2931 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2894 "parser.cpp" break; - case 193: // vector: "(" expr "," expr "," expr ")" + case 186: // self: "self" #line 645 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2937 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2900 "parser.cpp" break; - case 194: // neg_float: "-" "float" + case 187: // anim: "anim" #line 646 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2943 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2906 "parser.cpp" break; - case 195: // neg_integer: "-" "int" + case 188: // level: "level" #line 647 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2949 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2912 "parser.cpp" break; - case 196: // float: "float" + case 189: // animation: "%" "identifier" #line 648 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2955 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2918 "parser.cpp" break; - case 197: // integer: "int" + case 190: // animtree: "#animtree" #line 649 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2961 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2924 "parser.cpp" break; - case 198: // false: "false" + case 191: // name: "identifier" #line 650 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 2967 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2930 "parser.cpp" break; - case 199: // true: "true" + case 192: // file: "file path" #line 651 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2936 "parser.cpp" + break; + + case 193: // istring: "localized string" +#line 652 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2942 "parser.cpp" + break; + + case 194: // string: "string literal" +#line 653 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2948 "parser.cpp" + break; + + case 195: // vector: "(" expr "," expr "," expr ")" +#line 654 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2954 "parser.cpp" + break; + + case 196: // neg_float: "-" "float" +#line 655 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2960 "parser.cpp" + break; + + case 197: // neg_integer: "-" "int" +#line 656 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2966 "parser.cpp" + break; + + case 198: // float: "float" +#line 657 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2972 "parser.cpp" + break; + + case 199: // integer: "int" +#line 658 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2978 "parser.cpp" + break; + + case 200: // false: "false" +#line 659 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 2984 "parser.cpp" + break; + + case 201: // true: "true" +#line 660 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 2973 "parser.cpp" +#line 2990 "parser.cpp" break; -#line 2977 "parser.cpp" +#line 2994 "parser.cpp" default: break; @@ -3163,28 +3180,29 @@ namespace xsk { namespace gsc { namespace iw5 { "else", "while", "for", "foreach", "in", "switch", "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", - "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "++", - "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", - "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", - "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", + "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", + "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", + "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", + "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", "int", "ADD_ARRAY", - "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", - "$accept", "root", "program", "include", "define", "usingtree", - "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", - "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", "stmt_wait", - "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", - "stmt_if", "stmt_ifelse", "stmt_while", "stmt_for", "stmt_foreach", - "stmt_switch", "stmt_case", "stmt_default", "stmt_break", - "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", - "stmt_prof_end", "for_stmt", "for_expr", "expr", "expr_assign", - "expr_compare", "expr_binary", "expr_primitive", "expr_call", - "expr_call_thread", "expr_call_childthread", "expr_call_function", - "expr_call_pointer", "expr_arguments", "expr_arguments_filled", - "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", - "expr_field", "expr_size", "object", "thisthread", "empty_array", - "undefined", "game", "self", "anim", "level", "animation", "animtree", - "name", "file", "istring", "string", "vector", "neg_float", - "neg_integer", "float", "integer", "false", "true", YY_NULLPTR + "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", + "POSTDEC", "$accept", "root", "program", "include", "define", + "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", + "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", + "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", + "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", + "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", + "stmt_prof_begin", "stmt_prof_end", "for_stmt", "for_expr", "expr", + "expr_assign", "expr_compare", "expr_ternary", "expr_binary", + "expr_primitive", "expr_call", "expr_call_thread", + "expr_call_childthread", "expr_call_function", "expr_call_pointer", + "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", + "expr_function", "expr_add_array", "expr_array", "expr_field", + "expr_size", "object", "thisthread", "empty_array", "undefined", "game", + "self", "anim", "level", "animation", "animtree", "name", "file", + "istring", "string", "vector", "neg_float", "neg_integer", "float", + "integer", "false", "true", YY_NULLPTR }; return yy_sname[yysymbol]; } @@ -3449,510 +3467,579 @@ namespace xsk { namespace gsc { namespace iw5 { } - const short parser::yypact_ninf_ = -240; + const short parser::yypact_ninf_ = -237; - const short parser::yytable_ninf_ = -180; + const short parser::yytable_ninf_ = -182; const short parser::yypact_[] = { - 7, -68, -9, -240, 43, 7, -240, -240, -240, -240, - -240, -30, -240, -1, -21, -240, -240, -240, -24, 787, - -240, -240, 15, -29, -240, -240, 79, 79, -240, 28, - -240, -240, -240, -240, -240, -240, -240, 787, 663, -24, - 787, 787, -59, -11, -240, -240, -240, 1345, -240, -240, - -240, 24, -240, -240, -240, -240, -240, -240, 35, 269, - -240, 361, -240, -240, -240, 474, 686, 748, 756, -240, - -240, 10, 27, -240, -240, -240, -240, -240, -240, -240, - -240, -240, 31, 36, -24, 33, -240, -240, 44, 38, - -240, -240, 52, 909, 663, -240, 1423, 1, -240, -240, - -240, -240, -240, -240, -240, 787, 787, 787, 787, 787, - 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, - 787, 787, 787, 79, 79, -240, 849, -24, -240, -240, - 787, -24, -240, 550, -240, -240, 787, -24, 787, -240, - 787, 1216, -240, 787, 77, 77, 1433, 942, 405, 405, - 200, 200, 200, 200, 985, 1474, 1464, -61, -61, -240, - -240, -240, -240, -240, -240, -240, 1255, -240, 46, 42, - -240, 57, 54, 67, 71, 787, 65, 76, 78, 81, - 82, 86, -38, 87, 90, 91, 725, -240, 416, 416, - -240, -240, 594, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, 92, 94, 95, -240, -240, - 468, -240, -240, -240, -240, 44, 1216, 57, 1294, 1332, - 103, 1423, -240, -240, 787, -240, 787, 787, 1379, -240, - 787, 787, 378, -24, 787, 48, 100, 102, 104, -240, - -240, -240, -240, 1392, -240, 29, 29, -240, -240, -240, - -240, -240, 112, 114, 122, 125, -240, -240, 787, 787, - 787, 787, 787, 787, 787, 787, 787, 787, 787, 116, - 787, 148, 150, 151, 162, -240, 1048, 1081, 155, -240, - 874, -10, 1091, -240, -240, -240, -240, 787, 787, 787, - 787, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, - 1423, 1423, 166, 1124, 787, -240, 157, 161, 638, 638, - 787, 787, -24, 36, 1134, 952, 995, 1038, 787, -240, - 171, -240, -240, 110, -240, 163, 1423, 1167, 193, -240, - 168, 172, 787, 173, 787, 174, 787, 175, -240, 638, - 378, 638, 787, -240, -240, 184, -240, 186, -240, 187, - -240, -240, 188, -240, 1177, 180, 189, 191, 638, 638, - -240, -240, -240, -240, -240 + 7, -62, -15, -237, 36, 7, -237, -237, -237, -237, + -237, -6, -237, -5, -48, -237, -237, -237, -36, 821, + -237, -237, 11, -10, -237, -237, -14, -14, -237, 20, + -237, -237, -237, -237, -237, -237, -237, 821, 695, -36, + 821, 821, -68, -27, -237, -237, -237, 1613, -237, -237, + -237, -237, 377, -237, -237, -237, -237, -237, -237, 401, + 438, -237, 469, -237, -237, -237, 718, 781, 789, 848, + -237, -237, 18, 19, -237, -237, -237, -237, -237, -237, + -237, -237, -237, 16, 32, -36, 33, -237, -237, 42, + 28, -237, -237, 39, 1013, 695, -237, 1696, -4, -237, + -237, -237, -237, -237, -237, -237, 821, 821, 821, 821, + 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 821, -14, -14, -237, 884, -36, + -237, -237, 821, -36, -237, 579, -237, -237, 821, -36, + 821, -237, 821, 1423, -237, 821, 1578, 29, 29, 1727, + 1737, 476, 476, 15, 15, 15, 15, 1768, 1809, 1778, + -28, -28, -237, -237, -237, -237, -237, -237, -237, 1463, + -237, 44, 46, -237, 47, 38, 54, 60, 821, 56, + 75, 76, 77, 82, 84, -61, 69, 79, 87, 758, + -237, 171, 171, -237, -237, 624, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 88, 89, + 92, -237, -237, 931, -237, -237, -237, -237, 42, 1423, + 47, 1503, 1542, 80, 1696, 821, -237, -237, 821, -237, + 821, 821, 1648, -237, 821, 821, 496, -36, 821, 53, + 114, 115, 116, -237, -237, -237, -237, 1683, -237, 4, + 4, -237, -237, -237, -237, -237, 127, 128, 129, 132, + -237, -237, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 83, 821, 133, 1696, 138, 140, 141, + -237, 1179, 1213, 134, -237, 977, -3, 1247, -237, -237, + -237, -237, 821, 821, 821, 821, 1696, 1696, 1696, 1696, + 1696, 1696, 1696, 1696, 1696, 1696, 1696, 145, 1281, 821, + -237, 136, 137, 669, 669, 821, 821, -36, 32, 1315, + 1057, 1101, 1145, 821, -237, 147, -237, -237, 174, -237, + 144, 1696, 1349, 179, -237, 153, 156, 821, 161, 821, + 167, 821, 163, -237, 669, 496, 669, 821, -237, -237, + 177, -237, 178, -237, 180, -237, -237, 182, -237, 1383, + 176, 181, 196, 669, 669, -237, -237, -237, -237, -237 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 189, 0, 2, 6, 7, 9, 10, - 11, 0, 190, 0, 0, 1, 4, 5, 17, 0, - 8, 192, 0, 0, 16, 188, 0, 0, 180, 0, - 199, 198, 182, 183, 184, 185, 186, 0, 0, 0, - 0, 0, 0, 0, 191, 196, 197, 0, 79, 80, - 81, 118, 119, 120, 145, 146, 121, 122, 123, 124, - 125, 0, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 0, 0, 0, 0, 149, 150, 0, 0, - 153, 154, 0, 0, 0, 181, 164, 0, 166, 117, - 116, 194, 195, 187, 13, 0, 0, 0, 0, 0, + 3, 0, 0, 191, 0, 2, 6, 7, 9, 10, + 11, 0, 192, 0, 0, 1, 4, 5, 17, 0, + 8, 194, 0, 0, 16, 190, 0, 0, 182, 0, + 201, 200, 184, 185, 186, 187, 188, 0, 0, 0, + 0, 0, 0, 0, 193, 198, 199, 0, 79, 80, + 81, 82, 120, 121, 122, 147, 148, 123, 124, 125, + 126, 127, 0, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 0, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 0, 0, 0, 0, 151, 152, 0, + 0, 155, 156, 0, 0, 0, 183, 166, 0, 168, + 119, 118, 196, 197, 189, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 147, 148, - 165, 0, 12, 0, 14, 15, 0, 0, 0, 115, - 0, 164, 168, 0, 108, 109, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 110, 111, 112, - 113, 114, 151, 152, 155, 156, 0, 170, 0, 161, - 162, 167, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 44, 18, 0, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 0, 172, 0, 173, 174, - 0, 175, 176, 177, 178, 179, 0, 0, 0, 0, - 0, 163, 169, 157, 165, 72, 165, 165, 0, 56, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 67, - 68, 69, 71, 0, 172, 82, 83, 41, 43, 47, - 45, 46, 0, 0, 0, 0, 84, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, + 149, 150, 167, 0, 12, 0, 14, 15, 0, 0, + 0, 117, 0, 166, 170, 0, 0, 110, 111, 98, + 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, + 112, 113, 114, 115, 116, 153, 154, 157, 158, 0, + 172, 0, 163, 164, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 0, 0, 0, 75, - 0, 0, 0, 66, 65, 64, 70, 0, 0, 0, - 0, 86, 92, 93, 94, 95, 96, 87, 88, 89, - 91, 90, 0, 0, 165, 158, 0, 0, 0, 0, - 78, 0, 0, 0, 0, 0, 0, 0, 165, 193, - 0, 73, 74, 57, 59, 0, 77, 0, 0, 63, - 0, 0, 165, 0, 165, 0, 165, 0, 159, 0, - 76, 0, 0, 48, 50, 0, 53, 0, 55, 0, - 160, 58, 0, 61, 0, 0, 0, 0, 0, 0, - 49, 52, 54, 60, 62 + 42, 0, 0, 44, 18, 0, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 0, 174, + 0, 175, 176, 0, 177, 178, 179, 180, 181, 0, + 0, 0, 0, 0, 165, 0, 171, 159, 167, 72, + 167, 167, 0, 56, 0, 0, 76, 0, 0, 0, + 0, 0, 0, 67, 68, 69, 71, 0, 174, 83, + 84, 41, 43, 47, 45, 46, 0, 0, 0, 0, + 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, + 51, 0, 0, 0, 75, 0, 0, 0, 66, 65, + 64, 70, 0, 0, 0, 0, 87, 93, 94, 95, + 96, 97, 88, 89, 90, 92, 91, 0, 0, 167, + 160, 0, 0, 0, 0, 78, 0, 0, 0, 0, + 0, 0, 0, 167, 195, 0, 73, 74, 57, 59, + 0, 77, 0, 0, 63, 0, 0, 167, 0, 167, + 0, 167, 0, 161, 0, 76, 0, 0, 48, 50, + 0, 53, 0, 55, 0, 162, 58, 0, 61, 0, + 0, 0, 0, 0, 0, 49, 52, 54, 60, 62 }; const short parser::yypgoto_[] = { - -240, -240, -240, 240, 243, -240, -240, -240, -240, -135, - -79, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -93, -240, 60, -239, -240, -240, - -240, -100, -110, -240, -25, -19, -212, -26, -240, -240, - -240, -43, 74, -240, 99, -240, -240, -240, 121, 156, - 178, 194, -240, -240, 0, 5, -240, 3, -240, -240, - 85, -240, 88, -240, -240 + -237, -237, -237, 189, 222, -237, -237, -237, -237, -135, + -80, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -126, -237, 37, -236, -237, -237, + -237, -237, -112, 78, -237, -25, -19, -229, -23, -237, + -237, -237, -22, 41, -237, 102, -237, -237, -237, 154, + 190, 195, 218, -237, -237, 0, 5, -237, -11, -237, + -237, 64, -237, 65, -237, -237 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 288, 335, 96, 215, 48, 49, - 50, 51, 52, 53, 54, 55, 168, 169, 170, 56, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 293, 340, 97, 218, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 171, 172, 173, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81 + 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 86, 90, 289, 134, 11, 13, 87, 91, 18, - 321, 83, 97, 1, 2, 12, 84, 22, 24, 120, - 121, 122, 282, 217, 283, 284, 88, 88, 101, 102, - 14, 89, 89, 216, 19, 322, 128, -179, -179, 98, - -179, 245, 129, 15, -179, 142, 143, 21, 20, 130, - 46, -172, -172, -179, -172, 82, -179, 258, -172, 29, - 3, 88, -173, -173, 21, -173, 89, -172, 97, -173, - -172, 92, 126, 103, 131, 127, 136, 133, -173, 47, - 132, -173, 217, 130, 135, 137, 233, 143, 254, 254, - 218, 3, 216, -179, -179, 138, 234, 93, 162, 164, - 99, 100, 330, 235, 163, 165, 236, -172, -172, 29, - 237, 289, 12, 3, 239, 240, 347, 241, -173, -173, - 242, 243, 85, 88, 88, 244, 349, 167, 89, 89, - 355, 171, 357, 225, 359, 249, 102, 227, 89, 250, - 251, 259, 254, 260, 261, 218, 218, 281, 293, 218, - 294, 297, 295, 298, 141, 118, 119, 120, 121, 122, - 312, 299, 12, 3, 300, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 333, 334, 246, 166, 314, 225, 225, - 315, 316, 225, 89, 89, 128, 226, 89, 228, 218, - 229, 129, 317, 231, 320, 328, 331, 219, 217, 217, - 332, 348, 350, 352, 361, 360, 363, 353, 216, 216, - 88, 354, 356, 358, 365, 89, 366, 367, 368, 370, - 128, 128, 220, 373, 374, 238, 129, 129, 371, 217, - 372, 217, 225, 291, 339, 16, 253, 89, 17, 216, - 254, 216, 105, 106, 221, 88, 88, 362, 217, 217, - 89, 89, 219, 219, 0, 128, 219, 247, 216, 216, - 248, 129, 0, 0, 0, 218, 218, 0, 118, 119, - 120, 121, 122, 0, 0, 0, 0, 255, 256, 222, - 88, 220, 0, 0, 0, 89, -174, -174, 0, -174, - 286, 287, 0, -174, 292, 0, 218, 218, 218, 221, - 221, 223, -174, 221, 0, -174, 219, 0, 225, 225, - 0, 0, 338, 89, 89, 218, 218, 224, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 0, - 313, 290, 0, 0, 222, 222, 0, 0, 222, 225, - 225, 225, -174, -174, 89, 89, 89, 324, 325, 326, - 327, 0, 0, 221, 0, 0, 223, 223, 225, 225, - 223, 0, 0, 89, 89, 0, 0, 0, 0, 0, - 336, 337, 224, 224, 0, 0, 224, 0, 123, 124, - 0, 29, 219, 219, 0, 125, 0, 0, 222, 0, - 0, 0, 0, 0, 126, 0, 0, 127, 29, 0, - 0, 0, 364, 33, 34, 35, 36, 220, 220, 0, - 223, 85, 0, 219, 219, 219, 0, 0, 188, 189, - 0, 0, 0, 0, 0, 0, 224, 0, 0, 221, - 221, 0, 219, 219, 12, 3, 29, 0, 220, 290, - 220, 33, 34, 35, 36, 0, 0, 105, 106, 85, - 0, 12, 3, 111, 112, 113, 114, 220, 220, 0, - 221, 221, 221, 0, 222, 222, 0, 262, 263, 0, - 264, 265, 0, 118, 119, 120, 121, 122, 0, 221, - 221, 0, 0, 0, 0, 123, 223, 223, 29, 12, - 3, -175, -175, 0, -175, 222, 222, 222, -175, 0, - 0, 126, 224, 224, 127, 0, 0, -175, 266, 267, - -175, 0, 0, 0, 222, 222, 0, 223, 223, 223, - 0, 0, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 224, 224, 224, 223, 223, 0, 0, - 0, 12, 3, 172, 173, 174, 0, -175, -175, 0, - 0, 175, 224, 224, 176, 177, 0, 178, 179, 180, - 0, 181, 182, 183, 184, 185, 186, 26, 0, 0, - 29, 0, 0, 0, 0, 33, 34, 35, 36, 0, - 0, 133, 187, 85, 0, 0, 0, 172, 173, 174, - 188, 189, 0, 0, 0, 175, 0, 0, 176, 177, - 0, 178, 179, 180, 0, 181, 182, 183, 184, 185, - 186, 26, 0, 0, 29, 0, 0, 0, 0, 33, - 34, 35, 36, 12, 3, 133, 257, 85, 0, 0, - 0, 172, 173, 174, 188, 189, 0, 0, 0, 175, - 0, 0, 176, 177, 0, 178, 179, 180, 0, 181, - 182, 183, 184, 185, 186, 26, 0, 0, 29, 0, - 0, 25, 0, 33, 34, 35, 36, 12, 3, 133, - 0, 85, 0, 0, 0, 0, 0, 0, 188, 189, - 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, - 35, 36, 37, 0, 0, 0, 94, 95, 0, 0, - 39, 0, 0, -176, -176, 0, -176, 0, 0, 0, - -176, 12, 3, 0, 0, 40, 41, 0, 0, -176, - 0, 0, -176, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, - 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, - 33, 34, 35, 36, 37, 0, 0, 0, 38, -176, - -176, 0, 39, 0, 252, -177, -177, 0, -177, 0, - 0, 0, -177, -178, -178, 0, -178, 40, 41, 0, - -178, -177, 0, 0, -177, 25, 0, 0, 0, -178, - 0, 0, -178, 0, 42, 0, 0, 43, 12, 3, - 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, - 38, -177, -177, 0, 39, 0, 0, 0, 0, -178, - -178, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 41, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, - 12, 3, 21, 44, 45, 46, 26, 27, 28, 29, - 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, - 0, 0, 94, 0, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 40, 41, 0, 0, 0, 0, 126, 0, 0, - 127, 0, 0, 0, 266, 267, 0, 0, 42, 0, - 0, 43, 12, 3, 21, 44, 45, 46, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 139, - 0, 0, 0, 0, 140, 0, 0, 12, 3, 0, - 0, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 115, 116, 117, 118, 119, 120, - 121, 122, 341, 0, 105, 106, 0, 342, 109, 110, - 111, 112, 113, 114, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 0, 0, 0, 115, 116, 117, - 118, 119, 120, 121, 122, 0, 0, 115, 116, 117, - 118, 119, 120, 121, 122, 343, 0, 105, 106, 0, - 344, 109, 110, 111, 112, 113, 114, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 0, 0, 0, - 0, 116, 117, 118, 119, 120, 121, 122, 0, 0, - 115, 116, 117, 118, 119, 120, 121, 122, 345, 0, - 0, 0, 0, 346, 0, 0, 0, 0, 318, 0, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 0, 0, 0, 115, 116, 117, 118, 119, 120, 121, - 122, 319, 0, 115, 116, 117, 118, 119, 120, 121, - 122, 323, 0, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 0, 0, 0, 115, 116, 117, 118, - 119, 120, 121, 122, 329, 0, 115, 116, 117, 118, - 119, 120, 121, 122, 340, 0, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 0, 0, 0, 115, - 116, 117, 118, 119, 120, 121, 122, 351, 0, 115, - 116, 117, 118, 119, 120, 121, 122, 369, 0, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 0, - 0, 0, 115, 116, 117, 118, 119, 120, 121, 122, - 0, 0, 115, 116, 117, 118, 119, 120, 121, 122, - 230, 0, 0, 0, 0, 0, 0, 0, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 0, 0, + 11, 87, 91, 22, 136, 11, 13, 88, 92, 287, + 294, 288, 289, 1, 2, 98, 29, 326, 24, 249, + 102, 103, 12, 219, 14, 21, 89, 89, 46, 86, + 84, 90, 90, 18, 29, 85, 15, 130, 21, 99, + 144, 145, 327, 131, 20, -181, -181, 128, -181, 3, + 129, 83, -181, 122, 123, 124, 47, 132, 104, 19, + 262, -181, 89, 93, -181, 134, 133, 90, 107, 108, + 12, 3, 98, 135, 94, 139, 138, 100, 101, 258, + 258, 132, 140, 219, 237, 137, 238, 239, 12, 3, + 335, 145, 3, 240, 120, 121, 122, 123, 124, 241, + 165, 167, -181, -181, 352, 243, 166, 168, 120, 121, + 122, 123, 124, 221, 244, 245, 246, 253, 360, 294, + 362, 247, 364, 248, 285, 89, 89, 317, 254, 170, + 90, 90, 143, 174, 258, 228, 255, 263, 264, 230, + 90, 265, 103, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 298, 299, 300, 169, 302, 303, 304, 221, + 221, 305, 319, 221, 250, 229, 222, 231, 320, 232, + 321, 322, 234, 325, 333, 336, 337, 353, 338, 339, + 354, 228, 228, 355, 16, 228, 90, 90, 130, 357, + 90, 29, 358, 365, 131, 359, 33, 34, 35, 36, + 361, 219, 219, 220, 86, 242, 363, 370, 371, 366, + 372, 368, 373, 89, 221, 375, 257, 17, 90, 367, + 376, 0, 222, 222, 130, 130, 222, 223, 378, 379, + 131, 131, 219, 258, 219, 377, 228, 296, 344, 251, + 252, 90, 0, 0, 0, 12, 3, 0, 0, 89, + 89, 219, 219, 0, 90, 90, 0, 0, 0, 0, + 130, 0, 286, 220, 0, 0, 131, 0, 0, 0, + 0, 291, 292, 0, 0, 297, 0, 222, 0, 224, + 0, 0, 0, 259, 260, 89, 0, 223, 0, 0, + 90, 221, 221, 0, 0, 0, 0, 0, 0, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 0, 318, 0, 228, 228, 225, 0, 343, 90, 90, + 226, 0, 221, 221, 221, 0, 0, 0, 0, 329, + 330, 331, 332, 0, 0, 224, 224, 0, 295, 224, + 0, 221, 221, 227, 228, 228, 228, 0, 0, 90, + 90, 90, 341, 342, 222, 222, 0, 0, 0, 0, + 0, 0, 0, 228, 228, 0, 0, 0, 90, 90, + 0, 225, 225, 0, 0, 225, 226, 226, 0, 0, + 226, 0, 0, 0, 369, 222, 222, 222, 0, 0, + 224, 220, 220, 0, -174, -174, 0, -174, 0, 227, + 227, -174, 0, 227, 222, 222, 0, 0, 0, 0, + -174, 0, 0, -174, 0, 223, 223, 0, -175, -175, + 0, -175, 220, 0, 220, -175, 225, 0, 0, 0, + 0, 226, 0, 0, -175, 0, 0, -175, 0, 0, + 0, 220, 220, 0, 0, 0, 223, 295, 223, 0, + 0, -174, -174, 0, 227, -176, -176, 0, -176, 0, + 0, 0, -176, 0, 0, 223, 223, 224, 224, 0, + 0, -176, 0, 0, -176, -175, -175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 126, 0, 29, + 0, 0, 0, 127, 0, 0, 0, 0, 224, 224, + 224, 0, 128, 225, 225, 129, 0, 0, 226, 226, + 0, 0, -176, -176, 0, 0, 29, 224, 224, 107, + 108, 33, 34, 35, 36, 113, 114, 115, 116, 86, + 0, 227, 227, 0, 225, 225, 225, 191, 192, 226, + 226, 226, 0, 12, 3, 120, 121, 122, 123, 124, + 0, 0, 0, 225, 225, 0, 0, 0, 226, 226, + 0, 0, 227, 227, 227, 0, 0, 0, 0, 0, + 12, 3, 175, 176, 177, 0, 0, 0, 0, 0, + 178, 227, 227, 179, 180, 0, 181, 182, 183, 0, + 184, 185, 186, 187, 188, 189, 26, 0, 0, 29, + 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, + 135, 190, 86, 0, 0, 0, 0, 175, 176, 177, + 191, 192, 0, 0, 0, 178, 0, 0, 179, 180, + 0, 181, 182, 183, 0, 184, 185, 186, 187, 188, + 189, 26, 0, 0, 29, 0, 0, 0, 0, 33, + 34, 35, 36, 12, 3, 135, 261, 86, 0, 0, + 0, 0, 175, 176, 177, 191, 192, 0, 0, 0, + 178, 0, 0, 179, 180, 0, 181, 182, 183, 0, + 184, 185, 186, 187, 188, 189, 26, 0, 0, 29, + 0, 0, 0, 25, 33, 34, 35, 36, 12, 3, + 135, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 191, 192, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, 96, + 0, 0, 39, 0, 0, -177, -177, 0, -177, 0, + 0, 0, -177, 12, 3, 0, 0, 0, 40, 41, + 0, -177, 0, 0, -177, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, + 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, + 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, + 0, 38, -177, -177, 0, 39, 0, 256, -178, -178, + 0, -178, 0, 0, 0, -178, -179, -179, 0, -179, + 0, 40, 41, -179, -178, 0, 0, -178, 0, 25, + 0, 0, -179, 0, 0, -179, 0, 0, 42, 0, + 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 0, 0, 0, 38, -178, -178, 0, 39, 0, + 0, 0, 0, -179, -179, -180, -180, 0, -180, 0, + 0, 0, -180, 0, 40, 41, 0, 0, 0, 0, + 0, -180, 25, 0, -180, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 43, 12, 3, 21, 44, 45, + 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, + 34, 35, 36, 37, 0, 0, 0, 95, 0, 0, + 0, 39, -180, -180, 0, 0, 0, 0, 0, 0, + 266, 267, 0, 268, 269, 0, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 125, 0, + 0, 29, 0, 0, 42, 0, 0, 43, 12, 3, + 21, 44, 45, 46, 128, 0, 0, 129, 0, 0, + 0, 0, 270, 271, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 29, 0, 0, + 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, + 128, 0, 0, 129, 0, 0, 0, 0, 270, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 116, 117, 118, 119, 120, 121, 122, 232, - 0, 0, 0, 0, 0, 0, 0, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 0, 0, 0, + 0, 0, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 141, 0, 0, 0, 0, 142, 0, + 0, 12, 3, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 346, 0, 0, + 0, 0, 347, 0, 0, 0, 0, 106, 0, 0, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 115, 116, 117, 118, 119, 120, 121, 122, 279, 0, - 0, 0, 0, 0, 0, 0, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, - 116, 117, 118, 119, 120, 121, 122, 280, 0, 0, - 0, 0, 0, 0, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 104, 0, 0, 105, 106, 107, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 348, 0, 0, 0, 0, 349, 0, 0, 0, + 0, 106, 0, 0, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 350, 0, 0, 0, 0, + 351, 0, 0, 0, 0, 106, 0, 0, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 106, + 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 324, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 328, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 106, 0, 0, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 334, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 106, 0, 0, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 117, 118, 119, + 120, 121, 122, 123, 124, 106, 0, 0, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, + 0, 117, 118, 119, 120, 121, 122, 123, 124, 106, + 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 374, 0, 117, 118, 119, 120, 121, + 122, 123, 124, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 233, 0, 0, + 0, 0, 0, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 236, 0, 0, + 0, 0, 0, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 283, 0, 0, + 0, 0, 0, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 284, 0, 0, + 0, 0, 106, 0, 0, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, + 119, 120, 121, 122, 123, 124, 235, 0, 106, 0, + 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 105, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, + 118, 119, 120, 121, 122, 123, 124, 290, 106, 0, + 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, + 123, 124, 301, 106, 0, 0, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 106, 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 0, 0, 0, 0, 0, - 115, 116, 117, 118, 119, 120, 121, 122, 285, 0, - 0, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 296, 0, 0, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 0, 0, 0, 0, 0, 115, 116, 117, - 118, 119, 120, 121, 122, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 105, 106, 0, 108, 109, - 110, 111, 112, 113, 114, 0, 0, 0, 115, 116, - 117, 118, 119, 120, 121, 122, 0, 0, 115, 116, - 117, 118, 119, 120, 121, 122, 105, 106, 0, 0, - 109, 110, 111, 112, 113, 114, 105, 106, 0, 0, - 109, 110, 111, 112, 113, 114, 0, 0, 0, 0, - 116, 0, 118, 119, 120, 121, 122, 0, 0, 0, - 0, 0, 118, 119, 120, 121, 122 + 118, 119, 120, 121, 122, 123, 124, 0, 0, 0, + 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, + 107, 108, 0, 110, 111, 112, 113, 114, 115, 116, + 107, 108, 0, 0, 111, 112, 113, 114, 115, 116, + 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 0, 0, 117, 118, 119, 120, 121, 122, 123, + 124, 107, 108, 0, 0, 111, 112, 113, 114, 115, + 116, 107, 108, 0, 0, 111, 112, 113, 114, 115, + 116, 0, 0, 0, 0, 118, 119, 120, 121, 122, + 123, 124, 0, 0, 0, 118, 0, 120, 121, 122, + 123, 124, 107, 108, 0, 0, 111, 112, 113, 114, + 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 120, 121, + 122, 123, 124 }; const short parser::yycheck_[] = { - 0, 26, 27, 242, 83, 5, 1, 26, 27, 39, - 20, 40, 38, 6, 7, 83, 45, 14, 18, 80, - 81, 82, 234, 133, 236, 237, 26, 27, 87, 88, - 39, 26, 27, 133, 64, 45, 61, 27, 28, 39, - 30, 79, 61, 0, 34, 44, 45, 85, 49, 39, - 88, 27, 28, 43, 30, 40, 46, 192, 34, 30, - 84, 61, 27, 28, 85, 30, 61, 43, 94, 34, - 46, 43, 43, 84, 47, 46, 43, 41, 43, 19, - 49, 46, 192, 39, 84, 47, 40, 45, 188, 189, - 133, 84, 192, 83, 84, 43, 39, 37, 123, 124, - 40, 41, 314, 49, 123, 124, 39, 83, 84, 30, - 39, 350, 83, 84, 49, 39, 328, 39, 83, 84, - 39, 39, 43, 123, 124, 39, 16, 127, 123, 124, - 342, 131, 344, 133, 346, 48, 88, 137, 133, 49, - 49, 49, 242, 49, 49, 188, 189, 44, 48, 192, - 48, 39, 48, 39, 94, 78, 79, 80, 81, 82, - 44, 39, 83, 84, 39, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 318, 319, 182, 126, 39, 188, 189, - 40, 40, 192, 188, 189, 220, 136, 192, 138, 242, - 140, 220, 40, 143, 49, 39, 49, 133, 318, 319, - 49, 40, 49, 20, 349, 40, 351, 49, 318, 319, - 220, 49, 49, 49, 40, 220, 40, 40, 40, 49, - 255, 256, 133, 368, 369, 175, 255, 256, 49, 349, - 49, 351, 242, 243, 323, 5, 186, 242, 5, 349, - 350, 351, 52, 53, 133, 255, 256, 350, 368, 369, - 255, 256, 188, 189, -1, 290, 192, 182, 368, 369, - 182, 290, -1, -1, -1, 318, 319, -1, 78, 79, - 80, 81, 82, -1, -1, -1, -1, 188, 189, 133, - 290, 192, -1, -1, -1, 290, 27, 28, -1, 30, - 240, 241, -1, 34, 244, -1, 349, 350, 351, 188, - 189, 133, 43, 192, -1, 46, 242, -1, 318, 319, - -1, -1, 322, 318, 319, 368, 369, 133, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, -1, - 280, 242, -1, -1, 188, 189, -1, -1, 192, 349, - 350, 351, 83, 84, 349, 350, 351, 297, 298, 299, - 300, -1, -1, 242, -1, -1, 188, 189, 368, 369, - 192, -1, -1, 368, 369, -1, -1, -1, -1, -1, - 320, 321, 188, 189, -1, -1, 192, -1, 27, 28, - -1, 30, 318, 319, -1, 34, -1, -1, 242, -1, - -1, -1, -1, -1, 43, -1, -1, 46, 30, -1, - -1, -1, 352, 35, 36, 37, 38, 318, 319, -1, - 242, 43, -1, 349, 350, 351, -1, -1, 50, 51, - -1, -1, -1, -1, -1, -1, 242, -1, -1, 318, - 319, -1, 368, 369, 83, 84, 30, -1, 349, 350, - 351, 35, 36, 37, 38, -1, -1, 52, 53, 43, - -1, 83, 84, 58, 59, 60, 61, 368, 369, -1, - 349, 350, 351, -1, 318, 319, -1, 9, 10, -1, - 12, 13, -1, 78, 79, 80, 81, 82, -1, 368, - 369, -1, -1, -1, -1, 27, 318, 319, 30, 83, - 84, 27, 28, -1, 30, 349, 350, 351, 34, -1, - -1, 43, 318, 319, 46, -1, -1, 43, 50, 51, - 46, -1, -1, -1, 368, 369, -1, 349, 350, 351, - -1, -1, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 349, 350, 351, 368, 369, -1, -1, - -1, 83, 84, 3, 4, 5, -1, 83, 84, -1, - -1, 11, 368, 369, 14, 15, -1, 17, 18, 19, - -1, 21, 22, 23, 24, 25, 26, 27, -1, -1, - 30, -1, -1, -1, -1, 35, 36, 37, 38, -1, - -1, 41, 42, 43, -1, -1, -1, 3, 4, 5, - 50, 51, -1, -1, -1, 11, -1, -1, 14, 15, + 0, 26, 27, 14, 84, 5, 1, 26, 27, 238, + 246, 240, 241, 6, 7, 38, 30, 20, 18, 80, + 88, 89, 84, 135, 39, 86, 26, 27, 89, 43, + 40, 26, 27, 39, 30, 45, 0, 62, 86, 39, + 44, 45, 45, 62, 49, 27, 28, 43, 30, 85, + 46, 40, 34, 81, 82, 83, 19, 39, 85, 65, + 195, 43, 62, 43, 46, 49, 47, 62, 53, 54, + 84, 85, 95, 41, 37, 47, 43, 40, 41, 191, + 192, 39, 43, 195, 40, 85, 39, 49, 84, 85, + 319, 45, 85, 39, 79, 80, 81, 82, 83, 39, + 125, 126, 84, 85, 333, 49, 125, 126, 79, 80, + 81, 82, 83, 135, 39, 39, 39, 48, 347, 355, + 349, 39, 351, 39, 44, 125, 126, 44, 49, 129, + 125, 126, 95, 133, 246, 135, 49, 49, 49, 139, + 135, 49, 89, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 48, 48, 48, 128, 39, 39, 39, 191, + 192, 39, 39, 195, 185, 138, 135, 140, 40, 142, + 40, 40, 145, 49, 39, 49, 49, 40, 323, 324, + 16, 191, 192, 49, 5, 195, 191, 192, 223, 20, + 195, 30, 49, 40, 223, 49, 35, 36, 37, 38, + 49, 323, 324, 135, 43, 178, 49, 40, 40, 354, + 40, 356, 40, 223, 246, 49, 189, 5, 223, 355, + 49, -1, 191, 192, 259, 260, 195, 135, 373, 374, + 259, 260, 354, 355, 356, 49, 246, 247, 328, 185, + 185, 246, -1, -1, -1, 84, 85, -1, -1, 259, + 260, 373, 374, -1, 259, 260, -1, -1, -1, -1, + 295, -1, 235, 195, -1, -1, 295, -1, -1, -1, + -1, 244, 245, -1, -1, 248, -1, 246, -1, 135, + -1, -1, -1, 191, 192, 295, -1, 195, -1, -1, + 295, 323, 324, -1, -1, -1, -1, -1, -1, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + -1, 284, -1, 323, 324, 135, -1, 327, 323, 324, + 135, -1, 354, 355, 356, -1, -1, -1, -1, 302, + 303, 304, 305, -1, -1, 191, 192, -1, 246, 195, + -1, 373, 374, 135, 354, 355, 356, -1, -1, 354, + 355, 356, 325, 326, 323, 324, -1, -1, -1, -1, + -1, -1, -1, 373, 374, -1, -1, -1, 373, 374, + -1, 191, 192, -1, -1, 195, 191, 192, -1, -1, + 195, -1, -1, -1, 357, 354, 355, 356, -1, -1, + 246, 323, 324, -1, 27, 28, -1, 30, -1, 191, + 192, 34, -1, 195, 373, 374, -1, -1, -1, -1, + 43, -1, -1, 46, -1, 323, 324, -1, 27, 28, + -1, 30, 354, -1, 356, 34, 246, -1, -1, -1, + -1, 246, -1, -1, 43, -1, -1, 46, -1, -1, + -1, 373, 374, -1, -1, -1, 354, 355, 356, -1, + -1, 84, 85, -1, 246, 27, 28, -1, 30, -1, + -1, -1, 34, -1, -1, 373, 374, 323, 324, -1, + -1, 43, -1, -1, 46, 84, 85, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 27, 28, -1, 30, + -1, -1, -1, 34, -1, -1, -1, -1, 354, 355, + 356, -1, 43, 323, 324, 46, -1, -1, 323, 324, + -1, -1, 84, 85, -1, -1, 30, 373, 374, 53, + 54, 35, 36, 37, 38, 59, 60, 61, 62, 43, + -1, 323, 324, -1, 354, 355, 356, 51, 52, 354, + 355, 356, -1, 84, 85, 79, 80, 81, 82, 83, + -1, -1, -1, 373, 374, -1, -1, -1, 373, 374, + -1, -1, 354, 355, 356, -1, -1, -1, -1, -1, + 84, 85, 3, 4, 5, -1, -1, -1, -1, -1, + 11, 373, 374, 14, 15, -1, 17, 18, 19, -1, + 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, + -1, -1, -1, -1, 35, 36, 37, 38, -1, -1, + 41, 42, 43, -1, -1, -1, -1, 3, 4, 5, + 51, 52, -1, -1, -1, 11, -1, -1, 14, 15, -1, 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, -1, -1, -1, -1, 35, - 36, 37, 38, 83, 84, 41, 42, 43, -1, -1, - -1, 3, 4, 5, 50, 51, -1, -1, -1, 11, - -1, -1, 14, 15, -1, 17, 18, 19, -1, 21, - 22, 23, 24, 25, 26, 27, -1, -1, 30, -1, - -1, 8, -1, 35, 36, 37, 38, 83, 84, 41, - -1, 43, -1, -1, -1, -1, -1, -1, 50, 51, - 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, - 37, 38, 39, -1, -1, -1, 43, 44, -1, -1, - 47, -1, -1, 27, 28, -1, 30, -1, -1, -1, - 34, 83, 84, -1, -1, 62, 63, -1, -1, 43, - -1, -1, 46, 8, -1, -1, -1, -1, -1, -1, - -1, -1, 79, -1, -1, 82, 83, 84, 85, 86, - 87, 88, 27, 28, 29, 30, 31, 32, 33, -1, - 35, 36, 37, 38, 39, -1, -1, -1, 43, 83, - 84, -1, 47, -1, 49, 27, 28, -1, 30, -1, - -1, -1, 34, 27, 28, -1, 30, 62, 63, -1, - 34, 43, -1, -1, 46, 8, -1, -1, -1, 43, - -1, -1, 46, -1, 79, -1, -1, 82, 83, 84, - 85, 86, 87, 88, 27, 28, 29, 30, 31, 32, - 33, -1, 35, 36, 37, 38, 39, -1, -1, -1, - 43, 83, 84, -1, 47, -1, -1, -1, -1, 83, - 84, -1, -1, -1, -1, -1, -1, -1, -1, 62, - 63, -1, -1, -1, -1, -1, -1, 8, -1, -1, - -1, -1, -1, -1, -1, -1, 79, -1, -1, 82, - 83, 84, 85, 86, 87, 88, 27, 28, 29, 30, - 31, 32, 33, -1, 35, 36, 37, 38, 39, -1, - -1, -1, 43, -1, -1, -1, 47, -1, -1, -1, - -1, -1, -1, -1, 30, -1, -1, -1, -1, -1, - -1, 62, 63, -1, -1, -1, -1, 43, -1, -1, - 46, -1, -1, -1, 50, 51, -1, -1, 79, -1, - -1, 82, 83, 84, 85, 86, 87, 88, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 40, - -1, -1, -1, -1, 45, -1, -1, 83, 84, -1, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 40, -1, 52, 53, -1, 45, 56, 57, - 58, 59, 60, 61, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, -1, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, 40, -1, 52, 53, -1, - 45, 56, 57, 58, 59, 60, 61, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, - -1, 76, 77, 78, 79, 80, 81, 82, -1, -1, - 75, 76, 77, 78, 79, 80, 81, 82, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, 40, -1, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, 40, -1, 75, 76, 77, 78, 79, 80, 81, - 82, 40, -1, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, -1, -1, -1, 75, 76, 77, 78, - 79, 80, 81, 82, 40, -1, 75, 76, 77, 78, - 79, 80, 81, 82, 40, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, -1, -1, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 40, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 40, -1, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - 44, -1, -1, -1, -1, -1, -1, -1, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, + 36, 37, 38, 84, 85, 41, 42, 43, -1, -1, + -1, -1, 3, 4, 5, 51, 52, -1, -1, -1, + 11, -1, -1, 14, 15, -1, 17, 18, 19, -1, + 21, 22, 23, 24, 25, 26, 27, -1, -1, 30, + -1, -1, -1, 8, 35, 36, 37, 38, 84, 85, + 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, + 51, 52, 27, 28, 29, 30, 31, 32, 33, -1, + 35, 36, 37, 38, 39, -1, -1, -1, 43, 44, + -1, -1, 47, -1, -1, 27, 28, -1, 30, -1, + -1, -1, 34, 84, 85, -1, -1, -1, 63, 64, + -1, 43, -1, -1, 46, -1, 8, -1, -1, -1, + -1, -1, -1, -1, -1, 80, -1, -1, 83, 84, + 85, 86, 87, 88, 89, 27, 28, 29, 30, 31, + 32, 33, -1, 35, 36, 37, 38, 39, -1, -1, + -1, 43, 84, 85, -1, 47, -1, 49, 27, 28, + -1, 30, -1, -1, -1, 34, 27, 28, -1, 30, + -1, 63, 64, 34, 43, -1, -1, 46, -1, 8, + -1, -1, 43, -1, -1, 46, -1, -1, 80, -1, + -1, 83, 84, 85, 86, 87, 88, 89, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 36, 37, 38, + 39, -1, -1, -1, 43, 84, 85, -1, 47, -1, + -1, -1, -1, 84, 85, 27, 28, -1, 30, -1, + -1, -1, 34, -1, 63, 64, -1, -1, -1, -1, + -1, 43, 8, -1, 46, -1, -1, -1, -1, -1, + -1, 80, -1, -1, 83, 84, 85, 86, 87, 88, + 89, 27, 28, 29, 30, 31, 32, 33, -1, 35, + 36, 37, 38, 39, -1, -1, -1, 43, -1, -1, + -1, 47, 84, 85, -1, -1, -1, -1, -1, -1, + 9, 10, -1, 12, 13, -1, -1, 63, 64, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 27, -1, + -1, 30, -1, -1, 80, -1, -1, 83, 84, 85, + 86, 87, 88, 89, 43, -1, -1, 46, -1, -1, + -1, -1, 51, 52, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 30, -1, -1, + -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, + 43, -1, -1, 46, -1, -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 75, 76, 77, 78, 79, 80, 81, 82, 44, - -1, -1, -1, -1, -1, -1, -1, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, + -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 40, -1, -1, -1, -1, 45, -1, + -1, 84, 85, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 40, -1, -1, + -1, -1, 45, -1, -1, -1, -1, 50, -1, -1, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 75, 76, 77, 78, 79, 80, 81, 82, 44, -1, - -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 45, -1, -1, - -1, -1, -1, -1, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 49, -1, -1, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 75, 76, 77, - 78, 79, 80, 81, 82, -1, -1, -1, -1, -1, - 75, 76, 77, 78, 79, 80, 81, 82, 49, -1, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 49, -1, -1, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 75, 76, 77, 78, 79, 80, - 81, 82, -1, -1, -1, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 52, 53, -1, 55, 56, - 57, 58, 59, 60, 61, -1, -1, -1, 75, 76, - 77, 78, 79, 80, 81, 82, -1, -1, 75, 76, - 77, 78, 79, 80, 81, 82, 52, 53, -1, -1, - 56, 57, 58, 59, 60, 61, 52, 53, -1, -1, - 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, - 76, -1, 78, 79, 80, 81, 82, -1, -1, -1, - -1, -1, 78, 79, 80, 81, 82 + -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, + 83, 40, -1, -1, -1, -1, 45, -1, -1, -1, + -1, 50, -1, -1, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 76, 77, 78, + 79, 80, 81, 82, 83, 40, -1, -1, -1, -1, + 45, -1, -1, -1, -1, 50, -1, -1, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, + -1, 76, 77, 78, 79, 80, 81, 82, 83, 50, + -1, -1, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 40, -1, 76, 77, 78, 79, 80, + 81, 82, 83, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 40, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 50, -1, -1, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 40, -1, 76, 77, 78, 79, 80, 81, 82, + 83, 50, -1, -1, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 40, -1, 76, 77, 78, + 79, 80, 81, 82, 83, 50, -1, -1, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, + -1, 76, 77, 78, 79, 80, 81, 82, 83, 50, + -1, -1, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 40, -1, 76, 77, 78, 79, 80, + 81, 82, 83, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 44, -1, -1, + -1, -1, -1, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 44, -1, -1, + -1, -1, -1, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 44, -1, -1, + -1, -1, -1, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 45, -1, -1, + -1, -1, 50, -1, -1, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 48, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 49, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 49, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 49, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 50, -1, -1, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 76, + 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, + -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 53, 54, -1, 56, 57, 58, 59, 60, 61, 62, + 53, 54, -1, -1, 57, 58, 59, 60, 61, 62, + -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, + 83, -1, -1, 76, 77, 78, 79, 80, 81, 82, + 83, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, 77, -1, 79, 80, 81, + 82, 83, 53, 54, -1, -1, 57, 58, 59, 60, + 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 79, 80, + 81, 82, 83 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 84, 98, 99, 100, 101, 102, 103, - 104, 161, 83, 162, 39, 0, 100, 101, 39, 64, - 49, 85, 164, 105, 161, 8, 27, 28, 29, 30, + 0, 6, 7, 85, 100, 101, 102, 103, 104, 105, + 106, 164, 84, 165, 39, 0, 102, 103, 39, 65, + 49, 86, 167, 107, 164, 8, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 43, 47, - 62, 63, 79, 82, 86, 87, 88, 133, 135, 136, - 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 40, 40, 45, 43, 141, 142, 161, 162, - 141, 142, 43, 133, 43, 44, 133, 144, 161, 133, - 133, 87, 88, 84, 49, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 75, 76, 77, 78, 79, - 80, 81, 82, 27, 28, 34, 43, 46, 141, 142, - 39, 47, 49, 41, 107, 161, 43, 47, 43, 40, - 45, 133, 44, 45, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 141, 142, 141, 142, 133, 161, 143, 144, - 145, 161, 3, 4, 5, 11, 14, 15, 17, 18, - 19, 21, 22, 23, 24, 25, 26, 42, 50, 51, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 134, 138, 139, 148, 149, - 151, 155, 156, 157, 158, 161, 133, 161, 133, 133, - 44, 133, 44, 40, 39, 49, 39, 39, 133, 49, - 39, 39, 39, 39, 39, 79, 164, 167, 169, 48, - 49, 49, 49, 133, 138, 151, 151, 42, 106, 49, - 49, 49, 9, 10, 12, 13, 50, 51, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 44, - 45, 44, 143, 143, 143, 49, 133, 133, 131, 134, - 151, 161, 133, 48, 48, 48, 49, 39, 39, 39, - 39, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 44, 133, 39, 40, 40, 40, 40, 40, - 49, 20, 45, 40, 133, 133, 133, 133, 39, 40, - 143, 49, 49, 106, 106, 132, 133, 133, 161, 107, - 40, 40, 45, 40, 45, 40, 45, 143, 40, 16, - 49, 40, 20, 49, 49, 143, 49, 143, 49, 143, - 40, 106, 131, 106, 133, 40, 40, 40, 40, 40, - 49, 49, 49, 106, 106 + 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 40, 40, 45, 43, 144, 145, 164, + 165, 144, 145, 43, 135, 43, 44, 135, 147, 164, + 135, 135, 88, 89, 85, 49, 50, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 76, 77, 78, + 79, 80, 81, 82, 83, 27, 28, 34, 43, 46, + 144, 145, 39, 47, 49, 41, 109, 164, 43, 47, + 43, 40, 45, 135, 44, 45, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 144, 145, 144, 145, 135, + 164, 146, 147, 148, 164, 3, 4, 5, 11, 14, + 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, + 42, 51, 52, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 136, 141, + 142, 151, 152, 154, 158, 159, 160, 161, 164, 135, + 164, 135, 135, 44, 135, 48, 44, 40, 39, 49, + 39, 39, 135, 49, 39, 39, 39, 39, 39, 80, + 167, 170, 172, 48, 49, 49, 49, 135, 141, 154, + 154, 42, 108, 49, 49, 49, 9, 10, 12, 13, + 51, 52, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 44, 45, 44, 135, 146, 146, 146, + 49, 135, 135, 133, 136, 154, 164, 135, 48, 48, + 48, 49, 39, 39, 39, 39, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 44, 135, 39, + 40, 40, 40, 40, 40, 49, 20, 45, 40, 135, + 135, 135, 135, 39, 40, 146, 49, 49, 108, 108, + 134, 135, 135, 164, 109, 40, 40, 45, 40, 45, + 40, 45, 146, 40, 16, 49, 40, 20, 49, 49, + 146, 49, 146, 49, 146, 40, 108, 133, 108, 135, + 40, 40, 40, 40, 40, 49, 49, 49, 108, 108 }; const unsigned char parser::yyr1_[] = { - 0, 97, 98, 98, 99, 99, 99, 99, 100, 101, - 101, 101, 102, 103, 104, 105, 105, 105, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 107, 107, 108, 108, 109, 109, 110, 111, 112, - 112, 113, 114, 114, 115, 115, 116, 117, 118, 119, - 120, 121, 121, 122, 123, 123, 123, 124, 125, 126, - 127, 127, 128, 129, 130, 131, 131, 132, 132, 133, - 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, - 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 138, 138, 138, 138, 139, - 139, 139, 139, 140, 140, 140, 140, 141, 141, 142, - 142, 143, 143, 144, 144, 145, 146, 146, 147, 148, - 149, 150, 151, 151, 151, 151, 151, 151, 151, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171 + 0, 99, 100, 100, 101, 101, 101, 101, 102, 103, + 103, 103, 104, 105, 106, 107, 107, 107, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 109, 109, 110, 110, 111, 111, 112, 113, 114, + 114, 115, 116, 116, 117, 117, 118, 119, 120, 121, + 122, 123, 123, 124, 125, 125, 125, 126, 127, 128, + 129, 129, 130, 131, 132, 133, 133, 134, 134, 135, + 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, + 137, 137, 137, 137, 137, 137, 138, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, + 141, 142, 142, 142, 142, 143, 143, 143, 143, 144, + 144, 145, 145, 146, 146, 147, 147, 148, 149, 149, + 150, 151, 152, 153, 154, 154, 154, 154, 154, 154, + 154, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174 }; const signed char @@ -3966,18 +4053,19 @@ namespace xsk { namespace gsc { namespace iw5 { 6, 3, 8, 6, 8, 6, 2, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, 1, 0, 1, - 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, + 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 3, 3, 2, 2, 3, 3, 4, 6, 8, - 9, 1, 1, 3, 1, 0, 2, 3, 3, 4, - 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 7, 2, 2, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 3, 3, 2, 2, 3, 3, 4, + 6, 8, 9, 1, 1, 3, 1, 0, 2, 3, + 3, 4, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 7, 2, 2, 1, 1, + 1, 1 }; @@ -3987,26 +4075,27 @@ namespace xsk { namespace gsc { namespace iw5 { const short parser::yyrline_[] = { - 0, 237, 237, 238, 242, 244, 246, 248, 253, 258, - 259, 260, 264, 269, 274, 279, 281, 284, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 314, 315, 319, 321, 326, 328, 333, 338, 343, - 345, 350, 355, 357, 362, 364, 369, 374, 379, 384, - 389, 394, 396, 401, 406, 408, 410, 415, 420, 425, - 430, 432, 437, 442, 447, 452, 453, 457, 458, 462, - 463, 464, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 486, 487, 488, - 489, 490, 491, 492, 493, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 543, 544, 545, 546, 550, - 551, 552, 553, 557, 558, 559, 560, 564, 566, 571, - 573, 578, 579, 583, 585, 591, 595, 597, 602, 607, - 612, 617, 622, 623, 624, 625, 626, 627, 628, 629, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, 650, 651 + 0, 241, 241, 242, 246, 248, 250, 252, 257, 262, + 263, 264, 268, 273, 278, 283, 285, 288, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 318, 319, 323, 325, 330, 332, 337, 342, 347, + 349, 354, 359, 361, 366, 368, 373, 378, 383, 388, + 393, 398, 400, 405, 410, 412, 414, 419, 424, 429, + 434, 436, 441, 446, 451, 456, 457, 461, 462, 466, + 467, 468, 469, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 491, 492, + 493, 494, 495, 496, 497, 498, 502, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 552, 553, 554, + 555, 559, 560, 561, 562, 566, 567, 568, 569, 573, + 575, 580, 582, 587, 588, 592, 594, 600, 604, 606, + 611, 616, 621, 626, 631, 632, 633, 634, 635, 636, + 637, 638, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660 }; void @@ -4039,9 +4128,9 @@ namespace xsk { namespace gsc { namespace iw5 { #line 13 "parser.ypp" } } } // xsk::gsc::iw5 -#line 4043 "parser.cpp" +#line 4132 "parser.cpp" -#line 653 "parser.ypp" +#line 662 "parser.ypp" void xsk::gsc::iw5::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/iw5/xsk/parser.hpp b/src/iw5/xsk/parser.hpp index a9a30e00..c64f52ec 100644 --- a/src/iw5/xsk/parser.hpp +++ b/src/iw5/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace iw5 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -696,53 +697,55 @@ namespace xsk { namespace gsc { namespace iw5 { DOUBLECOLON = 47, // "::" COLON = 48, // ":" SEMICOLON = 49, // ";" - INCREMENT = 50, // "++" - DECREMENT = 51, // "--" - LSHIFT = 52, // "<<" - RSHIFT = 53, // ">>" - OR = 54, // "||" - AND = 55, // "&&" - EQUALITY = 56, // "==" - INEQUALITY = 57, // "!=" - LESS_EQUAL = 58, // "<=" - GREATER_EQUAL = 59, // ">=" - LESS = 60, // "<" - GREATER = 61, // ">" - NOT = 62, // "!" - COMPLEMENT = 63, // "~" - ASSIGN = 64, // "=" - ASSIGN_ADD = 65, // "+=" - ASSIGN_SUB = 66, // "-=" - ASSIGN_MULT = 67, // "*=" - ASSIGN_DIV = 68, // "/=" - ASSIGN_MOD = 69, // "%=" - ASSIGN_BITWISE_OR = 70, // "|=" - ASSIGN_BITWISE_AND = 71, // "&=" - ASSIGN_BITWISE_EXOR = 72, // "^=" - ASSIGN_RSHIFT = 73, // ">>=" - ASSIGN_LSHIFT = 74, // "<<=" - BITWISE_OR = 75, // "|" - BITWISE_AND = 76, // "&" - BITWISE_EXOR = 77, // "^" - ADD = 78, // "+" - SUB = 79, // "-" - MULT = 80, // "*" - DIV = 81, // "/" - MOD = 82, // "%" - FILE = 83, // "file path" - NAME = 84, // "identifier" - STRING = 85, // "string literal" - ISTRING = 86, // "localized string" - FLOAT = 87, // "float" - INTEGER = 88, // "int" - ADD_ARRAY = 89, // ADD_ARRAY - THEN = 90, // THEN - NEG = 91, // NEG - ANIMREF = 92, // ANIMREF - PREINC = 93, // PREINC - PREDEC = 94, // PREDEC - POSTINC = 95, // POSTINC - POSTDEC = 96 // POSTDEC + QMARK = 50, // "?" + INCREMENT = 51, // "++" + DECREMENT = 52, // "--" + LSHIFT = 53, // "<<" + RSHIFT = 54, // ">>" + OR = 55, // "||" + AND = 56, // "&&" + EQUALITY = 57, // "==" + INEQUALITY = 58, // "!=" + LESS_EQUAL = 59, // "<=" + GREATER_EQUAL = 60, // ">=" + LESS = 61, // "<" + GREATER = 62, // ">" + NOT = 63, // "!" + COMPLEMENT = 64, // "~" + ASSIGN = 65, // "=" + ASSIGN_ADD = 66, // "+=" + ASSIGN_SUB = 67, // "-=" + ASSIGN_MULT = 68, // "*=" + ASSIGN_DIV = 69, // "/=" + ASSIGN_MOD = 70, // "%=" + ASSIGN_BITWISE_OR = 71, // "|=" + ASSIGN_BITWISE_AND = 72, // "&=" + ASSIGN_BITWISE_EXOR = 73, // "^=" + ASSIGN_RSHIFT = 74, // ">>=" + ASSIGN_LSHIFT = 75, // "<<=" + BITWISE_OR = 76, // "|" + BITWISE_AND = 77, // "&" + BITWISE_EXOR = 78, // "^" + ADD = 79, // "+" + SUB = 80, // "-" + MULT = 81, // "*" + DIV = 82, // "/" + MOD = 83, // "%" + FILE = 84, // "file path" + NAME = 85, // "identifier" + STRING = 86, // "string literal" + ISTRING = 87, // "localized string" + FLOAT = 88, // "float" + INTEGER = 89, // "int" + ADD_ARRAY = 90, // ADD_ARRAY + THEN = 91, // THEN + TERN = 92, // TERN + NEG = 93, // NEG + ANIMREF = 94, // ANIMREF + PREINC = 95, // PREINC + PREDEC = 96, // PREDEC + POSTINC = 97, // POSTINC + POSTDEC = 98 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -759,7 +762,7 @@ namespace xsk { namespace gsc { namespace iw5 { { enum symbol_kind_type { - YYNTOKENS = 97, ///< Number of tokens. + YYNTOKENS = 99, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -811,128 +814,131 @@ namespace xsk { namespace gsc { namespace iw5 { S_DOUBLECOLON = 47, // "::" S_COLON = 48, // ":" S_SEMICOLON = 49, // ";" - S_INCREMENT = 50, // "++" - S_DECREMENT = 51, // "--" - S_LSHIFT = 52, // "<<" - S_RSHIFT = 53, // ">>" - S_OR = 54, // "||" - S_AND = 55, // "&&" - S_EQUALITY = 56, // "==" - S_INEQUALITY = 57, // "!=" - S_LESS_EQUAL = 58, // "<=" - S_GREATER_EQUAL = 59, // ">=" - S_LESS = 60, // "<" - S_GREATER = 61, // ">" - S_NOT = 62, // "!" - S_COMPLEMENT = 63, // "~" - S_ASSIGN = 64, // "=" - S_ASSIGN_ADD = 65, // "+=" - S_ASSIGN_SUB = 66, // "-=" - S_ASSIGN_MULT = 67, // "*=" - S_ASSIGN_DIV = 68, // "/=" - S_ASSIGN_MOD = 69, // "%=" - S_ASSIGN_BITWISE_OR = 70, // "|=" - S_ASSIGN_BITWISE_AND = 71, // "&=" - S_ASSIGN_BITWISE_EXOR = 72, // "^=" - S_ASSIGN_RSHIFT = 73, // ">>=" - S_ASSIGN_LSHIFT = 74, // "<<=" - S_BITWISE_OR = 75, // "|" - S_BITWISE_AND = 76, // "&" - S_BITWISE_EXOR = 77, // "^" - S_ADD = 78, // "+" - S_SUB = 79, // "-" - S_MULT = 80, // "*" - S_DIV = 81, // "/" - S_MOD = 82, // "%" - S_FILE = 83, // "file path" - S_NAME = 84, // "identifier" - S_STRING = 85, // "string literal" - S_ISTRING = 86, // "localized string" - S_FLOAT = 87, // "float" - S_INTEGER = 88, // "int" - S_ADD_ARRAY = 89, // ADD_ARRAY - S_THEN = 90, // THEN - S_NEG = 91, // NEG - S_ANIMREF = 92, // ANIMREF - S_PREINC = 93, // PREINC - S_PREDEC = 94, // PREDEC - S_POSTINC = 95, // POSTINC - S_POSTDEC = 96, // POSTDEC - S_YYACCEPT = 97, // $accept - S_root = 98, // root - S_program = 99, // program - S_include = 100, // include - S_define = 101, // define - S_usingtree = 102, // usingtree - S_constant = 103, // constant - S_thread = 104, // thread - S_parameters = 105, // parameters - S_stmt = 106, // stmt - S_stmt_block = 107, // stmt_block - S_stmt_list = 108, // stmt_list - S_stmt_call = 109, // stmt_call - S_stmt_assign = 110, // stmt_assign - S_stmt_endon = 111, // stmt_endon - S_stmt_notify = 112, // stmt_notify - S_stmt_wait = 113, // stmt_wait - S_stmt_waittill = 114, // stmt_waittill - S_stmt_waittillmatch = 115, // stmt_waittillmatch - S_stmt_waittillframeend = 116, // stmt_waittillframeend - S_stmt_if = 117, // stmt_if - S_stmt_ifelse = 118, // stmt_ifelse - S_stmt_while = 119, // stmt_while - S_stmt_for = 120, // stmt_for - S_stmt_foreach = 121, // stmt_foreach - S_stmt_switch = 122, // stmt_switch - S_stmt_case = 123, // stmt_case - S_stmt_default = 124, // stmt_default - S_stmt_break = 125, // stmt_break - S_stmt_continue = 126, // stmt_continue - S_stmt_return = 127, // stmt_return - S_stmt_breakpoint = 128, // stmt_breakpoint - S_stmt_prof_begin = 129, // stmt_prof_begin - S_stmt_prof_end = 130, // stmt_prof_end - S_for_stmt = 131, // for_stmt - S_for_expr = 132, // for_expr - S_expr = 133, // expr - S_expr_assign = 134, // expr_assign - S_expr_compare = 135, // expr_compare - S_expr_binary = 136, // expr_binary - S_expr_primitive = 137, // expr_primitive - S_expr_call = 138, // expr_call - S_expr_call_thread = 139, // expr_call_thread - S_expr_call_childthread = 140, // expr_call_childthread - S_expr_call_function = 141, // expr_call_function - S_expr_call_pointer = 142, // expr_call_pointer - S_expr_arguments = 143, // expr_arguments - S_expr_arguments_filled = 144, // expr_arguments_filled - S_expr_arguments_empty = 145, // expr_arguments_empty - S_expr_function = 146, // expr_function - S_expr_add_array = 147, // expr_add_array - S_expr_array = 148, // expr_array - S_expr_field = 149, // expr_field - S_expr_size = 150, // expr_size - S_object = 151, // object - S_thisthread = 152, // thisthread - S_empty_array = 153, // empty_array - S_undefined = 154, // undefined - S_game = 155, // game - S_self = 156, // self - S_anim = 157, // anim - S_level = 158, // level - S_animation = 159, // animation - S_animtree = 160, // animtree - S_name = 161, // name - S_file = 162, // file - S_istring = 163, // istring - S_string = 164, // string - S_vector = 165, // vector - S_neg_float = 166, // neg_float - S_neg_integer = 167, // neg_integer - S_float = 168, // float - S_integer = 169, // integer - S_false = 170, // false - S_true = 171 // true + S_QMARK = 50, // "?" + S_INCREMENT = 51, // "++" + S_DECREMENT = 52, // "--" + S_LSHIFT = 53, // "<<" + S_RSHIFT = 54, // ">>" + S_OR = 55, // "||" + S_AND = 56, // "&&" + S_EQUALITY = 57, // "==" + S_INEQUALITY = 58, // "!=" + S_LESS_EQUAL = 59, // "<=" + S_GREATER_EQUAL = 60, // ">=" + S_LESS = 61, // "<" + S_GREATER = 62, // ">" + S_NOT = 63, // "!" + S_COMPLEMENT = 64, // "~" + S_ASSIGN = 65, // "=" + S_ASSIGN_ADD = 66, // "+=" + S_ASSIGN_SUB = 67, // "-=" + S_ASSIGN_MULT = 68, // "*=" + S_ASSIGN_DIV = 69, // "/=" + S_ASSIGN_MOD = 70, // "%=" + S_ASSIGN_BITWISE_OR = 71, // "|=" + S_ASSIGN_BITWISE_AND = 72, // "&=" + S_ASSIGN_BITWISE_EXOR = 73, // "^=" + S_ASSIGN_RSHIFT = 74, // ">>=" + S_ASSIGN_LSHIFT = 75, // "<<=" + S_BITWISE_OR = 76, // "|" + S_BITWISE_AND = 77, // "&" + S_BITWISE_EXOR = 78, // "^" + S_ADD = 79, // "+" + S_SUB = 80, // "-" + S_MULT = 81, // "*" + S_DIV = 82, // "/" + S_MOD = 83, // "%" + S_FILE = 84, // "file path" + S_NAME = 85, // "identifier" + S_STRING = 86, // "string literal" + S_ISTRING = 87, // "localized string" + S_FLOAT = 88, // "float" + S_INTEGER = 89, // "int" + S_ADD_ARRAY = 90, // ADD_ARRAY + S_THEN = 91, // THEN + S_TERN = 92, // TERN + S_NEG = 93, // NEG + S_ANIMREF = 94, // ANIMREF + S_PREINC = 95, // PREINC + S_PREDEC = 96, // PREDEC + S_POSTINC = 97, // POSTINC + S_POSTDEC = 98, // POSTDEC + S_YYACCEPT = 99, // $accept + S_root = 100, // root + S_program = 101, // program + S_include = 102, // include + S_define = 103, // define + S_usingtree = 104, // usingtree + S_constant = 105, // constant + S_thread = 106, // thread + S_parameters = 107, // parameters + S_stmt = 108, // stmt + S_stmt_block = 109, // stmt_block + S_stmt_list = 110, // stmt_list + S_stmt_call = 111, // stmt_call + S_stmt_assign = 112, // stmt_assign + S_stmt_endon = 113, // stmt_endon + S_stmt_notify = 114, // stmt_notify + S_stmt_wait = 115, // stmt_wait + S_stmt_waittill = 116, // stmt_waittill + S_stmt_waittillmatch = 117, // stmt_waittillmatch + S_stmt_waittillframeend = 118, // stmt_waittillframeend + S_stmt_if = 119, // stmt_if + S_stmt_ifelse = 120, // stmt_ifelse + S_stmt_while = 121, // stmt_while + S_stmt_for = 122, // stmt_for + S_stmt_foreach = 123, // stmt_foreach + S_stmt_switch = 124, // stmt_switch + S_stmt_case = 125, // stmt_case + S_stmt_default = 126, // stmt_default + S_stmt_break = 127, // stmt_break + S_stmt_continue = 128, // stmt_continue + S_stmt_return = 129, // stmt_return + S_stmt_breakpoint = 130, // stmt_breakpoint + S_stmt_prof_begin = 131, // stmt_prof_begin + S_stmt_prof_end = 132, // stmt_prof_end + S_for_stmt = 133, // for_stmt + S_for_expr = 134, // for_expr + S_expr = 135, // expr + S_expr_assign = 136, // expr_assign + S_expr_compare = 137, // expr_compare + S_expr_ternary = 138, // expr_ternary + S_expr_binary = 139, // expr_binary + S_expr_primitive = 140, // expr_primitive + S_expr_call = 141, // expr_call + S_expr_call_thread = 142, // expr_call_thread + S_expr_call_childthread = 143, // expr_call_childthread + S_expr_call_function = 144, // expr_call_function + S_expr_call_pointer = 145, // expr_call_pointer + S_expr_arguments = 146, // expr_arguments + S_expr_arguments_filled = 147, // expr_arguments_filled + S_expr_arguments_empty = 148, // expr_arguments_empty + S_expr_function = 149, // expr_function + S_expr_add_array = 150, // expr_add_array + S_expr_array = 151, // expr_array + S_expr_field = 152, // expr_field + S_expr_size = 153, // expr_size + S_object = 154, // object + S_thisthread = 155, // thisthread + S_empty_array = 156, // empty_array + S_undefined = 157, // undefined + S_game = 158, // game + S_self = 159, // self + S_anim = 160, // anim + S_level = 161, // level + S_animation = 162, // animation + S_animtree = 163, // animtree + S_name = 164, // name + S_file = 165, // file + S_istring = 166, // istring + S_string = 167, // string + S_vector = 168, // vector + S_neg_float = 169, // neg_float + S_neg_integer = 170, // neg_integer + S_float = 171, // float + S_integer = 172, // integer + S_false = 173, // false + S_true = 174 // true }; }; @@ -1017,6 +1023,7 @@ namespace xsk { namespace gsc { namespace iw5 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2093,6 +2100,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3198,6 +3206,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3813,6 +3836,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4247,8 +4285,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1556, ///< Last index in yytable_. - yynnts_ = 75, ///< Number of nonterminal symbols. + yylast_ = 1892, ///< Last index in yytable_. + yynnts_ = 76, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4324,6 +4362,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4600,6 +4639,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4862,7 +4902,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw5 -#line 4866 "parser.hpp" +#line 4906 "parser.hpp" diff --git a/src/iw6/xsk/assembler.cpp b/src/iw6/xsk/assembler.cpp index 9ba0243a..715e6b2e 100644 --- a/src/iw6/xsk/assembler.cpp +++ b/src/iw6/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/iw6/xsk/compiler.cpp b/src/iw6/xsk/compiler.cpp index ba55077b..986511eb 100644 --- a/src/iw6/xsk/compiler.cpp +++ b/src/iw6/xsk/compiler.cpp @@ -403,7 +403,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -459,7 +459,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -534,7 +534,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -746,6 +746,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -843,6 +844,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/iw6/xsk/compiler.hpp b/src/iw6/xsk/compiler.hpp index ae6ec24a..bdf1fa7d 100644 --- a/src/iw6/xsk/compiler.hpp +++ b/src/iw6/xsk/compiler.hpp @@ -67,6 +67,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw6/xsk/decompiler.cpp b/src/iw6/xsk/decompiler.cpp index 63f835f2..fbfe0cbd 100644 --- a/src/iw6/xsk/decompiler.cpp +++ b/src/iw6/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1827,6 +1835,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1910,6 +1919,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3000,6 +3032,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3100,6 +3133,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/iw6/xsk/decompiler.hpp b/src/iw6/xsk/decompiler.hpp index a22c90da..dce3e3c5 100644 --- a/src/iw6/xsk/decompiler.hpp +++ b/src/iw6/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw6/xsk/lexer.cpp b/src/iw6/xsk/lexer.cpp index 55b59c71..e07bae1f 100644 --- a/src/iw6/xsk/lexer.cpp +++ b/src/iw6/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 99 -#define YY_END_OF_BUFFER 100 +#define YY_NUM_RULES 100 +#define YY_END_OF_BUFFER 101 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,40 +562,40 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[300] = +static const flex_int16_t yy_accept[301] = { 0, - 0, 0, 0, 0, 0, 0, 100, 98, 1, 2, - 87, 98, 98, 86, 90, 98, 48, 49, 84, 82, - 54, 83, 55, 85, 97, 57, 58, 71, 81, 72, - 93, 52, 53, 91, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 50, 89, 51, 88, 5, 6, 5, 9, 10, 9, - 68, 0, 95, 0, 0, 0, 0, 77, 0, 66, - 0, 79, 0, 0, 75, 59, 73, 60, 74, 96, - 0, 8, 4, 3, 76, 96, 97, 0, 0, 56, - 63, 69, 67, 70, 64, 93, 80, 93, 93, 93, + 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, + 88, 99, 99, 87, 91, 99, 48, 49, 85, 83, + 54, 84, 55, 86, 98, 57, 58, 72, 82, 73, + 59, 94, 52, 53, 92, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 50, 90, 51, 89, 5, 6, 5, 9, 10, + 9, 69, 0, 96, 0, 0, 0, 0, 78, 0, + 67, 0, 80, 0, 0, 76, 60, 74, 61, 75, + 97, 0, 8, 4, 3, 77, 97, 98, 0, 0, + 56, 64, 70, 68, 71, 65, 94, 81, 94, 94, - 93, 93, 93, 93, 93, 93, 93, 93, 24, 29, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 78, 65, 7, 11, 0, 95, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 95, 0, 96, - 0, 3, 96, 96, 92, 61, 62, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 27, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 0, 0, 0, 0, 94, 0, 0, 94, 0, - 0, 46, 93, 39, 31, 93, 93, 93, 25, 93, - 93, 93, 44, 93, 93, 93, 93, 45, 93, 93, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 24, + 29, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 79, 66, 7, 11, 0, 96, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, + 97, 0, 3, 97, 97, 93, 62, 63, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 27, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 0, 0, 0, 0, 95, 0, 0, 95, + 0, 0, 46, 94, 39, 31, 94, 94, 94, 25, + 94, 94, 94, 44, 94, 94, 94, 94, 45, 94, - 93, 40, 93, 20, 93, 0, 0, 0, 43, 33, - 93, 93, 93, 18, 41, 93, 47, 93, 93, 93, - 93, 93, 93, 93, 93, 26, 0, 0, 0, 93, - 93, 93, 93, 93, 19, 93, 93, 35, 30, 93, - 36, 93, 93, 0, 0, 0, 93, 93, 93, 32, - 28, 93, 93, 93, 93, 93, 0, 15, 0, 93, - 93, 34, 93, 14, 93, 93, 21, 17, 0, 93, - 93, 93, 93, 42, 93, 93, 0, 12, 93, 13, - 38, 93, 93, 0, 37, 93, 93, 0, 93, 93, - 0, 93, 22, 0, 93, 16, 93, 23, 0 + 94, 94, 40, 94, 20, 94, 0, 0, 0, 43, + 33, 94, 94, 94, 18, 41, 94, 47, 94, 94, + 94, 94, 94, 94, 94, 94, 26, 0, 0, 0, + 94, 94, 94, 94, 94, 19, 94, 94, 35, 30, + 94, 36, 94, 94, 0, 0, 0, 94, 94, 94, + 32, 28, 94, 94, 94, 94, 94, 0, 15, 0, + 94, 94, 34, 94, 14, 94, 94, 21, 17, 0, + 94, 94, 94, 94, 42, 94, 94, 0, 12, 94, + 13, 38, 94, 94, 0, 37, 94, 94, 0, 94, + 94, 0, 94, 22, 0, 94, 16, 94, 23, 0 } ; @@ -607,14 +607,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -631,238 +631,238 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[314] = +static const flex_int16_t yy_base[315] = { 0, - 0, 0, 54, 55, 56, 57, 564, 565, 565, 565, - 541, 56, 35, 540, 63, 55, 565, 565, 539, 56, - 565, 55, 56, 74, 71, 541, 565, 54, 537, 70, - 532, 565, 565, 535, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 565, 96, 565, 565, 565, 565, 539, 565, 565, 538, - 565, 120, 565, 127, 512, 511, 506, 565, 122, 565, - 115, 565, 126, 140, 565, 565, 565, 565, 565, 120, - 513, 565, 565, 0, 565, 121, 141, 135, 0, 565, - 528, 565, 565, 565, 527, 522, 565, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 565, 566, 566, 566, + 542, 57, 34, 541, 66, 60, 566, 566, 540, 57, + 566, 63, 48, 74, 74, 542, 566, 55, 538, 59, + 566, 532, 566, 566, 536, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 566, 100, 566, 566, 566, 566, 540, 566, 566, + 539, 566, 120, 566, 136, 512, 511, 506, 566, 122, + 566, 123, 566, 126, 143, 566, 566, 566, 566, 566, + 118, 513, 566, 566, 0, 566, 125, 140, 132, 0, + 566, 529, 566, 566, 566, 528, 522, 566, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 521, 520, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 565, 565, 565, 565, 189, 197, 202, 507, 512, - 505, 204, 565, 207, 205, 208, 209, 210, 213, 565, - 490, 0, 202, 565, 515, 565, 565, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 499, 499, 496, 268, 269, 276, 271, 273, 283, - 503, 510, 261, 509, 508, 258, 263, 262, 507, 270, - 272, 277, 506, 278, 279, 282, 287, 505, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 521, + 520, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 566, 566, 566, 566, 186, 204, 211, 507, + 512, 505, 205, 566, 212, 202, 215, 210, 213, 217, + 566, 490, 0, 205, 566, 515, 566, 566, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 499, 499, 496, 273, 274, 277, 275, 276, + 284, 503, 510, 104, 509, 508, 262, 268, 264, 507, + 265, 270, 279, 506, 271, 282, 287, 288, 505, 289, - 293, 504, 291, 294, 296, 482, 480, 491, 565, 298, - 299, 301, 305, 500, 499, 302, 498, 303, 313, 307, - 314, 322, 324, 326, 327, 497, 477, 488, 491, 312, - 330, 310, 334, 335, 493, 336, 337, 492, 491, 340, - 490, 342, 343, 481, 480, 483, 348, 345, 354, 486, - 485, 351, 349, 363, 365, 352, 476, 565, 467, 367, - 368, 482, 369, 481, 370, 372, 375, 565, 468, 377, - 378, 380, 385, 466, 386, 387, 403, 417, 388, 416, - 414, 389, 394, 389, 408, 397, 400, 331, 399, 402, - 339, 401, 309, 259, 403, 565, 404, 200, 565, 445, + 272, 292, 504, 294, 297, 298, 482, 480, 491, 566, + 299, 300, 304, 301, 500, 499, 302, 498, 305, 311, + 309, 312, 313, 322, 314, 327, 497, 477, 488, 491, + 328, 331, 310, 333, 335, 493, 336, 334, 492, 491, + 337, 490, 341, 338, 481, 480, 483, 343, 340, 353, + 486, 485, 348, 360, 362, 363, 351, 476, 566, 467, + 364, 366, 482, 369, 481, 368, 375, 376, 566, 455, + 373, 379, 377, 388, 419, 378, 386, 403, 417, 389, + 416, 414, 398, 384, 392, 412, 392, 400, 368, 401, + 399, 341, 403, 347, 193, 404, 566, 408, 159, 566, - 450, 455, 460, 463, 465, 470, 475, 480, 485, 490, - 84, 495, 500 + 447, 452, 457, 462, 465, 467, 472, 477, 482, 487, + 492, 68, 497, 502 } ; -static const flex_int16_t yy_def[314] = +static const flex_int16_t yy_def[315] = { 0, - 299, 1, 300, 300, 301, 301, 299, 299, 299, 299, - 299, 302, 299, 299, 299, 303, 299, 299, 299, 299, - 299, 299, 299, 299, 304, 299, 299, 299, 299, 299, - 305, 299, 299, 299, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 302, 299, 306, 299, 299, 299, 299, 307, 299, - 308, 299, 303, 309, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 310, 299, 299, 304, 304, 311, 299, - 299, 299, 299, 299, 299, 305, 299, 305, 305, 305, + 300, 1, 301, 301, 302, 302, 300, 300, 300, 300, + 300, 303, 300, 300, 300, 304, 300, 300, 300, 300, + 300, 300, 300, 300, 305, 300, 300, 300, 300, 300, + 300, 306, 300, 300, 300, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 303, 300, 307, 300, 300, 300, 300, 308, + 300, 309, 300, 304, 310, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 311, 300, 300, 305, 305, 312, + 300, 300, 300, 300, 300, 300, 306, 300, 306, 306, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 299, 302, 302, 306, 299, 299, - 299, 307, 299, 312, 308, 313, 303, 303, 309, 299, - 299, 310, 299, 299, 311, 299, 299, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 307, 307, 312, 308, 308, 313, - 299, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 300, 303, 303, 307, 300, + 300, 300, 308, 300, 313, 309, 314, 304, 304, 310, + 300, 300, 311, 300, 300, 312, 300, 300, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 308, 308, 313, 309, 309, + 314, 300, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 305, 305, 305, 305, 305, 299, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 299, 299, 299, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 299, 305, 305, 305, - 305, 305, 305, 299, 305, 305, 305, 299, 305, 305, - 299, 305, 305, 299, 305, 299, 305, 305, 0, 299, + 306, 306, 306, 306, 306, 306, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 300, 300, 300, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 300, 306, 306, + 306, 306, 306, 306, 300, 306, 306, 306, 300, 306, + 306, 300, 306, 306, 300, 306, 300, 306, 306, 0, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300 } ; -static const flex_int16_t yy_nxt[622] = +static const flex_int16_t yy_nxt[624] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 299, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 300, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 296, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 297, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 89, 226, - 89, 220, 89, 234, 89, 89, 222, 89, 89, 89, - 225, 230, 232, 236, 233, 231, 237, 89, 238, 89, - 239, 89, 89, 235, 247, 89, 241, 249, 240, 89, - 89, 89, 89, 242, 243, 89, 248, 89, 89, 252, - 89, 251, 294, 89, 89, 291, 89, 89, 253, 89, - 250, 264, 256, 255, 254, 260, 263, 262, 89, 261, - 89, 267, 89, 89, 89, 89, 265, 89, 266, 273, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 227, 221, 235, 90, 90, 90, 90, 90, + 90, 234, 237, 231, 226, 238, 233, 232, 90, 240, + 241, 239, 243, 90, 90, 242, 236, 90, 250, 90, + 90, 90, 90, 90, 90, 244, 90, 90, 249, 90, + 253, 248, 252, 90, 90, 295, 254, 90, 257, 90, + 251, 261, 255, 256, 264, 262, 90, 263, 90, 90, + 90, 268, 90, 265, 90, 90, 266, 267, 274, 90, - 89, 271, 89, 89, 274, 89, 272, 279, 270, 275, - 89, 89, 89, 89, 89, 276, 283, 281, 286, 89, - 285, 280, 89, 278, 89, 89, 89, 89, 89, 89, - 282, 290, 292, 89, 295, 288, 298, 289, 293, 89, - 287, 89, 89, 284, 297, 55, 55, 55, 55, 55, - 58, 58, 58, 58, 58, 62, 62, 62, 62, 62, - 73, 73, 73, 73, 73, 88, 88, 88, 96, 96, - 126, 126, 126, 126, 126, 132, 132, 132, 132, 132, - 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, - 142, 89, 142, 142, 142, 175, 175, 175, 175, 175, + 272, 90, 90, 90, 90, 90, 271, 273, 275, 280, + 90, 276, 90, 292, 90, 90, 284, 277, 90, 281, + 279, 282, 286, 283, 90, 90, 90, 90, 287, 90, + 90, 288, 291, 290, 90, 293, 294, 296, 90, 289, + 90, 299, 90, 90, 285, 90, 298, 56, 56, 56, + 56, 56, 59, 59, 59, 59, 59, 63, 63, 63, + 63, 63, 74, 74, 74, 74, 74, 89, 89, 89, + 97, 97, 127, 127, 127, 127, 127, 133, 133, 133, + 133, 133, 136, 136, 136, 136, 136, 138, 138, 138, + 138, 138, 143, 278, 143, 143, 143, 176, 176, 176, - 178, 178, 178, 178, 178, 277, 89, 89, 269, 268, - 89, 89, 259, 258, 257, 89, 89, 89, 89, 246, - 245, 244, 89, 89, 89, 89, 229, 228, 227, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 299, 7, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 176, 176, 179, 179, 179, 179, 179, 90, 90, 270, + 269, 90, 90, 260, 259, 258, 90, 90, 90, 90, + 247, 246, 245, 90, 90, 90, 90, 230, 229, 228, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 300, 7, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; -static const flex_int16_t yy_chk[622] = +static const flex_int16_t yy_chk[624] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 311, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 312, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 299, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 298, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 294, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 295, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 218, 205, - 213, 197, 220, 216, 293, 232, 200, 230, 219, 221, - 204, 210, 212, 219, 213, 211, 219, 222, 220, 223, - 221, 224, 225, 218, 230, 231, 223, 232, 222, 233, - 234, 236, 237, 224, 225, 240, 231, 242, 243, 236, - 248, 234, 291, 247, 253, 288, 252, 256, 237, 249, - 233, 253, 243, 242, 240, 247, 252, 249, 254, 248, - 255, 256, 260, 261, 263, 265, 254, 266, 255, 265, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 206, 211, 212, 214, 217, 204, + 213, 219, 206, 198, 217, 221, 233, 220, 222, 223, + 225, 214, 220, 211, 205, 220, 213, 212, 224, 222, + 223, 221, 225, 226, 231, 224, 219, 232, 233, 234, + 238, 235, 237, 241, 244, 226, 249, 243, 232, 248, + 237, 231, 235, 294, 253, 292, 238, 257, 244, 250, + 234, 248, 241, 243, 253, 249, 254, 250, 255, 256, + 261, 257, 262, 254, 266, 264, 255, 256, 266, 271, - 267, 261, 270, 271, 266, 272, 263, 271, 260, 267, - 273, 275, 276, 279, 282, 267, 276, 273, 282, 283, - 279, 272, 286, 270, 289, 287, 292, 290, 295, 297, - 275, 287, 289, 285, 292, 284, 297, 286, 290, 281, - 283, 280, 278, 277, 295, 300, 300, 300, 300, 300, - 301, 301, 301, 301, 301, 302, 302, 302, 302, 302, - 303, 303, 303, 303, 303, 304, 304, 304, 305, 305, - 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, - 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, - 310, 274, 310, 310, 310, 312, 312, 312, 312, 312, + 262, 267, 268, 273, 276, 272, 261, 264, 267, 272, + 284, 268, 277, 289, 274, 280, 277, 268, 287, 273, + 271, 274, 280, 276, 283, 291, 288, 290, 283, 293, + 296, 284, 288, 287, 298, 290, 291, 293, 286, 285, + 282, 298, 281, 279, 278, 275, 296, 301, 301, 301, + 301, 301, 302, 302, 302, 302, 302, 303, 303, 303, + 303, 303, 304, 304, 304, 304, 304, 305, 305, 305, + 306, 306, 307, 307, 307, 307, 307, 308, 308, 308, + 308, 308, 309, 309, 309, 309, 309, 310, 310, 310, + 310, 310, 311, 270, 311, 311, 311, 313, 313, 313, - 313, 313, 313, 313, 313, 269, 264, 262, 259, 257, - 251, 250, 246, 245, 244, 241, 239, 238, 235, 229, - 228, 227, 226, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 313, 313, 314, 314, 314, 314, 314, 265, 263, 260, + 258, 252, 251, 247, 246, 245, 242, 240, 239, 236, + 230, 229, 228, 227, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; /* The intent behind this definition is that it'll catch @@ -1180,13 +1180,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 299 ); + while ( yy_current_state != 300 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1502,218 +1502,223 @@ YY_RULE_SETUP case 59: YY_RULE_SETUP #line 106 "lexer.lpp" -{ return iw6::parser::make_INCREMENT(loc); } +{ return iw6::parser::make_QMARK(loc); } YY_BREAK case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return iw6::parser::make_DECREMENT(loc); } +{ return iw6::parser::make_INCREMENT(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_LSHIFT(loc); } +{ return iw6::parser::make_DECREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_RSHIFT(loc); } +{ return iw6::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return iw6::parser::make_LSHIFT(loc); } +{ return iw6::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return iw6::parser::make_RSHIFT(loc); } +{ return iw6::parser::make_LSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return iw6::parser::make_OR(loc); } +{ return iw6::parser::make_RSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return iw6::parser::make_AND(loc); } +{ return iw6::parser::make_OR(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return iw6::parser::make_EQUALITY(loc); } +{ return iw6::parser::make_AND(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return iw6::parser::make_INEQUALITY(loc); } +{ return iw6::parser::make_EQUALITY(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return iw6::parser::make_LESS_EQUAL(loc); } +{ return iw6::parser::make_INEQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return iw6::parser::make_GREATER_EQUAL(loc); } +{ return iw6::parser::make_LESS_EQUAL(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return iw6::parser::make_LESS(loc); } +{ return iw6::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return iw6::parser::make_GREATER(loc); } +{ return iw6::parser::make_LESS(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_ADD(loc); } +{ return iw6::parser::make_GREATER(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_SUB(loc); } +{ return iw6::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_MULT(loc); } +{ return iw6::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_DIV(loc); } +{ return iw6::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_MOD(loc); } +{ return iw6::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return iw6::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return iw6::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return iw6::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return iw6::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return iw6::parser::make_ASSIGN(loc); } +{ return iw6::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return iw6::parser::make_ADD(loc); } +{ return iw6::parser::make_ASSIGN(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return iw6::parser::make_SUB(loc); } +{ return iw6::parser::make_ADD(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return iw6::parser::make_MULT(loc); } +{ return iw6::parser::make_SUB(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return iw6::parser::make_DIV(loc); } +{ return iw6::parser::make_MULT(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return iw6::parser::make_MOD(loc); } +{ return iw6::parser::make_DIV(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return iw6::parser::make_NOT(loc); } +{ return iw6::parser::make_MOD(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return iw6::parser::make_COMPLEMENT(loc); } +{ return iw6::parser::make_NOT(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return iw6::parser::make_BITWISE_OR(loc); } +{ return iw6::parser::make_COMPLEMENT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return iw6::parser::make_BITWISE_AND(loc); } +{ return iw6::parser::make_BITWISE_OR(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return iw6::parser::make_BITWISE_EXOR(loc); } +{ return iw6::parser::make_BITWISE_AND(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return iw6::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return iw6::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return iw6::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return iw6::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 94: -/* rule 94 can match eol */ YY_RULE_SETUP #line 141 "lexer.lpp" -{ return iw6::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return iw6::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 95: /* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return iw6::parser::make_STRING(std::string(yytext), loc); } +{ return iw6::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 96: +/* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return iw6::parser::make_FLOAT(std::string(yytext), loc); } +{ return iw6::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 97: YY_RULE_SETUP #line 144 "lexer.lpp" +{ return iw6::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 145 "lexer.lpp" { return iw6::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 145 "lexer.lpp" +#line 146 "lexer.lpp" { return iw6::parser::make_IW6EOF(loc); } YY_BREAK -case 98: -/* rule 98 can match eol */ +case 99: +/* rule 99 can match eol */ YY_RULE_SETUP -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { throw iw6::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" ECHO; YY_BREAK -#line 1716 "lexer.cpp" +#line 1721 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2011,7 +2016,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2040,11 +2045,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 299); + yy_is_jam = (yy_current_state == 300); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2843,6 +2848,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" diff --git a/src/iw6/xsk/lexer.hpp b/src/iw6/xsk/lexer.hpp index e7a0b7fa..96a74962 100644 --- a/src/iw6/xsk/lexer.hpp +++ b/src/iw6/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/iw6/xsk/parser.cpp b/src/iw6/xsk/parser.cpp index 382e3527..9a7dec1f 100644 --- a/src/iw6/xsk/parser.cpp +++ b/src/iw6/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -526,6 +527,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -788,6 +790,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1049,6 +1052,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1565,6 +1569,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1785,1195 +1790,1207 @@ namespace xsk { namespace gsc { namespace iw6 { switch (yyn) { case 2: // root: program -#line 237 "parser.ypp" +#line 241 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1791 "parser.cpp" +#line 1796 "parser.cpp" break; case 3: // root: %empty -#line 238 "parser.ypp" +#line 242 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1797 "parser.cpp" +#line 1802 "parser.cpp" break; case 4: // program: program include -#line 243 "parser.ypp" +#line 247 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1803 "parser.cpp" +#line 1808 "parser.cpp" break; case 5: // program: program define -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1809 "parser.cpp" +#line 1814 "parser.cpp" break; case 6: // program: include -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1815 "parser.cpp" +#line 1820 "parser.cpp" break; case 7: // program: define -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1821 "parser.cpp" +#line 1826 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 254 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1827 "parser.cpp" +#line 1832 "parser.cpp" break; case 9: // define: usingtree -#line 258 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1833 "parser.cpp" +#line 1838 "parser.cpp" break; case 10: // define: constant -#line 259 "parser.ypp" +#line 263 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1839 "parser.cpp" +#line 1844 "parser.cpp" break; case 11: // define: thread -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1845 "parser.cpp" +#line 1850 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 265 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1851 "parser.cpp" +#line 1856 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 270 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1857 "parser.cpp" +#line 1862 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 275 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1863 "parser.cpp" +#line 1868 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 280 "parser.ypp" +#line 284 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1869 "parser.cpp" +#line 1874 "parser.cpp" break; case 16: // parameters: name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1875 "parser.cpp" +#line 1880 "parser.cpp" break; case 17: // parameters: %empty -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1881 "parser.cpp" +#line 1886 "parser.cpp" break; case 18: // stmt: stmt_block -#line 288 "parser.ypp" +#line 292 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1887 "parser.cpp" +#line 1892 "parser.cpp" break; case 19: // stmt: stmt_call -#line 289 "parser.ypp" +#line 293 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1893 "parser.cpp" +#line 1898 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1899 "parser.cpp" +#line 1904 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1905 "parser.cpp" +#line 1910 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1911 "parser.cpp" +#line 1916 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1917 "parser.cpp" +#line 1922 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1923 "parser.cpp" +#line 1928 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1929 "parser.cpp" +#line 1934 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1935 "parser.cpp" +#line 1940 "parser.cpp" break; case 27: // stmt: stmt_if -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1941 "parser.cpp" +#line 1946 "parser.cpp" break; case 28: // stmt: stmt_ifelse -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1947 "parser.cpp" +#line 1952 "parser.cpp" break; case 29: // stmt: stmt_while -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1953 "parser.cpp" +#line 1958 "parser.cpp" break; case 30: // stmt: stmt_for -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1959 "parser.cpp" +#line 1964 "parser.cpp" break; case 31: // stmt: stmt_foreach -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 32: // stmt: stmt_switch -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 33: // stmt: stmt_case -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 34: // stmt: stmt_default -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 35: // stmt: stmt_break -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 36: // stmt: stmt_continue -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 37: // stmt: stmt_return -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 38: // stmt: stmt_breakpoint -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 39: // stmt: stmt_prof_begin -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 40: // stmt: stmt_prof_end -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 41: // stmt_block: "{" stmt_list "}" -#line 314 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 42: // stmt_block: "{" "}" -#line 315 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 43: // stmt_list: stmt_list stmt -#line 320 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 44: // stmt_list: stmt -#line 322 "parser.ypp" +#line 326 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 45: // stmt_call: expr_call ";" -#line 327 "parser.ypp" +#line 331 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 46: // stmt_call: expr_call_thread ";" -#line 329 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 47: // stmt_assign: expr_assign ";" -#line 334 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 48: // stmt_endon: object "endon" "(" expr ")" ";" -#line 339 "parser.ypp" +#line 343 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 49: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 344 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr ")" ";" -#line 346 "parser.ypp" +#line 350 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 51: // stmt_wait: "wait" expr ";" -#line 351 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 52: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 356 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 358 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 54: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 363 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 365 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 56: // stmt_waittillframeend: "waittillframeend" ";" -#line 370 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 57: // stmt_if: "if" "(" expr ")" stmt -#line 375 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 58: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 59: // stmt_while: "while" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 60: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 61: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 62: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 397 "parser.ypp" +#line 401 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 63: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 402 "parser.ypp" +#line 406 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 64: // stmt_case: "case" integer ":" -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 65: // stmt_case: "case" neg_integer ":" -#line 409 "parser.ypp" +#line 413 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 66: // stmt_case: "case" string ":" -#line 411 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 67: // stmt_default: "default" ":" -#line 416 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 68: // stmt_break: "break" ";" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 69: // stmt_continue: "continue" ";" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 70: // stmt_return: "return" expr ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 71: // stmt_return: "return" ";" -#line 433 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 72: // stmt_breakpoint: "breakpoint" ";" -#line 438 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 73: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 74: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 75: // for_stmt: expr_assign -#line 452 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 76: // for_stmt: %empty -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 77: // for_expr: expr -#line 457 "parser.ypp" +#line 461 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 78: // for_expr: %empty -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 79: // expr: expr_compare -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; - case 80: // expr: expr_binary -#line 463 "parser.ypp" + case 80: // expr: expr_ternary +#line 467 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; - case 81: // expr: expr_primitive -#line 464 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2265 "parser.cpp" - break; - - case 82: // expr_assign: "++" object + case 81: // expr: expr_binary #line 468 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2271 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2270 "parser.cpp" break; - case 83: // expr_assign: "--" object + case 82: // expr: expr_primitive #line 469 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2277 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2276 "parser.cpp" break; - case 84: // expr_assign: object "++" -#line 470 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2283 "parser.cpp" - break; - - case 85: // expr_assign: object "--" -#line 471 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2289 "parser.cpp" - break; - - case 86: // expr_assign: object "=" expr -#line 472 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2295 "parser.cpp" - break; - - case 87: // expr_assign: object "|=" expr + case 83: // expr_assign: "++" object #line 473 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2301 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2282 "parser.cpp" break; - case 88: // expr_assign: object "&=" expr + case 84: // expr_assign: "--" object #line 474 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2307 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2288 "parser.cpp" break; - case 89: // expr_assign: object "^=" expr + case 85: // expr_assign: object "++" #line 475 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2313 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2294 "parser.cpp" break; - case 90: // expr_assign: object "<<=" expr + case 86: // expr_assign: object "--" #line 476 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2319 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2300 "parser.cpp" break; - case 91: // expr_assign: object ">>=" expr + case 87: // expr_assign: object "=" expr #line 477 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2325 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2306 "parser.cpp" break; - case 92: // expr_assign: object "+=" expr + case 88: // expr_assign: object "|=" expr #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2331 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2312 "parser.cpp" break; - case 93: // expr_assign: object "-=" expr + case 89: // expr_assign: object "&=" expr #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2337 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2318 "parser.cpp" break; - case 94: // expr_assign: object "*=" expr + case 90: // expr_assign: object "^=" expr #line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2343 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2324 "parser.cpp" break; - case 95: // expr_assign: object "/=" expr + case 91: // expr_assign: object "<<=" expr #line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2349 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2330 "parser.cpp" break; - case 96: // expr_assign: object "%=" expr + case 92: // expr_assign: object ">>=" expr #line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2355 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2336 "parser.cpp" break; - case 97: // expr_compare: expr "||" expr + case 93: // expr_assign: object "+=" expr +#line 483 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2342 "parser.cpp" + break; + + case 94: // expr_assign: object "-=" expr +#line 484 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2348 "parser.cpp" + break; + + case 95: // expr_assign: object "*=" expr +#line 485 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2354 "parser.cpp" + break; + + case 96: // expr_assign: object "/=" expr #line 486 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2361 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2360 "parser.cpp" break; - case 98: // expr_compare: expr "&&" expr + case 97: // expr_assign: object "%=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2367 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2366 "parser.cpp" break; - case 99: // expr_compare: expr "==" expr -#line 488 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2373 "parser.cpp" - break; - - case 100: // expr_compare: expr "!=" expr -#line 489 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2379 "parser.cpp" - break; - - case 101: // expr_compare: expr "<=" expr -#line 490 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2385 "parser.cpp" - break; - - case 102: // expr_compare: expr ">=" expr + case 98: // expr_compare: expr "||" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2391 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2372 "parser.cpp" break; - case 103: // expr_compare: expr "<" expr + case 99: // expr_compare: expr "&&" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2397 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2378 "parser.cpp" break; - case 104: // expr_compare: expr ">" expr + case 100: // expr_compare: expr "==" expr #line 493 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2403 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2384 "parser.cpp" break; - case 105: // expr_binary: expr "|" expr + case 101: // expr_compare: expr "!=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2390 "parser.cpp" + break; + + case 102: // expr_compare: expr "<=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2396 "parser.cpp" + break; + + case 103: // expr_compare: expr ">=" expr +#line 496 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2402 "parser.cpp" + break; + + case 104: // expr_compare: expr "<" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2409 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2408 "parser.cpp" break; - case 106: // expr_binary: expr "&" expr + case 105: // expr_compare: expr ">" expr #line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2415 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2414 "parser.cpp" break; - case 107: // expr_binary: expr "^" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2421 "parser.cpp" - break; - - case 108: // expr_binary: expr "<<" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2427 "parser.cpp" - break; - - case 109: // expr_binary: expr ">>" expr -#line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2433 "parser.cpp" - break; - - case 110: // expr_binary: expr "+" expr + case 106: // expr_ternary: expr "?" expr ":" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2439 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2420 "parser.cpp" break; - case 111: // expr_binary: expr "-" expr -#line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2445 "parser.cpp" - break; - - case 112: // expr_binary: expr "*" expr -#line 504 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2451 "parser.cpp" - break; - - case 113: // expr_binary: expr "/" expr -#line 505 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2457 "parser.cpp" - break; - - case 114: // expr_binary: expr "%" expr + case 107: // expr_binary: expr "|" expr #line 506 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2463 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2426 "parser.cpp" break; - case 115: // expr_primitive: "(" expr ")" + case 108: // expr_binary: expr "&" expr +#line 507 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2432 "parser.cpp" + break; + + case 109: // expr_binary: expr "^" expr +#line 508 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2438 "parser.cpp" + break; + + case 110: // expr_binary: expr "<<" expr +#line 509 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2444 "parser.cpp" + break; + + case 111: // expr_binary: expr ">>" expr #line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2469 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2450 "parser.cpp" break; - case 116: // expr_primitive: "~" expr + case 112: // expr_binary: expr "+" expr #line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2475 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2456 "parser.cpp" break; - case 117: // expr_primitive: "!" expr + case 113: // expr_binary: expr "-" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2481 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2462 "parser.cpp" break; - case 118: // expr_primitive: expr_call + case 114: // expr_binary: expr "*" expr #line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2487 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2468 "parser.cpp" break; - case 119: // expr_primitive: expr_call_thread + case 115: // expr_binary: expr "/" expr #line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2493 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2474 "parser.cpp" break; - case 120: // expr_primitive: expr_call_childthread + case 116: // expr_binary: expr "%" expr #line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2499 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2480 "parser.cpp" break; - case 121: // expr_primitive: expr_function -#line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2505 "parser.cpp" - break; - - case 122: // expr_primitive: expr_add_array -#line 517 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2511 "parser.cpp" - break; - - case 123: // expr_primitive: expr_array -#line 518 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2517 "parser.cpp" - break; - - case 124: // expr_primitive: expr_field + case 117: // expr_primitive: "(" expr ")" #line 519 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2523 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2486 "parser.cpp" break; - case 125: // expr_primitive: expr_size + case 118: // expr_primitive: "~" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2529 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2492 "parser.cpp" break; - case 126: // expr_primitive: thisthread + case 119: // expr_primitive: "!" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2535 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2498 "parser.cpp" break; - case 127: // expr_primitive: empty_array + case 120: // expr_primitive: expr_call #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2541 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2504 "parser.cpp" break; - case 128: // expr_primitive: undefined + case 121: // expr_primitive: expr_call_thread #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2547 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2510 "parser.cpp" break; - case 129: // expr_primitive: game + case 122: // expr_primitive: expr_call_childthread #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2553 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2516 "parser.cpp" break; - case 130: // expr_primitive: self + case 123: // expr_primitive: expr_function #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2559 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2522 "parser.cpp" break; - case 131: // expr_primitive: anim + case 124: // expr_primitive: expr_add_array #line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2565 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2528 "parser.cpp" break; - case 132: // expr_primitive: level + case 125: // expr_primitive: expr_array #line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2571 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2534 "parser.cpp" break; - case 133: // expr_primitive: animation + case 126: // expr_primitive: expr_field #line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2577 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2540 "parser.cpp" break; - case 134: // expr_primitive: animtree + case 127: // expr_primitive: expr_size #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2583 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2546 "parser.cpp" break; - case 135: // expr_primitive: name + case 128: // expr_primitive: thisthread #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2589 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2552 "parser.cpp" break; - case 136: // expr_primitive: istring + case 129: // expr_primitive: empty_array #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2595 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2558 "parser.cpp" break; - case 137: // expr_primitive: string + case 130: // expr_primitive: undefined #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2601 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2564 "parser.cpp" break; - case 138: // expr_primitive: vector + case 131: // expr_primitive: game #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2607 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2570 "parser.cpp" break; - case 139: // expr_primitive: neg_float + case 132: // expr_primitive: self #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2613 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2576 "parser.cpp" break; - case 140: // expr_primitive: neg_integer + case 133: // expr_primitive: anim #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2619 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2582 "parser.cpp" break; - case 141: // expr_primitive: float + case 134: // expr_primitive: level #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2625 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2588 "parser.cpp" break; - case 142: // expr_primitive: integer + case 135: // expr_primitive: animation #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2631 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2594 "parser.cpp" break; - case 143: // expr_primitive: false + case 136: // expr_primitive: animtree #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2637 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2600 "parser.cpp" break; - case 144: // expr_primitive: true + case 137: // expr_primitive: name #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2643 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2606 "parser.cpp" break; - case 145: // expr_call: expr_call_function + case 138: // expr_primitive: istring +#line 540 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2612 "parser.cpp" + break; + + case 139: // expr_primitive: string +#line 541 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2618 "parser.cpp" + break; + + case 140: // expr_primitive: vector +#line 542 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2624 "parser.cpp" + break; + + case 141: // expr_primitive: neg_float #line 543 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2649 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2630 "parser.cpp" break; - case 146: // expr_call: expr_call_pointer + case 142: // expr_primitive: neg_integer #line 544 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2655 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2636 "parser.cpp" break; - case 147: // expr_call: object expr_call_function + case 143: // expr_primitive: float #line 545 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2661 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2642 "parser.cpp" break; - case 148: // expr_call: object expr_call_pointer + case 144: // expr_primitive: integer #line 546 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2667 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2648 "parser.cpp" break; - case 149: // expr_call_thread: "thread" expr_call_function -#line 550 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2673 "parser.cpp" + case 145: // expr_primitive: false +#line 547 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2654 "parser.cpp" break; - case 150: // expr_call_thread: "thread" expr_call_pointer -#line 551 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2679 "parser.cpp" + case 146: // expr_primitive: true +#line 548 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2660 "parser.cpp" break; - case 151: // expr_call_thread: object "thread" expr_call_function + case 147: // expr_call: expr_call_function #line 552 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2685 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2666 "parser.cpp" break; - case 152: // expr_call_thread: object "thread" expr_call_pointer + case 148: // expr_call: expr_call_pointer #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2691 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2672 "parser.cpp" break; - case 153: // expr_call_childthread: "childthread" expr_call_function -#line 557 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2697 "parser.cpp" + case 149: // expr_call: object expr_call_function +#line 554 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2678 "parser.cpp" break; - case 154: // expr_call_childthread: "childthread" expr_call_pointer -#line 558 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2703 "parser.cpp" + case 150: // expr_call: object expr_call_pointer +#line 555 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2684 "parser.cpp" break; - case 155: // expr_call_childthread: object "childthread" expr_call_function + case 151: // expr_call_thread: "thread" expr_call_function #line 559 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2709 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2690 "parser.cpp" break; - case 156: // expr_call_childthread: object "childthread" expr_call_pointer + case 152: // expr_call_thread: "thread" expr_call_pointer #line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2715 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2696 "parser.cpp" break; - case 157: // expr_call_function: name "(" expr_arguments ")" -#line 565 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2721 "parser.cpp" + case 153: // expr_call_thread: object "thread" expr_call_function +#line 561 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2702 "parser.cpp" break; - case 158: // expr_call_function: file "::" name "(" expr_arguments ")" + case 154: // expr_call_thread: object "thread" expr_call_pointer +#line 562 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2708 "parser.cpp" + break; + + case 155: // expr_call_childthread: "childthread" expr_call_function +#line 566 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2714 "parser.cpp" + break; + + case 156: // expr_call_childthread: "childthread" expr_call_pointer #line 567 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2727 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2720 "parser.cpp" break; - case 159: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 572 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2733 "parser.cpp" + case 157: // expr_call_childthread: object "childthread" expr_call_function +#line 568 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2726 "parser.cpp" break; - case 160: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 158: // expr_call_childthread: object "childthread" expr_call_pointer +#line 569 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2732 "parser.cpp" + break; + + case 159: // expr_call_function: name "(" expr_arguments ")" #line 574 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2738 "parser.cpp" + break; + + case 160: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2744 "parser.cpp" + break; + + case 161: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 581 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2750 "parser.cpp" + break; + + case 162: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 583 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2739 "parser.cpp" +#line 2756 "parser.cpp" break; - case 161: // expr_arguments: expr_arguments_filled -#line 578 "parser.ypp" + case 163: // expr_arguments: expr_arguments_filled +#line 587 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2745 "parser.cpp" +#line 2762 "parser.cpp" break; - case 162: // expr_arguments: expr_arguments_empty -#line 579 "parser.ypp" + case 164: // expr_arguments: expr_arguments_empty +#line 588 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2751 "parser.cpp" +#line 2768 "parser.cpp" break; - case 163: // expr_arguments_filled: expr_arguments "," expr -#line 584 "parser.ypp" + case 165: // expr_arguments_filled: expr_arguments "," expr +#line 593 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2757 "parser.cpp" +#line 2774 "parser.cpp" break; - case 164: // expr_arguments_filled: expr -#line 586 "parser.ypp" + case 166: // expr_arguments_filled: expr +#line 595 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2763 "parser.cpp" +#line 2780 "parser.cpp" break; - case 165: // expr_arguments_empty: %empty -#line 591 "parser.ypp" + case 167: // expr_arguments_empty: %empty +#line 600 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2769 "parser.cpp" +#line 2786 "parser.cpp" break; - case 166: // expr_function: "::" name -#line 596 "parser.ypp" + case 168: // expr_function: "::" name +#line 605 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2775 "parser.cpp" +#line 2792 "parser.cpp" break; - case 167: // expr_function: file "::" name -#line 598 "parser.ypp" + case 169: // expr_function: file "::" name +#line 607 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2781 "parser.cpp" +#line 2798 "parser.cpp" break; - case 168: // expr_add_array: "[" expr_arguments_filled "]" -#line 603 "parser.ypp" + case 170: // expr_add_array: "[" expr_arguments_filled "]" +#line 612 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2787 "parser.cpp" +#line 2804 "parser.cpp" break; - case 169: // expr_array: object "[" expr "]" -#line 608 "parser.ypp" + case 171: // expr_array: object "[" expr "]" +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2793 "parser.cpp" +#line 2810 "parser.cpp" break; - case 170: // expr_field: object "." name -#line 613 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2799 "parser.cpp" - break; - - case 171: // expr_size: object ".size" -#line 618 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2805 "parser.cpp" - break; - - case 172: // object: expr_call + case 172: // expr_field: object "." name #line 622 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2811 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2816 "parser.cpp" break; - case 173: // object: expr_array -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2817 "parser.cpp" - break; - - case 174: // object: expr_field -#line 624 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2823 "parser.cpp" - break; - - case 175: // object: game -#line 625 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2829 "parser.cpp" - break; - - case 176: // object: self -#line 626 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2835 "parser.cpp" - break; - - case 177: // object: anim + case 173: // expr_size: object ".size" #line 627 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2841 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2822 "parser.cpp" break; - case 178: // object: level -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2847 "parser.cpp" + case 174: // object: expr_call +#line 631 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2828 "parser.cpp" break; - case 179: // object: name -#line 629 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2853 "parser.cpp" - break; - - case 180: // thisthread: "thisthread" + case 175: // object: expr_array #line 632 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2859 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2834 "parser.cpp" break; - case 181: // empty_array: "[" "]" + case 176: // object: expr_field #line 633 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2865 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2840 "parser.cpp" break; - case 182: // undefined: "undefined" + case 177: // object: game #line 634 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2871 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2846 "parser.cpp" break; - case 183: // game: "game" + case 178: // object: self #line 635 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2877 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2852 "parser.cpp" break; - case 184: // self: "self" + case 179: // object: anim #line 636 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2883 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2858 "parser.cpp" break; - case 185: // anim: "anim" + case 180: // object: level #line 637 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2889 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2864 "parser.cpp" break; - case 186: // level: "level" + case 181: // object: name #line 638 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2895 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2870 "parser.cpp" break; - case 187: // animation: "%" "identifier" -#line 639 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2901 "parser.cpp" - break; - - case 188: // animtree: "#animtree" -#line 640 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2907 "parser.cpp" - break; - - case 189: // name: "identifier" + case 182: // thisthread: "thisthread" #line 641 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2913 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2876 "parser.cpp" break; - case 190: // file: "file path" + case 183: // empty_array: "[" "]" #line 642 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2919 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2882 "parser.cpp" break; - case 191: // istring: "localized string" + case 184: // undefined: "undefined" #line 643 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2925 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2888 "parser.cpp" break; - case 192: // string: "string literal" + case 185: // game: "game" #line 644 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2931 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2894 "parser.cpp" break; - case 193: // vector: "(" expr "," expr "," expr ")" + case 186: // self: "self" #line 645 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2937 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2900 "parser.cpp" break; - case 194: // neg_float: "-" "float" + case 187: // anim: "anim" #line 646 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2943 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2906 "parser.cpp" break; - case 195: // neg_integer: "-" "int" + case 188: // level: "level" #line 647 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2949 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2912 "parser.cpp" break; - case 196: // float: "float" + case 189: // animation: "%" "identifier" #line 648 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2955 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2918 "parser.cpp" break; - case 197: // integer: "int" + case 190: // animtree: "#animtree" #line 649 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2961 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2924 "parser.cpp" break; - case 198: // false: "false" + case 191: // name: "identifier" #line 650 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 2967 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2930 "parser.cpp" break; - case 199: // true: "true" + case 192: // file: "file path" #line 651 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2936 "parser.cpp" + break; + + case 193: // istring: "localized string" +#line 652 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2942 "parser.cpp" + break; + + case 194: // string: "string literal" +#line 653 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2948 "parser.cpp" + break; + + case 195: // vector: "(" expr "," expr "," expr ")" +#line 654 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2954 "parser.cpp" + break; + + case 196: // neg_float: "-" "float" +#line 655 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2960 "parser.cpp" + break; + + case 197: // neg_integer: "-" "int" +#line 656 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2966 "parser.cpp" + break; + + case 198: // float: "float" +#line 657 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2972 "parser.cpp" + break; + + case 199: // integer: "int" +#line 658 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2978 "parser.cpp" + break; + + case 200: // false: "false" +#line 659 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 2984 "parser.cpp" + break; + + case 201: // true: "true" +#line 660 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 2973 "parser.cpp" +#line 2990 "parser.cpp" break; -#line 2977 "parser.cpp" +#line 2994 "parser.cpp" default: break; @@ -3163,28 +3180,29 @@ namespace xsk { namespace gsc { namespace iw6 { "else", "while", "for", "foreach", "in", "switch", "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", - "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "++", - "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", - "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", - "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", + "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", + "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", + "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", + "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", "int", "ADD_ARRAY", - "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", - "$accept", "root", "program", "include", "define", "usingtree", - "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", - "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", "stmt_wait", - "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", - "stmt_if", "stmt_ifelse", "stmt_while", "stmt_for", "stmt_foreach", - "stmt_switch", "stmt_case", "stmt_default", "stmt_break", - "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", - "stmt_prof_end", "for_stmt", "for_expr", "expr", "expr_assign", - "expr_compare", "expr_binary", "expr_primitive", "expr_call", - "expr_call_thread", "expr_call_childthread", "expr_call_function", - "expr_call_pointer", "expr_arguments", "expr_arguments_filled", - "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", - "expr_field", "expr_size", "object", "thisthread", "empty_array", - "undefined", "game", "self", "anim", "level", "animation", "animtree", - "name", "file", "istring", "string", "vector", "neg_float", - "neg_integer", "float", "integer", "false", "true", YY_NULLPTR + "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", + "POSTDEC", "$accept", "root", "program", "include", "define", + "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", + "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", + "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", + "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", + "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", + "stmt_prof_begin", "stmt_prof_end", "for_stmt", "for_expr", "expr", + "expr_assign", "expr_compare", "expr_ternary", "expr_binary", + "expr_primitive", "expr_call", "expr_call_thread", + "expr_call_childthread", "expr_call_function", "expr_call_pointer", + "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", + "expr_function", "expr_add_array", "expr_array", "expr_field", + "expr_size", "object", "thisthread", "empty_array", "undefined", "game", + "self", "anim", "level", "animation", "animtree", "name", "file", + "istring", "string", "vector", "neg_float", "neg_integer", "float", + "integer", "false", "true", YY_NULLPTR }; return yy_sname[yysymbol]; } @@ -3449,518 +3467,570 @@ namespace xsk { namespace gsc { namespace iw6 { } - const short parser::yypact_ninf_ = -240; + const short parser::yypact_ninf_ = -245; - const short parser::yytable_ninf_ = -180; + const short parser::yytable_ninf_ = -182; const short parser::yypact_[] = { - 3, -71, -17, -240, 28, 3, -240, -240, -240, -240, - -240, -20, -240, -6, -38, -240, -240, -240, -21, 774, - -240, -240, 25, -16, -240, -240, 32, 32, -240, 29, - -240, -240, -240, -240, -240, -240, -240, 774, 650, -21, - 774, 774, -73, -13, -240, -240, -240, 1380, -240, -240, - -240, 30, -240, -240, -240, -240, -240, -240, 40, 65, - -240, 673, -240, -240, -240, 735, 743, 804, 930, -240, - -240, 6, 33, -240, -240, -240, -240, -240, -240, -240, - -240, -240, 36, 47, -21, 34, -240, -240, 42, 44, - -240, -240, 51, 944, 650, -240, 1458, 52, 54, -240, - -240, -240, -240, -240, -240, -240, -240, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 32, 32, -240, 836, -21, - -240, -240, 774, -21, -240, 485, -240, -240, 774, -21, - 774, -240, 774, 1251, 774, -240, 130, 130, 1468, 977, - 84, 84, 206, 206, 206, 206, 1020, 1509, 1499, 171, - 171, -240, -240, -240, -240, -240, -240, -240, 1290, -240, - -10, -240, 66, 60, 78, 79, 774, 61, 81, 89, - 95, 99, 114, -68, 108, 109, 118, 712, -240, 187, - 187, -240, -240, 581, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, 119, 120, 139, -240, - -240, 882, -240, -240, -240, -240, 42, 1251, 66, 1329, - 1367, 152, 1458, -240, -240, 774, -240, 774, 774, 1414, - -240, 774, 774, 932, -21, 774, 112, 111, 166, 170, - -240, -240, -240, -240, 1427, -240, -5, -5, -240, -240, - -240, -240, -240, 189, 195, 197, 201, -240, -240, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 202, 774, 208, 8, 10, 11, -240, 1083, 1116, 192, - -240, 488, 1, 1126, -240, -240, -240, -240, 774, 774, - 774, 774, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, - 1458, 1458, 1458, 210, 1159, 774, -240, 205, 214, 625, - 625, 774, 774, -21, 47, 1169, 987, 1030, 1073, 774, - -240, 14, -240, -240, 239, -240, 216, 1458, 1202, 246, - -240, 219, 227, 774, 228, 774, 230, 774, 87, -240, - 625, 932, 625, 774, -240, -240, 101, -240, 107, -240, - 115, -240, -240, 233, -240, 1212, 234, 243, 245, 625, - 625, -240, -240, -240, -240, -240 + 3, -50, -3, -245, 20, 3, -245, -245, -245, -245, + -245, -20, -245, -2, -37, -245, -245, -245, -31, 762, + -245, -245, 23, -16, -245, -245, -15, -15, -245, 21, + -245, -245, -245, -245, -245, -245, -245, 762, 480, -31, + 762, 762, -76, 4, -245, -245, -245, 1588, -245, -245, + -245, -245, 31, -245, -245, -245, -245, -245, -245, 393, + 508, -245, 722, -245, -245, -245, 785, 793, 921, 931, + -245, -245, 14, 19, -245, -245, -245, -245, -245, -245, + -245, -245, -245, 43, 49, -31, 52, -245, -245, 57, + 53, -245, -245, 63, 988, 480, -245, 1671, 62, 66, + -245, -245, -245, -245, -245, -245, -245, -245, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, -15, -15, -245, + 825, -31, -245, -245, 762, -31, -245, 583, -245, -245, + 762, -31, 762, -245, 762, 1398, 762, -245, 1553, 75, + 75, 1702, 1712, 85, 85, 70, 70, 70, 70, 930, + 1753, 1743, 79, 79, -245, -245, -245, -245, -245, -245, + -245, 1438, -245, -5, -245, 74, 65, 78, 81, 762, + 69, 87, 90, 91, 95, 97, -64, 77, 94, 120, + 699, -245, 410, 410, -245, -245, 628, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, 121, + 122, 142, -245, -245, 872, -245, -245, -245, -245, 57, + 1398, 74, 1478, 1517, 96, 1671, 762, -245, -245, 762, + -245, 762, 762, 1623, -245, 762, 762, 496, -31, 762, + 113, 155, 159, 161, -245, -245, -245, -245, 1658, -245, + -13, -13, -245, -245, -245, -245, -245, 172, 173, 174, + 176, -245, -245, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 177, 762, 178, 1671, 10, 11, + 33, -245, 1154, 1188, 167, -245, 952, 1, 1222, -245, + -245, -245, -245, 762, 762, 762, 762, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 181, 1256, + 762, -245, 182, 184, 673, 673, 762, 762, -31, 49, + 1290, 1032, 1076, 1120, 762, -245, 35, -245, -245, 211, + -245, 185, 1671, 1324, 224, -245, 196, 197, 762, 201, + 762, 202, 762, 36, -245, 673, 496, 673, 762, -245, + -245, 39, -245, 42, -245, 46, -245, -245, 213, -245, + 1358, 206, 210, 214, 673, 673, -245, -245, -245, -245, + -245 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 189, 0, 2, 6, 7, 9, 10, - 11, 0, 190, 0, 0, 1, 4, 5, 17, 0, - 8, 192, 0, 0, 16, 188, 0, 0, 180, 0, - 199, 198, 182, 183, 184, 185, 186, 0, 165, 0, - 0, 0, 0, 0, 191, 196, 197, 0, 79, 80, - 81, 118, 119, 120, 145, 146, 121, 122, 123, 124, - 125, 0, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 0, 0, 0, 0, 149, 150, 0, 0, - 153, 154, 0, 0, 165, 181, 164, 0, 161, 162, - 166, 117, 116, 194, 195, 187, 13, 0, 0, 0, + 3, 0, 0, 191, 0, 2, 6, 7, 9, 10, + 11, 0, 192, 0, 0, 1, 4, 5, 17, 0, + 8, 194, 0, 0, 16, 190, 0, 0, 182, 0, + 201, 200, 184, 185, 186, 187, 188, 0, 167, 0, + 0, 0, 0, 0, 193, 198, 199, 0, 79, 80, + 81, 82, 120, 121, 122, 147, 148, 123, 124, 125, + 126, 127, 0, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 0, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 0, 0, 0, 0, 151, 152, 0, + 0, 155, 156, 0, 0, 167, 183, 166, 0, 163, + 164, 168, 119, 118, 196, 197, 189, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, - 147, 148, 165, 0, 12, 0, 14, 15, 0, 0, - 0, 115, 0, 164, 0, 168, 108, 109, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 110, - 111, 112, 113, 114, 151, 152, 155, 156, 0, 170, - 0, 161, 167, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 44, 18, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 172, 0, 173, - 174, 0, 175, 176, 177, 178, 179, 0, 0, 0, - 0, 0, 163, 169, 157, 165, 72, 165, 165, 0, - 56, 0, 0, 76, 0, 0, 0, 0, 0, 0, - 67, 68, 69, 71, 0, 172, 82, 83, 41, 43, - 47, 45, 46, 0, 0, 0, 0, 84, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 0, 0, 149, 150, 167, 0, 12, 0, 14, 15, + 0, 0, 0, 117, 0, 166, 0, 170, 0, 110, + 111, 98, 99, 100, 101, 102, 103, 104, 105, 107, + 108, 109, 112, 113, 114, 115, 116, 153, 154, 157, + 158, 0, 172, 0, 163, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 75, 0, 0, 0, 66, 65, 64, 70, 0, 0, - 0, 0, 86, 92, 93, 94, 95, 96, 87, 88, - 89, 91, 90, 0, 0, 165, 158, 0, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 0, 165, - 193, 0, 73, 74, 57, 59, 0, 77, 0, 0, - 63, 0, 0, 165, 0, 165, 0, 165, 0, 159, - 0, 76, 0, 0, 48, 50, 0, 53, 0, 55, - 0, 160, 58, 0, 61, 0, 0, 0, 0, 0, - 0, 49, 52, 54, 60, 62 + 0, 42, 0, 0, 44, 18, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, + 174, 0, 175, 176, 0, 177, 178, 179, 180, 181, + 0, 0, 0, 0, 0, 165, 0, 171, 159, 167, + 72, 167, 167, 0, 56, 0, 0, 76, 0, 0, + 0, 0, 0, 0, 67, 68, 69, 71, 0, 174, + 83, 84, 41, 43, 47, 45, 46, 0, 0, 0, + 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, + 0, 51, 0, 0, 0, 75, 0, 0, 0, 66, + 65, 64, 70, 0, 0, 0, 0, 87, 93, 94, + 95, 96, 97, 88, 89, 90, 92, 91, 0, 0, + 167, 160, 0, 0, 0, 0, 78, 0, 0, 0, + 0, 0, 0, 0, 167, 195, 0, 73, 74, 57, + 59, 0, 77, 0, 0, 63, 0, 0, 167, 0, + 167, 0, 167, 0, 161, 0, 76, 0, 0, 48, + 50, 0, 53, 0, 55, 0, 162, 58, 0, 61, + 0, 0, 0, 0, 0, 0, 49, 52, 54, 60, + 62 }; const short parser::yypgoto_[] = { - -240, -240, -240, 277, 290, -240, -240, -240, -240, 113, - -82, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -54, -240, 63, -239, -240, -240, - -240, -39, 71, -240, -24, -19, -116, -25, -240, -240, - -240, 26, 85, -240, 100, -240, -240, -240, 110, 125, - 213, 224, -240, -240, 0, 5, -240, 9, -240, -240, - 124, -240, 126, -240, -240 + -245, -245, -245, 259, 263, -245, -245, -245, -245, 41, + -80, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -87, -245, 64, -244, -245, -245, + -245, -245, -99, -85, -245, -25, -19, -120, -27, -245, + -245, -245, 26, 86, -245, 101, -245, -245, -245, 125, + 130, 216, 221, -245, -245, 0, 5, -245, 9, -245, + -245, 88, -245, 98, -245, -245 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 289, 336, 96, 216, 48, 49, - 50, 51, 52, 53, 54, 55, 97, 171, 99, 56, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 294, 341, 97, 219, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 98, 174, 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81 + 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 136, 86, 90, 290, 11, 13, 87, 91, 1, - 2, 246, 12, 98, 103, 104, 170, 21, 24, 18, - 46, 322, 14, 22, 83, 29, 88, 88, 15, 84, - 234, 89, 89, -179, -179, 144, -179, 130, 128, 100, - -179, 129, 131, 20, 19, 132, 323, 21, 316, -179, - 317, 318, -179, 144, 349, 144, 144, -172, -172, 144, - -172, 88, 29, 3, -172, 82, 89, -173, -173, 98, - -173, 105, 92, -172, -173, 85, -172, 138, 12, 3, - 133, 132, 47, -173, 137, 134, -173, 3, 135, -179, - -179, 139, -174, -174, 140, -174, 217, 144, 145, -174, - 93, 164, 166, 101, 102, 235, 165, 167, -174, 236, - 240, -174, 290, -172, -172, 12, 3, 237, 238, 283, - 241, 284, 285, -173, -173, 88, 88, 361, 242, 169, - 89, 89, 144, 172, 243, 226, 107, 108, 244, 228, - 89, 366, 113, 114, 115, 116, 144, 367, -174, -174, - 255, 255, 144, 245, 217, 368, 250, 143, 251, 294, - 144, 219, 120, 121, 122, 123, 124, 252, 260, 261, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 262, 226, - 226, 168, 247, 226, 89, 89, 282, 130, 89, 331, - 104, 227, 131, 229, 255, 230, 218, 232, 120, 121, - 122, 123, 124, 348, 295, 219, 219, 29, 296, 219, - 220, 88, 33, 34, 35, 36, 89, 356, 298, 358, - 85, 360, 130, 130, 299, 221, 300, 131, 131, 239, - 301, 321, 340, 226, 292, 222, 313, 315, 89, 329, - 254, 122, 123, 124, 332, 350, 88, 88, 107, 108, - 223, 89, 89, 333, 218, 351, 353, 130, 354, 219, - 12, 3, 131, 369, 220, 220, 355, 357, 220, 359, - 217, 217, 16, 371, 120, 121, 122, 123, 124, 256, - 257, 88, 372, 221, 373, 17, 89, 363, 0, 222, - 222, 0, 0, 222, 287, 288, 259, 248, 293, 249, - 0, 217, 255, 217, 223, 223, 0, 0, 223, 226, - 226, 0, 0, 339, 89, 89, 0, 0, 220, 0, - 217, 217, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 291, 314, 219, 219, 0, 224, 0, - 226, 226, 226, 222, 0, 89, 89, 89, 0, 225, - 0, 325, 326, 327, 328, 0, 0, 0, 223, 226, - 226, 0, 0, 0, 89, 89, 219, 219, 219, 0, - 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, - 218, 218, 0, 0, 0, 219, 219, 0, 0, 0, - 0, 0, 224, 224, 220, 220, 224, 0, 0, 0, - 0, 0, 0, 225, 225, 0, 365, 225, 0, 221, - 221, 218, 0, 218, 0, 0, 0, 0, 0, 222, - 222, 0, 334, 335, 0, 220, 220, 220, 0, 0, - 218, 218, 0, 0, 223, 223, 0, 0, 0, 0, - 221, 291, 221, 0, 220, 220, 224, 0, 0, 0, - 222, 222, 222, 362, 0, 364, 0, 225, 0, 221, - 221, 0, 0, 0, 0, 223, 223, 223, 0, 222, - 222, 0, 374, 375, 0, 0, 0, 0, 173, 174, - 175, 0, 0, 0, 223, 223, 176, 0, 0, 177, - 178, 0, 179, 180, 181, 0, 182, 183, 184, 185, - 186, 187, 26, 0, 0, 29, 0, 0, 29, 0, - 33, 34, 35, 36, 0, 0, 135, 188, 85, 0, - 0, 128, 224, 224, 129, 189, 190, 0, 267, 268, - 0, 0, 0, 225, 225, 0, 0, 0, 0, 0, - 0, 0, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 224, 224, 224, 0, 0, 12, 3, - 0, 12, 3, 0, 225, 225, 225, 0, 0, 0, - 0, 0, 224, 224, 173, 174, 175, 0, 0, 0, - 0, 0, 176, 225, 225, 177, 178, 0, 179, 180, - 181, 0, 182, 183, 184, 185, 186, 187, 26, 0, - 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, - 0, 0, 135, 258, 85, 0, 0, 0, 173, 174, - 175, 189, 190, 0, 0, 0, 176, 0, 0, 177, - 178, 0, 179, 180, 181, 0, 182, 183, 184, 185, - 186, 187, 26, 0, 0, 29, 0, 0, 25, 0, - 33, 34, 35, 36, 12, 3, 135, 0, 85, 0, - 0, 0, 0, 0, 0, 189, 190, 26, 27, 28, + 11, 87, 91, 295, 138, 11, 13, 88, 92, 1, + 2, 99, 104, 105, 173, 29, 250, 29, 24, 18, + 15, 327, 21, 22, 84, 46, 89, 89, 86, 85, + 130, 90, 90, 131, 12, 238, 14, 132, 220, 101, + 146, -181, -181, 133, -181, 19, 328, 20, -181, 21, + 321, 322, 221, 134, 3, 146, 146, -181, -174, -174, + -181, -174, 89, 83, 93, -174, 135, 90, 99, 12, + 3, 12, 3, 323, -174, 354, 366, -174, 146, 371, + 146, 146, 372, 47, 146, 139, 373, 146, 3, 106, + 137, 146, 136, 259, 259, 140, 134, 220, -181, -181, + 141, 94, 167, 169, 102, 103, 142, 146, 168, 170, + 147, 221, 295, 239, 240, -174, -174, 241, 244, 288, + 242, 289, 290, 109, 110, 254, 245, 89, 89, 246, + 247, 172, 90, 90, 248, 175, 249, 229, 109, 110, + 286, 231, 90, 255, 115, 116, 117, 118, 259, 122, + 123, 124, 125, 126, 122, 123, 124, 125, 126, 145, + 124, 125, 126, 222, 122, 123, 124, 125, 126, 256, + 264, 265, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 266, 229, 229, 171, 251, 229, 90, 90, 132, + 336, 90, 105, 299, 230, 133, 232, 300, 233, 301, + 235, 303, 304, 305, 353, 306, 326, 320, 222, 222, + 334, 318, 222, 223, 89, 220, 220, 355, 361, 90, + 363, 337, 365, 338, 356, 132, 132, 263, 224, 221, + 221, 133, 133, 243, 358, 359, 360, 229, 297, 345, + 362, 364, 90, 374, 258, 376, 220, 259, 220, 377, + 89, 89, 225, 378, 16, 90, 90, 226, 17, 368, + 221, 132, 221, 222, 252, 220, 220, 133, 223, 223, + 0, 0, 223, 0, 253, 0, 0, 0, 0, 221, + 221, 0, 0, 260, 261, 0, 89, 224, 0, 0, + 287, 90, 0, 0, 0, 0, 0, 0, 0, 292, + 293, 0, 0, 298, 0, 0, 0, 225, 225, 0, + 0, 225, 226, 226, 229, 229, 226, 0, 344, 90, + 90, 0, 0, 223, 0, 0, 0, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 296, 319, + 222, 222, 0, 227, 0, 229, 229, 229, 228, 0, + 90, 90, 90, 0, 0, 339, 340, 330, 331, 332, + 333, 0, 225, 0, 229, 229, 0, 226, 0, 90, + 90, 222, 222, 222, 0, 0, 0, 0, 0, 0, + 342, 343, 0, 0, 0, 0, 367, 0, 369, 0, + 222, 222, 0, 0, 0, 0, 0, 0, 227, 227, + 223, 223, 227, 228, 228, 379, 380, 228, 0, 0, + -175, -175, 370, -175, 0, 224, 224, -175, 0, 0, + 0, 0, 0, 0, 0, 0, -175, 0, 0, -175, + 29, 223, 223, 223, 0, 33, 34, 35, 36, 225, + 225, 0, 0, 86, 226, 226, 224, 296, 224, 0, + 223, 223, 0, 227, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 224, 224, -175, -175, 0, + 225, 225, 225, 0, 0, 226, 226, 226, 25, 0, + 0, 0, 0, 0, 12, 3, 0, 0, 0, 225, + 225, 0, 0, 0, 226, 226, 0, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, - 0, 0, 0, 94, 95, 0, 0, 39, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 12, 3, - 0, 0, 40, 41, 0, 0, 128, 0, 0, 129, + 0, 0, 0, 95, 96, 0, 29, 39, 0, 0, + 0, 33, 34, 35, 36, -176, -176, 0, -176, 86, + 227, 227, -176, 40, 41, 228, 228, 192, 193, 0, + 0, -176, 0, 0, -176, 0, 0, 0, 0, 0, + 42, 0, 0, 43, 12, 3, 21, 44, 45, 46, + 0, 227, 227, 227, 0, 0, 228, 228, 228, 0, + 12, 3, 0, 0, 0, 0, 176, 177, 178, 0, + 227, 227, -176, -176, 179, 228, 228, 180, 181, 0, + 182, 183, 184, 0, 185, 186, 187, 188, 189, 190, + 26, 0, 0, 29, 0, 0, 0, 0, 33, 34, + 35, 36, 0, 0, 137, 191, 86, 0, 0, 0, + 0, 176, 177, 178, 192, 193, 0, 0, 0, 179, + 0, 0, 180, 181, 0, 182, 183, 184, 0, 185, + 186, 187, 188, 189, 190, 26, 0, 0, 29, 0, + 0, 0, 0, 33, 34, 35, 36, 12, 3, 137, + 262, 86, 0, 0, 0, 0, 176, 177, 178, 192, + 193, 0, 0, 0, 179, 0, 0, 180, 181, 0, + 182, 183, 184, 0, 185, 186, 187, 188, 189, 190, + 26, 0, 0, 29, 0, 0, 0, 25, 33, 34, + 35, 36, 12, 3, 137, 0, 86, 0, 0, 0, + 0, 0, 0, 0, 192, 193, 26, 27, 28, 29, + 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, + 0, 0, 38, 0, 0, 0, 39, 0, 257, 127, + 128, 0, 29, 0, 0, 0, 129, 12, 3, 0, + 0, 0, 40, 41, 0, 130, 0, 0, 131, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, 38, 12, 3, 0, 39, - 0, 253, -175, -175, 0, -175, 0, 0, 0, -175, - -176, -176, 0, -176, 40, 41, 0, -176, -175, 0, - 0, -175, 25, 0, 0, 0, -176, 0, 0, -176, - 0, 42, 0, 0, 43, 12, 3, 21, 44, 45, - 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, - 34, 35, 36, 37, 0, 0, 0, 38, -175, -175, - 0, 39, 0, 0, 0, 0, -176, -176, 0, 0, - 0, -177, -177, 0, -177, 0, 40, 41, -177, 0, - 0, 0, 0, 0, 25, 0, 0, -177, 0, 0, - -177, 0, 0, 42, 0, 0, 43, 12, 3, 21, - 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, - 0, 33, 34, 35, 36, 37, 0, 0, 0, 94, - 0, 0, 0, 39, 0, 0, 0, -177, -177, 0, - 0, 263, 264, 0, 265, 266, 0, 0, 40, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, + 0, 0, -177, -177, 0, -177, 0, 0, 0, -177, + -178, -178, 0, -178, 0, 40, 41, -178, -177, 0, + 0, -177, 0, 25, 0, 0, -178, 0, 0, -178, + 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, + 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, -177, + -177, 0, 39, 0, 0, 0, 0, -178, -178, 0, + 0, 267, 268, 0, 269, 270, 0, 0, 40, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 29, 0, 0, 42, 0, 0, 43, 12, - 3, 21, 44, 45, 46, 128, 0, 0, 129, 0, - 0, 0, 267, 268, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, -178, -178, 0, - -178, 0, 29, 0, -178, 12, 3, 33, 34, 35, - 36, 0, 0, -178, 0, 85, -178, 0, 0, 0, - 0, 0, 189, 190, 141, 0, 0, 0, 0, 142, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, -178, -178, 12, 3, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 342, 0, 107, - 108, 0, 343, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 344, 0, 107, 108, 0, 345, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 0, 118, 119, 120, 121, - 122, 123, 124, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 346, 0, 0, 0, 0, 347, 0, - 0, 0, 0, 319, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 320, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 324, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 330, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 341, - 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 352, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 370, 0, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 231, 0, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 233, 0, 0, 0, 0, 0, - 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 280, 0, 0, 0, 0, 0, 0, - 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 281, 0, 0, 0, 0, 0, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 106, - 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, + 3, 21, 44, 45, 46, 130, 0, 0, 131, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, -179, -179, + 0, -179, 0, 0, 0, -179, 12, 3, -180, -180, + 0, -180, 0, 0, -179, -180, 0, -179, 0, 0, + 0, 0, 0, 0, -180, 0, 0, -180, 0, 0, + 0, 0, 29, 109, 110, 0, 0, 113, 114, 115, + 116, 117, 118, 0, 0, 130, 0, 0, 131, 0, + 0, 0, 0, 271, 272, -179, -179, 120, 121, 122, + 123, 124, 125, 126, 0, -180, -180, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 143, 0, + 0, 0, 0, 144, 0, 0, 12, 3, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 347, 0, 0, 0, 0, 348, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 349, 0, 0, 0, + 0, 350, 0, 0, 0, 0, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 324, 0, 119, 120, 121, 122, + 123, 124, 125, 126, 108, 0, 0, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, + 119, 120, 121, 122, 123, 124, 125, 126, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 329, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 335, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 346, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 357, 0, 119, 120, 121, 122, + 123, 124, 125, 126, 108, 0, 0, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, + 119, 120, 121, 122, 123, 124, 125, 126, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 234, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 237, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 284, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 285, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 236, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 107, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 291, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 302, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 286, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 297, 0, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 107, 108, 0, 110, 111, 112, 113, 114, 115, 116, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 107, 108, 0, 0, 111, 112, 113, 114, 115, - 116, 107, 108, 0, 0, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 0, 118, 0, 120, 121, 122, - 123, 124, 0, 0, 0, 0, 0, 120, 121, 122, - 123, 124 + 125, 126, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 109, 110, 0, 112, 113, + 114, 115, 116, 117, 118, 109, 110, 0, 0, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 109, 110, 0, 0, + 113, 114, 115, 116, 117, 118, 109, 110, 0, 0, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 120, 0, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 122, 123, 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 83, 26, 27, 243, 5, 1, 26, 27, 6, - 7, 79, 83, 38, 87, 88, 132, 85, 18, 39, - 88, 20, 39, 14, 40, 30, 26, 27, 0, 45, - 40, 26, 27, 27, 28, 45, 30, 61, 43, 39, - 34, 46, 61, 49, 64, 39, 45, 85, 40, 43, - 40, 40, 46, 45, 40, 45, 45, 27, 28, 45, - 30, 61, 30, 84, 34, 40, 61, 27, 28, 94, - 30, 84, 43, 43, 34, 43, 46, 43, 83, 84, - 47, 39, 19, 43, 84, 49, 46, 84, 41, 83, - 84, 47, 27, 28, 43, 30, 135, 45, 44, 34, - 37, 125, 126, 40, 41, 39, 125, 126, 43, 49, - 49, 46, 351, 83, 84, 83, 84, 39, 39, 235, - 39, 237, 238, 83, 84, 125, 126, 40, 39, 129, - 125, 126, 45, 133, 39, 135, 52, 53, 39, 139, - 135, 40, 58, 59, 60, 61, 45, 40, 83, 84, - 189, 190, 45, 39, 193, 40, 48, 94, 49, 48, - 45, 135, 78, 79, 80, 81, 82, 49, 49, 49, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 49, 189, - 190, 128, 183, 193, 189, 190, 44, 221, 193, 315, - 88, 138, 221, 140, 243, 142, 135, 144, 78, 79, - 80, 81, 82, 329, 48, 189, 190, 30, 48, 193, - 135, 221, 35, 36, 37, 38, 221, 343, 39, 345, - 43, 347, 256, 257, 39, 135, 39, 256, 257, 176, - 39, 49, 324, 243, 244, 135, 44, 39, 243, 39, - 187, 80, 81, 82, 49, 16, 256, 257, 52, 53, - 135, 256, 257, 49, 193, 49, 20, 291, 49, 243, - 83, 84, 291, 40, 189, 190, 49, 49, 193, 49, - 319, 320, 5, 49, 78, 79, 80, 81, 82, 189, - 190, 291, 49, 193, 49, 5, 291, 351, -1, 189, - 190, -1, -1, 193, 241, 242, 193, 183, 245, 183, - -1, 350, 351, 352, 189, 190, -1, -1, 193, 319, - 320, -1, -1, 323, 319, 320, -1, -1, 243, -1, - 369, 370, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 243, 281, 319, 320, -1, 135, -1, - 350, 351, 352, 243, -1, 350, 351, 352, -1, 135, - -1, 298, 299, 300, 301, -1, -1, -1, 243, 369, - 370, -1, -1, -1, 369, 370, 350, 351, 352, -1, - -1, -1, -1, -1, 321, 322, -1, -1, -1, -1, - 319, 320, -1, -1, -1, 369, 370, -1, -1, -1, - -1, -1, 189, 190, 319, 320, 193, -1, -1, -1, - -1, -1, -1, 189, 190, -1, 353, 193, -1, 319, - 320, 350, -1, 352, -1, -1, -1, -1, -1, 319, - 320, -1, 319, 320, -1, 350, 351, 352, -1, -1, - 369, 370, -1, -1, 319, 320, -1, -1, -1, -1, - 350, 351, 352, -1, 369, 370, 243, -1, -1, -1, - 350, 351, 352, 350, -1, 352, -1, 243, -1, 369, - 370, -1, -1, -1, -1, 350, 351, 352, -1, 369, - 370, -1, 369, 370, -1, -1, -1, -1, 3, 4, - 5, -1, -1, -1, 369, 370, 11, -1, -1, 14, - 15, -1, 17, 18, 19, -1, 21, 22, 23, 24, - 25, 26, 27, -1, -1, 30, -1, -1, 30, -1, - 35, 36, 37, 38, -1, -1, 41, 42, 43, -1, - -1, 43, 319, 320, 46, 50, 51, -1, 50, 51, - -1, -1, -1, 319, 320, -1, -1, -1, -1, -1, - -1, -1, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 350, 351, 352, -1, -1, 83, 84, - -1, 83, 84, -1, 350, 351, 352, -1, -1, -1, - -1, -1, 369, 370, 3, 4, 5, -1, -1, -1, - -1, -1, 11, 369, 370, 14, 15, -1, 17, 18, - 19, -1, 21, 22, 23, 24, 25, 26, 27, -1, - -1, 30, -1, -1, -1, -1, 35, 36, 37, 38, - -1, -1, 41, 42, 43, -1, -1, -1, 3, 4, - 5, 50, 51, -1, -1, -1, 11, -1, -1, 14, - 15, -1, 17, 18, 19, -1, 21, 22, 23, 24, - 25, 26, 27, -1, -1, 30, -1, -1, 8, -1, - 35, 36, 37, 38, 83, 84, 41, -1, 43, -1, - -1, -1, -1, -1, -1, 50, 51, 27, 28, 29, + 0, 26, 27, 247, 84, 5, 1, 26, 27, 6, + 7, 38, 88, 89, 134, 30, 80, 30, 18, 39, + 0, 20, 86, 14, 40, 89, 26, 27, 43, 45, + 43, 26, 27, 46, 84, 40, 39, 62, 137, 39, + 45, 27, 28, 62, 30, 65, 45, 49, 34, 86, + 40, 40, 137, 39, 85, 45, 45, 43, 27, 28, + 46, 30, 62, 40, 43, 34, 47, 62, 95, 84, + 85, 84, 85, 40, 43, 40, 40, 46, 45, 40, + 45, 45, 40, 19, 45, 85, 40, 45, 85, 85, + 41, 45, 49, 192, 193, 43, 39, 196, 84, 85, + 47, 37, 127, 128, 40, 41, 43, 45, 127, 128, + 44, 196, 356, 39, 49, 84, 85, 39, 49, 239, + 39, 241, 242, 53, 54, 48, 39, 127, 128, 39, + 39, 131, 127, 128, 39, 135, 39, 137, 53, 54, + 44, 141, 137, 49, 59, 60, 61, 62, 247, 79, + 80, 81, 82, 83, 79, 80, 81, 82, 83, 95, + 81, 82, 83, 137, 79, 80, 81, 82, 83, 49, + 49, 49, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 49, 192, 193, 130, 186, 196, 192, 193, 224, + 320, 196, 89, 48, 140, 224, 142, 48, 144, 48, + 146, 39, 39, 39, 334, 39, 49, 39, 192, 193, + 39, 44, 196, 137, 224, 324, 325, 16, 348, 224, + 350, 49, 352, 49, 49, 260, 261, 196, 137, 324, + 325, 260, 261, 179, 20, 49, 49, 247, 248, 329, + 49, 49, 247, 40, 190, 49, 355, 356, 357, 49, + 260, 261, 137, 49, 5, 260, 261, 137, 5, 356, + 355, 296, 357, 247, 186, 374, 375, 296, 192, 193, + -1, -1, 196, -1, 186, -1, -1, -1, -1, 374, + 375, -1, -1, 192, 193, -1, 296, 196, -1, -1, + 236, 296, -1, -1, -1, -1, -1, -1, -1, 245, + 246, -1, -1, 249, -1, -1, -1, 192, 193, -1, + -1, 196, 192, 193, 324, 325, 196, -1, 328, 324, + 325, -1, -1, 247, -1, -1, -1, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 247, 285, + 324, 325, -1, 137, -1, 355, 356, 357, 137, -1, + 355, 356, 357, -1, -1, 324, 325, 303, 304, 305, + 306, -1, 247, -1, 374, 375, -1, 247, -1, 374, + 375, 355, 356, 357, -1, -1, -1, -1, -1, -1, + 326, 327, -1, -1, -1, -1, 355, -1, 357, -1, + 374, 375, -1, -1, -1, -1, -1, -1, 192, 193, + 324, 325, 196, 192, 193, 374, 375, 196, -1, -1, + 27, 28, 358, 30, -1, 324, 325, 34, -1, -1, + -1, -1, -1, -1, -1, -1, 43, -1, -1, 46, + 30, 355, 356, 357, -1, 35, 36, 37, 38, 324, + 325, -1, -1, 43, 324, 325, 355, 356, 357, -1, + 374, 375, -1, 247, -1, -1, -1, -1, 247, -1, + -1, -1, -1, -1, -1, 374, 375, 84, 85, -1, + 355, 356, 357, -1, -1, 355, 356, 357, 8, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, 374, + 375, -1, -1, -1, 374, 375, -1, 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, 38, 39, - -1, -1, -1, 43, 44, -1, -1, 47, -1, -1, - 27, 28, -1, 30, -1, -1, -1, 34, 83, 84, - -1, -1, 62, 63, -1, -1, 43, -1, -1, 46, - 8, -1, -1, -1, -1, -1, -1, -1, -1, 79, - -1, -1, 82, 83, 84, 85, 86, 87, 88, 27, + -1, -1, -1, 43, 44, -1, 30, 47, -1, -1, + -1, 35, 36, 37, 38, 27, 28, -1, 30, 43, + 324, 325, 34, 63, 64, 324, 325, 51, 52, -1, + -1, 43, -1, -1, 46, -1, -1, -1, -1, -1, + 80, -1, -1, 83, 84, 85, 86, 87, 88, 89, + -1, 355, 356, 357, -1, -1, 355, 356, 357, -1, + 84, 85, -1, -1, -1, -1, 3, 4, 5, -1, + 374, 375, 84, 85, 11, 374, 375, 14, 15, -1, + 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, + 27, -1, -1, 30, -1, -1, -1, -1, 35, 36, + 37, 38, -1, -1, 41, 42, 43, -1, -1, -1, + -1, 3, 4, 5, 51, 52, -1, -1, -1, 11, + -1, -1, 14, 15, -1, 17, 18, 19, -1, 21, + 22, 23, 24, 25, 26, 27, -1, -1, 30, -1, + -1, -1, -1, 35, 36, 37, 38, 84, 85, 41, + 42, 43, -1, -1, -1, -1, 3, 4, 5, 51, + 52, -1, -1, -1, 11, -1, -1, 14, 15, -1, + 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, + 27, -1, -1, 30, -1, -1, -1, 8, 35, 36, + 37, 38, 84, 85, 41, -1, 43, -1, -1, -1, + -1, -1, -1, -1, 51, 52, 27, 28, 29, 30, + 31, 32, 33, -1, 35, 36, 37, 38, 39, -1, + -1, -1, 43, -1, -1, -1, 47, -1, 49, 27, + 28, -1, 30, -1, -1, -1, 34, 84, 85, -1, + -1, -1, 63, 64, -1, 43, -1, -1, 46, -1, + 8, -1, -1, -1, -1, -1, -1, -1, -1, 80, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, - 38, 39, -1, -1, -1, 43, 83, 84, -1, 47, - -1, 49, 27, 28, -1, 30, -1, -1, -1, 34, - 27, 28, -1, 30, 62, 63, -1, 34, 43, -1, - -1, 46, 8, -1, -1, -1, 43, -1, -1, 46, - -1, 79, -1, -1, 82, 83, 84, 85, 86, 87, - 88, 27, 28, 29, 30, 31, 32, 33, -1, 35, - 36, 37, 38, 39, -1, -1, -1, 43, 83, 84, - -1, 47, -1, -1, -1, -1, 83, 84, -1, -1, - -1, 27, 28, -1, 30, -1, 62, 63, 34, -1, - -1, -1, -1, -1, 8, -1, -1, 43, -1, -1, - 46, -1, -1, 79, -1, -1, 82, 83, 84, 85, - 86, 87, 88, 27, 28, 29, 30, 31, 32, 33, - -1, 35, 36, 37, 38, 39, -1, -1, -1, 43, - -1, -1, -1, 47, -1, -1, -1, 83, 84, -1, - -1, 9, 10, -1, 12, 13, -1, -1, 62, 63, + 38, 39, -1, -1, -1, 43, 84, 85, -1, 47, + -1, -1, 27, 28, -1, 30, -1, -1, -1, 34, + 27, 28, -1, 30, -1, 63, 64, 34, 43, -1, + -1, 46, -1, 8, -1, -1, 43, -1, -1, 46, + -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, + 88, 89, 27, 28, 29, 30, 31, 32, 33, -1, + 35, 36, 37, 38, 39, -1, -1, -1, 43, 84, + 85, -1, 47, -1, -1, -1, -1, 84, 85, -1, + -1, 9, 10, -1, 12, 13, -1, -1, 63, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, - -1, -1, 30, -1, -1, 79, -1, -1, 82, 83, - 84, 85, 86, 87, 88, 43, -1, -1, 46, -1, - -1, -1, 50, 51, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 27, 28, -1, - 30, -1, 30, -1, 34, 83, 84, 35, 36, 37, - 38, -1, -1, 43, -1, 43, 46, -1, -1, -1, - -1, -1, 50, 51, 40, -1, -1, -1, -1, 45, - -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 83, 84, -1, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 40, -1, 52, - 53, -1, 45, 56, 57, 58, 59, 60, 61, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - 40, -1, 52, 53, -1, 45, 56, 57, 58, 59, - 60, 61, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 40, -1, -1, -1, -1, 45, -1, - -1, -1, -1, 40, -1, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, -1, -1, -1, 75, 76, - 77, 78, 79, 80, 81, 82, 40, -1, 75, 76, - 77, 78, 79, 80, 81, 82, 40, -1, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, - -1, 75, 76, 77, 78, 79, 80, 81, 82, 40, - -1, 75, 76, 77, 78, 79, 80, 81, 82, 40, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 40, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 40, -1, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, -1, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, 44, -1, -1, -1, -1, - -1, -1, -1, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 75, 76, 77, 78, - 79, 80, 81, 82, 44, -1, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 44, -1, -1, -1, -1, -1, -1, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 45, -1, -1, -1, -1, -1, -1, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, - -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 49, -1, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 49, -1, -1, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 75, - 76, 77, 78, 79, 80, 81, 82, -1, -1, -1, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 52, 53, -1, 55, 56, 57, 58, 59, 60, 61, - -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, 52, 53, -1, -1, 56, 57, 58, 59, 60, - 61, 52, 53, -1, -1, 56, 57, 58, 59, 60, - 61, -1, -1, -1, -1, 76, -1, 78, 79, 80, - 81, 82, -1, -1, -1, -1, -1, 78, 79, 80, - 81, 82 + -1, -1, 30, -1, -1, 80, -1, -1, 83, 84, + 85, 86, 87, 88, 89, 43, -1, -1, 46, -1, + -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 27, 28, + -1, 30, -1, -1, -1, 34, 84, 85, 27, 28, + -1, 30, -1, -1, 43, 34, -1, 46, -1, -1, + -1, -1, -1, -1, 43, -1, -1, 46, -1, -1, + -1, -1, 30, 53, 54, -1, -1, 57, 58, 59, + 60, 61, 62, -1, -1, 43, -1, -1, 46, -1, + -1, -1, -1, 51, 52, 84, 85, 77, 78, 79, + 80, 81, 82, 83, -1, 84, 85, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 40, -1, + -1, -1, -1, 45, -1, -1, 84, 85, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 40, -1, -1, -1, -1, 45, -1, -1, + -1, -1, 50, -1, -1, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 40, -1, -1, -1, + -1, 45, -1, -1, -1, -1, 50, -1, -1, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, + 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, -1, 76, 77, 78, 79, + 80, 81, 82, 83, 50, -1, -1, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + 76, 77, 78, 79, 80, 81, 82, 83, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 40, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 50, -1, -1, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 40, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 50, -1, -1, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 40, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, -1, 76, 77, 78, 79, + 80, 81, 82, 83, 50, -1, -1, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + 76, 77, 78, 79, 80, 81, 82, 83, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 45, -1, -1, -1, -1, 50, -1, -1, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, + 83, 48, -1, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 49, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 49, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 49, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 50, -1, -1, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, -1, 76, 77, 78, + 79, 80, 81, 82, 83, 53, 54, -1, 56, 57, + 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, + 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 53, 54, -1, -1, + 57, 58, 59, 60, 61, 62, 53, 54, -1, -1, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + 77, -1, 79, 80, 81, 82, 83, -1, -1, -1, + -1, -1, 79, 80, 81, 82, 83 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 84, 98, 99, 100, 101, 102, 103, - 104, 161, 83, 162, 39, 0, 100, 101, 39, 64, - 49, 85, 164, 105, 161, 8, 27, 28, 29, 30, + 0, 6, 7, 85, 100, 101, 102, 103, 104, 105, + 106, 164, 84, 165, 39, 0, 102, 103, 39, 65, + 49, 86, 167, 107, 164, 8, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 43, 47, - 62, 63, 79, 82, 86, 87, 88, 133, 135, 136, - 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 40, 40, 45, 43, 141, 142, 161, 162, - 141, 142, 43, 133, 43, 44, 133, 143, 144, 145, - 161, 133, 133, 87, 88, 84, 49, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 75, 76, 77, - 78, 79, 80, 81, 82, 27, 28, 34, 43, 46, - 141, 142, 39, 47, 49, 41, 107, 161, 43, 47, - 43, 40, 45, 133, 45, 44, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 141, 142, 141, 142, 133, 161, - 143, 144, 161, 3, 4, 5, 11, 14, 15, 17, - 18, 19, 21, 22, 23, 24, 25, 26, 42, 50, - 51, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 134, 138, 139, 148, - 149, 151, 155, 156, 157, 158, 161, 133, 161, 133, - 133, 44, 133, 44, 40, 39, 49, 39, 39, 133, - 49, 39, 39, 39, 39, 39, 79, 164, 167, 169, - 48, 49, 49, 49, 133, 138, 151, 151, 42, 106, - 49, 49, 49, 9, 10, 12, 13, 50, 51, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 44, 45, 44, 143, 143, 143, 49, 133, 133, 131, - 134, 151, 161, 133, 48, 48, 48, 49, 39, 39, - 39, 39, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 44, 133, 39, 40, 40, 40, 40, - 40, 49, 20, 45, 40, 133, 133, 133, 133, 39, - 40, 143, 49, 49, 106, 106, 132, 133, 133, 161, - 107, 40, 40, 45, 40, 45, 40, 45, 143, 40, - 16, 49, 40, 20, 49, 49, 143, 49, 143, 49, - 143, 40, 106, 131, 106, 133, 40, 40, 40, 40, - 40, 49, 49, 49, 106, 106 + 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 40, 40, 45, 43, 144, 145, 164, + 165, 144, 145, 43, 135, 43, 44, 135, 146, 147, + 148, 164, 135, 135, 88, 89, 85, 49, 50, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 76, + 77, 78, 79, 80, 81, 82, 83, 27, 28, 34, + 43, 46, 144, 145, 39, 47, 49, 41, 109, 164, + 43, 47, 43, 40, 45, 135, 45, 44, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 144, 145, 144, + 145, 135, 164, 146, 147, 164, 3, 4, 5, 11, + 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, + 26, 42, 51, 52, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 136, + 141, 142, 151, 152, 154, 158, 159, 160, 161, 164, + 135, 164, 135, 135, 44, 135, 48, 44, 40, 39, + 49, 39, 39, 135, 49, 39, 39, 39, 39, 39, + 80, 167, 170, 172, 48, 49, 49, 49, 135, 141, + 154, 154, 42, 108, 49, 49, 49, 9, 10, 12, + 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 44, 45, 44, 135, 146, 146, + 146, 49, 135, 135, 133, 136, 154, 164, 135, 48, + 48, 48, 49, 39, 39, 39, 39, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 44, 135, + 39, 40, 40, 40, 40, 40, 49, 20, 45, 40, + 135, 135, 135, 135, 39, 40, 146, 49, 49, 108, + 108, 134, 135, 135, 164, 109, 40, 40, 45, 40, + 45, 40, 45, 146, 40, 16, 49, 40, 20, 49, + 49, 146, 49, 146, 49, 146, 40, 108, 133, 108, + 135, 40, 40, 40, 40, 40, 49, 49, 49, 108, + 108 }; const unsigned char parser::yyr1_[] = { - 0, 97, 98, 98, 99, 99, 99, 99, 100, 101, - 101, 101, 102, 103, 104, 105, 105, 105, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 107, 107, 108, 108, 109, 109, 110, 111, 112, - 112, 113, 114, 114, 115, 115, 116, 117, 118, 119, - 120, 121, 121, 122, 123, 123, 123, 124, 125, 126, - 127, 127, 128, 129, 130, 131, 131, 132, 132, 133, - 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, - 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 138, 138, 138, 138, 139, - 139, 139, 139, 140, 140, 140, 140, 141, 141, 142, - 142, 143, 143, 144, 144, 145, 146, 146, 147, 148, - 149, 150, 151, 151, 151, 151, 151, 151, 151, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171 + 0, 99, 100, 100, 101, 101, 101, 101, 102, 103, + 103, 103, 104, 105, 106, 107, 107, 107, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 109, 109, 110, 110, 111, 111, 112, 113, 114, + 114, 115, 116, 116, 117, 117, 118, 119, 120, 121, + 122, 123, 123, 124, 125, 125, 125, 126, 127, 128, + 129, 129, 130, 131, 132, 133, 133, 134, 134, 135, + 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, + 137, 137, 137, 137, 137, 137, 138, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, + 141, 142, 142, 142, 142, 143, 143, 143, 143, 144, + 144, 145, 145, 146, 146, 147, 147, 148, 149, 149, + 150, 151, 152, 153, 154, 154, 154, 154, 154, 154, + 154, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174 }; const signed char @@ -3974,18 +4044,19 @@ namespace xsk { namespace gsc { namespace iw6 { 6, 3, 8, 6, 8, 6, 2, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, 1, 0, 1, - 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, + 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 3, 3, 2, 2, 3, 3, 4, 6, 8, - 9, 1, 1, 3, 1, 0, 2, 3, 3, 4, - 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 7, 2, 2, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 3, 3, 2, 2, 3, 3, 4, + 6, 8, 9, 1, 1, 3, 1, 0, 2, 3, + 3, 4, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 7, 2, 2, 1, 1, + 1, 1 }; @@ -3995,26 +4066,27 @@ namespace xsk { namespace gsc { namespace iw6 { const short parser::yyrline_[] = { - 0, 237, 237, 238, 242, 244, 246, 248, 253, 258, - 259, 260, 264, 269, 274, 279, 281, 284, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 314, 315, 319, 321, 326, 328, 333, 338, 343, - 345, 350, 355, 357, 362, 364, 369, 374, 379, 384, - 389, 394, 396, 401, 406, 408, 410, 415, 420, 425, - 430, 432, 437, 442, 447, 452, 453, 457, 458, 462, - 463, 464, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 486, 487, 488, - 489, 490, 491, 492, 493, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 543, 544, 545, 546, 550, - 551, 552, 553, 557, 558, 559, 560, 564, 566, 571, - 573, 578, 579, 583, 585, 591, 595, 597, 602, 607, - 612, 617, 622, 623, 624, 625, 626, 627, 628, 629, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, 650, 651 + 0, 241, 241, 242, 246, 248, 250, 252, 257, 262, + 263, 264, 268, 273, 278, 283, 285, 288, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 318, 319, 323, 325, 330, 332, 337, 342, 347, + 349, 354, 359, 361, 366, 368, 373, 378, 383, 388, + 393, 398, 400, 405, 410, 412, 414, 419, 424, 429, + 434, 436, 441, 446, 451, 456, 457, 461, 462, 466, + 467, 468, 469, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 491, 492, + 493, 494, 495, 496, 497, 498, 502, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 552, 553, 554, + 555, 559, 560, 561, 562, 566, 567, 568, 569, 573, + 575, 580, 582, 587, 588, 592, 594, 600, 604, 606, + 611, 616, 621, 626, 631, 632, 633, 634, 635, 636, + 637, 638, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660 }; void @@ -4047,9 +4119,9 @@ namespace xsk { namespace gsc { namespace iw6 { #line 13 "parser.ypp" } } } // xsk::gsc::iw6 -#line 4051 "parser.cpp" +#line 4123 "parser.cpp" -#line 653 "parser.ypp" +#line 662 "parser.ypp" void xsk::gsc::iw6::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/iw6/xsk/parser.hpp b/src/iw6/xsk/parser.hpp index ab3a77fd..43e90e16 100644 --- a/src/iw6/xsk/parser.hpp +++ b/src/iw6/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace iw6 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -696,53 +697,55 @@ namespace xsk { namespace gsc { namespace iw6 { DOUBLECOLON = 47, // "::" COLON = 48, // ":" SEMICOLON = 49, // ";" - INCREMENT = 50, // "++" - DECREMENT = 51, // "--" - LSHIFT = 52, // "<<" - RSHIFT = 53, // ">>" - OR = 54, // "||" - AND = 55, // "&&" - EQUALITY = 56, // "==" - INEQUALITY = 57, // "!=" - LESS_EQUAL = 58, // "<=" - GREATER_EQUAL = 59, // ">=" - LESS = 60, // "<" - GREATER = 61, // ">" - NOT = 62, // "!" - COMPLEMENT = 63, // "~" - ASSIGN = 64, // "=" - ASSIGN_ADD = 65, // "+=" - ASSIGN_SUB = 66, // "-=" - ASSIGN_MULT = 67, // "*=" - ASSIGN_DIV = 68, // "/=" - ASSIGN_MOD = 69, // "%=" - ASSIGN_BITWISE_OR = 70, // "|=" - ASSIGN_BITWISE_AND = 71, // "&=" - ASSIGN_BITWISE_EXOR = 72, // "^=" - ASSIGN_RSHIFT = 73, // ">>=" - ASSIGN_LSHIFT = 74, // "<<=" - BITWISE_OR = 75, // "|" - BITWISE_AND = 76, // "&" - BITWISE_EXOR = 77, // "^" - ADD = 78, // "+" - SUB = 79, // "-" - MULT = 80, // "*" - DIV = 81, // "/" - MOD = 82, // "%" - FILE = 83, // "file path" - NAME = 84, // "identifier" - STRING = 85, // "string literal" - ISTRING = 86, // "localized string" - FLOAT = 87, // "float" - INTEGER = 88, // "int" - ADD_ARRAY = 89, // ADD_ARRAY - THEN = 90, // THEN - NEG = 91, // NEG - ANIMREF = 92, // ANIMREF - PREINC = 93, // PREINC - PREDEC = 94, // PREDEC - POSTINC = 95, // POSTINC - POSTDEC = 96 // POSTDEC + QMARK = 50, // "?" + INCREMENT = 51, // "++" + DECREMENT = 52, // "--" + LSHIFT = 53, // "<<" + RSHIFT = 54, // ">>" + OR = 55, // "||" + AND = 56, // "&&" + EQUALITY = 57, // "==" + INEQUALITY = 58, // "!=" + LESS_EQUAL = 59, // "<=" + GREATER_EQUAL = 60, // ">=" + LESS = 61, // "<" + GREATER = 62, // ">" + NOT = 63, // "!" + COMPLEMENT = 64, // "~" + ASSIGN = 65, // "=" + ASSIGN_ADD = 66, // "+=" + ASSIGN_SUB = 67, // "-=" + ASSIGN_MULT = 68, // "*=" + ASSIGN_DIV = 69, // "/=" + ASSIGN_MOD = 70, // "%=" + ASSIGN_BITWISE_OR = 71, // "|=" + ASSIGN_BITWISE_AND = 72, // "&=" + ASSIGN_BITWISE_EXOR = 73, // "^=" + ASSIGN_RSHIFT = 74, // ">>=" + ASSIGN_LSHIFT = 75, // "<<=" + BITWISE_OR = 76, // "|" + BITWISE_AND = 77, // "&" + BITWISE_EXOR = 78, // "^" + ADD = 79, // "+" + SUB = 80, // "-" + MULT = 81, // "*" + DIV = 82, // "/" + MOD = 83, // "%" + FILE = 84, // "file path" + NAME = 85, // "identifier" + STRING = 86, // "string literal" + ISTRING = 87, // "localized string" + FLOAT = 88, // "float" + INTEGER = 89, // "int" + ADD_ARRAY = 90, // ADD_ARRAY + THEN = 91, // THEN + TERN = 92, // TERN + NEG = 93, // NEG + ANIMREF = 94, // ANIMREF + PREINC = 95, // PREINC + PREDEC = 96, // PREDEC + POSTINC = 97, // POSTINC + POSTDEC = 98 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -759,7 +762,7 @@ namespace xsk { namespace gsc { namespace iw6 { { enum symbol_kind_type { - YYNTOKENS = 97, ///< Number of tokens. + YYNTOKENS = 99, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -811,128 +814,131 @@ namespace xsk { namespace gsc { namespace iw6 { S_DOUBLECOLON = 47, // "::" S_COLON = 48, // ":" S_SEMICOLON = 49, // ";" - S_INCREMENT = 50, // "++" - S_DECREMENT = 51, // "--" - S_LSHIFT = 52, // "<<" - S_RSHIFT = 53, // ">>" - S_OR = 54, // "||" - S_AND = 55, // "&&" - S_EQUALITY = 56, // "==" - S_INEQUALITY = 57, // "!=" - S_LESS_EQUAL = 58, // "<=" - S_GREATER_EQUAL = 59, // ">=" - S_LESS = 60, // "<" - S_GREATER = 61, // ">" - S_NOT = 62, // "!" - S_COMPLEMENT = 63, // "~" - S_ASSIGN = 64, // "=" - S_ASSIGN_ADD = 65, // "+=" - S_ASSIGN_SUB = 66, // "-=" - S_ASSIGN_MULT = 67, // "*=" - S_ASSIGN_DIV = 68, // "/=" - S_ASSIGN_MOD = 69, // "%=" - S_ASSIGN_BITWISE_OR = 70, // "|=" - S_ASSIGN_BITWISE_AND = 71, // "&=" - S_ASSIGN_BITWISE_EXOR = 72, // "^=" - S_ASSIGN_RSHIFT = 73, // ">>=" - S_ASSIGN_LSHIFT = 74, // "<<=" - S_BITWISE_OR = 75, // "|" - S_BITWISE_AND = 76, // "&" - S_BITWISE_EXOR = 77, // "^" - S_ADD = 78, // "+" - S_SUB = 79, // "-" - S_MULT = 80, // "*" - S_DIV = 81, // "/" - S_MOD = 82, // "%" - S_FILE = 83, // "file path" - S_NAME = 84, // "identifier" - S_STRING = 85, // "string literal" - S_ISTRING = 86, // "localized string" - S_FLOAT = 87, // "float" - S_INTEGER = 88, // "int" - S_ADD_ARRAY = 89, // ADD_ARRAY - S_THEN = 90, // THEN - S_NEG = 91, // NEG - S_ANIMREF = 92, // ANIMREF - S_PREINC = 93, // PREINC - S_PREDEC = 94, // PREDEC - S_POSTINC = 95, // POSTINC - S_POSTDEC = 96, // POSTDEC - S_YYACCEPT = 97, // $accept - S_root = 98, // root - S_program = 99, // program - S_include = 100, // include - S_define = 101, // define - S_usingtree = 102, // usingtree - S_constant = 103, // constant - S_thread = 104, // thread - S_parameters = 105, // parameters - S_stmt = 106, // stmt - S_stmt_block = 107, // stmt_block - S_stmt_list = 108, // stmt_list - S_stmt_call = 109, // stmt_call - S_stmt_assign = 110, // stmt_assign - S_stmt_endon = 111, // stmt_endon - S_stmt_notify = 112, // stmt_notify - S_stmt_wait = 113, // stmt_wait - S_stmt_waittill = 114, // stmt_waittill - S_stmt_waittillmatch = 115, // stmt_waittillmatch - S_stmt_waittillframeend = 116, // stmt_waittillframeend - S_stmt_if = 117, // stmt_if - S_stmt_ifelse = 118, // stmt_ifelse - S_stmt_while = 119, // stmt_while - S_stmt_for = 120, // stmt_for - S_stmt_foreach = 121, // stmt_foreach - S_stmt_switch = 122, // stmt_switch - S_stmt_case = 123, // stmt_case - S_stmt_default = 124, // stmt_default - S_stmt_break = 125, // stmt_break - S_stmt_continue = 126, // stmt_continue - S_stmt_return = 127, // stmt_return - S_stmt_breakpoint = 128, // stmt_breakpoint - S_stmt_prof_begin = 129, // stmt_prof_begin - S_stmt_prof_end = 130, // stmt_prof_end - S_for_stmt = 131, // for_stmt - S_for_expr = 132, // for_expr - S_expr = 133, // expr - S_expr_assign = 134, // expr_assign - S_expr_compare = 135, // expr_compare - S_expr_binary = 136, // expr_binary - S_expr_primitive = 137, // expr_primitive - S_expr_call = 138, // expr_call - S_expr_call_thread = 139, // expr_call_thread - S_expr_call_childthread = 140, // expr_call_childthread - S_expr_call_function = 141, // expr_call_function - S_expr_call_pointer = 142, // expr_call_pointer - S_expr_arguments = 143, // expr_arguments - S_expr_arguments_filled = 144, // expr_arguments_filled - S_expr_arguments_empty = 145, // expr_arguments_empty - S_expr_function = 146, // expr_function - S_expr_add_array = 147, // expr_add_array - S_expr_array = 148, // expr_array - S_expr_field = 149, // expr_field - S_expr_size = 150, // expr_size - S_object = 151, // object - S_thisthread = 152, // thisthread - S_empty_array = 153, // empty_array - S_undefined = 154, // undefined - S_game = 155, // game - S_self = 156, // self - S_anim = 157, // anim - S_level = 158, // level - S_animation = 159, // animation - S_animtree = 160, // animtree - S_name = 161, // name - S_file = 162, // file - S_istring = 163, // istring - S_string = 164, // string - S_vector = 165, // vector - S_neg_float = 166, // neg_float - S_neg_integer = 167, // neg_integer - S_float = 168, // float - S_integer = 169, // integer - S_false = 170, // false - S_true = 171 // true + S_QMARK = 50, // "?" + S_INCREMENT = 51, // "++" + S_DECREMENT = 52, // "--" + S_LSHIFT = 53, // "<<" + S_RSHIFT = 54, // ">>" + S_OR = 55, // "||" + S_AND = 56, // "&&" + S_EQUALITY = 57, // "==" + S_INEQUALITY = 58, // "!=" + S_LESS_EQUAL = 59, // "<=" + S_GREATER_EQUAL = 60, // ">=" + S_LESS = 61, // "<" + S_GREATER = 62, // ">" + S_NOT = 63, // "!" + S_COMPLEMENT = 64, // "~" + S_ASSIGN = 65, // "=" + S_ASSIGN_ADD = 66, // "+=" + S_ASSIGN_SUB = 67, // "-=" + S_ASSIGN_MULT = 68, // "*=" + S_ASSIGN_DIV = 69, // "/=" + S_ASSIGN_MOD = 70, // "%=" + S_ASSIGN_BITWISE_OR = 71, // "|=" + S_ASSIGN_BITWISE_AND = 72, // "&=" + S_ASSIGN_BITWISE_EXOR = 73, // "^=" + S_ASSIGN_RSHIFT = 74, // ">>=" + S_ASSIGN_LSHIFT = 75, // "<<=" + S_BITWISE_OR = 76, // "|" + S_BITWISE_AND = 77, // "&" + S_BITWISE_EXOR = 78, // "^" + S_ADD = 79, // "+" + S_SUB = 80, // "-" + S_MULT = 81, // "*" + S_DIV = 82, // "/" + S_MOD = 83, // "%" + S_FILE = 84, // "file path" + S_NAME = 85, // "identifier" + S_STRING = 86, // "string literal" + S_ISTRING = 87, // "localized string" + S_FLOAT = 88, // "float" + S_INTEGER = 89, // "int" + S_ADD_ARRAY = 90, // ADD_ARRAY + S_THEN = 91, // THEN + S_TERN = 92, // TERN + S_NEG = 93, // NEG + S_ANIMREF = 94, // ANIMREF + S_PREINC = 95, // PREINC + S_PREDEC = 96, // PREDEC + S_POSTINC = 97, // POSTINC + S_POSTDEC = 98, // POSTDEC + S_YYACCEPT = 99, // $accept + S_root = 100, // root + S_program = 101, // program + S_include = 102, // include + S_define = 103, // define + S_usingtree = 104, // usingtree + S_constant = 105, // constant + S_thread = 106, // thread + S_parameters = 107, // parameters + S_stmt = 108, // stmt + S_stmt_block = 109, // stmt_block + S_stmt_list = 110, // stmt_list + S_stmt_call = 111, // stmt_call + S_stmt_assign = 112, // stmt_assign + S_stmt_endon = 113, // stmt_endon + S_stmt_notify = 114, // stmt_notify + S_stmt_wait = 115, // stmt_wait + S_stmt_waittill = 116, // stmt_waittill + S_stmt_waittillmatch = 117, // stmt_waittillmatch + S_stmt_waittillframeend = 118, // stmt_waittillframeend + S_stmt_if = 119, // stmt_if + S_stmt_ifelse = 120, // stmt_ifelse + S_stmt_while = 121, // stmt_while + S_stmt_for = 122, // stmt_for + S_stmt_foreach = 123, // stmt_foreach + S_stmt_switch = 124, // stmt_switch + S_stmt_case = 125, // stmt_case + S_stmt_default = 126, // stmt_default + S_stmt_break = 127, // stmt_break + S_stmt_continue = 128, // stmt_continue + S_stmt_return = 129, // stmt_return + S_stmt_breakpoint = 130, // stmt_breakpoint + S_stmt_prof_begin = 131, // stmt_prof_begin + S_stmt_prof_end = 132, // stmt_prof_end + S_for_stmt = 133, // for_stmt + S_for_expr = 134, // for_expr + S_expr = 135, // expr + S_expr_assign = 136, // expr_assign + S_expr_compare = 137, // expr_compare + S_expr_ternary = 138, // expr_ternary + S_expr_binary = 139, // expr_binary + S_expr_primitive = 140, // expr_primitive + S_expr_call = 141, // expr_call + S_expr_call_thread = 142, // expr_call_thread + S_expr_call_childthread = 143, // expr_call_childthread + S_expr_call_function = 144, // expr_call_function + S_expr_call_pointer = 145, // expr_call_pointer + S_expr_arguments = 146, // expr_arguments + S_expr_arguments_filled = 147, // expr_arguments_filled + S_expr_arguments_empty = 148, // expr_arguments_empty + S_expr_function = 149, // expr_function + S_expr_add_array = 150, // expr_add_array + S_expr_array = 151, // expr_array + S_expr_field = 152, // expr_field + S_expr_size = 153, // expr_size + S_object = 154, // object + S_thisthread = 155, // thisthread + S_empty_array = 156, // empty_array + S_undefined = 157, // undefined + S_game = 158, // game + S_self = 159, // self + S_anim = 160, // anim + S_level = 161, // level + S_animation = 162, // animation + S_animtree = 163, // animtree + S_name = 164, // name + S_file = 165, // file + S_istring = 166, // istring + S_string = 167, // string + S_vector = 168, // vector + S_neg_float = 169, // neg_float + S_neg_integer = 170, // neg_integer + S_float = 171, // float + S_integer = 172, // integer + S_false = 173, // false + S_true = 174 // true }; }; @@ -1017,6 +1023,7 @@ namespace xsk { namespace gsc { namespace iw6 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2093,6 +2100,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3198,6 +3206,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3813,6 +3836,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4247,8 +4285,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1591, ///< Last index in yytable_. - yynnts_ = 75, ///< Number of nonterminal symbols. + yylast_ = 1836, ///< Last index in yytable_. + yynnts_ = 76, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4324,6 +4362,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4600,6 +4639,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4862,7 +4902,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw6 -#line 4866 "parser.hpp" +#line 4906 "parser.hpp" diff --git a/src/iw7/xsk/assembler.cpp b/src/iw7/xsk/assembler.cpp index 9cf1ded4..b6e853fd 100644 --- a/src/iw7/xsk/assembler.cpp +++ b/src/iw7/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/iw7/xsk/compiler.cpp b/src/iw7/xsk/compiler.cpp index 4219264e..dc569872 100644 --- a/src/iw7/xsk/compiler.cpp +++ b/src/iw7/xsk/compiler.cpp @@ -403,7 +403,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -459,7 +459,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -534,7 +534,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -746,6 +746,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -843,6 +844,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/iw7/xsk/compiler.hpp b/src/iw7/xsk/compiler.hpp index 69738927..f12b9832 100644 --- a/src/iw7/xsk/compiler.hpp +++ b/src/iw7/xsk/compiler.hpp @@ -67,6 +67,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw7/xsk/decompiler.cpp b/src/iw7/xsk/decompiler.cpp index 3ec614cb..fb78ec00 100644 --- a/src/iw7/xsk/decompiler.cpp +++ b/src/iw7/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1827,6 +1835,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1910,6 +1919,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3000,6 +3032,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3100,6 +3133,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/iw7/xsk/decompiler.hpp b/src/iw7/xsk/decompiler.hpp index 5c2cb694..f713b983 100644 --- a/src/iw7/xsk/decompiler.hpp +++ b/src/iw7/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/iw7/xsk/lexer.cpp b/src/iw7/xsk/lexer.cpp index 2fb9e7cb..941b6030 100644 --- a/src/iw7/xsk/lexer.cpp +++ b/src/iw7/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 99 -#define YY_END_OF_BUFFER 100 +#define YY_NUM_RULES 100 +#define YY_END_OF_BUFFER 101 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,40 +562,40 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[300] = +static const flex_int16_t yy_accept[301] = { 0, - 0, 0, 0, 0, 0, 0, 100, 98, 1, 2, - 87, 98, 98, 86, 90, 98, 48, 49, 84, 82, - 54, 83, 55, 85, 97, 57, 58, 71, 81, 72, - 93, 52, 53, 91, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 50, 89, 51, 88, 5, 6, 5, 9, 10, 9, - 68, 0, 95, 0, 0, 0, 0, 77, 0, 66, - 0, 79, 0, 0, 75, 59, 73, 60, 74, 96, - 0, 8, 4, 3, 76, 96, 97, 0, 0, 56, - 63, 69, 67, 70, 64, 93, 80, 93, 93, 93, + 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, + 88, 99, 99, 87, 91, 99, 48, 49, 85, 83, + 54, 84, 55, 86, 98, 57, 58, 72, 82, 73, + 59, 94, 52, 53, 92, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 50, 90, 51, 89, 5, 6, 5, 9, 10, + 9, 69, 0, 96, 0, 0, 0, 0, 78, 0, + 67, 0, 80, 0, 0, 76, 60, 74, 61, 75, + 97, 0, 8, 4, 3, 77, 97, 98, 0, 0, + 56, 64, 70, 68, 71, 65, 94, 81, 94, 94, - 93, 93, 93, 93, 93, 93, 93, 93, 24, 29, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 78, 65, 7, 11, 0, 95, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 95, 0, 96, - 0, 3, 96, 96, 92, 61, 62, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 27, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 0, 0, 0, 0, 94, 0, 0, 94, 0, - 0, 46, 93, 39, 31, 93, 93, 93, 25, 93, - 93, 93, 44, 93, 93, 93, 93, 45, 93, 93, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 24, + 29, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 79, 66, 7, 11, 0, 96, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 96, 0, + 97, 0, 3, 97, 97, 93, 62, 63, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 27, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 0, 0, 0, 0, 95, 0, 0, 95, + 0, 0, 46, 94, 39, 31, 94, 94, 94, 25, + 94, 94, 94, 44, 94, 94, 94, 94, 45, 94, - 93, 40, 93, 20, 93, 0, 0, 0, 43, 33, - 93, 93, 93, 18, 41, 93, 47, 93, 93, 93, - 93, 93, 93, 93, 93, 26, 0, 0, 0, 93, - 93, 93, 93, 93, 19, 93, 93, 35, 30, 93, - 36, 93, 93, 0, 0, 0, 93, 93, 93, 32, - 28, 93, 93, 93, 93, 93, 0, 15, 0, 93, - 93, 34, 93, 14, 93, 93, 21, 17, 0, 93, - 93, 93, 93, 42, 93, 93, 0, 12, 93, 13, - 38, 93, 93, 0, 37, 93, 93, 0, 93, 93, - 0, 93, 22, 0, 93, 16, 93, 23, 0 + 94, 94, 40, 94, 20, 94, 0, 0, 0, 43, + 33, 94, 94, 94, 18, 41, 94, 47, 94, 94, + 94, 94, 94, 94, 94, 94, 26, 0, 0, 0, + 94, 94, 94, 94, 94, 19, 94, 94, 35, 30, + 94, 36, 94, 94, 0, 0, 0, 94, 94, 94, + 32, 28, 94, 94, 94, 94, 94, 0, 15, 0, + 94, 94, 34, 94, 14, 94, 94, 21, 17, 0, + 94, 94, 94, 94, 42, 94, 94, 0, 12, 94, + 13, 38, 94, 94, 0, 37, 94, 94, 0, 94, + 94, 0, 94, 22, 0, 94, 16, 94, 23, 0 } ; @@ -607,14 +607,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -631,238 +631,238 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[314] = +static const flex_int16_t yy_base[315] = { 0, - 0, 0, 54, 55, 56, 57, 564, 565, 565, 565, - 541, 56, 35, 540, 63, 55, 565, 565, 539, 56, - 565, 55, 56, 74, 71, 541, 565, 54, 537, 70, - 532, 565, 565, 535, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 565, 96, 565, 565, 565, 565, 539, 565, 565, 538, - 565, 120, 565, 127, 512, 511, 506, 565, 122, 565, - 115, 565, 126, 140, 565, 565, 565, 565, 565, 120, - 513, 565, 565, 0, 565, 121, 141, 135, 0, 565, - 528, 565, 565, 565, 527, 522, 565, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 565, 566, 566, 566, + 542, 57, 34, 541, 66, 60, 566, 566, 540, 57, + 566, 63, 48, 74, 74, 542, 566, 55, 538, 59, + 566, 532, 566, 566, 536, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 566, 100, 566, 566, 566, 566, 540, 566, 566, + 539, 566, 120, 566, 136, 512, 511, 506, 566, 122, + 566, 123, 566, 126, 143, 566, 566, 566, 566, 566, + 118, 513, 566, 566, 0, 566, 125, 140, 132, 0, + 566, 529, 566, 566, 566, 528, 522, 566, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 521, 520, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 565, 565, 565, 565, 189, 197, 202, 507, 512, - 505, 204, 565, 207, 205, 208, 209, 210, 213, 565, - 490, 0, 202, 565, 515, 565, 565, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 499, 499, 496, 268, 269, 276, 271, 273, 283, - 503, 510, 261, 509, 508, 258, 263, 262, 507, 270, - 272, 277, 506, 278, 279, 282, 287, 505, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 521, + 520, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 566, 566, 566, 566, 186, 204, 211, 507, + 512, 505, 205, 566, 212, 202, 215, 210, 213, 217, + 566, 490, 0, 205, 566, 515, 566, 566, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 499, 499, 496, 273, 274, 277, 275, 276, + 284, 503, 510, 104, 509, 508, 262, 268, 264, 507, + 265, 270, 279, 506, 271, 282, 287, 288, 505, 289, - 293, 504, 291, 294, 296, 482, 480, 491, 565, 298, - 299, 301, 305, 500, 499, 302, 498, 303, 313, 307, - 314, 322, 324, 326, 327, 497, 477, 488, 491, 312, - 330, 310, 334, 335, 493, 336, 337, 492, 491, 340, - 490, 342, 343, 481, 480, 483, 348, 345, 354, 486, - 485, 351, 349, 363, 365, 352, 476, 565, 467, 367, - 368, 482, 369, 481, 370, 372, 375, 565, 468, 377, - 378, 380, 385, 466, 386, 387, 403, 417, 388, 416, - 414, 389, 394, 389, 408, 397, 400, 331, 399, 402, - 339, 401, 309, 259, 403, 565, 404, 200, 565, 445, + 272, 292, 504, 294, 297, 298, 482, 480, 491, 566, + 299, 300, 304, 301, 500, 499, 302, 498, 305, 311, + 309, 312, 313, 322, 314, 327, 497, 477, 488, 491, + 328, 331, 310, 333, 335, 493, 336, 334, 492, 491, + 337, 490, 341, 338, 481, 480, 483, 343, 340, 353, + 486, 485, 348, 360, 362, 363, 351, 476, 566, 467, + 364, 366, 482, 369, 481, 368, 375, 376, 566, 455, + 373, 379, 377, 388, 419, 378, 386, 403, 417, 389, + 416, 414, 398, 384, 392, 412, 392, 400, 368, 401, + 399, 341, 403, 347, 193, 404, 566, 408, 159, 566, - 450, 455, 460, 463, 465, 470, 475, 480, 485, 490, - 84, 495, 500 + 447, 452, 457, 462, 465, 467, 472, 477, 482, 487, + 492, 68, 497, 502 } ; -static const flex_int16_t yy_def[314] = +static const flex_int16_t yy_def[315] = { 0, - 299, 1, 300, 300, 301, 301, 299, 299, 299, 299, - 299, 302, 299, 299, 299, 303, 299, 299, 299, 299, - 299, 299, 299, 299, 304, 299, 299, 299, 299, 299, - 305, 299, 299, 299, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 302, 299, 306, 299, 299, 299, 299, 307, 299, - 308, 299, 303, 309, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 310, 299, 299, 304, 304, 311, 299, - 299, 299, 299, 299, 299, 305, 299, 305, 305, 305, + 300, 1, 301, 301, 302, 302, 300, 300, 300, 300, + 300, 303, 300, 300, 300, 304, 300, 300, 300, 300, + 300, 300, 300, 300, 305, 300, 300, 300, 300, 300, + 300, 306, 300, 300, 300, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 303, 300, 307, 300, 300, 300, 300, 308, + 300, 309, 300, 304, 310, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 311, 300, 300, 305, 305, 312, + 300, 300, 300, 300, 300, 300, 306, 300, 306, 306, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 299, 302, 302, 306, 299, 299, - 299, 307, 299, 312, 308, 313, 303, 303, 309, 299, - 299, 310, 299, 299, 311, 299, 299, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 299, 299, 299, 307, 307, 312, 308, 308, 313, - 299, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 300, 303, 303, 307, 300, + 300, 300, 308, 300, 313, 309, 314, 304, 304, 310, + 300, 300, 311, 300, 300, 312, 300, 300, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 300, 300, 300, 308, 308, 313, 309, 309, + 314, 300, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 305, 305, 305, 305, 305, 299, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 299, 299, 299, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 299, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 305, 299, 299, 305, - 305, 305, 305, 305, 305, 305, 299, 305, 305, 305, - 305, 305, 305, 299, 305, 305, 305, 299, 305, 305, - 299, 305, 305, 299, 305, 299, 305, 305, 0, 299, + 306, 306, 306, 306, 306, 306, 300, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 300, 300, 300, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 300, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 306, 300, 300, + 306, 306, 306, 306, 306, 306, 306, 300, 306, 306, + 306, 306, 306, 306, 300, 306, 306, 306, 300, 306, + 306, 300, 306, 306, 300, 306, 300, 306, 306, 0, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300 } ; -static const flex_int16_t yy_nxt[622] = +static const flex_int16_t yy_nxt[624] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 299, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 300, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 296, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 297, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 89, 226, - 89, 220, 89, 234, 89, 89, 222, 89, 89, 89, - 225, 230, 232, 236, 233, 231, 237, 89, 238, 89, - 239, 89, 89, 235, 247, 89, 241, 249, 240, 89, - 89, 89, 89, 242, 243, 89, 248, 89, 89, 252, - 89, 251, 294, 89, 89, 291, 89, 89, 253, 89, - 250, 264, 256, 255, 254, 260, 263, 262, 89, 261, - 89, 267, 89, 89, 89, 89, 265, 89, 266, 273, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 227, 221, 235, 90, 90, 90, 90, 90, + 90, 234, 237, 231, 226, 238, 233, 232, 90, 240, + 241, 239, 243, 90, 90, 242, 236, 90, 250, 90, + 90, 90, 90, 90, 90, 244, 90, 90, 249, 90, + 253, 248, 252, 90, 90, 295, 254, 90, 257, 90, + 251, 261, 255, 256, 264, 262, 90, 263, 90, 90, + 90, 268, 90, 265, 90, 90, 266, 267, 274, 90, - 89, 271, 89, 89, 274, 89, 272, 279, 270, 275, - 89, 89, 89, 89, 89, 276, 283, 281, 286, 89, - 285, 280, 89, 278, 89, 89, 89, 89, 89, 89, - 282, 290, 292, 89, 295, 288, 298, 289, 293, 89, - 287, 89, 89, 284, 297, 55, 55, 55, 55, 55, - 58, 58, 58, 58, 58, 62, 62, 62, 62, 62, - 73, 73, 73, 73, 73, 88, 88, 88, 96, 96, - 126, 126, 126, 126, 126, 132, 132, 132, 132, 132, - 135, 135, 135, 135, 135, 137, 137, 137, 137, 137, - 142, 89, 142, 142, 142, 175, 175, 175, 175, 175, + 272, 90, 90, 90, 90, 90, 271, 273, 275, 280, + 90, 276, 90, 292, 90, 90, 284, 277, 90, 281, + 279, 282, 286, 283, 90, 90, 90, 90, 287, 90, + 90, 288, 291, 290, 90, 293, 294, 296, 90, 289, + 90, 299, 90, 90, 285, 90, 298, 56, 56, 56, + 56, 56, 59, 59, 59, 59, 59, 63, 63, 63, + 63, 63, 74, 74, 74, 74, 74, 89, 89, 89, + 97, 97, 127, 127, 127, 127, 127, 133, 133, 133, + 133, 133, 136, 136, 136, 136, 136, 138, 138, 138, + 138, 138, 143, 278, 143, 143, 143, 176, 176, 176, - 178, 178, 178, 178, 178, 277, 89, 89, 269, 268, - 89, 89, 259, 258, 257, 89, 89, 89, 89, 246, - 245, 244, 89, 89, 89, 89, 229, 228, 227, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 299, 7, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 176, 176, 179, 179, 179, 179, 179, 90, 90, 270, + 269, 90, 90, 260, 259, 258, 90, 90, 90, 90, + 247, 246, 245, 90, 90, 90, 90, 230, 229, 228, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 300, 7, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; -static const flex_int16_t yy_chk[622] = +static const flex_int16_t yy_chk[624] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 311, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 312, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 299, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 298, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 294, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 295, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 218, 205, - 213, 197, 220, 216, 293, 232, 200, 230, 219, 221, - 204, 210, 212, 219, 213, 211, 219, 222, 220, 223, - 221, 224, 225, 218, 230, 231, 223, 232, 222, 233, - 234, 236, 237, 224, 225, 240, 231, 242, 243, 236, - 248, 234, 291, 247, 253, 288, 252, 256, 237, 249, - 233, 253, 243, 242, 240, 247, 252, 249, 254, 248, - 255, 256, 260, 261, 263, 265, 254, 266, 255, 265, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 206, 211, 212, 214, 217, 204, + 213, 219, 206, 198, 217, 221, 233, 220, 222, 223, + 225, 214, 220, 211, 205, 220, 213, 212, 224, 222, + 223, 221, 225, 226, 231, 224, 219, 232, 233, 234, + 238, 235, 237, 241, 244, 226, 249, 243, 232, 248, + 237, 231, 235, 294, 253, 292, 238, 257, 244, 250, + 234, 248, 241, 243, 253, 249, 254, 250, 255, 256, + 261, 257, 262, 254, 266, 264, 255, 256, 266, 271, - 267, 261, 270, 271, 266, 272, 263, 271, 260, 267, - 273, 275, 276, 279, 282, 267, 276, 273, 282, 283, - 279, 272, 286, 270, 289, 287, 292, 290, 295, 297, - 275, 287, 289, 285, 292, 284, 297, 286, 290, 281, - 283, 280, 278, 277, 295, 300, 300, 300, 300, 300, - 301, 301, 301, 301, 301, 302, 302, 302, 302, 302, - 303, 303, 303, 303, 303, 304, 304, 304, 305, 305, - 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, - 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, - 310, 274, 310, 310, 310, 312, 312, 312, 312, 312, + 262, 267, 268, 273, 276, 272, 261, 264, 267, 272, + 284, 268, 277, 289, 274, 280, 277, 268, 287, 273, + 271, 274, 280, 276, 283, 291, 288, 290, 283, 293, + 296, 284, 288, 287, 298, 290, 291, 293, 286, 285, + 282, 298, 281, 279, 278, 275, 296, 301, 301, 301, + 301, 301, 302, 302, 302, 302, 302, 303, 303, 303, + 303, 303, 304, 304, 304, 304, 304, 305, 305, 305, + 306, 306, 307, 307, 307, 307, 307, 308, 308, 308, + 308, 308, 309, 309, 309, 309, 309, 310, 310, 310, + 310, 310, 311, 270, 311, 311, 311, 313, 313, 313, - 313, 313, 313, 313, 313, 269, 264, 262, 259, 257, - 251, 250, 246, 245, 244, 241, 239, 238, 235, 229, - 228, 227, 226, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 313, 313, 314, 314, 314, 314, 314, 265, 263, 260, + 258, 252, 251, 247, 246, 245, 242, 240, 239, 236, + 230, 229, 228, 227, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299 + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300 } ; /* The intent behind this definition is that it'll catch @@ -1180,13 +1180,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 299 ); + while ( yy_current_state != 300 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1502,218 +1502,223 @@ YY_RULE_SETUP case 59: YY_RULE_SETUP #line 106 "lexer.lpp" -{ return iw7::parser::make_INCREMENT(loc); } +{ return iw7::parser::make_QMARK(loc); } YY_BREAK case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return iw7::parser::make_DECREMENT(loc); } +{ return iw7::parser::make_INCREMENT(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_LSHIFT(loc); } +{ return iw7::parser::make_DECREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_RSHIFT(loc); } +{ return iw7::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return iw7::parser::make_LSHIFT(loc); } +{ return iw7::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return iw7::parser::make_RSHIFT(loc); } +{ return iw7::parser::make_LSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return iw7::parser::make_OR(loc); } +{ return iw7::parser::make_RSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return iw7::parser::make_AND(loc); } +{ return iw7::parser::make_OR(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return iw7::parser::make_EQUALITY(loc); } +{ return iw7::parser::make_AND(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return iw7::parser::make_INEQUALITY(loc); } +{ return iw7::parser::make_EQUALITY(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return iw7::parser::make_LESS_EQUAL(loc); } +{ return iw7::parser::make_INEQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return iw7::parser::make_GREATER_EQUAL(loc); } +{ return iw7::parser::make_LESS_EQUAL(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return iw7::parser::make_LESS(loc); } +{ return iw7::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return iw7::parser::make_GREATER(loc); } +{ return iw7::parser::make_LESS(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_ADD(loc); } +{ return iw7::parser::make_GREATER(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_SUB(loc); } +{ return iw7::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_MULT(loc); } +{ return iw7::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_DIV(loc); } +{ return iw7::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_MOD(loc); } +{ return iw7::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return iw7::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return iw7::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return iw7::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return iw7::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return iw7::parser::make_ASSIGN(loc); } +{ return iw7::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return iw7::parser::make_ADD(loc); } +{ return iw7::parser::make_ASSIGN(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return iw7::parser::make_SUB(loc); } +{ return iw7::parser::make_ADD(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return iw7::parser::make_MULT(loc); } +{ return iw7::parser::make_SUB(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return iw7::parser::make_DIV(loc); } +{ return iw7::parser::make_MULT(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return iw7::parser::make_MOD(loc); } +{ return iw7::parser::make_DIV(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return iw7::parser::make_NOT(loc); } +{ return iw7::parser::make_MOD(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return iw7::parser::make_COMPLEMENT(loc); } +{ return iw7::parser::make_NOT(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return iw7::parser::make_BITWISE_OR(loc); } +{ return iw7::parser::make_COMPLEMENT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return iw7::parser::make_BITWISE_AND(loc); } +{ return iw7::parser::make_BITWISE_OR(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return iw7::parser::make_BITWISE_EXOR(loc); } +{ return iw7::parser::make_BITWISE_AND(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return iw7::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return iw7::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return iw7::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return iw7::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 94: -/* rule 94 can match eol */ YY_RULE_SETUP #line 141 "lexer.lpp" -{ return iw7::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return iw7::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 95: /* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return iw7::parser::make_STRING(std::string(yytext), loc); } +{ return iw7::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 96: +/* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return iw7::parser::make_FLOAT(std::string(yytext), loc); } +{ return iw7::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 97: YY_RULE_SETUP #line 144 "lexer.lpp" +{ return iw7::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 145 "lexer.lpp" { return iw7::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 145 "lexer.lpp" +#line 146 "lexer.lpp" { return iw7::parser::make_IW7EOF(loc); } YY_BREAK -case 98: -/* rule 98 can match eol */ +case 99: +/* rule 99 can match eol */ YY_RULE_SETUP -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { throw iw7::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" ECHO; YY_BREAK -#line 1716 "lexer.cpp" +#line 1721 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2011,7 +2016,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2040,11 +2045,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 300 ) + if ( yy_current_state >= 301 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 299); + yy_is_jam = (yy_current_state == 300); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2843,6 +2848,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" diff --git a/src/iw7/xsk/lexer.hpp b/src/iw7/xsk/lexer.hpp index 93c7a1e6..60a5139c 100644 --- a/src/iw7/xsk/lexer.hpp +++ b/src/iw7/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 148 "lexer.lpp" +#line 149 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/iw7/xsk/parser.cpp b/src/iw7/xsk/parser.cpp index b6e76c7b..24582753 100644 --- a/src/iw7/xsk/parser.cpp +++ b/src/iw7/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -526,6 +527,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -788,6 +790,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1049,6 +1052,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1565,6 +1569,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1785,1195 +1790,1207 @@ namespace xsk { namespace gsc { namespace iw7 { switch (yyn) { case 2: // root: program -#line 237 "parser.ypp" +#line 241 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1791 "parser.cpp" +#line 1796 "parser.cpp" break; case 3: // root: %empty -#line 238 "parser.ypp" +#line 242 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1797 "parser.cpp" +#line 1802 "parser.cpp" break; case 4: // program: program include -#line 243 "parser.ypp" +#line 247 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1803 "parser.cpp" +#line 1808 "parser.cpp" break; case 5: // program: program define -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1809 "parser.cpp" +#line 1814 "parser.cpp" break; case 6: // program: include -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1815 "parser.cpp" +#line 1820 "parser.cpp" break; case 7: // program: define -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1821 "parser.cpp" +#line 1826 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 254 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1827 "parser.cpp" +#line 1832 "parser.cpp" break; case 9: // define: usingtree -#line 258 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1833 "parser.cpp" +#line 1838 "parser.cpp" break; case 10: // define: constant -#line 259 "parser.ypp" +#line 263 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1839 "parser.cpp" +#line 1844 "parser.cpp" break; case 11: // define: thread -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1845 "parser.cpp" +#line 1850 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 265 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1851 "parser.cpp" +#line 1856 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 270 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1857 "parser.cpp" +#line 1862 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 275 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1863 "parser.cpp" +#line 1868 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 280 "parser.ypp" +#line 284 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1869 "parser.cpp" +#line 1874 "parser.cpp" break; case 16: // parameters: name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1875 "parser.cpp" +#line 1880 "parser.cpp" break; case 17: // parameters: %empty -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1881 "parser.cpp" +#line 1886 "parser.cpp" break; case 18: // stmt: stmt_block -#line 288 "parser.ypp" +#line 292 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1887 "parser.cpp" +#line 1892 "parser.cpp" break; case 19: // stmt: stmt_call -#line 289 "parser.ypp" +#line 293 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1893 "parser.cpp" +#line 1898 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1899 "parser.cpp" +#line 1904 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1905 "parser.cpp" +#line 1910 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1911 "parser.cpp" +#line 1916 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1917 "parser.cpp" +#line 1922 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1923 "parser.cpp" +#line 1928 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1929 "parser.cpp" +#line 1934 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1935 "parser.cpp" +#line 1940 "parser.cpp" break; case 27: // stmt: stmt_if -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1941 "parser.cpp" +#line 1946 "parser.cpp" break; case 28: // stmt: stmt_ifelse -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1947 "parser.cpp" +#line 1952 "parser.cpp" break; case 29: // stmt: stmt_while -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1953 "parser.cpp" +#line 1958 "parser.cpp" break; case 30: // stmt: stmt_for -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1959 "parser.cpp" +#line 1964 "parser.cpp" break; case 31: // stmt: stmt_foreach -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 32: // stmt: stmt_switch -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 33: // stmt: stmt_case -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 34: // stmt: stmt_default -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 35: // stmt: stmt_break -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 36: // stmt: stmt_continue -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 37: // stmt: stmt_return -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 38: // stmt: stmt_breakpoint -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 39: // stmt: stmt_prof_begin -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 40: // stmt: stmt_prof_end -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 41: // stmt_block: "{" stmt_list "}" -#line 314 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 42: // stmt_block: "{" "}" -#line 315 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 43: // stmt_list: stmt_list stmt -#line 320 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 44: // stmt_list: stmt -#line 322 "parser.ypp" +#line 326 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 45: // stmt_call: expr_call ";" -#line 327 "parser.ypp" +#line 331 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 46: // stmt_call: expr_call_thread ";" -#line 329 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 47: // stmt_assign: expr_assign ";" -#line 334 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 48: // stmt_endon: object "endon" "(" expr ")" ";" -#line 339 "parser.ypp" +#line 343 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 49: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 344 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr ")" ";" -#line 346 "parser.ypp" +#line 350 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 51: // stmt_wait: "wait" expr ";" -#line 351 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 52: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 356 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 358 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 54: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 363 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 365 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 56: // stmt_waittillframeend: "waittillframeend" ";" -#line 370 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 57: // stmt_if: "if" "(" expr ")" stmt -#line 375 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 58: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 59: // stmt_while: "while" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 60: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 61: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 62: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 397 "parser.ypp" +#line 401 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 63: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 402 "parser.ypp" +#line 406 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 64: // stmt_case: "case" integer ":" -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 65: // stmt_case: "case" neg_integer ":" -#line 409 "parser.ypp" +#line 413 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 66: // stmt_case: "case" string ":" -#line 411 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 67: // stmt_default: "default" ":" -#line 416 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 68: // stmt_break: "break" ";" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 69: // stmt_continue: "continue" ";" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 70: // stmt_return: "return" expr ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 71: // stmt_return: "return" ";" -#line 433 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 72: // stmt_breakpoint: "breakpoint" ";" -#line 438 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 73: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 74: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 75: // for_stmt: expr_assign -#line 452 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 76: // for_stmt: %empty -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 77: // for_expr: expr -#line 457 "parser.ypp" +#line 461 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 78: // for_expr: %empty -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 79: // expr: expr_compare -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; - case 80: // expr: expr_binary -#line 463 "parser.ypp" + case 80: // expr: expr_ternary +#line 467 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; - case 81: // expr: expr_primitive -#line 464 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2265 "parser.cpp" - break; - - case 82: // expr_assign: "++" object + case 81: // expr: expr_binary #line 468 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2271 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2270 "parser.cpp" break; - case 83: // expr_assign: "--" object + case 82: // expr: expr_primitive #line 469 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2277 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2276 "parser.cpp" break; - case 84: // expr_assign: object "++" -#line 470 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2283 "parser.cpp" - break; - - case 85: // expr_assign: object "--" -#line 471 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2289 "parser.cpp" - break; - - case 86: // expr_assign: object "=" expr -#line 472 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2295 "parser.cpp" - break; - - case 87: // expr_assign: object "|=" expr + case 83: // expr_assign: "++" object #line 473 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2301 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2282 "parser.cpp" break; - case 88: // expr_assign: object "&=" expr + case 84: // expr_assign: "--" object #line 474 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2307 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2288 "parser.cpp" break; - case 89: // expr_assign: object "^=" expr + case 85: // expr_assign: object "++" #line 475 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2313 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2294 "parser.cpp" break; - case 90: // expr_assign: object "<<=" expr + case 86: // expr_assign: object "--" #line 476 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2319 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2300 "parser.cpp" break; - case 91: // expr_assign: object ">>=" expr + case 87: // expr_assign: object "=" expr #line 477 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2325 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2306 "parser.cpp" break; - case 92: // expr_assign: object "+=" expr + case 88: // expr_assign: object "|=" expr #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2331 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2312 "parser.cpp" break; - case 93: // expr_assign: object "-=" expr + case 89: // expr_assign: object "&=" expr #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2337 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2318 "parser.cpp" break; - case 94: // expr_assign: object "*=" expr + case 90: // expr_assign: object "^=" expr #line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2343 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2324 "parser.cpp" break; - case 95: // expr_assign: object "/=" expr + case 91: // expr_assign: object "<<=" expr #line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2349 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2330 "parser.cpp" break; - case 96: // expr_assign: object "%=" expr + case 92: // expr_assign: object ">>=" expr #line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2355 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2336 "parser.cpp" break; - case 97: // expr_compare: expr "||" expr + case 93: // expr_assign: object "+=" expr +#line 483 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2342 "parser.cpp" + break; + + case 94: // expr_assign: object "-=" expr +#line 484 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2348 "parser.cpp" + break; + + case 95: // expr_assign: object "*=" expr +#line 485 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2354 "parser.cpp" + break; + + case 96: // expr_assign: object "/=" expr #line 486 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2361 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2360 "parser.cpp" break; - case 98: // expr_compare: expr "&&" expr + case 97: // expr_assign: object "%=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2367 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2366 "parser.cpp" break; - case 99: // expr_compare: expr "==" expr -#line 488 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2373 "parser.cpp" - break; - - case 100: // expr_compare: expr "!=" expr -#line 489 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2379 "parser.cpp" - break; - - case 101: // expr_compare: expr "<=" expr -#line 490 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2385 "parser.cpp" - break; - - case 102: // expr_compare: expr ">=" expr + case 98: // expr_compare: expr "||" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2391 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2372 "parser.cpp" break; - case 103: // expr_compare: expr "<" expr + case 99: // expr_compare: expr "&&" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2397 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2378 "parser.cpp" break; - case 104: // expr_compare: expr ">" expr + case 100: // expr_compare: expr "==" expr #line 493 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2403 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2384 "parser.cpp" break; - case 105: // expr_binary: expr "|" expr + case 101: // expr_compare: expr "!=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2390 "parser.cpp" + break; + + case 102: // expr_compare: expr "<=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2396 "parser.cpp" + break; + + case 103: // expr_compare: expr ">=" expr +#line 496 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2402 "parser.cpp" + break; + + case 104: // expr_compare: expr "<" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2409 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2408 "parser.cpp" break; - case 106: // expr_binary: expr "&" expr + case 105: // expr_compare: expr ">" expr #line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2415 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2414 "parser.cpp" break; - case 107: // expr_binary: expr "^" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2421 "parser.cpp" - break; - - case 108: // expr_binary: expr "<<" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2427 "parser.cpp" - break; - - case 109: // expr_binary: expr ">>" expr -#line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2433 "parser.cpp" - break; - - case 110: // expr_binary: expr "+" expr + case 106: // expr_ternary: expr "?" expr ":" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2439 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2420 "parser.cpp" break; - case 111: // expr_binary: expr "-" expr -#line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2445 "parser.cpp" - break; - - case 112: // expr_binary: expr "*" expr -#line 504 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2451 "parser.cpp" - break; - - case 113: // expr_binary: expr "/" expr -#line 505 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2457 "parser.cpp" - break; - - case 114: // expr_binary: expr "%" expr + case 107: // expr_binary: expr "|" expr #line 506 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2463 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2426 "parser.cpp" break; - case 115: // expr_primitive: "(" expr ")" + case 108: // expr_binary: expr "&" expr +#line 507 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2432 "parser.cpp" + break; + + case 109: // expr_binary: expr "^" expr +#line 508 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2438 "parser.cpp" + break; + + case 110: // expr_binary: expr "<<" expr +#line 509 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2444 "parser.cpp" + break; + + case 111: // expr_binary: expr ">>" expr #line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2469 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2450 "parser.cpp" break; - case 116: // expr_primitive: "~" expr + case 112: // expr_binary: expr "+" expr #line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2475 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2456 "parser.cpp" break; - case 117: // expr_primitive: "!" expr + case 113: // expr_binary: expr "-" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2481 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2462 "parser.cpp" break; - case 118: // expr_primitive: expr_call + case 114: // expr_binary: expr "*" expr #line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2487 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2468 "parser.cpp" break; - case 119: // expr_primitive: expr_call_thread + case 115: // expr_binary: expr "/" expr #line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2493 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2474 "parser.cpp" break; - case 120: // expr_primitive: expr_call_childthread + case 116: // expr_binary: expr "%" expr #line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2499 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2480 "parser.cpp" break; - case 121: // expr_primitive: expr_function -#line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2505 "parser.cpp" - break; - - case 122: // expr_primitive: expr_add_array -#line 517 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2511 "parser.cpp" - break; - - case 123: // expr_primitive: expr_array -#line 518 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2517 "parser.cpp" - break; - - case 124: // expr_primitive: expr_field + case 117: // expr_primitive: "(" expr ")" #line 519 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2523 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2486 "parser.cpp" break; - case 125: // expr_primitive: expr_size + case 118: // expr_primitive: "~" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2529 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2492 "parser.cpp" break; - case 126: // expr_primitive: thisthread + case 119: // expr_primitive: "!" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2535 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2498 "parser.cpp" break; - case 127: // expr_primitive: empty_array + case 120: // expr_primitive: expr_call #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2541 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2504 "parser.cpp" break; - case 128: // expr_primitive: undefined + case 121: // expr_primitive: expr_call_thread #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2547 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2510 "parser.cpp" break; - case 129: // expr_primitive: game + case 122: // expr_primitive: expr_call_childthread #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2553 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2516 "parser.cpp" break; - case 130: // expr_primitive: self + case 123: // expr_primitive: expr_function #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2559 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2522 "parser.cpp" break; - case 131: // expr_primitive: anim + case 124: // expr_primitive: expr_add_array #line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2565 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2528 "parser.cpp" break; - case 132: // expr_primitive: level + case 125: // expr_primitive: expr_array #line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2571 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2534 "parser.cpp" break; - case 133: // expr_primitive: animation + case 126: // expr_primitive: expr_field #line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2577 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2540 "parser.cpp" break; - case 134: // expr_primitive: animtree + case 127: // expr_primitive: expr_size #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2583 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2546 "parser.cpp" break; - case 135: // expr_primitive: name + case 128: // expr_primitive: thisthread #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2589 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2552 "parser.cpp" break; - case 136: // expr_primitive: istring + case 129: // expr_primitive: empty_array #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2595 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2558 "parser.cpp" break; - case 137: // expr_primitive: string + case 130: // expr_primitive: undefined #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2601 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2564 "parser.cpp" break; - case 138: // expr_primitive: vector + case 131: // expr_primitive: game #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2607 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2570 "parser.cpp" break; - case 139: // expr_primitive: neg_float + case 132: // expr_primitive: self #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2613 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2576 "parser.cpp" break; - case 140: // expr_primitive: neg_integer + case 133: // expr_primitive: anim #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2619 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2582 "parser.cpp" break; - case 141: // expr_primitive: float + case 134: // expr_primitive: level #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2625 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2588 "parser.cpp" break; - case 142: // expr_primitive: integer + case 135: // expr_primitive: animation #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2631 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2594 "parser.cpp" break; - case 143: // expr_primitive: false + case 136: // expr_primitive: animtree #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2637 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2600 "parser.cpp" break; - case 144: // expr_primitive: true + case 137: // expr_primitive: name #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2643 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2606 "parser.cpp" break; - case 145: // expr_call: expr_call_function + case 138: // expr_primitive: istring +#line 540 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2612 "parser.cpp" + break; + + case 139: // expr_primitive: string +#line 541 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2618 "parser.cpp" + break; + + case 140: // expr_primitive: vector +#line 542 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2624 "parser.cpp" + break; + + case 141: // expr_primitive: neg_float #line 543 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2649 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2630 "parser.cpp" break; - case 146: // expr_call: expr_call_pointer + case 142: // expr_primitive: neg_integer #line 544 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2655 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2636 "parser.cpp" break; - case 147: // expr_call: object expr_call_function + case 143: // expr_primitive: float #line 545 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2661 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2642 "parser.cpp" break; - case 148: // expr_call: object expr_call_pointer + case 144: // expr_primitive: integer #line 546 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2667 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2648 "parser.cpp" break; - case 149: // expr_call_thread: "thread" expr_call_function -#line 550 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2673 "parser.cpp" + case 145: // expr_primitive: false +#line 547 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2654 "parser.cpp" break; - case 150: // expr_call_thread: "thread" expr_call_pointer -#line 551 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2679 "parser.cpp" + case 146: // expr_primitive: true +#line 548 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2660 "parser.cpp" break; - case 151: // expr_call_thread: object "thread" expr_call_function + case 147: // expr_call: expr_call_function #line 552 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2685 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2666 "parser.cpp" break; - case 152: // expr_call_thread: object "thread" expr_call_pointer + case 148: // expr_call: expr_call_pointer #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2691 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2672 "parser.cpp" break; - case 153: // expr_call_childthread: "childthread" expr_call_function -#line 557 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2697 "parser.cpp" + case 149: // expr_call: object expr_call_function +#line 554 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2678 "parser.cpp" break; - case 154: // expr_call_childthread: "childthread" expr_call_pointer -#line 558 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2703 "parser.cpp" + case 150: // expr_call: object expr_call_pointer +#line 555 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2684 "parser.cpp" break; - case 155: // expr_call_childthread: object "childthread" expr_call_function + case 151: // expr_call_thread: "thread" expr_call_function #line 559 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2709 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2690 "parser.cpp" break; - case 156: // expr_call_childthread: object "childthread" expr_call_pointer + case 152: // expr_call_thread: "thread" expr_call_pointer #line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2715 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2696 "parser.cpp" break; - case 157: // expr_call_function: name "(" expr_arguments ")" -#line 565 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2721 "parser.cpp" + case 153: // expr_call_thread: object "thread" expr_call_function +#line 561 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2702 "parser.cpp" break; - case 158: // expr_call_function: file "::" name "(" expr_arguments ")" + case 154: // expr_call_thread: object "thread" expr_call_pointer +#line 562 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2708 "parser.cpp" + break; + + case 155: // expr_call_childthread: "childthread" expr_call_function +#line 566 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2714 "parser.cpp" + break; + + case 156: // expr_call_childthread: "childthread" expr_call_pointer #line 567 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2727 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2720 "parser.cpp" break; - case 159: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 572 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2733 "parser.cpp" + case 157: // expr_call_childthread: object "childthread" expr_call_function +#line 568 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2726 "parser.cpp" break; - case 160: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 158: // expr_call_childthread: object "childthread" expr_call_pointer +#line 569 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2732 "parser.cpp" + break; + + case 159: // expr_call_function: name "(" expr_arguments ")" #line 574 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2738 "parser.cpp" + break; + + case 160: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2744 "parser.cpp" + break; + + case 161: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 581 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2750 "parser.cpp" + break; + + case 162: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 583 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2739 "parser.cpp" +#line 2756 "parser.cpp" break; - case 161: // expr_arguments: expr_arguments_filled -#line 578 "parser.ypp" + case 163: // expr_arguments: expr_arguments_filled +#line 587 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2745 "parser.cpp" +#line 2762 "parser.cpp" break; - case 162: // expr_arguments: expr_arguments_empty -#line 579 "parser.ypp" + case 164: // expr_arguments: expr_arguments_empty +#line 588 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2751 "parser.cpp" +#line 2768 "parser.cpp" break; - case 163: // expr_arguments_filled: expr_arguments "," expr -#line 584 "parser.ypp" + case 165: // expr_arguments_filled: expr_arguments "," expr +#line 593 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2757 "parser.cpp" +#line 2774 "parser.cpp" break; - case 164: // expr_arguments_filled: expr -#line 586 "parser.ypp" + case 166: // expr_arguments_filled: expr +#line 595 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2763 "parser.cpp" +#line 2780 "parser.cpp" break; - case 165: // expr_arguments_empty: %empty -#line 591 "parser.ypp" + case 167: // expr_arguments_empty: %empty +#line 600 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2769 "parser.cpp" +#line 2786 "parser.cpp" break; - case 166: // expr_function: "::" name -#line 596 "parser.ypp" + case 168: // expr_function: "::" name +#line 605 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2775 "parser.cpp" +#line 2792 "parser.cpp" break; - case 167: // expr_function: file "::" name -#line 598 "parser.ypp" + case 169: // expr_function: file "::" name +#line 607 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2781 "parser.cpp" +#line 2798 "parser.cpp" break; - case 168: // expr_add_array: "[" expr_arguments_filled "]" -#line 603 "parser.ypp" + case 170: // expr_add_array: "[" expr_arguments_filled "]" +#line 612 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2787 "parser.cpp" +#line 2804 "parser.cpp" break; - case 169: // expr_array: object "[" expr "]" -#line 608 "parser.ypp" + case 171: // expr_array: object "[" expr "]" +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2793 "parser.cpp" +#line 2810 "parser.cpp" break; - case 170: // expr_field: object "." name -#line 613 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2799 "parser.cpp" - break; - - case 171: // expr_size: object ".size" -#line 618 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2805 "parser.cpp" - break; - - case 172: // object: expr_call + case 172: // expr_field: object "." name #line 622 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2811 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2816 "parser.cpp" break; - case 173: // object: expr_array -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2817 "parser.cpp" - break; - - case 174: // object: expr_field -#line 624 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2823 "parser.cpp" - break; - - case 175: // object: game -#line 625 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2829 "parser.cpp" - break; - - case 176: // object: self -#line 626 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2835 "parser.cpp" - break; - - case 177: // object: anim + case 173: // expr_size: object ".size" #line 627 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2841 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2822 "parser.cpp" break; - case 178: // object: level -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2847 "parser.cpp" + case 174: // object: expr_call +#line 631 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2828 "parser.cpp" break; - case 179: // object: name -#line 629 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2853 "parser.cpp" - break; - - case 180: // thisthread: "thisthread" + case 175: // object: expr_array #line 632 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2859 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2834 "parser.cpp" break; - case 181: // empty_array: "[" "]" + case 176: // object: expr_field #line 633 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2865 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2840 "parser.cpp" break; - case 182: // undefined: "undefined" + case 177: // object: game #line 634 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2871 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2846 "parser.cpp" break; - case 183: // game: "game" + case 178: // object: self #line 635 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2877 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2852 "parser.cpp" break; - case 184: // self: "self" + case 179: // object: anim #line 636 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2883 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2858 "parser.cpp" break; - case 185: // anim: "anim" + case 180: // object: level #line 637 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2889 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2864 "parser.cpp" break; - case 186: // level: "level" + case 181: // object: name #line 638 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2895 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2870 "parser.cpp" break; - case 187: // animation: "%" "identifier" -#line 639 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2901 "parser.cpp" - break; - - case 188: // animtree: "#animtree" -#line 640 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2907 "parser.cpp" - break; - - case 189: // name: "identifier" + case 182: // thisthread: "thisthread" #line 641 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2913 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2876 "parser.cpp" break; - case 190: // file: "file path" + case 183: // empty_array: "[" "]" #line 642 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2919 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2882 "parser.cpp" break; - case 191: // istring: "localized string" + case 184: // undefined: "undefined" #line 643 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2925 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2888 "parser.cpp" break; - case 192: // string: "string literal" + case 185: // game: "game" #line 644 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2931 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2894 "parser.cpp" break; - case 193: // vector: "(" expr "," expr "," expr ")" + case 186: // self: "self" #line 645 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2937 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2900 "parser.cpp" break; - case 194: // neg_float: "-" "float" + case 187: // anim: "anim" #line 646 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2943 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2906 "parser.cpp" break; - case 195: // neg_integer: "-" "int" + case 188: // level: "level" #line 647 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2949 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2912 "parser.cpp" break; - case 196: // float: "float" + case 189: // animation: "%" "identifier" #line 648 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2955 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2918 "parser.cpp" break; - case 197: // integer: "int" + case 190: // animtree: "#animtree" #line 649 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2961 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2924 "parser.cpp" break; - case 198: // false: "false" + case 191: // name: "identifier" #line 650 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 2967 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2930 "parser.cpp" break; - case 199: // true: "true" + case 192: // file: "file path" #line 651 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2936 "parser.cpp" + break; + + case 193: // istring: "localized string" +#line 652 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2942 "parser.cpp" + break; + + case 194: // string: "string literal" +#line 653 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2948 "parser.cpp" + break; + + case 195: // vector: "(" expr "," expr "," expr ")" +#line 654 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2954 "parser.cpp" + break; + + case 196: // neg_float: "-" "float" +#line 655 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2960 "parser.cpp" + break; + + case 197: // neg_integer: "-" "int" +#line 656 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2966 "parser.cpp" + break; + + case 198: // float: "float" +#line 657 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2972 "parser.cpp" + break; + + case 199: // integer: "int" +#line 658 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2978 "parser.cpp" + break; + + case 200: // false: "false" +#line 659 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 2984 "parser.cpp" + break; + + case 201: // true: "true" +#line 660 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 2973 "parser.cpp" +#line 2990 "parser.cpp" break; -#line 2977 "parser.cpp" +#line 2994 "parser.cpp" default: break; @@ -3163,28 +3180,29 @@ namespace xsk { namespace gsc { namespace iw7 { "else", "while", "for", "foreach", "in", "switch", "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", - "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "++", - "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", - "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", - "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", + "level", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", + "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", + "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", + "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", "int", "ADD_ARRAY", - "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", - "$accept", "root", "program", "include", "define", "usingtree", - "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", - "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", "stmt_wait", - "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", - "stmt_if", "stmt_ifelse", "stmt_while", "stmt_for", "stmt_foreach", - "stmt_switch", "stmt_case", "stmt_default", "stmt_break", - "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", - "stmt_prof_end", "for_stmt", "for_expr", "expr", "expr_assign", - "expr_compare", "expr_binary", "expr_primitive", "expr_call", - "expr_call_thread", "expr_call_childthread", "expr_call_function", - "expr_call_pointer", "expr_arguments", "expr_arguments_filled", - "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", - "expr_field", "expr_size", "object", "thisthread", "empty_array", - "undefined", "game", "self", "anim", "level", "animation", "animtree", - "name", "file", "istring", "string", "vector", "neg_float", - "neg_integer", "float", "integer", "false", "true", YY_NULLPTR + "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", + "POSTDEC", "$accept", "root", "program", "include", "define", + "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", + "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", + "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", + "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", + "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", + "stmt_prof_begin", "stmt_prof_end", "for_stmt", "for_expr", "expr", + "expr_assign", "expr_compare", "expr_ternary", "expr_binary", + "expr_primitive", "expr_call", "expr_call_thread", + "expr_call_childthread", "expr_call_function", "expr_call_pointer", + "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", + "expr_function", "expr_add_array", "expr_array", "expr_field", + "expr_size", "object", "thisthread", "empty_array", "undefined", "game", + "self", "anim", "level", "animation", "animtree", "name", "file", + "istring", "string", "vector", "neg_float", "neg_integer", "float", + "integer", "false", "true", YY_NULLPTR }; return yy_sname[yysymbol]; } @@ -3449,518 +3467,570 @@ namespace xsk { namespace gsc { namespace iw7 { } - const short parser::yypact_ninf_ = -240; + const short parser::yypact_ninf_ = -245; - const short parser::yytable_ninf_ = -180; + const short parser::yytable_ninf_ = -182; const short parser::yypact_[] = { - 3, -71, -17, -240, 28, 3, -240, -240, -240, -240, - -240, -20, -240, -6, -38, -240, -240, -240, -21, 774, - -240, -240, 25, -16, -240, -240, 32, 32, -240, 29, - -240, -240, -240, -240, -240, -240, -240, 774, 650, -21, - 774, 774, -73, -13, -240, -240, -240, 1380, -240, -240, - -240, 30, -240, -240, -240, -240, -240, -240, 40, 65, - -240, 673, -240, -240, -240, 735, 743, 804, 930, -240, - -240, 6, 33, -240, -240, -240, -240, -240, -240, -240, - -240, -240, 36, 47, -21, 34, -240, -240, 42, 44, - -240, -240, 51, 944, 650, -240, 1458, 52, 54, -240, - -240, -240, -240, -240, -240, -240, -240, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 32, 32, -240, 836, -21, - -240, -240, 774, -21, -240, 485, -240, -240, 774, -21, - 774, -240, 774, 1251, 774, -240, 130, 130, 1468, 977, - 84, 84, 206, 206, 206, 206, 1020, 1509, 1499, 171, - 171, -240, -240, -240, -240, -240, -240, -240, 1290, -240, - -10, -240, 66, 60, 78, 79, 774, 61, 81, 89, - 95, 99, 114, -68, 108, 109, 118, 712, -240, 187, - 187, -240, -240, 581, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, 119, 120, 139, -240, - -240, 882, -240, -240, -240, -240, 42, 1251, 66, 1329, - 1367, 152, 1458, -240, -240, 774, -240, 774, 774, 1414, - -240, 774, 774, 932, -21, 774, 112, 111, 166, 170, - -240, -240, -240, -240, 1427, -240, -5, -5, -240, -240, - -240, -240, -240, 189, 195, 197, 201, -240, -240, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 202, 774, 208, 8, 10, 11, -240, 1083, 1116, 192, - -240, 488, 1, 1126, -240, -240, -240, -240, 774, 774, - 774, 774, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, - 1458, 1458, 1458, 210, 1159, 774, -240, 205, 214, 625, - 625, 774, 774, -21, 47, 1169, 987, 1030, 1073, 774, - -240, 14, -240, -240, 239, -240, 216, 1458, 1202, 246, - -240, 219, 227, 774, 228, 774, 230, 774, 87, -240, - 625, 932, 625, 774, -240, -240, 101, -240, 107, -240, - 115, -240, -240, 233, -240, 1212, 234, 243, 245, 625, - 625, -240, -240, -240, -240, -240 + 3, -50, -3, -245, 20, 3, -245, -245, -245, -245, + -245, -20, -245, -2, -37, -245, -245, -245, -31, 762, + -245, -245, 23, -16, -245, -245, -15, -15, -245, 21, + -245, -245, -245, -245, -245, -245, -245, 762, 480, -31, + 762, 762, -76, 4, -245, -245, -245, 1588, -245, -245, + -245, -245, 31, -245, -245, -245, -245, -245, -245, 393, + 508, -245, 722, -245, -245, -245, 785, 793, 921, 931, + -245, -245, 14, 19, -245, -245, -245, -245, -245, -245, + -245, -245, -245, 43, 49, -31, 52, -245, -245, 57, + 53, -245, -245, 63, 988, 480, -245, 1671, 62, 66, + -245, -245, -245, -245, -245, -245, -245, -245, 762, 762, + 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 762, 762, 762, -15, -15, -245, + 825, -31, -245, -245, 762, -31, -245, 583, -245, -245, + 762, -31, 762, -245, 762, 1398, 762, -245, 1553, 75, + 75, 1702, 1712, 85, 85, 70, 70, 70, 70, 930, + 1753, 1743, 79, 79, -245, -245, -245, -245, -245, -245, + -245, 1438, -245, -5, -245, 74, 65, 78, 81, 762, + 69, 87, 90, 91, 95, 97, -64, 77, 94, 120, + 699, -245, 410, 410, -245, -245, 628, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, 121, + 122, 142, -245, -245, 872, -245, -245, -245, -245, 57, + 1398, 74, 1478, 1517, 96, 1671, 762, -245, -245, 762, + -245, 762, 762, 1623, -245, 762, 762, 496, -31, 762, + 113, 155, 159, 161, -245, -245, -245, -245, 1658, -245, + -13, -13, -245, -245, -245, -245, -245, 172, 173, 174, + 176, -245, -245, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 762, 762, 177, 762, 178, 1671, 10, 11, + 33, -245, 1154, 1188, 167, -245, 952, 1, 1222, -245, + -245, -245, -245, 762, 762, 762, 762, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 181, 1256, + 762, -245, 182, 184, 673, 673, 762, 762, -31, 49, + 1290, 1032, 1076, 1120, 762, -245, 35, -245, -245, 211, + -245, 185, 1671, 1324, 224, -245, 196, 197, 762, 201, + 762, 202, 762, 36, -245, 673, 496, 673, 762, -245, + -245, 39, -245, 42, -245, 46, -245, -245, 213, -245, + 1358, 206, 210, 214, 673, 673, -245, -245, -245, -245, + -245 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 189, 0, 2, 6, 7, 9, 10, - 11, 0, 190, 0, 0, 1, 4, 5, 17, 0, - 8, 192, 0, 0, 16, 188, 0, 0, 180, 0, - 199, 198, 182, 183, 184, 185, 186, 0, 165, 0, - 0, 0, 0, 0, 191, 196, 197, 0, 79, 80, - 81, 118, 119, 120, 145, 146, 121, 122, 123, 124, - 125, 0, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 0, 0, 0, 0, 149, 150, 0, 0, - 153, 154, 0, 0, 165, 181, 164, 0, 161, 162, - 166, 117, 116, 194, 195, 187, 13, 0, 0, 0, + 3, 0, 0, 191, 0, 2, 6, 7, 9, 10, + 11, 0, 192, 0, 0, 1, 4, 5, 17, 0, + 8, 194, 0, 0, 16, 190, 0, 0, 182, 0, + 201, 200, 184, 185, 186, 187, 188, 0, 167, 0, + 0, 0, 0, 0, 193, 198, 199, 0, 79, 80, + 81, 82, 120, 121, 122, 147, 148, 123, 124, 125, + 126, 127, 0, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 0, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 0, 0, 0, 0, 151, 152, 0, + 0, 155, 156, 0, 0, 167, 183, 166, 0, 163, + 164, 168, 119, 118, 196, 197, 189, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, - 147, 148, 165, 0, 12, 0, 14, 15, 0, 0, - 0, 115, 0, 164, 0, 168, 108, 109, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 110, - 111, 112, 113, 114, 151, 152, 155, 156, 0, 170, - 0, 161, 167, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, - 0, 44, 18, 0, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 0, 172, 0, 173, - 174, 0, 175, 176, 177, 178, 179, 0, 0, 0, - 0, 0, 163, 169, 157, 165, 72, 165, 165, 0, - 56, 0, 0, 76, 0, 0, 0, 0, 0, 0, - 67, 68, 69, 71, 0, 172, 82, 83, 41, 43, - 47, 45, 46, 0, 0, 0, 0, 84, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, + 0, 0, 149, 150, 167, 0, 12, 0, 14, 15, + 0, 0, 0, 117, 0, 166, 0, 170, 0, 110, + 111, 98, 99, 100, 101, 102, 103, 104, 105, 107, + 108, 109, 112, 113, 114, 115, 116, 153, 154, 157, + 158, 0, 172, 0, 163, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 75, 0, 0, 0, 66, 65, 64, 70, 0, 0, - 0, 0, 86, 92, 93, 94, 95, 96, 87, 88, - 89, 91, 90, 0, 0, 165, 158, 0, 0, 0, - 0, 78, 0, 0, 0, 0, 0, 0, 0, 165, - 193, 0, 73, 74, 57, 59, 0, 77, 0, 0, - 63, 0, 0, 165, 0, 165, 0, 165, 0, 159, - 0, 76, 0, 0, 48, 50, 0, 53, 0, 55, - 0, 160, 58, 0, 61, 0, 0, 0, 0, 0, - 0, 49, 52, 54, 60, 62 + 0, 42, 0, 0, 44, 18, 0, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, + 174, 0, 175, 176, 0, 177, 178, 179, 180, 181, + 0, 0, 0, 0, 0, 165, 0, 171, 159, 167, + 72, 167, 167, 0, 56, 0, 0, 76, 0, 0, + 0, 0, 0, 0, 67, 68, 69, 71, 0, 174, + 83, 84, 41, 43, 47, 45, 46, 0, 0, 0, + 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, + 0, 51, 0, 0, 0, 75, 0, 0, 0, 66, + 65, 64, 70, 0, 0, 0, 0, 87, 93, 94, + 95, 96, 97, 88, 89, 90, 92, 91, 0, 0, + 167, 160, 0, 0, 0, 0, 78, 0, 0, 0, + 0, 0, 0, 0, 167, 195, 0, 73, 74, 57, + 59, 0, 77, 0, 0, 63, 0, 0, 167, 0, + 167, 0, 167, 0, 161, 0, 76, 0, 0, 48, + 50, 0, 53, 0, 55, 0, 162, 58, 0, 61, + 0, 0, 0, 0, 0, 0, 49, 52, 54, 60, + 62 }; const short parser::yypgoto_[] = { - -240, -240, -240, 277, 290, -240, -240, -240, -240, 113, - -82, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, - -240, -240, -240, -240, -54, -240, 63, -239, -240, -240, - -240, -39, 71, -240, -24, -19, -116, -25, -240, -240, - -240, 26, 85, -240, 100, -240, -240, -240, 110, 125, - 213, 224, -240, -240, 0, 5, -240, 9, -240, -240, - 124, -240, 126, -240, -240 + -245, -245, -245, 259, 263, -245, -245, -245, -245, 41, + -80, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -87, -245, 64, -244, -245, -245, + -245, -245, -99, -85, -245, -25, -19, -120, -27, -245, + -245, -245, 26, 86, -245, 101, -245, -245, -245, 125, + 130, 216, 221, -245, -245, 0, 5, -245, 9, -245, + -245, 88, -245, 98, -245, -245 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 289, 336, 96, 216, 48, 49, - 50, 51, 52, 53, 54, 55, 97, 171, 99, 56, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 294, 341, 97, 219, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 98, 174, 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81 + 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 136, 86, 90, 290, 11, 13, 87, 91, 1, - 2, 246, 12, 98, 103, 104, 170, 21, 24, 18, - 46, 322, 14, 22, 83, 29, 88, 88, 15, 84, - 234, 89, 89, -179, -179, 144, -179, 130, 128, 100, - -179, 129, 131, 20, 19, 132, 323, 21, 316, -179, - 317, 318, -179, 144, 349, 144, 144, -172, -172, 144, - -172, 88, 29, 3, -172, 82, 89, -173, -173, 98, - -173, 105, 92, -172, -173, 85, -172, 138, 12, 3, - 133, 132, 47, -173, 137, 134, -173, 3, 135, -179, - -179, 139, -174, -174, 140, -174, 217, 144, 145, -174, - 93, 164, 166, 101, 102, 235, 165, 167, -174, 236, - 240, -174, 290, -172, -172, 12, 3, 237, 238, 283, - 241, 284, 285, -173, -173, 88, 88, 361, 242, 169, - 89, 89, 144, 172, 243, 226, 107, 108, 244, 228, - 89, 366, 113, 114, 115, 116, 144, 367, -174, -174, - 255, 255, 144, 245, 217, 368, 250, 143, 251, 294, - 144, 219, 120, 121, 122, 123, 124, 252, 260, 261, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 262, 226, - 226, 168, 247, 226, 89, 89, 282, 130, 89, 331, - 104, 227, 131, 229, 255, 230, 218, 232, 120, 121, - 122, 123, 124, 348, 295, 219, 219, 29, 296, 219, - 220, 88, 33, 34, 35, 36, 89, 356, 298, 358, - 85, 360, 130, 130, 299, 221, 300, 131, 131, 239, - 301, 321, 340, 226, 292, 222, 313, 315, 89, 329, - 254, 122, 123, 124, 332, 350, 88, 88, 107, 108, - 223, 89, 89, 333, 218, 351, 353, 130, 354, 219, - 12, 3, 131, 369, 220, 220, 355, 357, 220, 359, - 217, 217, 16, 371, 120, 121, 122, 123, 124, 256, - 257, 88, 372, 221, 373, 17, 89, 363, 0, 222, - 222, 0, 0, 222, 287, 288, 259, 248, 293, 249, - 0, 217, 255, 217, 223, 223, 0, 0, 223, 226, - 226, 0, 0, 339, 89, 89, 0, 0, 220, 0, - 217, 217, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 291, 314, 219, 219, 0, 224, 0, - 226, 226, 226, 222, 0, 89, 89, 89, 0, 225, - 0, 325, 326, 327, 328, 0, 0, 0, 223, 226, - 226, 0, 0, 0, 89, 89, 219, 219, 219, 0, - 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, - 218, 218, 0, 0, 0, 219, 219, 0, 0, 0, - 0, 0, 224, 224, 220, 220, 224, 0, 0, 0, - 0, 0, 0, 225, 225, 0, 365, 225, 0, 221, - 221, 218, 0, 218, 0, 0, 0, 0, 0, 222, - 222, 0, 334, 335, 0, 220, 220, 220, 0, 0, - 218, 218, 0, 0, 223, 223, 0, 0, 0, 0, - 221, 291, 221, 0, 220, 220, 224, 0, 0, 0, - 222, 222, 222, 362, 0, 364, 0, 225, 0, 221, - 221, 0, 0, 0, 0, 223, 223, 223, 0, 222, - 222, 0, 374, 375, 0, 0, 0, 0, 173, 174, - 175, 0, 0, 0, 223, 223, 176, 0, 0, 177, - 178, 0, 179, 180, 181, 0, 182, 183, 184, 185, - 186, 187, 26, 0, 0, 29, 0, 0, 29, 0, - 33, 34, 35, 36, 0, 0, 135, 188, 85, 0, - 0, 128, 224, 224, 129, 189, 190, 0, 267, 268, - 0, 0, 0, 225, 225, 0, 0, 0, 0, 0, - 0, 0, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 224, 224, 224, 0, 0, 12, 3, - 0, 12, 3, 0, 225, 225, 225, 0, 0, 0, - 0, 0, 224, 224, 173, 174, 175, 0, 0, 0, - 0, 0, 176, 225, 225, 177, 178, 0, 179, 180, - 181, 0, 182, 183, 184, 185, 186, 187, 26, 0, - 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, - 0, 0, 135, 258, 85, 0, 0, 0, 173, 174, - 175, 189, 190, 0, 0, 0, 176, 0, 0, 177, - 178, 0, 179, 180, 181, 0, 182, 183, 184, 185, - 186, 187, 26, 0, 0, 29, 0, 0, 25, 0, - 33, 34, 35, 36, 12, 3, 135, 0, 85, 0, - 0, 0, 0, 0, 0, 189, 190, 26, 27, 28, + 11, 87, 91, 295, 138, 11, 13, 88, 92, 1, + 2, 99, 104, 105, 173, 29, 250, 29, 24, 18, + 15, 327, 21, 22, 84, 46, 89, 89, 86, 85, + 130, 90, 90, 131, 12, 238, 14, 132, 220, 101, + 146, -181, -181, 133, -181, 19, 328, 20, -181, 21, + 321, 322, 221, 134, 3, 146, 146, -181, -174, -174, + -181, -174, 89, 83, 93, -174, 135, 90, 99, 12, + 3, 12, 3, 323, -174, 354, 366, -174, 146, 371, + 146, 146, 372, 47, 146, 139, 373, 146, 3, 106, + 137, 146, 136, 259, 259, 140, 134, 220, -181, -181, + 141, 94, 167, 169, 102, 103, 142, 146, 168, 170, + 147, 221, 295, 239, 240, -174, -174, 241, 244, 288, + 242, 289, 290, 109, 110, 254, 245, 89, 89, 246, + 247, 172, 90, 90, 248, 175, 249, 229, 109, 110, + 286, 231, 90, 255, 115, 116, 117, 118, 259, 122, + 123, 124, 125, 126, 122, 123, 124, 125, 126, 145, + 124, 125, 126, 222, 122, 123, 124, 125, 126, 256, + 264, 265, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 266, 229, 229, 171, 251, 229, 90, 90, 132, + 336, 90, 105, 299, 230, 133, 232, 300, 233, 301, + 235, 303, 304, 305, 353, 306, 326, 320, 222, 222, + 334, 318, 222, 223, 89, 220, 220, 355, 361, 90, + 363, 337, 365, 338, 356, 132, 132, 263, 224, 221, + 221, 133, 133, 243, 358, 359, 360, 229, 297, 345, + 362, 364, 90, 374, 258, 376, 220, 259, 220, 377, + 89, 89, 225, 378, 16, 90, 90, 226, 17, 368, + 221, 132, 221, 222, 252, 220, 220, 133, 223, 223, + 0, 0, 223, 0, 253, 0, 0, 0, 0, 221, + 221, 0, 0, 260, 261, 0, 89, 224, 0, 0, + 287, 90, 0, 0, 0, 0, 0, 0, 0, 292, + 293, 0, 0, 298, 0, 0, 0, 225, 225, 0, + 0, 225, 226, 226, 229, 229, 226, 0, 344, 90, + 90, 0, 0, 223, 0, 0, 0, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 296, 319, + 222, 222, 0, 227, 0, 229, 229, 229, 228, 0, + 90, 90, 90, 0, 0, 339, 340, 330, 331, 332, + 333, 0, 225, 0, 229, 229, 0, 226, 0, 90, + 90, 222, 222, 222, 0, 0, 0, 0, 0, 0, + 342, 343, 0, 0, 0, 0, 367, 0, 369, 0, + 222, 222, 0, 0, 0, 0, 0, 0, 227, 227, + 223, 223, 227, 228, 228, 379, 380, 228, 0, 0, + -175, -175, 370, -175, 0, 224, 224, -175, 0, 0, + 0, 0, 0, 0, 0, 0, -175, 0, 0, -175, + 29, 223, 223, 223, 0, 33, 34, 35, 36, 225, + 225, 0, 0, 86, 226, 226, 224, 296, 224, 0, + 223, 223, 0, 227, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 224, 224, -175, -175, 0, + 225, 225, 225, 0, 0, 226, 226, 226, 25, 0, + 0, 0, 0, 0, 12, 3, 0, 0, 0, 225, + 225, 0, 0, 0, 226, 226, 0, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, - 0, 0, 0, 94, 95, 0, 0, 39, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 12, 3, - 0, 0, 40, 41, 0, 0, 128, 0, 0, 129, + 0, 0, 0, 95, 96, 0, 29, 39, 0, 0, + 0, 33, 34, 35, 36, -176, -176, 0, -176, 86, + 227, 227, -176, 40, 41, 228, 228, 192, 193, 0, + 0, -176, 0, 0, -176, 0, 0, 0, 0, 0, + 42, 0, 0, 43, 12, 3, 21, 44, 45, 46, + 0, 227, 227, 227, 0, 0, 228, 228, 228, 0, + 12, 3, 0, 0, 0, 0, 176, 177, 178, 0, + 227, 227, -176, -176, 179, 228, 228, 180, 181, 0, + 182, 183, 184, 0, 185, 186, 187, 188, 189, 190, + 26, 0, 0, 29, 0, 0, 0, 0, 33, 34, + 35, 36, 0, 0, 137, 191, 86, 0, 0, 0, + 0, 176, 177, 178, 192, 193, 0, 0, 0, 179, + 0, 0, 180, 181, 0, 182, 183, 184, 0, 185, + 186, 187, 188, 189, 190, 26, 0, 0, 29, 0, + 0, 0, 0, 33, 34, 35, 36, 12, 3, 137, + 262, 86, 0, 0, 0, 0, 176, 177, 178, 192, + 193, 0, 0, 0, 179, 0, 0, 180, 181, 0, + 182, 183, 184, 0, 185, 186, 187, 188, 189, 190, + 26, 0, 0, 29, 0, 0, 0, 25, 33, 34, + 35, 36, 12, 3, 137, 0, 86, 0, 0, 0, + 0, 0, 0, 0, 192, 193, 26, 27, 28, 29, + 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, + 0, 0, 38, 0, 0, 0, 39, 0, 257, 127, + 128, 0, 29, 0, 0, 0, 129, 12, 3, 0, + 0, 0, 40, 41, 0, 130, 0, 0, 131, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, 38, 12, 3, 0, 39, - 0, 253, -175, -175, 0, -175, 0, 0, 0, -175, - -176, -176, 0, -176, 40, 41, 0, -176, -175, 0, - 0, -175, 25, 0, 0, 0, -176, 0, 0, -176, - 0, 42, 0, 0, 43, 12, 3, 21, 44, 45, - 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, - 34, 35, 36, 37, 0, 0, 0, 38, -175, -175, - 0, 39, 0, 0, 0, 0, -176, -176, 0, 0, - 0, -177, -177, 0, -177, 0, 40, 41, -177, 0, - 0, 0, 0, 0, 25, 0, 0, -177, 0, 0, - -177, 0, 0, 42, 0, 0, 43, 12, 3, 21, - 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, - 0, 33, 34, 35, 36, 37, 0, 0, 0, 94, - 0, 0, 0, 39, 0, 0, 0, -177, -177, 0, - 0, 263, 264, 0, 265, 266, 0, 0, 40, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, + 0, 0, -177, -177, 0, -177, 0, 0, 0, -177, + -178, -178, 0, -178, 0, 40, 41, -178, -177, 0, + 0, -177, 0, 25, 0, 0, -178, 0, 0, -178, + 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, + 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, -177, + -177, 0, 39, 0, 0, 0, 0, -178, -178, 0, + 0, 267, 268, 0, 269, 270, 0, 0, 40, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 29, 0, 0, 42, 0, 0, 43, 12, - 3, 21, 44, 45, 46, 128, 0, 0, 129, 0, - 0, 0, 267, 268, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, -178, -178, 0, - -178, 0, 29, 0, -178, 12, 3, 33, 34, 35, - 36, 0, 0, -178, 0, 85, -178, 0, 0, 0, - 0, 0, 189, 190, 141, 0, 0, 0, 0, 142, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, -178, -178, 12, 3, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 342, 0, 107, - 108, 0, 343, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 344, 0, 107, 108, 0, 345, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 0, 118, 119, 120, 121, - 122, 123, 124, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 346, 0, 0, 0, 0, 347, 0, - 0, 0, 0, 319, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 320, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 324, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 330, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 341, - 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 352, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 370, 0, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 231, 0, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 233, 0, 0, 0, 0, 0, - 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 280, 0, 0, 0, 0, 0, 0, - 0, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 117, 118, 119, 120, 121, 122, - 123, 124, 281, 0, 0, 0, 0, 0, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 106, - 0, 0, 107, 108, 109, 110, 111, 112, 113, 114, + 3, 21, 44, 45, 46, 130, 0, 0, 131, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, -179, -179, + 0, -179, 0, 0, 0, -179, 12, 3, -180, -180, + 0, -180, 0, 0, -179, -180, 0, -179, 0, 0, + 0, 0, 0, 0, -180, 0, 0, -180, 0, 0, + 0, 0, 29, 109, 110, 0, 0, 113, 114, 115, + 116, 117, 118, 0, 0, 130, 0, 0, 131, 0, + 0, 0, 0, 271, 272, -179, -179, 120, 121, 122, + 123, 124, 125, 126, 0, -180, -180, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 143, 0, + 0, 0, 0, 144, 0, 0, 12, 3, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 347, 0, 0, 0, 0, 348, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 349, 0, 0, 0, + 0, 350, 0, 0, 0, 0, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 351, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 324, 0, 119, 120, 121, 122, + 123, 124, 125, 126, 108, 0, 0, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, + 119, 120, 121, 122, 123, 124, 125, 126, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 329, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 335, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 346, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 357, 0, 119, 120, 121, 122, + 123, 124, 125, 126, 108, 0, 0, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, + 119, 120, 121, 122, 123, 124, 125, 126, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 234, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 237, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 284, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 285, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 236, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 107, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 291, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 302, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 108, 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 0, 0, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 286, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 297, 0, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 107, 108, 0, 110, 111, 112, 113, 114, 115, 116, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 107, 108, 0, 0, 111, 112, 113, 114, 115, - 116, 107, 108, 0, 0, 111, 112, 113, 114, 115, - 116, 0, 0, 0, 0, 118, 0, 120, 121, 122, - 123, 124, 0, 0, 0, 0, 0, 120, 121, 122, - 123, 124 + 125, 126, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 109, 110, 0, 112, 113, + 114, 115, 116, 117, 118, 109, 110, 0, 0, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 109, 110, 0, 0, + 113, 114, 115, 116, 117, 118, 109, 110, 0, 0, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 120, 0, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 122, 123, 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 83, 26, 27, 243, 5, 1, 26, 27, 6, - 7, 79, 83, 38, 87, 88, 132, 85, 18, 39, - 88, 20, 39, 14, 40, 30, 26, 27, 0, 45, - 40, 26, 27, 27, 28, 45, 30, 61, 43, 39, - 34, 46, 61, 49, 64, 39, 45, 85, 40, 43, - 40, 40, 46, 45, 40, 45, 45, 27, 28, 45, - 30, 61, 30, 84, 34, 40, 61, 27, 28, 94, - 30, 84, 43, 43, 34, 43, 46, 43, 83, 84, - 47, 39, 19, 43, 84, 49, 46, 84, 41, 83, - 84, 47, 27, 28, 43, 30, 135, 45, 44, 34, - 37, 125, 126, 40, 41, 39, 125, 126, 43, 49, - 49, 46, 351, 83, 84, 83, 84, 39, 39, 235, - 39, 237, 238, 83, 84, 125, 126, 40, 39, 129, - 125, 126, 45, 133, 39, 135, 52, 53, 39, 139, - 135, 40, 58, 59, 60, 61, 45, 40, 83, 84, - 189, 190, 45, 39, 193, 40, 48, 94, 49, 48, - 45, 135, 78, 79, 80, 81, 82, 49, 49, 49, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 49, 189, - 190, 128, 183, 193, 189, 190, 44, 221, 193, 315, - 88, 138, 221, 140, 243, 142, 135, 144, 78, 79, - 80, 81, 82, 329, 48, 189, 190, 30, 48, 193, - 135, 221, 35, 36, 37, 38, 221, 343, 39, 345, - 43, 347, 256, 257, 39, 135, 39, 256, 257, 176, - 39, 49, 324, 243, 244, 135, 44, 39, 243, 39, - 187, 80, 81, 82, 49, 16, 256, 257, 52, 53, - 135, 256, 257, 49, 193, 49, 20, 291, 49, 243, - 83, 84, 291, 40, 189, 190, 49, 49, 193, 49, - 319, 320, 5, 49, 78, 79, 80, 81, 82, 189, - 190, 291, 49, 193, 49, 5, 291, 351, -1, 189, - 190, -1, -1, 193, 241, 242, 193, 183, 245, 183, - -1, 350, 351, 352, 189, 190, -1, -1, 193, 319, - 320, -1, -1, 323, 319, 320, -1, -1, 243, -1, - 369, 370, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 243, 281, 319, 320, -1, 135, -1, - 350, 351, 352, 243, -1, 350, 351, 352, -1, 135, - -1, 298, 299, 300, 301, -1, -1, -1, 243, 369, - 370, -1, -1, -1, 369, 370, 350, 351, 352, -1, - -1, -1, -1, -1, 321, 322, -1, -1, -1, -1, - 319, 320, -1, -1, -1, 369, 370, -1, -1, -1, - -1, -1, 189, 190, 319, 320, 193, -1, -1, -1, - -1, -1, -1, 189, 190, -1, 353, 193, -1, 319, - 320, 350, -1, 352, -1, -1, -1, -1, -1, 319, - 320, -1, 319, 320, -1, 350, 351, 352, -1, -1, - 369, 370, -1, -1, 319, 320, -1, -1, -1, -1, - 350, 351, 352, -1, 369, 370, 243, -1, -1, -1, - 350, 351, 352, 350, -1, 352, -1, 243, -1, 369, - 370, -1, -1, -1, -1, 350, 351, 352, -1, 369, - 370, -1, 369, 370, -1, -1, -1, -1, 3, 4, - 5, -1, -1, -1, 369, 370, 11, -1, -1, 14, - 15, -1, 17, 18, 19, -1, 21, 22, 23, 24, - 25, 26, 27, -1, -1, 30, -1, -1, 30, -1, - 35, 36, 37, 38, -1, -1, 41, 42, 43, -1, - -1, 43, 319, 320, 46, 50, 51, -1, 50, 51, - -1, -1, -1, 319, 320, -1, -1, -1, -1, -1, - -1, -1, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 350, 351, 352, -1, -1, 83, 84, - -1, 83, 84, -1, 350, 351, 352, -1, -1, -1, - -1, -1, 369, 370, 3, 4, 5, -1, -1, -1, - -1, -1, 11, 369, 370, 14, 15, -1, 17, 18, - 19, -1, 21, 22, 23, 24, 25, 26, 27, -1, - -1, 30, -1, -1, -1, -1, 35, 36, 37, 38, - -1, -1, 41, 42, 43, -1, -1, -1, 3, 4, - 5, 50, 51, -1, -1, -1, 11, -1, -1, 14, - 15, -1, 17, 18, 19, -1, 21, 22, 23, 24, - 25, 26, 27, -1, -1, 30, -1, -1, 8, -1, - 35, 36, 37, 38, 83, 84, 41, -1, 43, -1, - -1, -1, -1, -1, -1, 50, 51, 27, 28, 29, + 0, 26, 27, 247, 84, 5, 1, 26, 27, 6, + 7, 38, 88, 89, 134, 30, 80, 30, 18, 39, + 0, 20, 86, 14, 40, 89, 26, 27, 43, 45, + 43, 26, 27, 46, 84, 40, 39, 62, 137, 39, + 45, 27, 28, 62, 30, 65, 45, 49, 34, 86, + 40, 40, 137, 39, 85, 45, 45, 43, 27, 28, + 46, 30, 62, 40, 43, 34, 47, 62, 95, 84, + 85, 84, 85, 40, 43, 40, 40, 46, 45, 40, + 45, 45, 40, 19, 45, 85, 40, 45, 85, 85, + 41, 45, 49, 192, 193, 43, 39, 196, 84, 85, + 47, 37, 127, 128, 40, 41, 43, 45, 127, 128, + 44, 196, 356, 39, 49, 84, 85, 39, 49, 239, + 39, 241, 242, 53, 54, 48, 39, 127, 128, 39, + 39, 131, 127, 128, 39, 135, 39, 137, 53, 54, + 44, 141, 137, 49, 59, 60, 61, 62, 247, 79, + 80, 81, 82, 83, 79, 80, 81, 82, 83, 95, + 81, 82, 83, 137, 79, 80, 81, 82, 83, 49, + 49, 49, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 49, 192, 193, 130, 186, 196, 192, 193, 224, + 320, 196, 89, 48, 140, 224, 142, 48, 144, 48, + 146, 39, 39, 39, 334, 39, 49, 39, 192, 193, + 39, 44, 196, 137, 224, 324, 325, 16, 348, 224, + 350, 49, 352, 49, 49, 260, 261, 196, 137, 324, + 325, 260, 261, 179, 20, 49, 49, 247, 248, 329, + 49, 49, 247, 40, 190, 49, 355, 356, 357, 49, + 260, 261, 137, 49, 5, 260, 261, 137, 5, 356, + 355, 296, 357, 247, 186, 374, 375, 296, 192, 193, + -1, -1, 196, -1, 186, -1, -1, -1, -1, 374, + 375, -1, -1, 192, 193, -1, 296, 196, -1, -1, + 236, 296, -1, -1, -1, -1, -1, -1, -1, 245, + 246, -1, -1, 249, -1, -1, -1, 192, 193, -1, + -1, 196, 192, 193, 324, 325, 196, -1, 328, 324, + 325, -1, -1, 247, -1, -1, -1, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 247, 285, + 324, 325, -1, 137, -1, 355, 356, 357, 137, -1, + 355, 356, 357, -1, -1, 324, 325, 303, 304, 305, + 306, -1, 247, -1, 374, 375, -1, 247, -1, 374, + 375, 355, 356, 357, -1, -1, -1, -1, -1, -1, + 326, 327, -1, -1, -1, -1, 355, -1, 357, -1, + 374, 375, -1, -1, -1, -1, -1, -1, 192, 193, + 324, 325, 196, 192, 193, 374, 375, 196, -1, -1, + 27, 28, 358, 30, -1, 324, 325, 34, -1, -1, + -1, -1, -1, -1, -1, -1, 43, -1, -1, 46, + 30, 355, 356, 357, -1, 35, 36, 37, 38, 324, + 325, -1, -1, 43, 324, 325, 355, 356, 357, -1, + 374, 375, -1, 247, -1, -1, -1, -1, 247, -1, + -1, -1, -1, -1, -1, 374, 375, 84, 85, -1, + 355, 356, 357, -1, -1, 355, 356, 357, 8, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, 374, + 375, -1, -1, -1, 374, 375, -1, 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, 38, 39, - -1, -1, -1, 43, 44, -1, -1, 47, -1, -1, - 27, 28, -1, 30, -1, -1, -1, 34, 83, 84, - -1, -1, 62, 63, -1, -1, 43, -1, -1, 46, - 8, -1, -1, -1, -1, -1, -1, -1, -1, 79, - -1, -1, 82, 83, 84, 85, 86, 87, 88, 27, + -1, -1, -1, 43, 44, -1, 30, 47, -1, -1, + -1, 35, 36, 37, 38, 27, 28, -1, 30, 43, + 324, 325, 34, 63, 64, 324, 325, 51, 52, -1, + -1, 43, -1, -1, 46, -1, -1, -1, -1, -1, + 80, -1, -1, 83, 84, 85, 86, 87, 88, 89, + -1, 355, 356, 357, -1, -1, 355, 356, 357, -1, + 84, 85, -1, -1, -1, -1, 3, 4, 5, -1, + 374, 375, 84, 85, 11, 374, 375, 14, 15, -1, + 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, + 27, -1, -1, 30, -1, -1, -1, -1, 35, 36, + 37, 38, -1, -1, 41, 42, 43, -1, -1, -1, + -1, 3, 4, 5, 51, 52, -1, -1, -1, 11, + -1, -1, 14, 15, -1, 17, 18, 19, -1, 21, + 22, 23, 24, 25, 26, 27, -1, -1, 30, -1, + -1, -1, -1, 35, 36, 37, 38, 84, 85, 41, + 42, 43, -1, -1, -1, -1, 3, 4, 5, 51, + 52, -1, -1, -1, 11, -1, -1, 14, 15, -1, + 17, 18, 19, -1, 21, 22, 23, 24, 25, 26, + 27, -1, -1, 30, -1, -1, -1, 8, 35, 36, + 37, 38, 84, 85, 41, -1, 43, -1, -1, -1, + -1, -1, -1, -1, 51, 52, 27, 28, 29, 30, + 31, 32, 33, -1, 35, 36, 37, 38, 39, -1, + -1, -1, 43, -1, -1, -1, 47, -1, 49, 27, + 28, -1, 30, -1, -1, -1, 34, 84, 85, -1, + -1, -1, 63, 64, -1, 43, -1, -1, 46, -1, + 8, -1, -1, -1, -1, -1, -1, -1, -1, 80, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, - 38, 39, -1, -1, -1, 43, 83, 84, -1, 47, - -1, 49, 27, 28, -1, 30, -1, -1, -1, 34, - 27, 28, -1, 30, 62, 63, -1, 34, 43, -1, - -1, 46, 8, -1, -1, -1, 43, -1, -1, 46, - -1, 79, -1, -1, 82, 83, 84, 85, 86, 87, - 88, 27, 28, 29, 30, 31, 32, 33, -1, 35, - 36, 37, 38, 39, -1, -1, -1, 43, 83, 84, - -1, 47, -1, -1, -1, -1, 83, 84, -1, -1, - -1, 27, 28, -1, 30, -1, 62, 63, 34, -1, - -1, -1, -1, -1, 8, -1, -1, 43, -1, -1, - 46, -1, -1, 79, -1, -1, 82, 83, 84, 85, - 86, 87, 88, 27, 28, 29, 30, 31, 32, 33, - -1, 35, 36, 37, 38, 39, -1, -1, -1, 43, - -1, -1, -1, 47, -1, -1, -1, 83, 84, -1, - -1, 9, 10, -1, 12, 13, -1, -1, 62, 63, + 38, 39, -1, -1, -1, 43, 84, 85, -1, 47, + -1, -1, 27, 28, -1, 30, -1, -1, -1, 34, + 27, 28, -1, 30, -1, 63, 64, 34, 43, -1, + -1, 46, -1, 8, -1, -1, 43, -1, -1, 46, + -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, + 88, 89, 27, 28, 29, 30, 31, 32, 33, -1, + 35, 36, 37, 38, 39, -1, -1, -1, 43, 84, + 85, -1, 47, -1, -1, -1, -1, 84, 85, -1, + -1, 9, 10, -1, 12, 13, -1, -1, 63, 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 27, - -1, -1, 30, -1, -1, 79, -1, -1, 82, 83, - 84, 85, 86, 87, 88, 43, -1, -1, 46, -1, - -1, -1, 50, 51, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 27, 28, -1, - 30, -1, 30, -1, 34, 83, 84, 35, 36, 37, - 38, -1, -1, 43, -1, 43, 46, -1, -1, -1, - -1, -1, 50, 51, 40, -1, -1, -1, -1, 45, - -1, -1, -1, -1, -1, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 83, 84, -1, -1, 75, - 76, 77, 78, 79, 80, 81, 82, 40, -1, 52, - 53, -1, 45, 56, 57, 58, 59, 60, 61, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - 40, -1, 52, 53, -1, 45, 56, 57, 58, 59, - 60, 61, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 40, -1, -1, -1, -1, 45, -1, - -1, -1, -1, 40, -1, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, -1, -1, -1, 75, 76, - 77, 78, 79, 80, 81, 82, 40, -1, 75, 76, - 77, 78, 79, 80, 81, 82, 40, -1, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, - -1, 75, 76, 77, 78, 79, 80, 81, 82, 40, - -1, 75, 76, 77, 78, 79, 80, 81, 82, 40, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 40, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 40, -1, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, -1, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, -1, -1, 75, 76, 77, - 78, 79, 80, 81, 82, 44, -1, -1, -1, -1, - -1, -1, -1, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 75, 76, 77, 78, - 79, 80, 81, 82, 44, -1, -1, -1, -1, -1, - -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 44, -1, -1, -1, -1, -1, -1, - -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 75, 76, 77, 78, 79, 80, - 81, 82, 45, -1, -1, -1, -1, -1, -1, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 49, - -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 75, 76, 77, 78, 79, 80, 81, 82, - -1, -1, -1, -1, -1, 75, 76, 77, 78, 79, - 80, 81, 82, 49, -1, -1, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 49, -1, -1, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 75, - 76, 77, 78, 79, 80, 81, 82, -1, -1, -1, - -1, -1, 75, 76, 77, 78, 79, 80, 81, 82, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 52, 53, -1, 55, 56, 57, 58, 59, 60, 61, - -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, -1, -1, 75, 76, 77, 78, 79, 80, 81, - 82, 52, 53, -1, -1, 56, 57, 58, 59, 60, - 61, 52, 53, -1, -1, 56, 57, 58, 59, 60, - 61, -1, -1, -1, -1, 76, -1, 78, 79, 80, - 81, 82, -1, -1, -1, -1, -1, 78, 79, 80, - 81, 82 + -1, -1, 30, -1, -1, 80, -1, -1, 83, 84, + 85, 86, 87, 88, 89, 43, -1, -1, 46, -1, + -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 27, 28, + -1, 30, -1, -1, -1, 34, 84, 85, 27, 28, + -1, 30, -1, -1, 43, 34, -1, 46, -1, -1, + -1, -1, -1, -1, 43, -1, -1, 46, -1, -1, + -1, -1, 30, 53, 54, -1, -1, 57, 58, 59, + 60, 61, 62, -1, -1, 43, -1, -1, 46, -1, + -1, -1, -1, 51, 52, 84, 85, 77, 78, 79, + 80, 81, 82, 83, -1, 84, 85, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 40, -1, + -1, -1, -1, 45, -1, -1, 84, 85, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 40, -1, -1, -1, -1, 45, -1, -1, + -1, -1, 50, -1, -1, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 40, -1, -1, -1, + -1, 45, -1, -1, -1, -1, 50, -1, -1, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, + 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, -1, 76, 77, 78, 79, + 80, 81, 82, 83, 50, -1, -1, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + 76, 77, 78, 79, 80, 81, 82, 83, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 40, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 50, -1, -1, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 40, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 50, -1, -1, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 40, -1, 76, 77, 78, 79, 80, 81, 82, 83, + 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 40, -1, 76, 77, 78, 79, + 80, 81, 82, 83, 50, -1, -1, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, + 76, 77, 78, 79, 80, 81, 82, 83, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 44, -1, -1, -1, -1, -1, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 45, -1, -1, -1, -1, 50, -1, -1, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, + 83, 48, -1, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 49, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 76, 77, 78, 79, 80, 81, + 82, 83, 49, 50, -1, -1, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, + 77, 78, 79, 80, 81, 82, 83, 49, 50, -1, + -1, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 50, -1, -1, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, -1, 76, 77, 78, + 79, 80, 81, 82, 83, 53, 54, -1, 56, 57, + 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, + 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, 76, 77, + 78, 79, 80, 81, 82, 83, 53, 54, -1, -1, + 57, 58, 59, 60, 61, 62, 53, 54, -1, -1, + 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, + 77, -1, 79, 80, 81, 82, 83, -1, -1, -1, + -1, -1, 79, 80, 81, 82, 83 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 84, 98, 99, 100, 101, 102, 103, - 104, 161, 83, 162, 39, 0, 100, 101, 39, 64, - 49, 85, 164, 105, 161, 8, 27, 28, 29, 30, + 0, 6, 7, 85, 100, 101, 102, 103, 104, 105, + 106, 164, 84, 165, 39, 0, 102, 103, 39, 65, + 49, 86, 167, 107, 164, 8, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 43, 47, - 62, 63, 79, 82, 86, 87, 88, 133, 135, 136, - 137, 138, 139, 140, 141, 142, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 40, 40, 45, 43, 141, 142, 161, 162, - 141, 142, 43, 133, 43, 44, 133, 143, 144, 145, - 161, 133, 133, 87, 88, 84, 49, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 75, 76, 77, - 78, 79, 80, 81, 82, 27, 28, 34, 43, 46, - 141, 142, 39, 47, 49, 41, 107, 161, 43, 47, - 43, 40, 45, 133, 45, 44, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 141, 142, 141, 142, 133, 161, - 143, 144, 161, 3, 4, 5, 11, 14, 15, 17, - 18, 19, 21, 22, 23, 24, 25, 26, 42, 50, - 51, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 134, 138, 139, 148, - 149, 151, 155, 156, 157, 158, 161, 133, 161, 133, - 133, 44, 133, 44, 40, 39, 49, 39, 39, 133, - 49, 39, 39, 39, 39, 39, 79, 164, 167, 169, - 48, 49, 49, 49, 133, 138, 151, 151, 42, 106, - 49, 49, 49, 9, 10, 12, 13, 50, 51, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 44, 45, 44, 143, 143, 143, 49, 133, 133, 131, - 134, 151, 161, 133, 48, 48, 48, 49, 39, 39, - 39, 39, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 44, 133, 39, 40, 40, 40, 40, - 40, 49, 20, 45, 40, 133, 133, 133, 133, 39, - 40, 143, 49, 49, 106, 106, 132, 133, 133, 161, - 107, 40, 40, 45, 40, 45, 40, 45, 143, 40, - 16, 49, 40, 20, 49, 49, 143, 49, 143, 49, - 143, 40, 106, 131, 106, 133, 40, 40, 40, 40, - 40, 49, 49, 49, 106, 106 + 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 40, 40, 45, 43, 144, 145, 164, + 165, 144, 145, 43, 135, 43, 44, 135, 146, 147, + 148, 164, 135, 135, 88, 89, 85, 49, 50, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 76, + 77, 78, 79, 80, 81, 82, 83, 27, 28, 34, + 43, 46, 144, 145, 39, 47, 49, 41, 109, 164, + 43, 47, 43, 40, 45, 135, 45, 44, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 144, 145, 144, + 145, 135, 164, 146, 147, 164, 3, 4, 5, 11, + 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, + 26, 42, 51, 52, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 136, + 141, 142, 151, 152, 154, 158, 159, 160, 161, 164, + 135, 164, 135, 135, 44, 135, 48, 44, 40, 39, + 49, 39, 39, 135, 49, 39, 39, 39, 39, 39, + 80, 167, 170, 172, 48, 49, 49, 49, 135, 141, + 154, 154, 42, 108, 49, 49, 49, 9, 10, 12, + 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 44, 45, 44, 135, 146, 146, + 146, 49, 135, 135, 133, 136, 154, 164, 135, 48, + 48, 48, 49, 39, 39, 39, 39, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 44, 135, + 39, 40, 40, 40, 40, 40, 49, 20, 45, 40, + 135, 135, 135, 135, 39, 40, 146, 49, 49, 108, + 108, 134, 135, 135, 164, 109, 40, 40, 45, 40, + 45, 40, 45, 146, 40, 16, 49, 40, 20, 49, + 49, 146, 49, 146, 49, 146, 40, 108, 133, 108, + 135, 40, 40, 40, 40, 40, 49, 49, 49, 108, + 108 }; const unsigned char parser::yyr1_[] = { - 0, 97, 98, 98, 99, 99, 99, 99, 100, 101, - 101, 101, 102, 103, 104, 105, 105, 105, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 107, 107, 108, 108, 109, 109, 110, 111, 112, - 112, 113, 114, 114, 115, 115, 116, 117, 118, 119, - 120, 121, 121, 122, 123, 123, 123, 124, 125, 126, - 127, 127, 128, 129, 130, 131, 131, 132, 132, 133, - 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, - 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 138, 138, 138, 138, 139, - 139, 139, 139, 140, 140, 140, 140, 141, 141, 142, - 142, 143, 143, 144, 144, 145, 146, 146, 147, 148, - 149, 150, 151, 151, 151, 151, 151, 151, 151, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171 + 0, 99, 100, 100, 101, 101, 101, 101, 102, 103, + 103, 103, 104, 105, 106, 107, 107, 107, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 109, 109, 110, 110, 111, 111, 112, 113, 114, + 114, 115, 116, 116, 117, 117, 118, 119, 120, 121, + 122, 123, 123, 124, 125, 125, 125, 126, 127, 128, + 129, 129, 130, 131, 132, 133, 133, 134, 134, 135, + 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, + 137, 137, 137, 137, 137, 137, 138, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, + 141, 142, 142, 142, 142, 143, 143, 143, 143, 144, + 144, 145, 145, 146, 146, 147, 147, 148, 149, 149, + 150, 151, 152, 153, 154, 154, 154, 154, 154, 154, + 154, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174 }; const signed char @@ -3974,18 +4044,19 @@ namespace xsk { namespace gsc { namespace iw7 { 6, 3, 8, 6, 8, 6, 2, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, 1, 0, 1, - 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, + 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 3, 3, 2, 2, 3, 3, 4, 6, 8, - 9, 1, 1, 3, 1, 0, 2, 3, 3, 4, - 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 7, 2, 2, 1, 1, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 3, 3, 2, 2, 3, 3, 4, + 6, 8, 9, 1, 1, 3, 1, 0, 2, 3, + 3, 4, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 7, 2, 2, 1, 1, + 1, 1 }; @@ -3995,26 +4066,27 @@ namespace xsk { namespace gsc { namespace iw7 { const short parser::yyrline_[] = { - 0, 237, 237, 238, 242, 244, 246, 248, 253, 258, - 259, 260, 264, 269, 274, 279, 281, 284, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 314, 315, 319, 321, 326, 328, 333, 338, 343, - 345, 350, 355, 357, 362, 364, 369, 374, 379, 384, - 389, 394, 396, 401, 406, 408, 410, 415, 420, 425, - 430, 432, 437, 442, 447, 452, 453, 457, 458, 462, - 463, 464, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 486, 487, 488, - 489, 490, 491, 492, 493, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 506, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 543, 544, 545, 546, 550, - 551, 552, 553, 557, 558, 559, 560, 564, 566, 571, - 573, 578, 579, 583, 585, 591, 595, 597, 602, 607, - 612, 617, 622, 623, 624, 625, 626, 627, 628, 629, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 642, 643, 644, 645, 646, 647, 648, 649, 650, 651 + 0, 241, 241, 242, 246, 248, 250, 252, 257, 262, + 263, 264, 268, 273, 278, 283, 285, 288, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 318, 319, 323, 325, 330, 332, 337, 342, 347, + 349, 354, 359, 361, 366, 368, 373, 378, 383, 388, + 393, 398, 400, 405, 410, 412, 414, 419, 424, 429, + 434, 436, 441, 446, 451, 456, 457, 461, 462, 466, + 467, 468, 469, 473, 474, 475, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 491, 492, + 493, 494, 495, 496, 497, 498, 502, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 519, 520, 521, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 552, 553, 554, + 555, 559, 560, 561, 562, 566, 567, 568, 569, 573, + 575, 580, 582, 587, 588, 592, 594, 600, 604, 606, + 611, 616, 621, 626, 631, 632, 633, 634, 635, 636, + 637, 638, 641, 642, 643, 644, 645, 646, 647, 648, + 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, + 659, 660 }; void @@ -4047,9 +4119,9 @@ namespace xsk { namespace gsc { namespace iw7 { #line 13 "parser.ypp" } } } // xsk::gsc::iw7 -#line 4051 "parser.cpp" +#line 4123 "parser.cpp" -#line 653 "parser.ypp" +#line 662 "parser.ypp" void xsk::gsc::iw7::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/iw7/xsk/parser.hpp b/src/iw7/xsk/parser.hpp index a30d8931..3d9dd446 100644 --- a/src/iw7/xsk/parser.hpp +++ b/src/iw7/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace iw7 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -696,53 +697,55 @@ namespace xsk { namespace gsc { namespace iw7 { DOUBLECOLON = 47, // "::" COLON = 48, // ":" SEMICOLON = 49, // ";" - INCREMENT = 50, // "++" - DECREMENT = 51, // "--" - LSHIFT = 52, // "<<" - RSHIFT = 53, // ">>" - OR = 54, // "||" - AND = 55, // "&&" - EQUALITY = 56, // "==" - INEQUALITY = 57, // "!=" - LESS_EQUAL = 58, // "<=" - GREATER_EQUAL = 59, // ">=" - LESS = 60, // "<" - GREATER = 61, // ">" - NOT = 62, // "!" - COMPLEMENT = 63, // "~" - ASSIGN = 64, // "=" - ASSIGN_ADD = 65, // "+=" - ASSIGN_SUB = 66, // "-=" - ASSIGN_MULT = 67, // "*=" - ASSIGN_DIV = 68, // "/=" - ASSIGN_MOD = 69, // "%=" - ASSIGN_BITWISE_OR = 70, // "|=" - ASSIGN_BITWISE_AND = 71, // "&=" - ASSIGN_BITWISE_EXOR = 72, // "^=" - ASSIGN_RSHIFT = 73, // ">>=" - ASSIGN_LSHIFT = 74, // "<<=" - BITWISE_OR = 75, // "|" - BITWISE_AND = 76, // "&" - BITWISE_EXOR = 77, // "^" - ADD = 78, // "+" - SUB = 79, // "-" - MULT = 80, // "*" - DIV = 81, // "/" - MOD = 82, // "%" - FILE = 83, // "file path" - NAME = 84, // "identifier" - STRING = 85, // "string literal" - ISTRING = 86, // "localized string" - FLOAT = 87, // "float" - INTEGER = 88, // "int" - ADD_ARRAY = 89, // ADD_ARRAY - THEN = 90, // THEN - NEG = 91, // NEG - ANIMREF = 92, // ANIMREF - PREINC = 93, // PREINC - PREDEC = 94, // PREDEC - POSTINC = 95, // POSTINC - POSTDEC = 96 // POSTDEC + QMARK = 50, // "?" + INCREMENT = 51, // "++" + DECREMENT = 52, // "--" + LSHIFT = 53, // "<<" + RSHIFT = 54, // ">>" + OR = 55, // "||" + AND = 56, // "&&" + EQUALITY = 57, // "==" + INEQUALITY = 58, // "!=" + LESS_EQUAL = 59, // "<=" + GREATER_EQUAL = 60, // ">=" + LESS = 61, // "<" + GREATER = 62, // ">" + NOT = 63, // "!" + COMPLEMENT = 64, // "~" + ASSIGN = 65, // "=" + ASSIGN_ADD = 66, // "+=" + ASSIGN_SUB = 67, // "-=" + ASSIGN_MULT = 68, // "*=" + ASSIGN_DIV = 69, // "/=" + ASSIGN_MOD = 70, // "%=" + ASSIGN_BITWISE_OR = 71, // "|=" + ASSIGN_BITWISE_AND = 72, // "&=" + ASSIGN_BITWISE_EXOR = 73, // "^=" + ASSIGN_RSHIFT = 74, // ">>=" + ASSIGN_LSHIFT = 75, // "<<=" + BITWISE_OR = 76, // "|" + BITWISE_AND = 77, // "&" + BITWISE_EXOR = 78, // "^" + ADD = 79, // "+" + SUB = 80, // "-" + MULT = 81, // "*" + DIV = 82, // "/" + MOD = 83, // "%" + FILE = 84, // "file path" + NAME = 85, // "identifier" + STRING = 86, // "string literal" + ISTRING = 87, // "localized string" + FLOAT = 88, // "float" + INTEGER = 89, // "int" + ADD_ARRAY = 90, // ADD_ARRAY + THEN = 91, // THEN + TERN = 92, // TERN + NEG = 93, // NEG + ANIMREF = 94, // ANIMREF + PREINC = 95, // PREINC + PREDEC = 96, // PREDEC + POSTINC = 97, // POSTINC + POSTDEC = 98 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -759,7 +762,7 @@ namespace xsk { namespace gsc { namespace iw7 { { enum symbol_kind_type { - YYNTOKENS = 97, ///< Number of tokens. + YYNTOKENS = 99, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -811,128 +814,131 @@ namespace xsk { namespace gsc { namespace iw7 { S_DOUBLECOLON = 47, // "::" S_COLON = 48, // ":" S_SEMICOLON = 49, // ";" - S_INCREMENT = 50, // "++" - S_DECREMENT = 51, // "--" - S_LSHIFT = 52, // "<<" - S_RSHIFT = 53, // ">>" - S_OR = 54, // "||" - S_AND = 55, // "&&" - S_EQUALITY = 56, // "==" - S_INEQUALITY = 57, // "!=" - S_LESS_EQUAL = 58, // "<=" - S_GREATER_EQUAL = 59, // ">=" - S_LESS = 60, // "<" - S_GREATER = 61, // ">" - S_NOT = 62, // "!" - S_COMPLEMENT = 63, // "~" - S_ASSIGN = 64, // "=" - S_ASSIGN_ADD = 65, // "+=" - S_ASSIGN_SUB = 66, // "-=" - S_ASSIGN_MULT = 67, // "*=" - S_ASSIGN_DIV = 68, // "/=" - S_ASSIGN_MOD = 69, // "%=" - S_ASSIGN_BITWISE_OR = 70, // "|=" - S_ASSIGN_BITWISE_AND = 71, // "&=" - S_ASSIGN_BITWISE_EXOR = 72, // "^=" - S_ASSIGN_RSHIFT = 73, // ">>=" - S_ASSIGN_LSHIFT = 74, // "<<=" - S_BITWISE_OR = 75, // "|" - S_BITWISE_AND = 76, // "&" - S_BITWISE_EXOR = 77, // "^" - S_ADD = 78, // "+" - S_SUB = 79, // "-" - S_MULT = 80, // "*" - S_DIV = 81, // "/" - S_MOD = 82, // "%" - S_FILE = 83, // "file path" - S_NAME = 84, // "identifier" - S_STRING = 85, // "string literal" - S_ISTRING = 86, // "localized string" - S_FLOAT = 87, // "float" - S_INTEGER = 88, // "int" - S_ADD_ARRAY = 89, // ADD_ARRAY - S_THEN = 90, // THEN - S_NEG = 91, // NEG - S_ANIMREF = 92, // ANIMREF - S_PREINC = 93, // PREINC - S_PREDEC = 94, // PREDEC - S_POSTINC = 95, // POSTINC - S_POSTDEC = 96, // POSTDEC - S_YYACCEPT = 97, // $accept - S_root = 98, // root - S_program = 99, // program - S_include = 100, // include - S_define = 101, // define - S_usingtree = 102, // usingtree - S_constant = 103, // constant - S_thread = 104, // thread - S_parameters = 105, // parameters - S_stmt = 106, // stmt - S_stmt_block = 107, // stmt_block - S_stmt_list = 108, // stmt_list - S_stmt_call = 109, // stmt_call - S_stmt_assign = 110, // stmt_assign - S_stmt_endon = 111, // stmt_endon - S_stmt_notify = 112, // stmt_notify - S_stmt_wait = 113, // stmt_wait - S_stmt_waittill = 114, // stmt_waittill - S_stmt_waittillmatch = 115, // stmt_waittillmatch - S_stmt_waittillframeend = 116, // stmt_waittillframeend - S_stmt_if = 117, // stmt_if - S_stmt_ifelse = 118, // stmt_ifelse - S_stmt_while = 119, // stmt_while - S_stmt_for = 120, // stmt_for - S_stmt_foreach = 121, // stmt_foreach - S_stmt_switch = 122, // stmt_switch - S_stmt_case = 123, // stmt_case - S_stmt_default = 124, // stmt_default - S_stmt_break = 125, // stmt_break - S_stmt_continue = 126, // stmt_continue - S_stmt_return = 127, // stmt_return - S_stmt_breakpoint = 128, // stmt_breakpoint - S_stmt_prof_begin = 129, // stmt_prof_begin - S_stmt_prof_end = 130, // stmt_prof_end - S_for_stmt = 131, // for_stmt - S_for_expr = 132, // for_expr - S_expr = 133, // expr - S_expr_assign = 134, // expr_assign - S_expr_compare = 135, // expr_compare - S_expr_binary = 136, // expr_binary - S_expr_primitive = 137, // expr_primitive - S_expr_call = 138, // expr_call - S_expr_call_thread = 139, // expr_call_thread - S_expr_call_childthread = 140, // expr_call_childthread - S_expr_call_function = 141, // expr_call_function - S_expr_call_pointer = 142, // expr_call_pointer - S_expr_arguments = 143, // expr_arguments - S_expr_arguments_filled = 144, // expr_arguments_filled - S_expr_arguments_empty = 145, // expr_arguments_empty - S_expr_function = 146, // expr_function - S_expr_add_array = 147, // expr_add_array - S_expr_array = 148, // expr_array - S_expr_field = 149, // expr_field - S_expr_size = 150, // expr_size - S_object = 151, // object - S_thisthread = 152, // thisthread - S_empty_array = 153, // empty_array - S_undefined = 154, // undefined - S_game = 155, // game - S_self = 156, // self - S_anim = 157, // anim - S_level = 158, // level - S_animation = 159, // animation - S_animtree = 160, // animtree - S_name = 161, // name - S_file = 162, // file - S_istring = 163, // istring - S_string = 164, // string - S_vector = 165, // vector - S_neg_float = 166, // neg_float - S_neg_integer = 167, // neg_integer - S_float = 168, // float - S_integer = 169, // integer - S_false = 170, // false - S_true = 171 // true + S_QMARK = 50, // "?" + S_INCREMENT = 51, // "++" + S_DECREMENT = 52, // "--" + S_LSHIFT = 53, // "<<" + S_RSHIFT = 54, // ">>" + S_OR = 55, // "||" + S_AND = 56, // "&&" + S_EQUALITY = 57, // "==" + S_INEQUALITY = 58, // "!=" + S_LESS_EQUAL = 59, // "<=" + S_GREATER_EQUAL = 60, // ">=" + S_LESS = 61, // "<" + S_GREATER = 62, // ">" + S_NOT = 63, // "!" + S_COMPLEMENT = 64, // "~" + S_ASSIGN = 65, // "=" + S_ASSIGN_ADD = 66, // "+=" + S_ASSIGN_SUB = 67, // "-=" + S_ASSIGN_MULT = 68, // "*=" + S_ASSIGN_DIV = 69, // "/=" + S_ASSIGN_MOD = 70, // "%=" + S_ASSIGN_BITWISE_OR = 71, // "|=" + S_ASSIGN_BITWISE_AND = 72, // "&=" + S_ASSIGN_BITWISE_EXOR = 73, // "^=" + S_ASSIGN_RSHIFT = 74, // ">>=" + S_ASSIGN_LSHIFT = 75, // "<<=" + S_BITWISE_OR = 76, // "|" + S_BITWISE_AND = 77, // "&" + S_BITWISE_EXOR = 78, // "^" + S_ADD = 79, // "+" + S_SUB = 80, // "-" + S_MULT = 81, // "*" + S_DIV = 82, // "/" + S_MOD = 83, // "%" + S_FILE = 84, // "file path" + S_NAME = 85, // "identifier" + S_STRING = 86, // "string literal" + S_ISTRING = 87, // "localized string" + S_FLOAT = 88, // "float" + S_INTEGER = 89, // "int" + S_ADD_ARRAY = 90, // ADD_ARRAY + S_THEN = 91, // THEN + S_TERN = 92, // TERN + S_NEG = 93, // NEG + S_ANIMREF = 94, // ANIMREF + S_PREINC = 95, // PREINC + S_PREDEC = 96, // PREDEC + S_POSTINC = 97, // POSTINC + S_POSTDEC = 98, // POSTDEC + S_YYACCEPT = 99, // $accept + S_root = 100, // root + S_program = 101, // program + S_include = 102, // include + S_define = 103, // define + S_usingtree = 104, // usingtree + S_constant = 105, // constant + S_thread = 106, // thread + S_parameters = 107, // parameters + S_stmt = 108, // stmt + S_stmt_block = 109, // stmt_block + S_stmt_list = 110, // stmt_list + S_stmt_call = 111, // stmt_call + S_stmt_assign = 112, // stmt_assign + S_stmt_endon = 113, // stmt_endon + S_stmt_notify = 114, // stmt_notify + S_stmt_wait = 115, // stmt_wait + S_stmt_waittill = 116, // stmt_waittill + S_stmt_waittillmatch = 117, // stmt_waittillmatch + S_stmt_waittillframeend = 118, // stmt_waittillframeend + S_stmt_if = 119, // stmt_if + S_stmt_ifelse = 120, // stmt_ifelse + S_stmt_while = 121, // stmt_while + S_stmt_for = 122, // stmt_for + S_stmt_foreach = 123, // stmt_foreach + S_stmt_switch = 124, // stmt_switch + S_stmt_case = 125, // stmt_case + S_stmt_default = 126, // stmt_default + S_stmt_break = 127, // stmt_break + S_stmt_continue = 128, // stmt_continue + S_stmt_return = 129, // stmt_return + S_stmt_breakpoint = 130, // stmt_breakpoint + S_stmt_prof_begin = 131, // stmt_prof_begin + S_stmt_prof_end = 132, // stmt_prof_end + S_for_stmt = 133, // for_stmt + S_for_expr = 134, // for_expr + S_expr = 135, // expr + S_expr_assign = 136, // expr_assign + S_expr_compare = 137, // expr_compare + S_expr_ternary = 138, // expr_ternary + S_expr_binary = 139, // expr_binary + S_expr_primitive = 140, // expr_primitive + S_expr_call = 141, // expr_call + S_expr_call_thread = 142, // expr_call_thread + S_expr_call_childthread = 143, // expr_call_childthread + S_expr_call_function = 144, // expr_call_function + S_expr_call_pointer = 145, // expr_call_pointer + S_expr_arguments = 146, // expr_arguments + S_expr_arguments_filled = 147, // expr_arguments_filled + S_expr_arguments_empty = 148, // expr_arguments_empty + S_expr_function = 149, // expr_function + S_expr_add_array = 150, // expr_add_array + S_expr_array = 151, // expr_array + S_expr_field = 152, // expr_field + S_expr_size = 153, // expr_size + S_object = 154, // object + S_thisthread = 155, // thisthread + S_empty_array = 156, // empty_array + S_undefined = 157, // undefined + S_game = 158, // game + S_self = 159, // self + S_anim = 160, // anim + S_level = 161, // level + S_animation = 162, // animation + S_animtree = 163, // animtree + S_name = 164, // name + S_file = 165, // file + S_istring = 166, // istring + S_string = 167, // string + S_vector = 168, // vector + S_neg_float = 169, // neg_float + S_neg_integer = 170, // neg_integer + S_float = 171, // float + S_integer = 172, // integer + S_false = 173, // false + S_true = 174 // true }; }; @@ -1017,6 +1023,7 @@ namespace xsk { namespace gsc { namespace iw7 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2093,6 +2100,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3198,6 +3206,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3813,6 +3836,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4247,8 +4285,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1591, ///< Last index in yytable_. - yynnts_ = 75, ///< Number of nonterminal symbols. + yylast_ = 1836, ///< Last index in yytable_. + yynnts_ = 76, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4324,6 +4362,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4600,6 +4639,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4862,7 +4902,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw7 -#line 4866 "parser.hpp" +#line 4906 "parser.hpp" diff --git a/src/s1/xsk/assembler.cpp b/src/s1/xsk/assembler.cpp index ebcf3f56..aae3dae0 100644 --- a/src/s1/xsk/assembler.cpp +++ b/src/s1/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/s1/xsk/compiler.cpp b/src/s1/xsk/compiler.cpp index aab9850f..31b680b8 100644 --- a/src/s1/xsk/compiler.cpp +++ b/src/s1/xsk/compiler.cpp @@ -409,7 +409,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -465,7 +465,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -540,7 +540,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -752,6 +752,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -849,6 +850,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/s1/xsk/compiler.hpp b/src/s1/xsk/compiler.hpp index 849df41a..26a91bdc 100644 --- a/src/s1/xsk/compiler.hpp +++ b/src/s1/xsk/compiler.hpp @@ -68,6 +68,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/s1/xsk/decompiler.cpp b/src/s1/xsk/decompiler.cpp index ee8f720e..f7c332fb 100644 --- a/src/s1/xsk/decompiler.cpp +++ b/src/s1/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1833,6 +1841,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1916,6 +1925,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3006,6 +3038,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3106,6 +3139,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/s1/xsk/decompiler.hpp b/src/s1/xsk/decompiler.hpp index 380b6a95..88f471e9 100644 --- a/src/s1/xsk/decompiler.hpp +++ b/src/s1/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/s1/xsk/lexer.cpp b/src/s1/xsk/lexer.cpp index ef65c383..5a936fb6 100644 --- a/src/s1/xsk/lexer.cpp +++ b/src/s1/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 100 -#define YY_END_OF_BUFFER 101 +#define YY_NUM_RULES 101 +#define YY_END_OF_BUFFER 102 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,42 +562,42 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[305] = +static const flex_int16_t yy_accept[306] = { 0, - 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, - 88, 99, 99, 87, 91, 99, 49, 50, 85, 83, - 55, 84, 56, 86, 98, 58, 59, 72, 82, 73, - 94, 53, 54, 92, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 51, 90, 52, 89, 5, 6, 5, 9, 10, 9, - 69, 0, 96, 0, 0, 0, 0, 78, 0, 67, - 0, 80, 0, 0, 76, 60, 74, 61, 75, 97, - 0, 8, 4, 3, 77, 97, 98, 0, 0, 57, - 64, 70, 68, 71, 65, 94, 81, 94, 94, 94, + 0, 0, 0, 0, 0, 0, 102, 100, 1, 2, + 89, 100, 100, 88, 92, 100, 49, 50, 86, 84, + 55, 85, 56, 87, 99, 58, 59, 73, 83, 74, + 60, 95, 53, 54, 93, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 51, 91, 52, 90, 5, 6, 5, 9, 10, + 9, 70, 0, 97, 0, 0, 0, 0, 79, 0, + 68, 0, 81, 0, 0, 77, 61, 75, 62, 76, + 98, 0, 8, 4, 3, 78, 98, 99, 0, 0, + 57, 65, 71, 69, 72, 66, 95, 82, 95, 95, - 94, 94, 94, 94, 94, 94, 94, 94, 25, 30, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 79, 66, 7, 11, 0, 96, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 96, 0, 97, - 0, 3, 97, 97, 93, 62, 63, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 28, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 0, 0, 0, 0, 95, 0, 0, 95, 0, - 0, 47, 94, 40, 32, 94, 94, 94, 26, 94, - 94, 94, 45, 94, 94, 94, 94, 46, 94, 94, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 25, + 30, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 80, 67, 7, 11, 0, 97, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, + 98, 0, 3, 98, 98, 94, 63, 64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 28, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 0, 0, 0, 0, 96, 0, 0, 96, + 0, 0, 47, 95, 40, 32, 95, 95, 95, 26, + 95, 95, 95, 45, 95, 95, 95, 95, 46, 95, - 94, 41, 94, 20, 94, 0, 0, 0, 44, 34, - 94, 94, 94, 18, 42, 94, 48, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 27, 0, 0, 0, - 94, 94, 94, 94, 94, 19, 94, 94, 36, 31, - 94, 37, 94, 94, 94, 0, 0, 0, 94, 94, - 94, 33, 29, 94, 94, 94, 94, 94, 94, 0, - 15, 0, 94, 94, 35, 94, 14, 94, 94, 94, - 21, 17, 0, 94, 94, 94, 94, 43, 24, 94, - 94, 0, 12, 94, 13, 39, 94, 94, 0, 38, - 94, 94, 0, 94, 94, 0, 94, 22, 0, 94, + 95, 95, 41, 95, 20, 95, 0, 0, 0, 44, + 34, 95, 95, 95, 18, 42, 95, 48, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 27, 0, 0, + 0, 95, 95, 95, 95, 95, 19, 95, 95, 36, + 31, 95, 37, 95, 95, 95, 0, 0, 0, 95, + 95, 95, 33, 29, 95, 95, 95, 95, 95, 95, + 0, 15, 0, 95, 95, 35, 95, 14, 95, 95, + 95, 21, 17, 0, 95, 95, 95, 95, 43, 24, + 95, 95, 0, 12, 95, 13, 39, 95, 95, 0, + 38, 95, 95, 0, 95, 95, 0, 95, 22, 0, - 16, 94, 23, 0 + 95, 16, 95, 23, 0 } ; static const YY_CHAR yy_ec[256] = @@ -608,14 +608,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -632,240 +632,240 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[319] = +static const flex_int16_t yy_base[320] = { 0, - 0, 0, 54, 55, 56, 57, 574, 575, 575, 575, - 551, 56, 35, 550, 63, 55, 575, 575, 549, 56, - 575, 55, 56, 74, 71, 551, 575, 54, 547, 70, - 542, 575, 575, 545, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 575, 96, 575, 575, 575, 575, 549, 575, 575, 548, - 575, 120, 575, 127, 522, 521, 516, 575, 122, 575, - 115, 575, 126, 140, 575, 575, 575, 575, 575, 120, - 523, 575, 575, 0, 575, 121, 141, 135, 0, 575, - 538, 575, 575, 575, 537, 532, 575, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 575, 576, 576, 576, + 552, 57, 34, 551, 66, 60, 576, 576, 550, 57, + 576, 63, 48, 74, 74, 552, 576, 55, 548, 59, + 576, 542, 576, 576, 546, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 576, 100, 576, 576, 576, 576, 550, 576, 576, + 549, 576, 120, 576, 136, 522, 521, 516, 576, 122, + 576, 123, 576, 126, 143, 576, 576, 576, 576, 576, + 118, 523, 576, 576, 0, 576, 125, 140, 132, 0, + 576, 539, 576, 576, 576, 538, 532, 576, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 531, 530, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 575, 575, 575, 575, 189, 197, 202, 517, 522, - 515, 204, 575, 207, 205, 208, 209, 210, 213, 575, - 500, 0, 202, 575, 525, 575, 575, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 509, 509, 506, 268, 269, 276, 271, 273, 283, - 513, 520, 261, 519, 518, 258, 263, 262, 517, 270, - 272, 277, 516, 278, 279, 282, 287, 515, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 531, + 530, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 576, 576, 576, 576, 186, 204, 211, 517, + 522, 515, 205, 576, 212, 202, 215, 210, 213, 217, + 576, 500, 0, 205, 576, 525, 576, 576, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 509, 509, 506, 273, 274, 277, 275, 276, + 284, 513, 520, 104, 519, 518, 262, 268, 264, 517, + 265, 270, 279, 516, 271, 282, 287, 288, 515, 289, - 293, 514, 291, 294, 296, 492, 490, 501, 575, 298, - 299, 301, 305, 510, 509, 302, 508, 307, 313, 309, - 312, 322, 324, 314, 310, 327, 507, 487, 498, 501, - 328, 330, 334, 336, 335, 503, 340, 337, 502, 501, - 342, 500, 338, 343, 344, 491, 490, 493, 350, 349, - 351, 496, 495, 355, 360, 363, 364, 366, 369, 486, - 575, 477, 370, 374, 492, 373, 491, 375, 377, 380, - 378, 575, 478, 376, 390, 389, 391, 489, 488, 392, - 395, 472, 486, 396, 472, 424, 400, 401, 402, 421, - 402, 406, 397, 407, 408, 406, 410, 352, 259, 409, + 272, 292, 514, 294, 297, 300, 492, 490, 501, 576, + 298, 299, 301, 305, 510, 509, 304, 508, 302, 321, + 309, 311, 312, 324, 328, 313, 330, 507, 487, 498, + 501, 333, 334, 314, 335, 337, 503, 338, 339, 502, + 501, 341, 500, 343, 347, 344, 491, 490, 493, 349, + 352, 354, 496, 495, 353, 357, 365, 366, 367, 369, + 486, 576, 477, 368, 370, 492, 375, 491, 372, 379, + 377, 380, 576, 478, 381, 388, 390, 391, 489, 488, + 393, 396, 472, 473, 394, 425, 424, 399, 397, 402, + 422, 404, 405, 398, 407, 409, 405, 408, 315, 193, - 575, 413, 200, 575, 451, 456, 461, 466, 469, 471, - 476, 481, 486, 491, 496, 84, 501, 506 + 410, 576, 414, 159, 576, 453, 458, 463, 468, 471, + 473, 478, 483, 488, 493, 498, 68, 503, 508 } ; -static const flex_int16_t yy_def[319] = +static const flex_int16_t yy_def[320] = { 0, - 304, 1, 305, 305, 306, 306, 304, 304, 304, 304, - 304, 307, 304, 304, 304, 308, 304, 304, 304, 304, - 304, 304, 304, 304, 309, 304, 304, 304, 304, 304, - 310, 304, 304, 304, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 307, 304, 311, 304, 304, 304, 304, 312, 304, - 313, 304, 308, 314, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 315, 304, 304, 309, 309, 316, 304, - 304, 304, 304, 304, 304, 310, 304, 310, 310, 310, + 305, 1, 306, 306, 307, 307, 305, 305, 305, 305, + 305, 308, 305, 305, 305, 309, 305, 305, 305, 305, + 305, 305, 305, 305, 310, 305, 305, 305, 305, 305, + 305, 311, 305, 305, 305, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 308, 305, 312, 305, 305, 305, 305, 313, + 305, 314, 305, 309, 315, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 316, 305, 305, 310, 310, 317, + 305, 305, 305, 305, 305, 305, 311, 305, 311, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 304, 307, 307, 311, 304, 304, - 304, 312, 304, 317, 313, 318, 308, 308, 314, 304, - 304, 315, 304, 304, 316, 304, 304, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 312, 312, 317, 313, 313, 318, - 304, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 305, 308, 308, 312, 305, + 305, 305, 313, 305, 318, 314, 319, 309, 309, 315, + 305, 305, 316, 305, 305, 317, 305, 305, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 313, 313, 318, 314, 314, + 319, 305, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 310, 310, 310, 310, 310, 304, 304, 304, 304, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 304, 304, 304, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 304, 304, 304, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 304, - 304, 304, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 310, 310, 310, 310, 310, 310, 304, 310, - 310, 310, 304, 310, 310, 304, 310, 310, 304, 310, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 305, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 305, 305, + 305, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 305, 305, 305, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 311, 311, 311, 311, 311, 311, 305, + 311, 311, 311, 305, 311, 311, 305, 311, 311, 305, - 304, 310, 310, 0, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304 + 311, 305, 311, 311, 0, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305 } ; -static const flex_int16_t yy_nxt[632] = +static const flex_int16_t yy_nxt[634] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 304, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 305, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 301, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 302, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 225, 227, - 89, 220, 89, 235, 89, 89, 222, 89, 89, 89, - 226, 231, 233, 237, 234, 232, 238, 89, 240, 89, - 239, 243, 89, 89, 244, 89, 242, 236, 241, 89, - 89, 89, 89, 89, 245, 89, 250, 89, 89, 89, - 249, 253, 258, 254, 89, 89, 89, 89, 255, 257, - 89, 251, 252, 259, 265, 89, 256, 263, 89, 89, - 266, 89, 267, 264, 89, 89, 268, 269, 89, 89, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 226, 221, 228, 90, 236, 90, 90, 90, + 90, 90, 232, 234, 227, 235, 233, 90, 241, 242, + 90, 240, 238, 237, 90, 239, 90, 243, 245, 90, + 90, 90, 252, 90, 90, 90, 244, 90, 246, 90, + 90, 251, 255, 90, 254, 90, 250, 259, 90, 90, + 90, 256, 253, 90, 260, 258, 257, 264, 266, 267, + 268, 90, 90, 90, 90, 90, 90, 265, 90, 269, - 89, 89, 89, 89, 277, 89, 270, 275, 271, 278, - 276, 274, 280, 279, 89, 89, 89, 89, 281, 284, - 89, 89, 283, 286, 288, 89, 89, 89, 290, 291, - 285, 89, 89, 89, 89, 89, 287, 295, 89, 299, - 297, 296, 294, 300, 298, 303, 89, 292, 293, 89, - 302, 55, 55, 55, 55, 55, 58, 58, 58, 58, - 58, 62, 62, 62, 62, 62, 73, 73, 73, 73, - 73, 88, 88, 88, 96, 96, 126, 126, 126, 126, - 126, 132, 132, 132, 132, 132, 135, 135, 135, 135, - 135, 137, 137, 137, 137, 137, 142, 89, 142, 142, + 270, 90, 278, 90, 276, 90, 90, 90, 271, 272, + 275, 280, 279, 277, 90, 281, 90, 90, 285, 90, + 90, 282, 90, 90, 287, 90, 289, 291, 284, 292, + 90, 90, 286, 90, 90, 90, 90, 296, 288, 300, + 90, 298, 301, 297, 293, 295, 299, 304, 90, 294, + 90, 90, 303, 56, 56, 56, 56, 56, 59, 59, + 59, 59, 59, 63, 63, 63, 63, 63, 74, 74, + 74, 74, 74, 89, 89, 89, 97, 97, 127, 127, + 127, 127, 127, 133, 133, 133, 133, 133, 136, 136, + 136, 136, 136, 138, 138, 138, 138, 138, 143, 90, - 142, 175, 175, 175, 175, 175, 178, 178, 178, 178, - 178, 89, 289, 89, 89, 282, 89, 89, 273, 272, - 89, 89, 262, 261, 260, 89, 89, 89, 89, 248, - 247, 246, 89, 89, 89, 89, 230, 229, 228, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 304, 7, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 143, 143, 143, 176, 176, 176, 176, 176, 179, 179, + 179, 179, 179, 290, 90, 90, 283, 90, 90, 274, + 273, 90, 90, 263, 262, 261, 90, 90, 90, 90, + 249, 248, 247, 90, 90, 90, 90, 231, 230, 229, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 305, 7, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; -static const flex_int16_t yy_chk[632] = +static const flex_int16_t yy_chk[634] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 316, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 317, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 304, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 303, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 299, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 300, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 204, 205, - 213, 197, 218, 216, 220, 225, 200, 221, 219, 224, - 204, 210, 212, 219, 213, 211, 219, 222, 221, 223, - 220, 224, 226, 231, 225, 232, 223, 218, 222, 233, - 235, 234, 238, 243, 226, 237, 232, 241, 244, 245, - 231, 235, 244, 237, 250, 249, 251, 298, 238, 243, - 254, 233, 234, 245, 251, 255, 241, 249, 256, 257, - 254, 258, 255, 250, 259, 263, 256, 257, 266, 264, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 211, 212, 206, 213, 219, 204, + 217, 214, 205, 198, 206, 221, 217, 222, 223, 226, + 234, 299, 211, 213, 205, 214, 212, 220, 222, 223, + 224, 221, 220, 219, 225, 220, 227, 224, 226, 232, + 233, 235, 234, 236, 238, 239, 225, 242, 227, 244, + 246, 233, 238, 245, 236, 250, 232, 245, 251, 255, + 252, 239, 235, 256, 246, 244, 242, 250, 252, 255, + 256, 257, 258, 259, 264, 260, 265, 251, 269, 257, - 268, 274, 269, 271, 268, 270, 258, 264, 259, 269, - 266, 263, 271, 270, 276, 275, 277, 280, 271, 275, - 281, 284, 274, 277, 281, 287, 288, 291, 284, 287, - 276, 292, 294, 295, 300, 297, 280, 292, 302, 296, - 294, 293, 291, 297, 295, 302, 290, 288, 289, 286, - 300, 305, 305, 305, 305, 305, 306, 306, 306, 306, - 306, 307, 307, 307, 307, 307, 308, 308, 308, 308, - 308, 309, 309, 309, 310, 310, 311, 311, 311, 311, - 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, - 313, 314, 314, 314, 314, 314, 315, 285, 315, 315, + 258, 267, 269, 271, 265, 270, 272, 275, 259, 260, + 264, 271, 270, 267, 276, 272, 277, 278, 276, 281, + 285, 272, 282, 289, 278, 288, 282, 285, 275, 288, + 292, 293, 277, 295, 298, 296, 301, 293, 281, 297, + 303, 295, 298, 294, 289, 292, 296, 303, 291, 290, + 287, 286, 301, 306, 306, 306, 306, 306, 307, 307, + 307, 307, 307, 308, 308, 308, 308, 308, 309, 309, + 309, 309, 309, 310, 310, 310, 311, 311, 312, 312, + 312, 312, 312, 313, 313, 313, 313, 313, 314, 314, + 314, 314, 314, 315, 315, 315, 315, 315, 316, 284, - 315, 317, 317, 317, 317, 317, 318, 318, 318, 318, - 318, 283, 282, 279, 278, 273, 267, 265, 262, 260, - 253, 252, 248, 247, 246, 242, 240, 239, 236, 230, - 229, 228, 227, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 316, 316, 316, 318, 318, 318, 318, 318, 319, 319, + 319, 319, 319, 283, 280, 279, 274, 268, 266, 263, + 261, 254, 253, 249, 248, 247, 243, 241, 240, 237, + 231, 230, 229, 228, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; /* The intent behind this definition is that it'll catch @@ -1183,13 +1183,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 304 ); + while ( yy_current_state != 305 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1510,218 +1510,223 @@ YY_RULE_SETUP case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return s1::parser::make_INCREMENT(loc); } +{ return s1::parser::make_QMARK(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return s1::parser::make_DECREMENT(loc); } +{ return s1::parser::make_INCREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return s1::parser::make_ASSIGN_LSHIFT(loc); } +{ return s1::parser::make_DECREMENT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return s1::parser::make_ASSIGN_RSHIFT(loc); } +{ return s1::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return s1::parser::make_LSHIFT(loc); } +{ return s1::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return s1::parser::make_RSHIFT(loc); } +{ return s1::parser::make_LSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return s1::parser::make_OR(loc); } +{ return s1::parser::make_RSHIFT(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return s1::parser::make_AND(loc); } +{ return s1::parser::make_OR(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return s1::parser::make_EQUALITY(loc); } +{ return s1::parser::make_AND(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return s1::parser::make_INEQUALITY(loc); } +{ return s1::parser::make_EQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return s1::parser::make_LESS_EQUAL(loc); } +{ return s1::parser::make_INEQUALITY(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return s1::parser::make_GREATER_EQUAL(loc); } +{ return s1::parser::make_LESS_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return s1::parser::make_LESS(loc); } +{ return s1::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return s1::parser::make_GREATER(loc); } +{ return s1::parser::make_LESS(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return s1::parser::make_ASSIGN_ADD(loc); } +{ return s1::parser::make_GREATER(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return s1::parser::make_ASSIGN_SUB(loc); } +{ return s1::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return s1::parser::make_ASSIGN_MULT(loc); } +{ return s1::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return s1::parser::make_ASSIGN_DIV(loc); } +{ return s1::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return s1::parser::make_ASSIGN_MOD(loc); } +{ return s1::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return s1::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return s1::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return s1::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return s1::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return s1::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return s1::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return s1::parser::make_ASSIGN(loc); } +{ return s1::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return s1::parser::make_ADD(loc); } +{ return s1::parser::make_ASSIGN(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return s1::parser::make_SUB(loc); } +{ return s1::parser::make_ADD(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return s1::parser::make_MULT(loc); } +{ return s1::parser::make_SUB(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return s1::parser::make_DIV(loc); } +{ return s1::parser::make_MULT(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return s1::parser::make_MOD(loc); } +{ return s1::parser::make_DIV(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return s1::parser::make_NOT(loc); } +{ return s1::parser::make_MOD(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return s1::parser::make_COMPLEMENT(loc); } +{ return s1::parser::make_NOT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return s1::parser::make_BITWISE_OR(loc); } +{ return s1::parser::make_COMPLEMENT(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return s1::parser::make_BITWISE_AND(loc); } +{ return s1::parser::make_BITWISE_OR(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return s1::parser::make_BITWISE_EXOR(loc); } +{ return s1::parser::make_BITWISE_AND(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return s1::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return s1::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 94: YY_RULE_SETUP #line 141 "lexer.lpp" -{ return s1::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return s1::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 95: -/* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return s1::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return s1::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 96: /* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return s1::parser::make_STRING(std::string(yytext), loc); } +{ return s1::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 97: +/* rule 97 can match eol */ YY_RULE_SETUP #line 144 "lexer.lpp" -{ return s1::parser::make_FLOAT(std::string(yytext), loc); } +{ return s1::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 98: YY_RULE_SETUP #line 145 "lexer.lpp" +{ return s1::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 146 "lexer.lpp" { return s1::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { return s1::parser::make_S1EOF(loc); } YY_BREAK -case 99: -/* rule 99 can match eol */ +case 100: +/* rule 100 can match eol */ YY_RULE_SETUP -#line 147 "lexer.lpp" +#line 148 "lexer.lpp" { throw s1::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" ECHO; YY_BREAK -#line 1724 "lexer.cpp" +#line 1729 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2019,7 +2024,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2048,11 +2053,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 304); + yy_is_jam = (yy_current_state == 305); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2851,6 +2856,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" diff --git a/src/s1/xsk/lexer.hpp b/src/s1/xsk/lexer.hpp index 29b11006..aa1fd5d8 100644 --- a/src/s1/xsk/lexer.hpp +++ b/src/s1/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/s1/xsk/parser.cpp b/src/s1/xsk/parser.cpp index 3fdfd00a..041459cb 100644 --- a/src/s1/xsk/parser.cpp +++ b/src/s1/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -530,6 +531,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -796,6 +798,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1061,6 +1064,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1581,6 +1585,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1805,1213 +1810,1225 @@ namespace xsk { namespace gsc { namespace s1 { switch (yyn) { case 2: // root: program -#line 239 "parser.ypp" +#line 243 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1811 "parser.cpp" +#line 1816 "parser.cpp" break; case 3: // root: %empty -#line 240 "parser.ypp" +#line 244 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1817 "parser.cpp" +#line 1822 "parser.cpp" break; case 4: // program: program include -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1823 "parser.cpp" +#line 1828 "parser.cpp" break; case 5: // program: program define -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1829 "parser.cpp" +#line 1834 "parser.cpp" break; case 6: // program: include -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1835 "parser.cpp" +#line 1840 "parser.cpp" break; case 7: // program: define -#line 251 "parser.ypp" +#line 255 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1841 "parser.cpp" +#line 1846 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 256 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1847 "parser.cpp" +#line 1852 "parser.cpp" break; case 9: // define: usingtree -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1853 "parser.cpp" +#line 1858 "parser.cpp" break; case 10: // define: constant -#line 261 "parser.ypp" +#line 265 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1859 "parser.cpp" +#line 1864 "parser.cpp" break; case 11: // define: thread -#line 262 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1865 "parser.cpp" +#line 1870 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 267 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1871 "parser.cpp" +#line 1876 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 272 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1877 "parser.cpp" +#line 1882 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 277 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1883 "parser.cpp" +#line 1888 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1889 "parser.cpp" +#line 1894 "parser.cpp" break; case 16: // parameters: name -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1895 "parser.cpp" +#line 1900 "parser.cpp" break; case 17: // parameters: %empty -#line 286 "parser.ypp" +#line 290 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1901 "parser.cpp" +#line 1906 "parser.cpp" break; case 18: // stmt: stmt_block -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1907 "parser.cpp" +#line 1912 "parser.cpp" break; case 19: // stmt: stmt_call -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1913 "parser.cpp" +#line 1918 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1919 "parser.cpp" +#line 1924 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1925 "parser.cpp" +#line 1930 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1931 "parser.cpp" +#line 1936 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1937 "parser.cpp" +#line 1942 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1943 "parser.cpp" +#line 1948 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1949 "parser.cpp" +#line 1954 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1955 "parser.cpp" +#line 1960 "parser.cpp" break; case 27: // stmt: stmt_waitframe -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waitframe = std::move(yystack_[0].value.as < stmt_waitframe_ptr > ()); } -#line 1961 "parser.cpp" +#line 1966 "parser.cpp" break; case 28: // stmt: stmt_if -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1967 "parser.cpp" +#line 1972 "parser.cpp" break; case 29: // stmt: stmt_ifelse -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1973 "parser.cpp" +#line 1978 "parser.cpp" break; case 30: // stmt: stmt_while -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1979 "parser.cpp" +#line 1984 "parser.cpp" break; case 31: // stmt: stmt_for -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 32: // stmt: stmt_foreach -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 33: // stmt: stmt_switch -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 34: // stmt: stmt_case -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 35: // stmt: stmt_default -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 36: // stmt: stmt_break -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 37: // stmt: stmt_continue -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 38: // stmt: stmt_return -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 39: // stmt: stmt_breakpoint -#line 311 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 40: // stmt: stmt_prof_begin -#line 312 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 41: // stmt: stmt_prof_end -#line 313 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 42: // stmt_block: "{" stmt_list "}" -#line 317 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 43: // stmt_block: "{" "}" -#line 318 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 44: // stmt_list: stmt_list stmt -#line 323 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 45: // stmt_list: stmt -#line 325 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 46: // stmt_call: expr_call ";" -#line 330 "parser.ypp" +#line 334 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 47: // stmt_call: expr_call_thread ";" -#line 332 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 48: // stmt_assign: expr_assign ";" -#line 337 "parser.ypp" +#line 341 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 49: // stmt_endon: object "endon" "(" expr ")" ";" -#line 342 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 347 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 51: // stmt_notify: object "notify" "(" expr ")" ";" -#line 349 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 52: // stmt_wait: "wait" expr ";" -#line 354 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 359 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 54: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 361 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 366 "parser.ypp" +#line 370 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 56: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 57: // stmt_waittillframeend: "waittillframeend" ";" -#line 373 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 58: // stmt_waitframe: "waitframe" ";" -#line 378 "parser.ypp" +#line 382 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 59: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 60: // stmt_if: "if" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 61: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 62: // stmt_while: "while" "(" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 63: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 400 "parser.ypp" +#line 404 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 64: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 405 "parser.ypp" +#line 409 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 65: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 66: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 412 "parser.ypp" +#line 416 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 67: // stmt_case: "case" integer ":" -#line 417 "parser.ypp" +#line 421 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 68: // stmt_case: "case" neg_integer ":" -#line 419 "parser.ypp" +#line 423 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 69: // stmt_case: "case" string ":" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 70: // stmt_default: "default" ":" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 71: // stmt_break: "break" ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 72: // stmt_continue: "continue" ";" -#line 436 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 73: // stmt_return: "return" expr ";" -#line 441 "parser.ypp" +#line 445 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 74: // stmt_return: "return" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 75: // stmt_breakpoint: "breakpoint" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 76: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 77: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 78: // for_stmt: expr_assign -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 79: // for_stmt: %empty -#line 463 "parser.ypp" +#line 467 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 80: // for_expr: expr -#line 467 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 81: // for_expr: %empty -#line 468 "parser.ypp" +#line 472 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 82: // expr: expr_compare -#line 472 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; - case 83: // expr: expr_binary -#line 473 "parser.ypp" + case 83: // expr: expr_ternary +#line 477 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; - case 84: // expr: expr_primitive -#line 474 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2303 "parser.cpp" - break; - - case 85: // expr_assign: "++" object + case 84: // expr: expr_binary #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2309 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2308 "parser.cpp" break; - case 86: // expr_assign: "--" object + case 85: // expr: expr_primitive #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2315 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2314 "parser.cpp" break; - case 87: // expr_assign: object "++" -#line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2321 "parser.cpp" - break; - - case 88: // expr_assign: object "--" -#line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2327 "parser.cpp" - break; - - case 89: // expr_assign: object "=" expr -#line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2333 "parser.cpp" - break; - - case 90: // expr_assign: object "|=" expr + case 86: // expr_assign: "++" object #line 483 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2339 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2320 "parser.cpp" break; - case 91: // expr_assign: object "&=" expr + case 87: // expr_assign: "--" object #line 484 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2345 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2326 "parser.cpp" break; - case 92: // expr_assign: object "^=" expr + case 88: // expr_assign: object "++" #line 485 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2351 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2332 "parser.cpp" break; - case 93: // expr_assign: object "<<=" expr + case 89: // expr_assign: object "--" #line 486 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2357 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2338 "parser.cpp" break; - case 94: // expr_assign: object ">>=" expr + case 90: // expr_assign: object "=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2363 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2344 "parser.cpp" break; - case 95: // expr_assign: object "+=" expr + case 91: // expr_assign: object "|=" expr #line 488 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2369 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2350 "parser.cpp" break; - case 96: // expr_assign: object "-=" expr + case 92: // expr_assign: object "&=" expr #line 489 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2375 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2356 "parser.cpp" break; - case 97: // expr_assign: object "*=" expr + case 93: // expr_assign: object "^=" expr #line 490 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2381 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2362 "parser.cpp" break; - case 98: // expr_assign: object "/=" expr + case 94: // expr_assign: object "<<=" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2387 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2368 "parser.cpp" break; - case 99: // expr_assign: object "%=" expr + case 95: // expr_assign: object ">>=" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2393 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2374 "parser.cpp" break; - case 100: // expr_compare: expr "||" expr + case 96: // expr_assign: object "+=" expr +#line 493 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2380 "parser.cpp" + break; + + case 97: // expr_assign: object "-=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2386 "parser.cpp" + break; + + case 98: // expr_assign: object "*=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2392 "parser.cpp" + break; + + case 99: // expr_assign: object "/=" expr #line 496 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2399 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2398 "parser.cpp" break; - case 101: // expr_compare: expr "&&" expr + case 100: // expr_assign: object "%=" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2405 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2404 "parser.cpp" break; - case 102: // expr_compare: expr "==" expr -#line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2411 "parser.cpp" - break; - - case 103: // expr_compare: expr "!=" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2417 "parser.cpp" - break; - - case 104: // expr_compare: expr "<=" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2423 "parser.cpp" - break; - - case 105: // expr_compare: expr ">=" expr + case 101: // expr_compare: expr "||" expr #line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2429 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2410 "parser.cpp" break; - case 106: // expr_compare: expr "<" expr + case 102: // expr_compare: expr "&&" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2435 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2416 "parser.cpp" break; - case 107: // expr_compare: expr ">" expr + case 103: // expr_compare: expr "==" expr #line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2441 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2422 "parser.cpp" break; - case 108: // expr_binary: expr "|" expr + case 104: // expr_compare: expr "!=" expr +#line 504 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2428 "parser.cpp" + break; + + case 105: // expr_compare: expr "<=" expr +#line 505 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2434 "parser.cpp" + break; + + case 106: // expr_compare: expr ">=" expr +#line 506 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2440 "parser.cpp" + break; + + case 107: // expr_compare: expr "<" expr #line 507 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2447 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2446 "parser.cpp" break; - case 109: // expr_binary: expr "&" expr + case 108: // expr_compare: expr ">" expr #line 508 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2453 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2452 "parser.cpp" break; - case 110: // expr_binary: expr "^" expr -#line 509 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2459 "parser.cpp" - break; - - case 111: // expr_binary: expr "<<" expr -#line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2465 "parser.cpp" - break; - - case 112: // expr_binary: expr ">>" expr -#line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2471 "parser.cpp" - break; - - case 113: // expr_binary: expr "+" expr + case 109: // expr_ternary: expr "?" expr ":" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2477 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2458 "parser.cpp" break; - case 114: // expr_binary: expr "-" expr -#line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2483 "parser.cpp" - break; - - case 115: // expr_binary: expr "*" expr -#line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2489 "parser.cpp" - break; - - case 116: // expr_binary: expr "/" expr -#line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2495 "parser.cpp" - break; - - case 117: // expr_binary: expr "%" expr + case 110: // expr_binary: expr "|" expr #line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2501 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2464 "parser.cpp" break; - case 118: // expr_primitive: "(" expr ")" + case 111: // expr_binary: expr "&" expr +#line 517 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2470 "parser.cpp" + break; + + case 112: // expr_binary: expr "^" expr +#line 518 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2476 "parser.cpp" + break; + + case 113: // expr_binary: expr "<<" expr +#line 519 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2482 "parser.cpp" + break; + + case 114: // expr_binary: expr ">>" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2507 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2488 "parser.cpp" break; - case 119: // expr_primitive: "~" expr + case 115: // expr_binary: expr "+" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2513 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2494 "parser.cpp" break; - case 120: // expr_primitive: "!" expr + case 116: // expr_binary: expr "-" expr #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2519 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2500 "parser.cpp" break; - case 121: // expr_primitive: expr_call + case 117: // expr_binary: expr "*" expr #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2525 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2506 "parser.cpp" break; - case 122: // expr_primitive: expr_call_thread + case 118: // expr_binary: expr "/" expr #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2531 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2512 "parser.cpp" break; - case 123: // expr_primitive: expr_call_childthread + case 119: // expr_binary: expr "%" expr #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2537 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2518 "parser.cpp" break; - case 124: // expr_primitive: expr_function -#line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2543 "parser.cpp" - break; - - case 125: // expr_primitive: expr_add_array -#line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2549 "parser.cpp" - break; - - case 126: // expr_primitive: expr_array -#line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2555 "parser.cpp" - break; - - case 127: // expr_primitive: expr_field + case 120: // expr_primitive: "(" expr ")" #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2561 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2524 "parser.cpp" break; - case 128: // expr_primitive: expr_size + case 121: // expr_primitive: "~" expr #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2567 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2530 "parser.cpp" break; - case 129: // expr_primitive: thisthread + case 122: // expr_primitive: "!" expr #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2573 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2536 "parser.cpp" break; - case 130: // expr_primitive: empty_array + case 123: // expr_primitive: expr_call #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2579 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2542 "parser.cpp" break; - case 131: // expr_primitive: undefined + case 124: // expr_primitive: expr_call_thread #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2585 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2548 "parser.cpp" break; - case 132: // expr_primitive: game + case 125: // expr_primitive: expr_call_childthread #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2591 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2554 "parser.cpp" break; - case 133: // expr_primitive: self + case 126: // expr_primitive: expr_function #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2597 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2560 "parser.cpp" break; - case 134: // expr_primitive: anim + case 127: // expr_primitive: expr_add_array #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2603 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2566 "parser.cpp" break; - case 135: // expr_primitive: level + case 128: // expr_primitive: expr_array #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2609 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2572 "parser.cpp" break; - case 136: // expr_primitive: animation + case 129: // expr_primitive: expr_field #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2615 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2578 "parser.cpp" break; - case 137: // expr_primitive: animtree + case 130: // expr_primitive: expr_size #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2621 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2584 "parser.cpp" break; - case 138: // expr_primitive: name + case 131: // expr_primitive: thisthread #line 540 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2627 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2590 "parser.cpp" break; - case 139: // expr_primitive: istring + case 132: // expr_primitive: empty_array #line 541 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2633 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2596 "parser.cpp" break; - case 140: // expr_primitive: string + case 133: // expr_primitive: undefined #line 542 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2639 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2602 "parser.cpp" break; - case 141: // expr_primitive: vector + case 134: // expr_primitive: game #line 543 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2645 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2608 "parser.cpp" break; - case 142: // expr_primitive: neg_float + case 135: // expr_primitive: self #line 544 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2651 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2614 "parser.cpp" break; - case 143: // expr_primitive: neg_integer + case 136: // expr_primitive: anim #line 545 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2657 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2620 "parser.cpp" break; - case 144: // expr_primitive: float + case 137: // expr_primitive: level #line 546 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2663 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2626 "parser.cpp" break; - case 145: // expr_primitive: integer + case 138: // expr_primitive: animation #line 547 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2669 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2632 "parser.cpp" break; - case 146: // expr_primitive: false + case 139: // expr_primitive: animtree #line 548 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2675 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2638 "parser.cpp" break; - case 147: // expr_primitive: true + case 140: // expr_primitive: name #line 549 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2681 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2644 "parser.cpp" break; - case 148: // expr_call: expr_call_function + case 141: // expr_primitive: istring +#line 550 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2650 "parser.cpp" + break; + + case 142: // expr_primitive: string +#line 551 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2656 "parser.cpp" + break; + + case 143: // expr_primitive: vector +#line 552 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2662 "parser.cpp" + break; + + case 144: // expr_primitive: neg_float #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2687 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2668 "parser.cpp" break; - case 149: // expr_call: expr_call_pointer + case 145: // expr_primitive: neg_integer #line 554 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2693 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2674 "parser.cpp" break; - case 150: // expr_call: object expr_call_function + case 146: // expr_primitive: float #line 555 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2699 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2680 "parser.cpp" break; - case 151: // expr_call: object expr_call_pointer + case 147: // expr_primitive: integer #line 556 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2705 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2686 "parser.cpp" break; - case 152: // expr_call_thread: "thread" expr_call_function -#line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2711 "parser.cpp" + case 148: // expr_primitive: false +#line 557 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2692 "parser.cpp" break; - case 153: // expr_call_thread: "thread" expr_call_pointer -#line 561 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2717 "parser.cpp" + case 149: // expr_primitive: true +#line 558 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2698 "parser.cpp" break; - case 154: // expr_call_thread: object "thread" expr_call_function + case 150: // expr_call: expr_call_function #line 562 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2723 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2704 "parser.cpp" break; - case 155: // expr_call_thread: object "thread" expr_call_pointer + case 151: // expr_call: expr_call_pointer #line 563 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2729 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2710 "parser.cpp" break; - case 156: // expr_call_childthread: "childthread" expr_call_function -#line 567 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2735 "parser.cpp" + case 152: // expr_call: object expr_call_function +#line 564 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2716 "parser.cpp" break; - case 157: // expr_call_childthread: "childthread" expr_call_pointer -#line 568 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2741 "parser.cpp" + case 153: // expr_call: object expr_call_pointer +#line 565 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2722 "parser.cpp" break; - case 158: // expr_call_childthread: object "childthread" expr_call_function + case 154: // expr_call_thread: "thread" expr_call_function #line 569 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2747 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2728 "parser.cpp" break; - case 159: // expr_call_childthread: object "childthread" expr_call_pointer + case 155: // expr_call_thread: "thread" expr_call_pointer #line 570 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2753 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2734 "parser.cpp" break; - case 160: // expr_call_function: name "(" expr_arguments ")" -#line 575 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2759 "parser.cpp" + case 156: // expr_call_thread: object "thread" expr_call_function +#line 571 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2740 "parser.cpp" break; - case 161: // expr_call_function: file "::" name "(" expr_arguments ")" + case 157: // expr_call_thread: object "thread" expr_call_pointer +#line 572 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2746 "parser.cpp" + break; + + case 158: // expr_call_childthread: "childthread" expr_call_function +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2752 "parser.cpp" + break; + + case 159: // expr_call_childthread: "childthread" expr_call_pointer #line 577 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2765 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2758 "parser.cpp" break; - case 162: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 582 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2771 "parser.cpp" + case 160: // expr_call_childthread: object "childthread" expr_call_function +#line 578 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2764 "parser.cpp" break; - case 163: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 161: // expr_call_childthread: object "childthread" expr_call_pointer +#line 579 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2770 "parser.cpp" + break; + + case 162: // expr_call_function: name "(" expr_arguments ")" #line 584 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2776 "parser.cpp" + break; + + case 163: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 586 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2782 "parser.cpp" + break; + + case 164: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 591 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2788 "parser.cpp" + break; + + case 165: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 593 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2777 "parser.cpp" +#line 2794 "parser.cpp" break; - case 164: // expr_arguments: expr_arguments_filled -#line 588 "parser.ypp" + case 166: // expr_arguments: expr_arguments_filled +#line 597 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2783 "parser.cpp" +#line 2800 "parser.cpp" break; - case 165: // expr_arguments: expr_arguments_empty -#line 589 "parser.ypp" + case 167: // expr_arguments: expr_arguments_empty +#line 598 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2789 "parser.cpp" +#line 2806 "parser.cpp" break; - case 166: // expr_arguments_filled: expr_arguments "," expr -#line 594 "parser.ypp" + case 168: // expr_arguments_filled: expr_arguments "," expr +#line 603 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2795 "parser.cpp" +#line 2812 "parser.cpp" break; - case 167: // expr_arguments_filled: expr -#line 596 "parser.ypp" + case 169: // expr_arguments_filled: expr +#line 605 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2801 "parser.cpp" +#line 2818 "parser.cpp" break; - case 168: // expr_arguments_empty: %empty -#line 601 "parser.ypp" + case 170: // expr_arguments_empty: %empty +#line 610 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2807 "parser.cpp" +#line 2824 "parser.cpp" break; - case 169: // expr_function: "::" name -#line 606 "parser.ypp" + case 171: // expr_function: "::" name +#line 615 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2813 "parser.cpp" +#line 2830 "parser.cpp" break; - case 170: // expr_function: file "::" name -#line 608 "parser.ypp" + case 172: // expr_function: file "::" name +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2819 "parser.cpp" +#line 2836 "parser.cpp" break; - case 171: // expr_add_array: "[" expr_arguments_filled "]" -#line 613 "parser.ypp" + case 173: // expr_add_array: "[" expr_arguments_filled "]" +#line 622 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2825 "parser.cpp" +#line 2842 "parser.cpp" break; - case 172: // expr_array: object "[" expr "]" -#line 618 "parser.ypp" + case 174: // expr_array: object "[" expr "]" +#line 627 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2831 "parser.cpp" +#line 2848 "parser.cpp" break; - case 173: // expr_field: object "." name -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2837 "parser.cpp" - break; - - case 174: // expr_size: object ".size" -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2843 "parser.cpp" - break; - - case 175: // object: expr_call + case 175: // expr_field: object "." name #line 632 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2849 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2854 "parser.cpp" break; - case 176: // object: expr_array -#line 633 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2855 "parser.cpp" - break; - - case 177: // object: expr_field -#line 634 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2861 "parser.cpp" - break; - - case 178: // object: game -#line 635 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2867 "parser.cpp" - break; - - case 179: // object: self -#line 636 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2873 "parser.cpp" - break; - - case 180: // object: anim + case 176: // expr_size: object ".size" #line 637 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2879 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2860 "parser.cpp" break; - case 181: // object: level -#line 638 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2885 "parser.cpp" + case 177: // object: expr_call +#line 641 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2866 "parser.cpp" break; - case 182: // object: name -#line 639 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2891 "parser.cpp" - break; - - case 183: // thisthread: "thisthread" + case 178: // object: expr_array #line 642 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2897 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2872 "parser.cpp" break; - case 184: // empty_array: "[" "]" + case 179: // object: expr_field #line 643 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2903 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2878 "parser.cpp" break; - case 185: // undefined: "undefined" + case 180: // object: game #line 644 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2909 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2884 "parser.cpp" break; - case 186: // game: "game" + case 181: // object: self #line 645 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2915 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2890 "parser.cpp" break; - case 187: // self: "self" + case 182: // object: anim #line 646 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2921 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2896 "parser.cpp" break; - case 188: // anim: "anim" + case 183: // object: level #line 647 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2927 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2902 "parser.cpp" break; - case 189: // level: "level" + case 184: // object: name #line 648 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2933 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2908 "parser.cpp" break; - case 190: // animation: "%" "identifier" -#line 649 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2939 "parser.cpp" - break; - - case 191: // animtree: "#animtree" -#line 650 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2945 "parser.cpp" - break; - - case 192: // name: "identifier" + case 185: // thisthread: "thisthread" #line 651 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2951 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2914 "parser.cpp" break; - case 193: // file: "file path" + case 186: // empty_array: "[" "]" #line 652 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2957 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2920 "parser.cpp" break; - case 194: // istring: "localized string" + case 187: // undefined: "undefined" #line 653 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2963 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2926 "parser.cpp" break; - case 195: // string: "string literal" + case 188: // game: "game" #line 654 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2969 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2932 "parser.cpp" break; - case 196: // vector: "(" expr "," expr "," expr ")" + case 189: // self: "self" #line 655 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2975 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2938 "parser.cpp" break; - case 197: // neg_float: "-" "float" + case 190: // anim: "anim" #line 656 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2981 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2944 "parser.cpp" break; - case 198: // neg_integer: "-" "int" + case 191: // level: "level" #line 657 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2987 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2950 "parser.cpp" break; - case 199: // float: "float" + case 192: // animation: "%" "identifier" #line 658 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2993 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2956 "parser.cpp" break; - case 200: // integer: "int" + case 193: // animtree: "#animtree" #line 659 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2999 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2962 "parser.cpp" break; - case 201: // false: "false" + case 194: // name: "identifier" #line 660 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 3005 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2968 "parser.cpp" break; - case 202: // true: "true" + case 195: // file: "file path" #line 661 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2974 "parser.cpp" + break; + + case 196: // istring: "localized string" +#line 662 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2980 "parser.cpp" + break; + + case 197: // string: "string literal" +#line 663 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2986 "parser.cpp" + break; + + case 198: // vector: "(" expr "," expr "," expr ")" +#line 664 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2992 "parser.cpp" + break; + + case 199: // neg_float: "-" "float" +#line 665 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2998 "parser.cpp" + break; + + case 200: // neg_integer: "-" "int" +#line 666 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 3004 "parser.cpp" + break; + + case 201: // float: "float" +#line 667 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3010 "parser.cpp" + break; + + case 202: // integer: "int" +#line 668 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3016 "parser.cpp" + break; + + case 203: // false: "false" +#line 669 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 3022 "parser.cpp" + break; + + case 204: // true: "true" +#line 670 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 3011 "parser.cpp" +#line 3028 "parser.cpp" break; -#line 3015 "parser.cpp" +#line 3032 "parser.cpp" default: break; @@ -3202,11 +3219,11 @@ namespace xsk { namespace gsc { namespace s1 { "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", "level", "(", ")", "{", "}", "[", "]", - ",", ".", "::", ":", ";", "++", "--", "<<", ">>", "||", "&&", "==", "!=", - "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", - "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", + ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", + "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", + "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", - "int", "ADD_ARRAY", "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", + "int", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "include", "define", "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", @@ -3215,8 +3232,8 @@ namespace xsk { namespace gsc { namespace s1 { "stmt_while", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", "stmt_prof_end", "for_stmt", - "for_expr", "expr", "expr_assign", "expr_compare", "expr_binary", - "expr_primitive", "expr_call", "expr_call_thread", + "for_expr", "expr", "expr_assign", "expr_compare", "expr_ternary", + "expr_binary", "expr_primitive", "expr_call", "expr_call_thread", "expr_call_childthread", "expr_call_function", "expr_call_pointer", "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", "expr_field", @@ -3488,532 +3505,572 @@ namespace xsk { namespace gsc { namespace s1 { } - const short parser::yypact_ninf_ = -236; + const short parser::yypact_ninf_ = -242; - const short parser::yytable_ninf_ = -183; + const short parser::yytable_ninf_ = -185; const short parser::yypact_[] = { - 8, -65, -6, -236, 25, 8, -236, -236, -236, -236, - -236, -32, -236, -8, -28, -236, -236, -236, -17, 774, - -236, -236, 21, 30, -236, -236, 6, 6, -236, 51, - -236, -236, -236, -236, -236, -236, -236, 774, 377, -17, - 774, 774, 10, -3, -236, -236, -236, 1403, -236, -236, - -236, 20, -236, -236, -236, -236, -236, -236, 403, 449, - -236, 472, -236, -236, -236, 739, 798, 858, 930, -236, - -236, 12, 17, -236, -236, -236, -236, -236, -236, -236, - -236, -236, 24, 50, -17, 63, -236, -236, 76, 79, - -236, -236, 80, 967, 377, -236, 1481, 71, 89, -236, - -236, -236, -236, -236, -236, -236, -236, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 6, 6, -236, 836, -17, - -236, -236, 774, -17, -236, 599, -236, -236, 774, -17, - 774, -236, 774, 1274, 774, -236, 106, 106, 1491, 1000, - 1563, 1563, 130, 130, 130, 130, 1043, 1532, 1522, -37, - -37, -236, -236, -236, -236, -236, -236, -236, 1313, -236, - 31, -236, 96, 87, 101, 104, 774, 88, -20, 123, - 124, 127, 131, 134, -26, 121, 147, 152, 712, -236, - -15, -15, -236, -236, 643, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, 153, 155, - 157, -236, -236, 882, -236, -236, -236, -236, 76, 1274, - 96, 1352, 1390, 132, 1481, -236, -236, 774, -236, 774, - 774, 1437, -236, 140, -236, 774, 774, 544, -17, 774, - 117, 159, 166, 172, -236, -236, -236, -236, 1450, -236, - 173, 173, -236, -236, -236, -236, -236, 182, 184, 187, - 189, -236, -236, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 186, 774, 199, 39, 40, 42, - -236, 190, 1106, 1139, 191, -236, 932, -11, 1149, -236, - -236, -236, -236, 774, 774, 774, 774, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 205, 1182, - 774, -236, 196, 200, -236, 687, 687, 774, 774, -17, - 50, 1192, 1010, 1053, 1096, 774, -236, 48, -236, -236, - 225, -236, 203, 1481, 1225, 234, -236, 206, 209, 774, - 212, 774, 213, 774, 65, -236, 687, 544, 687, 774, - -236, -236, 69, -236, 73, -236, 82, -236, -236, 223, - -236, 1235, 217, 220, 222, 687, 687, -236, -236, -236, - -236, -236 + 8, -74, -23, -242, 25, 8, -242, -242, -242, -242, + -242, -21, -242, -16, -59, -242, -242, -242, -14, 810, + -242, -242, 20, -6, -242, -242, 7, 7, -242, 43, + -242, -242, -242, -242, -242, -242, -242, 810, 684, -14, + 810, 810, -43, 3, -242, -242, -242, 1562, -242, -242, + -242, -242, 21, -242, -242, -242, -242, -242, -242, 53, + 177, -242, 367, -242, -242, -242, 391, 426, 466, 707, + -242, -242, 13, 15, -242, -242, -242, -242, -242, -242, + -242, -242, -242, 14, 59, -14, 60, -242, -242, 65, + 68, -242, -242, 75, 1002, 684, -242, 1645, 80, 91, + -242, -242, -242, -242, -242, -242, -242, -242, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 7, 7, -242, + 873, -14, -242, -242, 810, -14, -242, 568, -242, -242, + 810, -14, 810, -242, 810, 806, 810, -242, 1527, 262, + 262, 1676, 1686, 454, 454, 203, 203, 203, 203, 1717, + 1758, 1727, 127, 127, -242, -242, -242, -242, -242, -242, + -242, 1412, -242, 32, -242, 100, 93, 104, 126, 810, + 117, 19, 130, 133, 134, 140, 144, -4, 139, 142, + 150, 747, -242, -15, -15, -242, -242, 613, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, 153, 163, 164, -242, -242, 920, -242, -242, -242, + -242, 65, 806, 100, 1452, 1491, 171, 1645, 810, -242, + -242, 810, -242, 810, 810, 1597, -242, 149, -242, 810, + 810, 770, -14, 810, 132, 168, 174, 176, -242, -242, + -242, -242, 1632, -242, -11, -11, -242, -242, -242, -242, + -242, 180, 187, 188, 192, -242, -242, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 189, 810, + 196, 1645, 49, 50, 71, -242, 191, 1168, 1202, 194, + -242, 966, 9, 1236, -242, -242, -242, -242, 810, 810, + 810, 810, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + 1645, 1645, 1645, 198, 1270, 810, -242, 209, 210, -242, + 658, 658, 810, 810, -14, 59, 1304, 1046, 1090, 1134, + 810, -242, 72, -242, -242, 225, -242, 211, 1645, 1338, + 229, -242, 216, 217, 810, 218, 810, 223, 810, 83, + -242, 658, 770, 658, 810, -242, -242, 84, -242, 141, + -242, 145, -242, -242, 212, -242, 1372, 224, 231, 240, + 658, 658, -242, -242, -242, -242, -242 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 192, 0, 2, 6, 7, 9, 10, - 11, 0, 193, 0, 0, 1, 4, 5, 17, 0, - 8, 195, 0, 0, 16, 191, 0, 0, 183, 0, - 202, 201, 185, 186, 187, 188, 189, 0, 168, 0, - 0, 0, 0, 0, 194, 199, 200, 0, 82, 83, - 84, 121, 122, 123, 148, 149, 124, 125, 126, 127, - 128, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 0, 0, 0, 0, 152, 153, 0, 0, - 156, 157, 0, 0, 168, 184, 167, 0, 164, 165, - 169, 120, 119, 197, 198, 190, 13, 0, 0, 0, + 3, 0, 0, 194, 0, 2, 6, 7, 9, 10, + 11, 0, 195, 0, 0, 1, 4, 5, 17, 0, + 8, 197, 0, 0, 16, 193, 0, 0, 185, 0, + 204, 203, 187, 188, 189, 190, 191, 0, 170, 0, + 0, 0, 0, 0, 196, 201, 202, 0, 82, 83, + 84, 85, 123, 124, 125, 150, 151, 126, 127, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 0, 0, 0, 0, 154, 155, 0, + 0, 158, 159, 0, 0, 170, 186, 169, 0, 166, + 167, 171, 122, 121, 199, 200, 192, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 150, 151, 168, 0, 12, 0, 14, 15, 0, 0, - 0, 118, 0, 167, 0, 171, 111, 112, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, - 114, 115, 116, 117, 154, 155, 158, 159, 0, 173, - 0, 164, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 45, 18, 0, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 0, 175, - 0, 176, 177, 0, 178, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 166, 172, 160, 168, 75, 168, - 168, 0, 57, 0, 58, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 70, 71, 72, 74, 0, 175, - 85, 86, 42, 44, 48, 46, 47, 0, 0, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 152, 153, 170, 0, 12, 0, 14, 15, + 0, 0, 0, 120, 0, 169, 0, 173, 0, 113, + 114, 101, 102, 103, 104, 105, 106, 107, 108, 110, + 111, 112, 115, 116, 117, 118, 119, 156, 157, 160, + 161, 0, 175, 0, 166, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 78, 0, 0, 0, 69, - 68, 67, 73, 0, 0, 0, 0, 89, 95, 96, - 97, 98, 99, 90, 91, 92, 94, 93, 0, 0, - 168, 161, 0, 0, 59, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 168, 196, 0, 76, 77, - 60, 62, 0, 80, 0, 0, 66, 0, 0, 168, - 0, 168, 0, 168, 0, 162, 0, 79, 0, 0, - 49, 51, 0, 54, 0, 56, 0, 163, 61, 0, - 64, 0, 0, 0, 0, 0, 0, 50, 53, 55, - 63, 65 + 0, 0, 43, 0, 0, 45, 18, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 0, 177, 0, 178, 179, 0, 180, 181, 182, + 183, 184, 0, 0, 0, 0, 0, 168, 0, 174, + 162, 170, 75, 170, 170, 0, 57, 0, 58, 0, + 0, 79, 0, 0, 0, 0, 0, 0, 70, 71, + 72, 74, 0, 177, 86, 87, 42, 44, 48, 46, + 47, 0, 0, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 52, 0, 0, 0, 0, + 78, 0, 0, 0, 69, 68, 67, 73, 0, 0, + 0, 0, 90, 96, 97, 98, 99, 100, 91, 92, + 93, 95, 94, 0, 0, 170, 163, 0, 0, 59, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, + 170, 198, 0, 76, 77, 60, 62, 0, 80, 0, + 0, 66, 0, 0, 170, 0, 170, 0, 170, 0, + 164, 0, 79, 0, 0, 49, 51, 0, 54, 0, + 56, 0, 165, 61, 0, 64, 0, 0, 0, 0, + 0, 0, 50, 53, 55, 63, 65 }; const short parser::yypgoto_[] = { - -236, -236, -236, 272, 273, -236, -236, -236, -236, -183, - -76, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -78, -236, 38, -235, -236, - -236, -236, -82, -107, -236, -25, -23, -119, -21, -236, - -236, -236, -22, 98, -236, 156, -236, -236, -236, 192, - 197, 202, 236, -236, -236, 0, 5, -236, -5, -236, - -236, 97, -236, 102, -236, -236 + -242, -242, -242, 286, 288, -242, -242, -242, -242, -185, + -81, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -68, -242, 39, -241, -242, + -242, -242, -242, -83, 52, -242, -25, -19, -121, -29, + -242, -242, -242, -22, 78, -242, 106, -242, -242, -242, + 118, 159, 195, 200, -242, -242, 0, 5, -242, -10, + -242, -242, 108, -242, 115, -242, -242 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 294, 342, 96, 218, 48, - 49, 50, 51, 52, 53, 54, 55, 97, 171, 99, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 299, 347, 97, 221, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 98, 174, + 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81 + 76, 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 86, 90, 87, 91, 11, 13, 136, 18, 22, - 328, 263, 295, 170, 1, 2, 29, 98, 24, 12, - 243, 33, 34, 35, 36, 15, 88, 88, 220, 85, - 244, 89, 89, 19, 14, 329, 130, 29, 131, 100, - -182, -182, 20, -182, 122, 123, 124, -182, -175, -175, - 85, -175, 132, 219, 250, -175, -182, 47, 21, -182, - 21, 88, 82, 46, -175, 133, 89, -175, 3, 12, - 3, 83, 236, 98, 134, 93, 84, 144, 101, 102, - 321, 322, 105, 323, 137, 144, 144, 220, 144, 355, - 12, 3, 135, 3, 144, 92, -182, -182, 103, 104, - 164, 166, 165, 167, -175, -175, 367, 138, 259, 259, - 372, 144, 219, 221, 373, 144, 132, 144, 287, 144, - 288, 289, 295, 374, 140, 88, 88, 139, 144, 169, - 89, 89, 143, 172, 145, 228, 237, 238, 242, 230, - 89, 239, 340, 341, 240, 146, 147, 148, 149, 150, + 11, 87, 91, 138, 22, 11, 13, 88, 92, 99, + 300, 12, 267, 173, 1, 2, 29, 14, 24, 18, + 29, 33, 34, 35, 36, 15, 89, 89, 21, 86, + 333, 90, 90, 130, 20, 84, 131, 132, 29, 101, + 85, -184, -184, 133, -184, 19, 104, 105, -184, -177, + -177, 86, -177, 134, 222, 334, -177, -184, 47, 247, + -184, 83, 89, 135, 136, -177, 99, 90, -177, 248, + 12, 3, 3, 240, 12, 3, 94, 254, 146, 102, + 103, -178, -178, 21, -178, 139, 46, 93, -178, 106, + 326, 327, 12, 3, 3, 146, 146, -178, -184, -184, + -178, 137, 167, 169, 140, 134, -177, -177, 168, 170, + 263, 263, 328, 360, 222, 224, 141, 146, 146, 142, + 292, 300, 293, 294, 372, 377, 146, 89, 89, 146, + 146, 172, 90, 90, 145, 175, 147, 231, -178, -178, + 241, 233, 90, 242, 243, 345, 346, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 245, 246, 259, 168, 247, 221, 221, - 254, 248, 221, 368, 249, 370, 229, 286, 231, 251, - 232, 291, 234, 107, 108, 120, 121, 122, 123, 124, - 228, 228, 380, 381, 228, 89, 89, 255, 130, 89, - 131, 337, 256, 264, 29, 265, 104, 266, 299, 120, - 121, 122, 123, 124, 241, 300, 354, 128, 220, 220, - 129, 301, 303, 88, 304, 221, 258, 305, 89, 306, - 362, 318, 364, 222, 366, 130, 130, 131, 131, 320, - 324, 327, 356, 219, 219, 335, 338, 228, 297, 220, - 339, 220, 89, 357, 346, 359, 360, 12, 3, 361, - 88, 88, 363, 365, 375, 89, 89, 377, 220, 220, - 378, 130, 379, 131, 219, 259, 219, 16, 17, 369, - 0, 252, 0, 292, 293, 0, 253, 298, 222, 222, - 0, 223, 222, 219, 219, 0, 88, 0, 0, 0, - 0, 89, 0, 221, 221, 0, 0, 0, 0, 0, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 0, 319, 0, 228, 228, 224, 0, 345, - 89, 89, 225, 0, 221, 221, 221, 226, 0, 0, - 0, 331, 332, 333, 334, 222, 260, 261, 0, 0, - 223, 0, 0, 221, 221, 0, 228, 228, 228, 0, - 0, 89, 89, 89, 0, 343, 344, 0, 0, 0, - 0, 227, 0, 0, 0, 228, 228, 0, 0, 0, - 89, 89, 224, 224, 0, 25, 224, 225, 225, 0, - 0, 225, 226, 226, 0, 0, 226, 371, 0, 0, - 0, 0, 0, 296, 0, 26, 27, 28, 29, 30, + 161, 162, 163, 164, 165, 166, 244, 246, 263, 171, + 249, 224, 224, 250, 251, 224, 373, 255, 375, 232, + 252, 234, 378, 235, 253, 237, 379, 146, 258, 223, + 296, 146, 259, 231, 231, 385, 386, 231, 90, 90, + 260, 132, 90, 268, 342, -179, -179, 133, -179, 124, + 125, 126, -179, 269, 270, 225, 290, 304, 245, 359, + 308, -179, 105, 305, -179, 306, 89, 309, 310, 224, + 262, 90, 311, 367, 323, 369, 325, 371, 340, 132, + 132, 329, 361, 226, 332, 133, 133, 222, 222, 223, + 364, 231, 302, 380, 351, 227, 90, 109, 110, 343, + 344, 362, -179, -179, 89, 89, 365, 366, 368, 90, + 90, 225, 225, 370, 382, 225, 132, 291, 222, 263, + 222, 383, 133, 122, 123, 124, 125, 126, 297, 298, + 384, 16, 303, 17, 374, 256, 228, 222, 222, 264, + 265, 89, 257, 226, 0, 0, 90, 0, 224, 224, + 0, 227, 227, 0, 0, 227, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 0, 324, 225, + 231, 231, 229, 0, 350, 90, 90, 230, 0, 224, + 224, 224, 122, 123, 124, 125, 126, 336, 337, 338, + 339, 0, 228, 228, 0, 0, 228, 301, 224, 224, + 0, 231, 231, 231, 0, 0, 90, 90, 90, 227, + 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, + 231, 231, 223, 223, 0, 90, 90, 0, 229, 229, + 0, 0, 229, 230, 230, 127, 128, 230, 29, 0, + 0, 0, 129, 376, 0, 0, 0, 0, 225, 225, + 228, 130, 0, 223, 131, 223, 0, 0, 0, -180, + -180, 0, -180, 0, 0, 0, -180, 0, 0, 0, + 0, 0, 223, 223, 0, -180, 226, 226, -180, 225, + 225, 225, 0, 0, 0, 0, 229, 0, 227, 227, + 0, 230, 12, 3, -181, -181, 0, -181, 225, 225, + 0, -181, 0, 0, 0, 0, 0, 226, 301, 226, + -181, 0, 0, -181, 0, 0, -180, -180, 0, 227, + 227, 227, 0, 0, 0, 0, 226, 226, 0, 228, + 228, 0, 0, 0, -182, -182, 0, -182, 227, 227, + 0, -182, 0, 0, 0, 0, 0, 0, 109, 110, + -182, -181, -181, -182, 115, 116, 117, 118, 0, 0, + 228, 228, 228, 0, 0, 229, 229, 0, 0, 0, + 230, 230, 0, 0, 122, 123, 124, 125, 126, 228, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -182, -182, 0, 0, 0, 229, 229, 229, 0, + 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 178, 0, 229, 229, 0, 0, 179, + 230, 230, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, + 137, 192, 86, 0, 0, 0, 176, 177, 178, 0, + 193, 194, 0, 0, 179, 0, 0, 180, 181, 182, + 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, + 191, 26, 0, 0, 29, 0, 0, 0, 0, 33, + 34, 35, 36, 12, 3, 137, 266, 86, 0, 0, + 0, 176, 177, 178, 0, 193, 194, 0, 0, 179, + 0, 0, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 25, 0, 33, 34, 35, 36, 12, 3, + 137, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 193, 194, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, 96, + 0, 0, 39, 0, 0, -183, -183, 0, -183, 0, + 0, 0, -183, 12, 3, 0, 0, 0, 40, 41, + 0, -183, 0, 0, -183, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, + 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, - 0, 94, 95, 222, 222, 39, 227, 227, 0, 0, - 227, -176, -176, 0, -176, 0, 0, 0, -176, 224, - 40, 41, 0, 0, 225, 0, 0, -176, 0, 226, - -176, 0, 0, 0, 222, 222, 222, 42, 0, 0, - 43, 12, 3, 21, 44, 45, 46, 0, 0, 0, - 0, 0, 0, 222, 222, 0, 0, -177, -177, 0, - -177, 223, 223, 227, -177, 0, 0, -176, -176, 0, - 0, 0, 0, -177, 0, 0, -177, 0, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 0, 0, - 0, 0, 223, 296, 223, 0, 128, 224, 224, 129, - 0, 0, 225, 225, 0, 0, 0, 226, 226, 0, - 0, 223, 223, -177, -177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, - 224, 0, 0, 225, 225, 225, 12, 3, 226, 226, - 226, 227, 227, 0, 0, 0, 0, 224, 224, 0, - 0, 0, 225, 225, 0, 29, 0, 226, 226, 0, - 33, 34, 35, 36, 0, 0, 0, 0, 85, 0, - 0, 0, 227, 227, 227, 190, 191, 0, 0, 0, - 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, - 176, 227, 227, 177, 178, 179, 0, 180, 181, 182, - 0, 183, 184, 185, 186, 187, 188, 26, 12, 3, - 29, 0, 0, 0, 0, 33, 34, 35, 36, 0, - 0, 135, 189, 85, 0, 0, 173, 174, 175, 0, - 190, 191, 0, 0, 176, 0, 0, 177, 178, 179, - 0, 180, 181, 182, 0, 183, 184, 185, 186, 187, - 188, 26, 0, 0, 29, 0, 0, 0, 0, 33, - 34, 35, 36, 12, 3, 135, 262, 85, 0, 0, - 173, 174, 175, 0, 190, 191, 0, 0, 176, 0, - 0, 177, 178, 179, 0, 180, 181, 182, 0, 183, - 184, 185, 186, 187, 188, 26, 0, 0, 29, 0, - 25, 0, 0, 33, 34, 35, 36, 12, 3, 135, - 0, 85, 0, 0, 0, 0, 0, 0, 190, 191, - 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, - 35, 36, 37, 0, 0, 0, 38, 0, 0, 0, - 39, 0, 257, 0, 0, 0, 0, -178, -178, 0, - -178, 12, 3, 0, -178, 40, 41, 0, 0, 0, - 0, 0, 25, -178, 0, 0, -178, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, - 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, - 33, 34, 35, 36, 37, 0, 0, 0, 38, 0, - 0, 0, 39, -178, -178, 0, -179, -179, 0, -179, - 0, 0, 0, -179, 0, 0, 0, 40, 41, 0, - 0, 0, -179, 0, 25, -179, 0, 0, 0, 0, - 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, - 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, - 94, 0, -179, -179, 39, 0, -180, -180, 0, -180, - 0, 267, 268, -180, 269, 270, 0, 0, 0, 40, - 41, 0, -180, 0, 0, -180, 0, 0, 0, 0, - 125, 0, 0, 29, 0, 0, 42, 0, 0, 43, - 12, 3, 21, 44, 45, 46, 128, 0, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, -180, -180, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, -181, -181, - 0, -181, 0, 29, 0, -181, 12, 3, 0, 0, - 0, 0, 0, 0, -181, 0, 128, -181, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 141, 0, - 0, 0, 0, 142, -181, -181, 12, 3, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 0, 38, -183, -183, 0, 39, 0, 261, 0, 0, + 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, + 0, 40, 41, 0, 86, 0, 0, 0, 25, 0, + 0, 0, 193, 194, 0, 0, 0, 0, 42, 0, + 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 236, 0, 0, 38, 12, 3, 108, 39, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, + 0, 25, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 42, 0, 0, 43, 12, 3, 21, 44, 45, + 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, + 34, 35, 36, 37, 0, 0, 0, 95, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 273, 274, 0, 0, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 0, 29, 0, 0, 42, 0, 0, 43, 12, 3, + 21, 44, 45, 46, 130, 0, 0, 131, 0, 0, + 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 29, 0, 0, + 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, + 130, 0, 0, 131, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 348, 0, 107, 108, 0, 349, 111, 112, 113, - 114, 115, 116, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 350, 0, 107, 108, 0, 351, - 111, 112, 113, 114, 115, 116, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 352, 0, 0, - 0, 0, 353, 0, 0, 0, 0, 325, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 326, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 330, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 336, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 347, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 358, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 376, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 233, - 0, 0, 0, 0, 0, 0, 0, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, + 0, 0, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 143, 0, 0, 0, 0, 144, 0, + 0, 12, 3, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 353, 0, 0, + 0, 0, 354, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 235, 0, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 284, 0, 0, - 0, 0, 0, 0, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 285, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 106, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 290, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 302, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 0, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 118, - 0, 120, 121, 122, 123, 124, 0, 0, 0, 0, - 0, 120, 121, 122, 123, 124, 107, 108, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 355, 0, 0, 0, 0, 356, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 357, 0, 0, 0, 0, + 358, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 331, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 120, 121, 122, 123, 124 + 0, 341, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 381, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 239, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 288, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 289, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 238, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 107, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 295, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 307, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 109, 110, 0, 112, 113, 114, 115, 116, 117, 118, + 109, 110, 0, 0, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 120, 121, 122, 123, 124, + 125, 126, 0, 0, 0, 120, 0, 122, 123, 124, + 125, 126, 109, 110, 0, 0, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, + 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 26, 27, 26, 27, 5, 1, 83, 40, 14, - 21, 194, 247, 132, 6, 7, 31, 38, 18, 84, - 40, 36, 37, 38, 39, 0, 26, 27, 135, 44, - 50, 26, 27, 65, 40, 46, 61, 31, 61, 39, - 28, 29, 50, 31, 81, 82, 83, 35, 28, 29, - 44, 31, 40, 135, 80, 35, 44, 19, 86, 47, - 86, 61, 41, 89, 44, 48, 61, 47, 85, 84, - 85, 41, 41, 94, 50, 37, 46, 46, 40, 41, - 41, 41, 85, 41, 84, 46, 46, 194, 46, 41, - 84, 85, 42, 85, 46, 44, 84, 85, 88, 89, - 125, 126, 125, 126, 84, 85, 41, 44, 190, 191, - 41, 46, 194, 135, 41, 46, 40, 46, 237, 46, - 239, 240, 357, 41, 44, 125, 126, 48, 46, 129, - 125, 126, 94, 133, 45, 135, 40, 50, 50, 139, - 135, 40, 325, 326, 40, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 40, 40, 247, 128, 40, 190, 191, - 49, 40, 194, 356, 40, 358, 138, 45, 140, 184, - 142, 41, 144, 53, 54, 79, 80, 81, 82, 83, - 190, 191, 375, 376, 194, 190, 191, 50, 223, 194, - 223, 320, 50, 50, 31, 50, 89, 50, 49, 79, - 80, 81, 82, 83, 176, 49, 335, 44, 325, 326, - 47, 49, 40, 223, 40, 247, 188, 40, 223, 40, - 349, 45, 351, 135, 353, 260, 261, 260, 261, 40, - 50, 50, 17, 325, 326, 40, 50, 247, 248, 356, - 50, 358, 247, 50, 330, 21, 50, 84, 85, 50, - 260, 261, 50, 50, 41, 260, 261, 50, 375, 376, - 50, 296, 50, 296, 356, 357, 358, 5, 5, 357, - -1, 184, -1, 245, 246, -1, 184, 249, 190, 191, - -1, 135, 194, 375, 376, -1, 296, -1, -1, -1, - -1, 296, -1, 325, 326, -1, -1, -1, -1, -1, - -1, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, -1, 285, -1, 325, 326, 135, -1, 329, - 325, 326, 135, -1, 356, 357, 358, 135, -1, -1, - -1, 303, 304, 305, 306, 247, 190, 191, -1, -1, - 194, -1, -1, 375, 376, -1, 356, 357, 358, -1, - -1, 356, 357, 358, -1, 327, 328, -1, -1, -1, - -1, 135, -1, -1, -1, 375, 376, -1, -1, -1, - 375, 376, 190, 191, -1, 8, 194, 190, 191, -1, - -1, 194, 190, 191, -1, -1, 194, 359, -1, -1, - -1, -1, -1, 247, -1, 28, 29, 30, 31, 32, - 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, - -1, 44, 45, 325, 326, 48, 190, 191, -1, -1, - 194, 28, 29, -1, 31, -1, -1, -1, 35, 247, - 63, 64, -1, -1, 247, -1, -1, 44, -1, 247, - 47, -1, -1, -1, 356, 357, 358, 80, -1, -1, - 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, 375, 376, -1, -1, 28, 29, -1, - 31, 325, 326, 247, 35, -1, -1, 84, 85, -1, - -1, -1, -1, 44, -1, -1, 47, -1, -1, -1, - 28, 29, -1, 31, -1, -1, -1, 35, -1, -1, - -1, -1, 356, 357, 358, -1, 44, 325, 326, 47, - -1, -1, 325, 326, -1, -1, -1, 325, 326, -1, - -1, 375, 376, 84, 85, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, - 358, -1, -1, 356, 357, 358, 84, 85, 356, 357, - 358, 325, 326, -1, -1, -1, -1, 375, 376, -1, - -1, -1, 375, 376, -1, 31, -1, 375, 376, -1, - 36, 37, 38, 39, -1, -1, -1, -1, 44, -1, - -1, -1, 356, 357, 358, 51, 52, -1, -1, -1, - -1, -1, 3, 4, 5, -1, -1, -1, -1, -1, - 11, 375, 376, 14, 15, 16, -1, 18, 19, 20, - -1, 22, 23, 24, 25, 26, 27, 28, 84, 85, - 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, - -1, 42, 43, 44, -1, -1, 3, 4, 5, -1, - 51, 52, -1, -1, 11, -1, -1, 14, 15, 16, + 0, 26, 27, 84, 14, 5, 1, 26, 27, 38, + 251, 85, 197, 134, 6, 7, 31, 40, 18, 40, + 31, 36, 37, 38, 39, 0, 26, 27, 87, 44, + 21, 26, 27, 44, 50, 41, 47, 62, 31, 39, + 46, 28, 29, 62, 31, 66, 89, 90, 35, 28, + 29, 44, 31, 40, 137, 46, 35, 44, 19, 40, + 47, 41, 62, 48, 50, 44, 95, 62, 47, 50, + 85, 86, 86, 41, 85, 86, 37, 81, 46, 40, + 41, 28, 29, 87, 31, 85, 90, 44, 35, 86, + 41, 41, 85, 86, 86, 46, 46, 44, 85, 86, + 47, 42, 127, 128, 44, 40, 85, 86, 127, 128, + 193, 194, 41, 41, 197, 137, 48, 46, 46, 44, + 241, 362, 243, 244, 41, 41, 46, 127, 128, 46, + 46, 131, 127, 128, 95, 135, 45, 137, 85, 86, + 40, 141, 137, 50, 40, 330, 331, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 40, 50, 251, 130, + 40, 193, 194, 40, 40, 197, 361, 187, 363, 140, + 40, 142, 41, 144, 40, 146, 41, 46, 49, 137, + 41, 46, 50, 193, 194, 380, 381, 197, 193, 194, + 50, 226, 197, 50, 325, 28, 29, 226, 31, 82, + 83, 84, 35, 50, 50, 137, 45, 49, 179, 340, + 40, 44, 90, 49, 47, 49, 226, 40, 40, 251, + 191, 226, 40, 354, 45, 356, 40, 358, 40, 264, + 265, 50, 17, 137, 50, 264, 265, 330, 331, 197, + 21, 251, 252, 41, 335, 137, 251, 54, 55, 50, + 50, 50, 85, 86, 264, 265, 50, 50, 50, 264, + 265, 193, 194, 50, 50, 197, 301, 238, 361, 362, + 363, 50, 301, 80, 81, 82, 83, 84, 249, 250, + 50, 5, 253, 5, 362, 187, 137, 380, 381, 193, + 194, 301, 187, 197, -1, -1, 301, -1, 330, 331, + -1, 193, 194, -1, -1, 197, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, -1, 289, 251, + 330, 331, 137, -1, 334, 330, 331, 137, -1, 361, + 362, 363, 80, 81, 82, 83, 84, 308, 309, 310, + 311, -1, 193, 194, -1, -1, 197, 251, 380, 381, + -1, 361, 362, 363, -1, -1, 361, 362, 363, 251, + -1, 332, 333, -1, -1, -1, -1, -1, -1, -1, + 380, 381, 330, 331, -1, 380, 381, -1, 193, 194, + -1, -1, 197, 193, 194, 28, 29, 197, 31, -1, + -1, -1, 35, 364, -1, -1, -1, -1, 330, 331, + 251, 44, -1, 361, 47, 363, -1, -1, -1, 28, + 29, -1, 31, -1, -1, -1, 35, -1, -1, -1, + -1, -1, 380, 381, -1, 44, 330, 331, 47, 361, + 362, 363, -1, -1, -1, -1, 251, -1, 330, 331, + -1, 251, 85, 86, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, 361, 362, 363, + 44, -1, -1, 47, -1, -1, 85, 86, -1, 361, + 362, 363, -1, -1, -1, -1, 380, 381, -1, 330, + 331, -1, -1, -1, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, -1, 54, 55, + 44, 85, 86, 47, 60, 61, 62, 63, -1, -1, + 361, 362, 363, -1, -1, 330, 331, -1, -1, -1, + 330, 331, -1, -1, 80, 81, 82, 83, 84, 380, + 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, -1, -1, -1, 361, 362, 363, -1, + -1, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 3, 4, 5, -1, 380, 381, -1, -1, 11, + 380, 381, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, + 42, 43, 44, -1, -1, -1, 3, 4, 5, -1, + 52, 53, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, -1, -1, -1, 36, - 37, 38, 39, 84, 85, 42, 43, 44, -1, -1, - 3, 4, 5, -1, 51, 52, -1, -1, 11, -1, - -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, - 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, - 8, -1, -1, 36, 37, 38, 39, 84, 85, 42, - -1, 44, -1, -1, -1, -1, -1, -1, 51, 52, - 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, - 38, 39, 40, -1, -1, -1, 44, -1, -1, -1, - 48, -1, 50, -1, -1, -1, -1, 28, 29, -1, - 31, 84, 85, -1, 35, 63, 64, -1, -1, -1, - -1, -1, 8, 44, -1, -1, 47, -1, -1, -1, - -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 28, 29, 30, 31, 32, 33, 34, -1, - 36, 37, 38, 39, 40, -1, -1, -1, 44, -1, - -1, -1, 48, 84, 85, -1, 28, 29, -1, 31, - -1, -1, -1, 35, -1, -1, -1, 63, 64, -1, - -1, -1, 44, -1, 8, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 28, 29, 30, 31, 32, 33, - 34, -1, 36, 37, 38, 39, 40, -1, -1, -1, - 44, -1, 84, 85, 48, -1, 28, 29, -1, 31, - -1, 9, 10, 35, 12, 13, -1, -1, -1, 63, - 64, -1, 44, -1, -1, 47, -1, -1, -1, -1, - 28, -1, -1, 31, -1, -1, 80, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 44, -1, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 28, 29, - -1, 31, -1, 31, -1, 35, 84, 85, -1, -1, - -1, -1, -1, -1, 44, -1, 44, 47, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 41, -1, - -1, -1, -1, 46, 84, 85, 84, 85, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 37, 38, 39, 85, 86, 42, 43, 44, -1, -1, + -1, 3, 4, 5, -1, 52, 53, -1, -1, 11, + -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, 8, -1, 36, 37, 38, 39, 85, 86, + 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 52, 53, 28, 29, 30, 31, 32, 33, 34, -1, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, 48, -1, -1, 28, 29, -1, 31, -1, + -1, -1, 35, 85, 86, -1, -1, -1, 64, 65, + -1, 44, -1, -1, 47, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, 84, 85, + 86, 87, 88, 89, 90, 28, 29, 30, 31, 32, + 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, + -1, 44, 85, 86, -1, 48, -1, 50, -1, -1, + -1, 31, -1, -1, -1, -1, 36, 37, 38, 39, + -1, 64, 65, -1, 44, -1, -1, -1, 8, -1, + -1, -1, 52, 53, -1, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 28, 29, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 45, -1, -1, 44, 85, 86, 51, 48, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + -1, -1, -1, -1, 64, 65, -1, -1, -1, -1, + -1, 8, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 81, -1, -1, 84, 85, 86, 87, 88, 89, + 90, 28, 29, 30, 31, 32, 33, 34, -1, 36, + 37, 38, 39, 40, -1, -1, -1, 44, -1, -1, + -1, 48, -1, -1, -1, -1, -1, -1, -1, 9, + 10, -1, 12, 13, -1, -1, -1, 64, 65, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, + -1, 31, -1, -1, 81, -1, -1, 84, 85, 86, + 87, 88, 89, 90, 44, -1, -1, 47, -1, -1, + -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 31, -1, -1, + -1, -1, -1, -1, -1, 85, 86, -1, -1, -1, + 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, - 83, 41, -1, 53, 54, -1, 46, 57, 58, 59, - 60, 61, 62, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 41, -1, 53, 54, -1, 46, - 57, 58, 59, 60, 61, 62, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - 77, 78, 79, 80, 81, 82, 83, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 41, -1, -1, - -1, -1, 46, -1, -1, -1, -1, 41, -1, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, - -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, -1, -1, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, 45, - -1, -1, -1, -1, -1, -1, -1, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 41, -1, -1, -1, -1, 46, -1, + -1, 85, 86, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 41, -1, -1, + -1, -1, 46, -1, -1, -1, -1, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 76, 77, 78, 79, 80, 81, 82, 83, 45, -1, - -1, -1, -1, -1, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 45, -1, -1, - -1, -1, -1, -1, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 46, -1, -1, -1, - -1, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 50, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 50, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 53, 54, -1, 56, 57, 58, - 59, 60, 61, 62, -1, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, 77, - -1, 79, 80, 81, 82, 83, -1, -1, -1, -1, - -1, 79, 80, 81, 82, 83, 53, 54, -1, -1, - -1, -1, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 41, -1, -1, -1, -1, 46, -1, -1, -1, + -1, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 41, -1, -1, -1, -1, + 46, -1, -1, -1, -1, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 41, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, 80, 81, 82, 83 + -1, 41, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 46, -1, -1, + -1, -1, 51, -1, -1, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 49, -1, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 50, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 51, -1, -1, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, -1, -1, -1, + -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 54, 55, -1, -1, 58, 59, 60, 61, 62, 63, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, 78, 79, 80, 81, 82, + 83, 84, -1, -1, -1, 78, -1, 80, 81, 82, + 83, 84, 54, 55, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 85, 99, 100, 101, 102, 103, 104, - 105, 163, 84, 164, 40, 0, 101, 102, 40, 65, - 50, 86, 166, 106, 163, 8, 28, 29, 30, 31, + 0, 6, 7, 86, 101, 102, 103, 104, 105, 106, + 107, 166, 85, 167, 40, 0, 103, 104, 40, 66, + 50, 87, 169, 108, 166, 8, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 44, 48, - 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, - 139, 140, 141, 142, 143, 144, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 41, 41, 46, 44, 143, 144, 163, 164, - 143, 144, 44, 135, 44, 45, 135, 145, 146, 147, - 163, 135, 135, 88, 89, 85, 50, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 76, 77, 78, - 79, 80, 81, 82, 83, 28, 29, 35, 44, 47, - 143, 144, 40, 48, 50, 42, 108, 163, 44, 48, - 44, 41, 46, 135, 46, 45, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 143, 144, 143, 144, 135, 163, - 145, 146, 163, 3, 4, 5, 11, 14, 15, 16, - 18, 19, 20, 22, 23, 24, 25, 26, 27, 43, - 51, 52, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 136, 140, - 141, 150, 151, 153, 157, 158, 159, 160, 163, 135, - 163, 135, 135, 45, 135, 45, 41, 40, 50, 40, - 40, 135, 50, 40, 50, 40, 40, 40, 40, 40, - 80, 166, 169, 171, 49, 50, 50, 50, 135, 140, - 153, 153, 43, 107, 50, 50, 50, 9, 10, 12, - 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 45, 46, 45, 145, 145, 145, - 50, 41, 135, 135, 133, 136, 153, 163, 135, 49, - 49, 49, 50, 40, 40, 40, 40, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 45, 135, - 40, 41, 41, 41, 50, 41, 41, 50, 21, 46, - 41, 135, 135, 135, 135, 40, 41, 145, 50, 50, - 107, 107, 134, 135, 135, 163, 108, 41, 41, 46, - 41, 46, 41, 46, 145, 41, 17, 50, 41, 21, - 50, 50, 145, 50, 145, 50, 145, 41, 107, 133, - 107, 135, 41, 41, 41, 41, 41, 50, 50, 50, - 107, 107 + 64, 65, 81, 84, 88, 89, 90, 137, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 41, 41, 46, 44, 146, 147, 166, + 167, 146, 147, 44, 137, 44, 45, 137, 148, 149, + 150, 166, 137, 137, 89, 90, 86, 50, 51, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, 28, 29, 35, + 44, 47, 146, 147, 40, 48, 50, 42, 110, 166, + 44, 48, 44, 41, 46, 137, 46, 45, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 146, 147, 146, + 147, 137, 166, 148, 149, 166, 3, 4, 5, 11, + 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, + 26, 27, 43, 52, 53, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 138, 143, 144, 153, 154, 156, 160, 161, 162, + 163, 166, 137, 166, 137, 137, 45, 137, 49, 45, + 41, 40, 50, 40, 40, 137, 50, 40, 50, 40, + 40, 40, 40, 40, 81, 169, 172, 174, 49, 50, + 50, 50, 137, 143, 156, 156, 43, 109, 50, 50, + 50, 9, 10, 12, 13, 52, 53, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 45, 46, + 45, 137, 148, 148, 148, 50, 41, 137, 137, 135, + 138, 156, 166, 137, 49, 49, 49, 50, 40, 40, + 40, 40, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 45, 137, 40, 41, 41, 41, 50, + 41, 41, 50, 21, 46, 41, 137, 137, 137, 137, + 40, 41, 148, 50, 50, 109, 109, 136, 137, 137, + 166, 110, 41, 41, 46, 41, 46, 41, 46, 148, + 41, 17, 50, 41, 21, 50, 50, 148, 50, 148, + 50, 148, 41, 109, 135, 109, 137, 41, 41, 41, + 41, 41, 50, 50, 50, 109, 109 }; const unsigned char parser::yyr1_[] = { - 0, 98, 99, 99, 100, 100, 100, 100, 101, 102, - 102, 102, 103, 104, 105, 106, 106, 106, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 108, 108, 109, 109, 110, 110, 111, 112, - 113, 113, 114, 115, 115, 116, 116, 117, 118, 118, - 119, 120, 121, 122, 123, 123, 124, 125, 125, 125, - 126, 127, 128, 129, 129, 130, 131, 132, 133, 133, - 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, - 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, - 143, 143, 144, 144, 145, 145, 146, 146, 147, 148, - 148, 149, 150, 151, 152, 153, 153, 153, 153, 153, - 153, 153, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173 + 0, 100, 101, 101, 102, 102, 102, 102, 103, 104, + 104, 104, 105, 106, 107, 108, 108, 108, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 110, 110, 111, 111, 112, 112, 113, 114, + 115, 115, 116, 117, 117, 118, 118, 119, 120, 120, + 121, 122, 123, 124, 125, 125, 126, 127, 127, 127, + 128, 129, 130, 131, 131, 132, 133, 134, 135, 135, + 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 143, 143, 143, 143, 144, 144, 144, 144, 145, 145, + 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 150, 151, 151, 152, 153, 154, 155, 156, 156, 156, + 156, 156, 156, 156, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176 }; const signed char @@ -4027,19 +4084,19 @@ namespace xsk { namespace gsc { namespace s1 { 8, 6, 3, 8, 6, 8, 6, 2, 2, 4, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, - 1, 0, 1, 1, 1, 2, 2, 2, 2, 3, + 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, - 4, 6, 8, 9, 1, 1, 3, 1, 0, 2, - 3, 3, 4, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 7, 2, 2, 1, - 1, 1, 1 + 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, + 3, 3, 4, 6, 8, 9, 1, 1, 3, 1, + 0, 2, 3, 3, 4, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 7, 2, + 2, 1, 1, 1, 1 }; @@ -4049,27 +4106,27 @@ namespace xsk { namespace gsc { namespace s1 { const short parser::yyrline_[] = { - 0, 239, 239, 240, 244, 246, 248, 250, 255, 260, - 261, 262, 266, 271, 276, 281, 283, 286, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 317, 318, 322, 324, 329, 331, 336, 341, - 346, 348, 353, 358, 360, 365, 367, 372, 377, 379, - 384, 389, 394, 399, 404, 406, 411, 416, 418, 420, - 425, 430, 435, 440, 442, 447, 452, 457, 462, 463, - 467, 468, 472, 473, 474, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 496, 497, 498, 499, 500, 501, 502, 503, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 553, 554, - 555, 556, 560, 561, 562, 563, 567, 568, 569, 570, - 574, 576, 581, 583, 588, 589, 593, 595, 601, 605, - 607, 612, 617, 622, 627, 632, 633, 634, 635, 636, - 637, 638, 639, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 661 + 0, 243, 243, 244, 248, 250, 252, 254, 259, 264, + 265, 266, 270, 275, 280, 285, 287, 290, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 321, 322, 326, 328, 333, 335, 340, 345, + 350, 352, 357, 362, 364, 369, 371, 376, 381, 383, + 388, 393, 398, 403, 408, 410, 415, 420, 422, 424, + 429, 434, 439, 444, 446, 451, 456, 461, 466, 467, + 471, 472, 476, 477, 478, 479, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 501, 502, 503, 504, 505, 506, 507, 508, 512, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 562, 563, 564, 565, 569, 570, 571, 572, 576, 577, + 578, 579, 583, 585, 590, 592, 597, 598, 602, 604, + 610, 614, 616, 621, 626, 631, 636, 641, 642, 643, + 644, 645, 646, 647, 648, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670 }; void @@ -4102,9 +4159,9 @@ namespace xsk { namespace gsc { namespace s1 { #line 13 "parser.ypp" } } } // xsk::gsc::s1 -#line 4106 "parser.cpp" +#line 4163 "parser.cpp" -#line 663 "parser.ypp" +#line 672 "parser.ypp" void xsk::gsc::s1::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/s1/xsk/parser.hpp b/src/s1/xsk/parser.hpp index d096df8c..4d03df1a 100644 --- a/src/s1/xsk/parser.hpp +++ b/src/s1/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace s1 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -700,53 +701,55 @@ namespace xsk { namespace gsc { namespace s1 { DOUBLECOLON = 48, // "::" COLON = 49, // ":" SEMICOLON = 50, // ";" - INCREMENT = 51, // "++" - DECREMENT = 52, // "--" - LSHIFT = 53, // "<<" - RSHIFT = 54, // ">>" - OR = 55, // "||" - AND = 56, // "&&" - EQUALITY = 57, // "==" - INEQUALITY = 58, // "!=" - LESS_EQUAL = 59, // "<=" - GREATER_EQUAL = 60, // ">=" - LESS = 61, // "<" - GREATER = 62, // ">" - NOT = 63, // "!" - COMPLEMENT = 64, // "~" - ASSIGN = 65, // "=" - ASSIGN_ADD = 66, // "+=" - ASSIGN_SUB = 67, // "-=" - ASSIGN_MULT = 68, // "*=" - ASSIGN_DIV = 69, // "/=" - ASSIGN_MOD = 70, // "%=" - ASSIGN_BITWISE_OR = 71, // "|=" - ASSIGN_BITWISE_AND = 72, // "&=" - ASSIGN_BITWISE_EXOR = 73, // "^=" - ASSIGN_RSHIFT = 74, // ">>=" - ASSIGN_LSHIFT = 75, // "<<=" - BITWISE_OR = 76, // "|" - BITWISE_AND = 77, // "&" - BITWISE_EXOR = 78, // "^" - ADD = 79, // "+" - SUB = 80, // "-" - MULT = 81, // "*" - DIV = 82, // "/" - MOD = 83, // "%" - FILE = 84, // "file path" - NAME = 85, // "identifier" - STRING = 86, // "string literal" - ISTRING = 87, // "localized string" - FLOAT = 88, // "float" - INTEGER = 89, // "int" - ADD_ARRAY = 90, // ADD_ARRAY - THEN = 91, // THEN - NEG = 92, // NEG - ANIMREF = 93, // ANIMREF - PREINC = 94, // PREINC - PREDEC = 95, // PREDEC - POSTINC = 96, // POSTINC - POSTDEC = 97 // POSTDEC + QMARK = 51, // "?" + INCREMENT = 52, // "++" + DECREMENT = 53, // "--" + LSHIFT = 54, // "<<" + RSHIFT = 55, // ">>" + OR = 56, // "||" + AND = 57, // "&&" + EQUALITY = 58, // "==" + INEQUALITY = 59, // "!=" + LESS_EQUAL = 60, // "<=" + GREATER_EQUAL = 61, // ">=" + LESS = 62, // "<" + GREATER = 63, // ">" + NOT = 64, // "!" + COMPLEMENT = 65, // "~" + ASSIGN = 66, // "=" + ASSIGN_ADD = 67, // "+=" + ASSIGN_SUB = 68, // "-=" + ASSIGN_MULT = 69, // "*=" + ASSIGN_DIV = 70, // "/=" + ASSIGN_MOD = 71, // "%=" + ASSIGN_BITWISE_OR = 72, // "|=" + ASSIGN_BITWISE_AND = 73, // "&=" + ASSIGN_BITWISE_EXOR = 74, // "^=" + ASSIGN_RSHIFT = 75, // ">>=" + ASSIGN_LSHIFT = 76, // "<<=" + BITWISE_OR = 77, // "|" + BITWISE_AND = 78, // "&" + BITWISE_EXOR = 79, // "^" + ADD = 80, // "+" + SUB = 81, // "-" + MULT = 82, // "*" + DIV = 83, // "/" + MOD = 84, // "%" + FILE = 85, // "file path" + NAME = 86, // "identifier" + STRING = 87, // "string literal" + ISTRING = 88, // "localized string" + FLOAT = 89, // "float" + INTEGER = 90, // "int" + ADD_ARRAY = 91, // ADD_ARRAY + THEN = 92, // THEN + TERN = 93, // TERN + NEG = 94, // NEG + ANIMREF = 95, // ANIMREF + PREINC = 96, // PREINC + PREDEC = 97, // PREDEC + POSTINC = 98, // POSTINC + POSTDEC = 99 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -763,7 +766,7 @@ namespace xsk { namespace gsc { namespace s1 { { enum symbol_kind_type { - YYNTOKENS = 98, ///< Number of tokens. + YYNTOKENS = 100, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -816,129 +819,132 @@ namespace xsk { namespace gsc { namespace s1 { S_DOUBLECOLON = 48, // "::" S_COLON = 49, // ":" S_SEMICOLON = 50, // ";" - S_INCREMENT = 51, // "++" - S_DECREMENT = 52, // "--" - S_LSHIFT = 53, // "<<" - S_RSHIFT = 54, // ">>" - S_OR = 55, // "||" - S_AND = 56, // "&&" - S_EQUALITY = 57, // "==" - S_INEQUALITY = 58, // "!=" - S_LESS_EQUAL = 59, // "<=" - S_GREATER_EQUAL = 60, // ">=" - S_LESS = 61, // "<" - S_GREATER = 62, // ">" - S_NOT = 63, // "!" - S_COMPLEMENT = 64, // "~" - S_ASSIGN = 65, // "=" - S_ASSIGN_ADD = 66, // "+=" - S_ASSIGN_SUB = 67, // "-=" - S_ASSIGN_MULT = 68, // "*=" - S_ASSIGN_DIV = 69, // "/=" - S_ASSIGN_MOD = 70, // "%=" - S_ASSIGN_BITWISE_OR = 71, // "|=" - S_ASSIGN_BITWISE_AND = 72, // "&=" - S_ASSIGN_BITWISE_EXOR = 73, // "^=" - S_ASSIGN_RSHIFT = 74, // ">>=" - S_ASSIGN_LSHIFT = 75, // "<<=" - S_BITWISE_OR = 76, // "|" - S_BITWISE_AND = 77, // "&" - S_BITWISE_EXOR = 78, // "^" - S_ADD = 79, // "+" - S_SUB = 80, // "-" - S_MULT = 81, // "*" - S_DIV = 82, // "/" - S_MOD = 83, // "%" - S_FILE = 84, // "file path" - S_NAME = 85, // "identifier" - S_STRING = 86, // "string literal" - S_ISTRING = 87, // "localized string" - S_FLOAT = 88, // "float" - S_INTEGER = 89, // "int" - S_ADD_ARRAY = 90, // ADD_ARRAY - S_THEN = 91, // THEN - S_NEG = 92, // NEG - S_ANIMREF = 93, // ANIMREF - S_PREINC = 94, // PREINC - S_PREDEC = 95, // PREDEC - S_POSTINC = 96, // POSTINC - S_POSTDEC = 97, // POSTDEC - S_YYACCEPT = 98, // $accept - S_root = 99, // root - S_program = 100, // program - S_include = 101, // include - S_define = 102, // define - S_usingtree = 103, // usingtree - S_constant = 104, // constant - S_thread = 105, // thread - S_parameters = 106, // parameters - S_stmt = 107, // stmt - S_stmt_block = 108, // stmt_block - S_stmt_list = 109, // stmt_list - S_stmt_call = 110, // stmt_call - S_stmt_assign = 111, // stmt_assign - S_stmt_endon = 112, // stmt_endon - S_stmt_notify = 113, // stmt_notify - S_stmt_wait = 114, // stmt_wait - S_stmt_waittill = 115, // stmt_waittill - S_stmt_waittillmatch = 116, // stmt_waittillmatch - S_stmt_waittillframeend = 117, // stmt_waittillframeend - S_stmt_waitframe = 118, // stmt_waitframe - S_stmt_if = 119, // stmt_if - S_stmt_ifelse = 120, // stmt_ifelse - S_stmt_while = 121, // stmt_while - S_stmt_for = 122, // stmt_for - S_stmt_foreach = 123, // stmt_foreach - S_stmt_switch = 124, // stmt_switch - S_stmt_case = 125, // stmt_case - S_stmt_default = 126, // stmt_default - S_stmt_break = 127, // stmt_break - S_stmt_continue = 128, // stmt_continue - S_stmt_return = 129, // stmt_return - S_stmt_breakpoint = 130, // stmt_breakpoint - S_stmt_prof_begin = 131, // stmt_prof_begin - S_stmt_prof_end = 132, // stmt_prof_end - S_for_stmt = 133, // for_stmt - S_for_expr = 134, // for_expr - S_expr = 135, // expr - S_expr_assign = 136, // expr_assign - S_expr_compare = 137, // expr_compare - S_expr_binary = 138, // expr_binary - S_expr_primitive = 139, // expr_primitive - S_expr_call = 140, // expr_call - S_expr_call_thread = 141, // expr_call_thread - S_expr_call_childthread = 142, // expr_call_childthread - S_expr_call_function = 143, // expr_call_function - S_expr_call_pointer = 144, // expr_call_pointer - S_expr_arguments = 145, // expr_arguments - S_expr_arguments_filled = 146, // expr_arguments_filled - S_expr_arguments_empty = 147, // expr_arguments_empty - S_expr_function = 148, // expr_function - S_expr_add_array = 149, // expr_add_array - S_expr_array = 150, // expr_array - S_expr_field = 151, // expr_field - S_expr_size = 152, // expr_size - S_object = 153, // object - S_thisthread = 154, // thisthread - S_empty_array = 155, // empty_array - S_undefined = 156, // undefined - S_game = 157, // game - S_self = 158, // self - S_anim = 159, // anim - S_level = 160, // level - S_animation = 161, // animation - S_animtree = 162, // animtree - S_name = 163, // name - S_file = 164, // file - S_istring = 165, // istring - S_string = 166, // string - S_vector = 167, // vector - S_neg_float = 168, // neg_float - S_neg_integer = 169, // neg_integer - S_float = 170, // float - S_integer = 171, // integer - S_false = 172, // false - S_true = 173 // true + S_QMARK = 51, // "?" + S_INCREMENT = 52, // "++" + S_DECREMENT = 53, // "--" + S_LSHIFT = 54, // "<<" + S_RSHIFT = 55, // ">>" + S_OR = 56, // "||" + S_AND = 57, // "&&" + S_EQUALITY = 58, // "==" + S_INEQUALITY = 59, // "!=" + S_LESS_EQUAL = 60, // "<=" + S_GREATER_EQUAL = 61, // ">=" + S_LESS = 62, // "<" + S_GREATER = 63, // ">" + S_NOT = 64, // "!" + S_COMPLEMENT = 65, // "~" + S_ASSIGN = 66, // "=" + S_ASSIGN_ADD = 67, // "+=" + S_ASSIGN_SUB = 68, // "-=" + S_ASSIGN_MULT = 69, // "*=" + S_ASSIGN_DIV = 70, // "/=" + S_ASSIGN_MOD = 71, // "%=" + S_ASSIGN_BITWISE_OR = 72, // "|=" + S_ASSIGN_BITWISE_AND = 73, // "&=" + S_ASSIGN_BITWISE_EXOR = 74, // "^=" + S_ASSIGN_RSHIFT = 75, // ">>=" + S_ASSIGN_LSHIFT = 76, // "<<=" + S_BITWISE_OR = 77, // "|" + S_BITWISE_AND = 78, // "&" + S_BITWISE_EXOR = 79, // "^" + S_ADD = 80, // "+" + S_SUB = 81, // "-" + S_MULT = 82, // "*" + S_DIV = 83, // "/" + S_MOD = 84, // "%" + S_FILE = 85, // "file path" + S_NAME = 86, // "identifier" + S_STRING = 87, // "string literal" + S_ISTRING = 88, // "localized string" + S_FLOAT = 89, // "float" + S_INTEGER = 90, // "int" + S_ADD_ARRAY = 91, // ADD_ARRAY + S_THEN = 92, // THEN + S_TERN = 93, // TERN + S_NEG = 94, // NEG + S_ANIMREF = 95, // ANIMREF + S_PREINC = 96, // PREINC + S_PREDEC = 97, // PREDEC + S_POSTINC = 98, // POSTINC + S_POSTDEC = 99, // POSTDEC + S_YYACCEPT = 100, // $accept + S_root = 101, // root + S_program = 102, // program + S_include = 103, // include + S_define = 104, // define + S_usingtree = 105, // usingtree + S_constant = 106, // constant + S_thread = 107, // thread + S_parameters = 108, // parameters + S_stmt = 109, // stmt + S_stmt_block = 110, // stmt_block + S_stmt_list = 111, // stmt_list + S_stmt_call = 112, // stmt_call + S_stmt_assign = 113, // stmt_assign + S_stmt_endon = 114, // stmt_endon + S_stmt_notify = 115, // stmt_notify + S_stmt_wait = 116, // stmt_wait + S_stmt_waittill = 117, // stmt_waittill + S_stmt_waittillmatch = 118, // stmt_waittillmatch + S_stmt_waittillframeend = 119, // stmt_waittillframeend + S_stmt_waitframe = 120, // stmt_waitframe + S_stmt_if = 121, // stmt_if + S_stmt_ifelse = 122, // stmt_ifelse + S_stmt_while = 123, // stmt_while + S_stmt_for = 124, // stmt_for + S_stmt_foreach = 125, // stmt_foreach + S_stmt_switch = 126, // stmt_switch + S_stmt_case = 127, // stmt_case + S_stmt_default = 128, // stmt_default + S_stmt_break = 129, // stmt_break + S_stmt_continue = 130, // stmt_continue + S_stmt_return = 131, // stmt_return + S_stmt_breakpoint = 132, // stmt_breakpoint + S_stmt_prof_begin = 133, // stmt_prof_begin + S_stmt_prof_end = 134, // stmt_prof_end + S_for_stmt = 135, // for_stmt + S_for_expr = 136, // for_expr + S_expr = 137, // expr + S_expr_assign = 138, // expr_assign + S_expr_compare = 139, // expr_compare + S_expr_ternary = 140, // expr_ternary + S_expr_binary = 141, // expr_binary + S_expr_primitive = 142, // expr_primitive + S_expr_call = 143, // expr_call + S_expr_call_thread = 144, // expr_call_thread + S_expr_call_childthread = 145, // expr_call_childthread + S_expr_call_function = 146, // expr_call_function + S_expr_call_pointer = 147, // expr_call_pointer + S_expr_arguments = 148, // expr_arguments + S_expr_arguments_filled = 149, // expr_arguments_filled + S_expr_arguments_empty = 150, // expr_arguments_empty + S_expr_function = 151, // expr_function + S_expr_add_array = 152, // expr_add_array + S_expr_array = 153, // expr_array + S_expr_field = 154, // expr_field + S_expr_size = 155, // expr_size + S_object = 156, // object + S_thisthread = 157, // thisthread + S_empty_array = 158, // empty_array + S_undefined = 159, // undefined + S_game = 160, // game + S_self = 161, // self + S_anim = 162, // anim + S_level = 163, // level + S_animation = 164, // animation + S_animtree = 165, // animtree + S_name = 166, // name + S_file = 167, // file + S_istring = 168, // istring + S_string = 169, // string + S_vector = 170, // vector + S_neg_float = 171, // neg_float + S_neg_integer = 172, // neg_integer + S_float = 173, // float + S_integer = 174, // integer + S_false = 175, // false + S_true = 176 // true }; }; @@ -1023,6 +1029,7 @@ namespace xsk { namespace gsc { namespace s1 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2117,6 +2124,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3241,6 +3249,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3856,6 +3879,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4290,8 +4328,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1646, ///< Last index in yytable_. - yynnts_ = 76, ///< Number of nonterminal symbols. + yylast_ = 1842, ///< Last index in yytable_. + yynnts_ = 77, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4367,6 +4405,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4647,6 +4686,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4913,7 +4953,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::s1 -#line 4917 "parser.hpp" +#line 4957 "parser.hpp" diff --git a/src/s2/xsk/assembler.cpp b/src/s2/xsk/assembler.cpp index 8dd3b538..ac4a540e 100644 --- a/src/s2/xsk/assembler.cpp +++ b/src/s2/xsk/assembler.cpp @@ -115,7 +115,6 @@ void assembler::assemble(const std::string& file, std::vector functions_ = std::move(functions); script_->write(static_cast(opcode::OP_End)); - stack_->write(0x69773630); for (const auto& func : functions_) { diff --git a/src/s2/xsk/compiler.cpp b/src/s2/xsk/compiler.cpp index 4ee5fc95..b7a01b91 100644 --- a/src/s2/xsk/compiler.cpp +++ b/src/s2/xsk/compiler.cpp @@ -409,7 +409,7 @@ void compiler::emit_stmt_while(const gsc::context_ptr& ctx, const gsc::stmt_whil ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -465,7 +465,7 @@ void compiler::emit_stmt_for(const gsc::context_ptr& ctx, const gsc::stmt_for_pt ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -540,7 +540,7 @@ void compiler::emit_stmt_foreach(const gsc::context_ptr& ctx, const gsc::stmt_fo ctx->local_vars_create_count = stmt->ctx->local_vars_create_count; - for(auto i = 0; i < ctx->local_vars_create_count; i++) + for(auto i = 0u; i < ctx->local_vars_create_count; i++) { if(!ctx->local_vars.at(i).init) ctx->local_vars.at(i).init = true; @@ -752,6 +752,7 @@ void compiler::emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr) { switch(expr.as_node->type) { + case gsc::node_t::expr_ternary: emit_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: emit_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: emit_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: emit_expr_binary(ctx, expr.as_binary); break; @@ -849,6 +850,30 @@ void compiler::emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_ass } } +void compiler::emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + auto else_loc = create_label(); + auto end_loc = create_label(); + + if(expr->cond.as_node->type == gsc::node_t::expr_not) + { + emit_expr(ctx, expr->cond.as_not->rvalue); + emit_opcode(ctx, opcode::OP_JumpOnTrue, else_loc); + } + else + { + emit_expr(ctx, expr->cond); + emit_opcode(ctx, opcode::OP_JumpOnFalse, else_loc); + } + + emit_expr(ctx, expr->lvalue); + emit_opcode(ctx, opcode::OP_jump, end_loc); + + insert_label(else_loc); + emit_expr(ctx, expr->rvalue); + insert_label(end_loc); +} + void compiler::emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { emit_expr(ctx, expr->lvalue); diff --git a/src/s2/xsk/compiler.hpp b/src/s2/xsk/compiler.hpp index af851f92..ef9a806e 100644 --- a/src/s2/xsk/compiler.hpp +++ b/src/s2/xsk/compiler.hpp @@ -68,6 +68,7 @@ private: void emit_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void emit_expr(const gsc::context_ptr& ctx, const gsc::expr_ptr& expr); void emit_expr_assign(const gsc::context_ptr& ctx, const gsc::expr_assign_ptr& expr); + void emit_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void emit_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void emit_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void emit_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/s2/xsk/decompiler.cpp b/src/s2/xsk/decompiler.cpp index af58f85d..c75e400c 100644 --- a/src/s2/xsk/decompiler.cpp +++ b/src/s2/xsk/decompiler.cpp @@ -96,6 +96,14 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) decompile_expr(); } } + + for(auto& entry : tern_labels_) + { + if(entry == itr->second) + { + decompile_ternary(); + } + } } switch (opcode(inst->opcode)) @@ -1833,6 +1841,7 @@ void decompiler::decompile_statements(const gsc::function_ptr& func) { auto expr = std::make_unique(loc, inst->data[0]); func_->block->stmts.push_back(gsc::stmt_ptr(std::move(expr))); + if(stack_.size() != 0) tern_labels_.push_back(inst->data[0]); } break; case opcode::OP_jumpback: @@ -1925,6 +1934,29 @@ void decompiler::decompile_expr() } } +void decompiler::decompile_ternary() +{ + auto rvalue = std::move(stack_.top()); + stack_.pop(); + auto lvalue = std::move(stack_.top()); + stack_.pop(); + + func_->block->stmts.pop_back(); + auto stmt = std::move(func_->block->stmts.back()); + func_->block->stmts.pop_back(); + + if(stmt.as_node->type == node_t::asm_jump_cond) + { + auto loc = stmt.as_cond->loc; + auto e = std::make_unique(loc, std::move(stmt.as_cond->expr), std::move(lvalue), std::move(rvalue)); + stack_.push(std::move(e)); + } + else + { + throw gsc::decomp_error("TRIED TO DECOMPILE INVALID TERNARY EXPR!"); + } +} + void decompiler::decompile_block(const gsc::stmt_list_ptr& block) { this->decompile_search_infinite(block); @@ -3015,6 +3047,7 @@ void decompiler::process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr) case gsc::node_t::expr_assign_bitwise_or: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_and: process_expr_assign(ctx, expr.as_assign); break; case gsc::node_t::expr_assign_bitwise_exor: process_expr_assign(ctx, expr.as_assign); break; + case gsc::node_t::expr_ternary: process_expr_ternary(ctx, expr.as_ternary); break; case gsc::node_t::expr_and: process_expr_and(ctx, expr.as_and); break; case gsc::node_t::expr_or: process_expr_or(ctx, expr.as_or); break; case gsc::node_t::expr_equality: process_expr_binary(ctx, expr.as_binary); break; @@ -3115,6 +3148,13 @@ void decompiler::process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assi } } +void decompiler::process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr) +{ + process_expr(ctx, expr->cond); + process_expr(ctx, expr->lvalue); + process_expr(ctx, expr->rvalue); +} + void decompiler::process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr) { process_expr(ctx, expr->lvalue); diff --git a/src/s2/xsk/decompiler.hpp b/src/s2/xsk/decompiler.hpp index a0989b38..253fd7f7 100644 --- a/src/s2/xsk/decompiler.hpp +++ b/src/s2/xsk/decompiler.hpp @@ -16,6 +16,7 @@ class decompiler : public gsc::decompiler gsc::thread_ptr func_; std::unordered_map labels_; std::vector expr_labels_; + std::vector tern_labels_; std::stack stack_; std::vector blocks_; @@ -27,6 +28,7 @@ private: void decompile_function(const gsc::function_ptr& func); void decompile_statements(const gsc::function_ptr& func); void decompile_expr(); + void decompile_ternary(); void decompile_block(const gsc::stmt_list_ptr& block); void decompile_search_infinite(const gsc::stmt_list_ptr& block); void decompile_search_loop(const gsc::stmt_list_ptr& block); @@ -68,6 +70,7 @@ private: void process_stmt_return(const gsc::context_ptr& ctx, const gsc::stmt_return_ptr& stmt); void process_expr(const gsc::context_ptr& ctx, gsc::expr_ptr& expr); void process_expr_assign(const gsc::context_ptr& ctx, gsc::expr_assign_ptr& expr); + void process_expr_ternary(const gsc::context_ptr& ctx, const gsc::expr_ternary_ptr& expr); void process_expr_binary(const gsc::context_ptr& ctx, const gsc::expr_binary_ptr& expr); void process_expr_and(const gsc::context_ptr& ctx, const gsc::expr_and_ptr& expr); void process_expr_or(const gsc::context_ptr& ctx, const gsc::expr_or_ptr& expr); diff --git a/src/s2/xsk/lexer.cpp b/src/s2/xsk/lexer.cpp index 1895a54c..c60cc5c8 100644 --- a/src/s2/xsk/lexer.cpp +++ b/src/s2/xsk/lexer.cpp @@ -553,8 +553,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yyg->yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 100 -#define YY_END_OF_BUFFER 101 +#define YY_NUM_RULES 101 +#define YY_END_OF_BUFFER 102 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -562,42 +562,42 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[305] = +static const flex_int16_t yy_accept[306] = { 0, - 0, 0, 0, 0, 0, 0, 101, 99, 1, 2, - 88, 99, 99, 87, 91, 99, 49, 50, 85, 83, - 55, 84, 56, 86, 98, 58, 59, 72, 82, 73, - 94, 53, 54, 92, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 51, 90, 52, 89, 5, 6, 5, 9, 10, 9, - 69, 0, 96, 0, 0, 0, 0, 78, 0, 67, - 0, 80, 0, 0, 76, 60, 74, 61, 75, 97, - 0, 8, 4, 3, 77, 97, 98, 0, 0, 57, - 64, 70, 68, 71, 65, 94, 81, 94, 94, 94, + 0, 0, 0, 0, 0, 0, 102, 100, 1, 2, + 89, 100, 100, 88, 92, 100, 49, 50, 86, 84, + 55, 85, 56, 87, 99, 58, 59, 73, 83, 74, + 60, 95, 53, 54, 93, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 51, 91, 52, 90, 5, 6, 5, 9, 10, + 9, 70, 0, 97, 0, 0, 0, 0, 79, 0, + 68, 0, 81, 0, 0, 77, 61, 75, 62, 76, + 98, 0, 8, 4, 3, 78, 98, 99, 0, 0, + 57, 65, 71, 69, 72, 66, 95, 82, 95, 95, - 94, 94, 94, 94, 94, 94, 94, 94, 25, 30, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 79, 66, 7, 11, 0, 96, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 96, 0, 97, - 0, 3, 97, 97, 93, 62, 63, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 28, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 0, 0, 0, 0, 95, 0, 0, 95, 0, - 0, 47, 94, 40, 32, 94, 94, 94, 26, 94, - 94, 94, 45, 94, 94, 94, 94, 46, 94, 94, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 25, + 30, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 80, 67, 7, 11, 0, 97, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 97, 0, + 98, 0, 3, 98, 98, 94, 63, 64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 28, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 0, 0, 0, 0, 96, 0, 0, 96, + 0, 0, 47, 95, 40, 32, 95, 95, 95, 26, + 95, 95, 95, 45, 95, 95, 95, 95, 46, 95, - 94, 41, 94, 20, 94, 0, 0, 0, 44, 34, - 94, 94, 94, 18, 42, 94, 48, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 27, 0, 0, 0, - 94, 94, 94, 94, 94, 19, 94, 94, 36, 31, - 94, 37, 94, 94, 94, 0, 0, 0, 94, 94, - 94, 33, 29, 94, 94, 94, 94, 94, 94, 0, - 15, 0, 94, 94, 35, 94, 14, 94, 94, 94, - 21, 17, 0, 94, 94, 94, 94, 43, 24, 94, - 94, 0, 12, 94, 13, 39, 94, 94, 0, 38, - 94, 94, 0, 94, 94, 0, 94, 22, 0, 94, + 95, 95, 41, 95, 20, 95, 0, 0, 0, 44, + 34, 95, 95, 95, 18, 42, 95, 48, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 27, 0, 0, + 0, 95, 95, 95, 95, 95, 19, 95, 95, 36, + 31, 95, 37, 95, 95, 95, 0, 0, 0, 95, + 95, 95, 33, 29, 95, 95, 95, 95, 95, 95, + 0, 15, 0, 95, 95, 35, 95, 14, 95, 95, + 95, 21, 17, 0, 95, 95, 95, 95, 43, 24, + 95, 95, 0, 12, 95, 13, 39, 95, 95, 0, + 38, 95, 95, 0, 95, 95, 0, 95, 22, 0, - 16, 94, 23, 0 + 95, 16, 95, 23, 0 } ; static const YY_CHAR yy_ec[256] = @@ -608,14 +608,14 @@ static const YY_CHAR yy_ec[256] = 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, + 22, 23, 24, 1, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 29, 30, 1, 31, 32, 33, 34, - 34, 35, 36, 37, 38, 24, 39, 40, 41, 42, - 43, 44, 24, 45, 46, 47, 48, 49, 50, 24, - 51, 52, 53, 54, 55, 56, 1, 1, 1, 1, + 35, 36, 37, 38, 39, 25, 40, 41, 42, 43, + 44, 45, 25, 46, 47, 48, 49, 50, 51, 25, + 52, 53, 54, 55, 56, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -632,240 +632,240 @@ static const YY_CHAR yy_ec[256] = 1, 1, 1, 1, 1 } ; -static const YY_CHAR yy_meta[57] = +static const YY_CHAR yy_meta[58] = { 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, + 1, 1, 1, 1, 4, 1, 5, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1 + 4, 4, 4, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[319] = +static const flex_int16_t yy_base[320] = { 0, - 0, 0, 54, 55, 56, 57, 574, 575, 575, 575, - 551, 56, 35, 550, 63, 55, 575, 575, 549, 56, - 575, 55, 56, 74, 71, 551, 575, 54, 547, 70, - 542, 575, 575, 545, 53, 58, 64, 72, 73, 74, - 79, 84, 82, 85, 86, 88, 95, 97, 94, 107, - 575, 96, 575, 575, 575, 575, 549, 575, 575, 548, - 575, 120, 575, 127, 522, 521, 516, 575, 122, 575, - 115, 575, 126, 140, 575, 575, 575, 575, 575, 120, - 523, 575, 575, 0, 575, 121, 141, 135, 0, 575, - 538, 575, 575, 575, 537, 532, 575, 132, 128, 134, + 0, 0, 55, 56, 57, 58, 575, 576, 576, 576, + 552, 57, 34, 551, 66, 60, 576, 576, 550, 57, + 576, 63, 48, 74, 74, 552, 576, 55, 548, 59, + 576, 542, 576, 576, 546, 62, 66, 71, 72, 67, + 73, 87, 70, 76, 89, 92, 93, 94, 96, 97, + 99, 576, 100, 576, 576, 576, 576, 550, 576, 576, + 549, 576, 120, 576, 136, 522, 521, 516, 576, 122, + 576, 123, 576, 126, 143, 576, 576, 576, 576, 576, + 118, 523, 576, 576, 0, 576, 125, 140, 132, 0, + 576, 539, 576, 576, 576, 538, 532, 576, 130, 133, - 137, 139, 138, 142, 114, 143, 145, 146, 531, 530, - 150, 151, 152, 153, 156, 159, 163, 158, 160, 165, - 166, 575, 575, 575, 575, 189, 197, 202, 517, 522, - 515, 204, 575, 207, 205, 208, 209, 210, 213, 575, - 500, 0, 202, 575, 525, 575, 575, 199, 212, 187, - 195, 206, 198, 217, 215, 218, 222, 224, 225, 226, - 227, 228, 229, 231, 236, 230, 238, 241, 244, 243, - 245, 509, 509, 506, 268, 269, 276, 271, 273, 283, - 513, 520, 261, 519, 518, 258, 263, 262, 517, 270, - 272, 277, 516, 278, 279, 282, 287, 515, 289, 290, + 124, 135, 137, 139, 145, 149, 146, 150, 151, 531, + 530, 152, 155, 154, 157, 158, 161, 162, 163, 170, + 167, 168, 576, 576, 576, 576, 186, 204, 211, 517, + 522, 515, 205, 576, 212, 202, 215, 210, 213, 217, + 576, 500, 0, 205, 576, 525, 576, 576, 194, 203, + 206, 200, 216, 198, 218, 221, 223, 224, 225, 226, + 227, 231, 228, 232, 236, 238, 241, 239, 242, 248, + 246, 249, 509, 509, 506, 273, 274, 277, 275, 276, + 284, 513, 520, 104, 519, 518, 262, 268, 264, 517, + 265, 270, 279, 516, 271, 282, 287, 288, 515, 289, - 293, 514, 291, 294, 296, 492, 490, 501, 575, 298, - 299, 301, 305, 510, 509, 302, 508, 307, 313, 309, - 312, 322, 324, 314, 310, 327, 507, 487, 498, 501, - 328, 330, 334, 336, 335, 503, 340, 337, 502, 501, - 342, 500, 338, 343, 344, 491, 490, 493, 350, 349, - 351, 496, 495, 355, 360, 363, 364, 366, 369, 486, - 575, 477, 370, 374, 492, 373, 491, 375, 377, 380, - 378, 575, 478, 376, 390, 389, 391, 489, 488, 392, - 395, 472, 486, 396, 472, 424, 400, 401, 402, 421, - 402, 406, 397, 407, 408, 406, 410, 352, 259, 409, + 272, 292, 514, 294, 297, 300, 492, 490, 501, 576, + 298, 299, 301, 305, 510, 509, 304, 508, 302, 321, + 309, 311, 312, 324, 328, 313, 330, 507, 487, 498, + 501, 333, 334, 314, 335, 337, 503, 338, 339, 502, + 501, 341, 500, 343, 347, 344, 491, 490, 493, 349, + 352, 354, 496, 495, 353, 357, 365, 366, 367, 369, + 486, 576, 477, 368, 370, 492, 375, 491, 372, 379, + 377, 380, 576, 478, 381, 388, 390, 391, 489, 488, + 393, 396, 472, 473, 394, 425, 424, 399, 397, 402, + 422, 404, 405, 398, 407, 409, 405, 408, 315, 193, - 575, 413, 200, 575, 451, 456, 461, 466, 469, 471, - 476, 481, 486, 491, 496, 84, 501, 506 + 410, 576, 414, 159, 576, 453, 458, 463, 468, 471, + 473, 478, 483, 488, 493, 498, 68, 503, 508 } ; -static const flex_int16_t yy_def[319] = +static const flex_int16_t yy_def[320] = { 0, - 304, 1, 305, 305, 306, 306, 304, 304, 304, 304, - 304, 307, 304, 304, 304, 308, 304, 304, 304, 304, - 304, 304, 304, 304, 309, 304, 304, 304, 304, 304, - 310, 304, 304, 304, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 307, 304, 311, 304, 304, 304, 304, 312, 304, - 313, 304, 308, 314, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 315, 304, 304, 309, 309, 316, 304, - 304, 304, 304, 304, 304, 310, 304, 310, 310, 310, + 305, 1, 306, 306, 307, 307, 305, 305, 305, 305, + 305, 308, 305, 305, 305, 309, 305, 305, 305, 305, + 305, 305, 305, 305, 310, 305, 305, 305, 305, 305, + 305, 311, 305, 305, 305, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 308, 305, 312, 305, 305, 305, 305, 313, + 305, 314, 305, 309, 315, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 316, 305, 305, 310, 310, 317, + 305, 305, 305, 305, 305, 305, 311, 305, 311, 311, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 304, 307, 307, 311, 304, 304, - 304, 312, 304, 317, 313, 318, 308, 308, 314, 304, - 304, 315, 304, 304, 316, 304, 304, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 304, 312, 312, 317, 313, 313, 318, - 304, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 305, 308, 308, 312, 305, + 305, 305, 313, 305, 318, 314, 319, 309, 309, 315, + 305, 305, 316, 305, 305, 317, 305, 305, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 305, 313, 313, 318, 314, 314, + 319, 305, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 310, 310, 310, 310, 310, 304, 304, 304, 304, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 304, 304, 304, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 310, 310, 310, 310, 304, 304, 304, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, 310, 304, - 304, 304, 310, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 304, 310, 310, 310, 310, 310, 310, 310, - 310, 304, 310, 310, 310, 310, 310, 310, 304, 310, - 310, 310, 304, 310, 310, 304, 310, 310, 304, 310, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 305, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 305, 305, + 305, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 305, 305, 305, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 305, 305, 305, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 305, 311, 311, 311, 311, 311, 311, + 311, 311, 305, 311, 311, 311, 311, 311, 311, 305, + 311, 311, 311, 305, 311, 311, 305, 311, 311, 305, - 304, 310, 310, 0, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304 + 311, 305, 311, 311, 0, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305 } ; -static const flex_int16_t yy_nxt[632] = +static const flex_int16_t yy_nxt[634] = { 0, 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, 8, 33, 34, 31, 35, - 36, 37, 38, 39, 40, 41, 31, 42, 31, 43, - 31, 44, 31, 45, 46, 47, 48, 49, 31, 50, - 31, 31, 51, 52, 53, 54, 56, 56, 59, 59, - 63, 60, 60, 63, 65, 57, 57, 69, 76, 78, - 70, 71, 66, 80, 91, 92, 79, 77, 89, 82, - 74, 64, 67, 89, 72, 83, 86, 145, 87, 89, - 84, 94, 95, 100, 98, 85, 89, 89, 89, 89, + 28, 29, 30, 31, 32, 33, 8, 34, 35, 32, + 36, 37, 38, 39, 40, 41, 42, 32, 43, 32, + 44, 32, 45, 32, 46, 47, 48, 49, 50, 32, + 51, 32, 32, 52, 53, 54, 55, 57, 57, 60, + 60, 64, 61, 61, 66, 81, 58, 58, 64, 77, + 70, 146, 67, 71, 72, 92, 93, 79, 78, 83, + 95, 96, 68, 65, 80, 84, 75, 73, 90, 87, + 85, 88, 90, 90, 82, 86, 90, 90, 90, 90, - 101, 81, 99, 106, 89, 103, 102, 89, 108, 89, - 89, 89, 104, 89, 105, 111, 107, 122, 109, 89, - 89, 114, 89, 133, 63, 110, 133, 112, 115, 62, - 113, 127, 89, 117, 63, 119, 120, 80, 143, 89, - 136, 118, 73, 121, 116, 64, 156, 134, 138, 123, - 304, 74, 128, 89, 140, 144, 86, 89, 87, 89, - 89, 149, 89, 89, 89, 139, 89, 89, 89, 148, - 89, 89, 154, 150, 152, 89, 89, 89, 89, 151, - 153, 89, 157, 89, 89, 89, 159, 155, 89, 158, - 89, 89, 169, 63, 162, 164, 165, 161, 160, 163, + 90, 101, 90, 107, 99, 110, 104, 105, 102, 106, + 112, 100, 111, 90, 103, 90, 108, 109, 90, 90, + 90, 123, 90, 90, 64, 90, 134, 115, 116, 121, + 90, 134, 113, 118, 64, 81, 122, 114, 63, 120, + 128, 119, 144, 211, 117, 74, 65, 305, 135, 137, + 90, 139, 75, 141, 124, 87, 90, 88, 90, 90, + 145, 90, 129, 90, 151, 90, 90, 150, 149, 140, + 152, 90, 90, 153, 155, 90, 90, 90, 90, 154, + 90, 90, 157, 90, 90, 90, 158, 90, 90, 90, + 64, 156, 160, 90, 90, 159, 90, 163, 165, 166, - 166, 63, 170, 171, 62, 168, 127, 167, 133, 132, - 135, 176, 89, 133, 64, 73, 179, 63, 63, 143, - 89, 138, 64, 89, 89, 89, 184, 128, 185, 134, - 136, 89, 177, 180, 74, 74, 144, 89, 139, 182, - 89, 183, 89, 89, 187, 186, 188, 89, 189, 89, - 89, 89, 89, 89, 89, 89, 89, 192, 193, 194, - 190, 89, 196, 89, 195, 198, 89, 191, 89, 89, - 89, 201, 133, 133, 202, 200, 197, 203, 132, 133, - 176, 133, 199, 89, 205, 135, 89, 89, 89, 204, - 211, 179, 301, 134, 134, 89, 136, 89, 136, 210, + 167, 161, 162, 170, 164, 171, 172, 168, 64, 134, + 134, 169, 65, 63, 133, 128, 177, 136, 64, 74, + 90, 64, 144, 180, 90, 139, 90, 302, 137, 90, + 65, 135, 90, 184, 186, 183, 75, 129, 178, 75, + 145, 181, 90, 140, 90, 188, 185, 90, 189, 90, + 90, 90, 90, 90, 90, 190, 187, 90, 90, 193, + 194, 195, 90, 197, 90, 90, 191, 90, 90, 196, + 192, 199, 90, 202, 90, 90, 203, 134, 134, 133, + 198, 177, 204, 134, 134, 200, 136, 201, 90, 206, + 90, 90, 180, 205, 90, 212, 90, 90, 90, 135, - 212, 177, 89, 89, 89, 215, 216, 89, 180, 213, - 219, 214, 89, 218, 89, 89, 89, 217, 89, 89, - 221, 89, 223, 89, 89, 224, 89, 89, 225, 227, - 89, 220, 89, 235, 89, 89, 222, 89, 89, 89, - 226, 231, 233, 237, 234, 232, 238, 89, 240, 89, - 239, 243, 89, 89, 244, 89, 242, 236, 241, 89, - 89, 89, 89, 89, 245, 89, 250, 89, 89, 89, - 249, 253, 258, 254, 89, 89, 89, 89, 255, 257, - 89, 251, 252, 259, 265, 89, 256, 263, 89, 89, - 266, 89, 267, 264, 89, 89, 268, 269, 89, 89, + 135, 137, 137, 178, 216, 90, 213, 215, 90, 217, + 181, 218, 214, 90, 90, 90, 220, 219, 90, 223, + 90, 222, 224, 90, 90, 90, 90, 90, 90, 225, + 90, 90, 226, 221, 228, 90, 236, 90, 90, 90, + 90, 90, 232, 234, 227, 235, 233, 90, 241, 242, + 90, 240, 238, 237, 90, 239, 90, 243, 245, 90, + 90, 90, 252, 90, 90, 90, 244, 90, 246, 90, + 90, 251, 255, 90, 254, 90, 250, 259, 90, 90, + 90, 256, 253, 90, 260, 258, 257, 264, 266, 267, + 268, 90, 90, 90, 90, 90, 90, 265, 90, 269, - 89, 89, 89, 89, 277, 89, 270, 275, 271, 278, - 276, 274, 280, 279, 89, 89, 89, 89, 281, 284, - 89, 89, 283, 286, 288, 89, 89, 89, 290, 291, - 285, 89, 89, 89, 89, 89, 287, 295, 89, 299, - 297, 296, 294, 300, 298, 303, 89, 292, 293, 89, - 302, 55, 55, 55, 55, 55, 58, 58, 58, 58, - 58, 62, 62, 62, 62, 62, 73, 73, 73, 73, - 73, 88, 88, 88, 96, 96, 126, 126, 126, 126, - 126, 132, 132, 132, 132, 132, 135, 135, 135, 135, - 135, 137, 137, 137, 137, 137, 142, 89, 142, 142, + 270, 90, 278, 90, 276, 90, 90, 90, 271, 272, + 275, 280, 279, 277, 90, 281, 90, 90, 285, 90, + 90, 282, 90, 90, 287, 90, 289, 291, 284, 292, + 90, 90, 286, 90, 90, 90, 90, 296, 288, 300, + 90, 298, 301, 297, 293, 295, 299, 304, 90, 294, + 90, 90, 303, 56, 56, 56, 56, 56, 59, 59, + 59, 59, 59, 63, 63, 63, 63, 63, 74, 74, + 74, 74, 74, 89, 89, 89, 97, 97, 127, 127, + 127, 127, 127, 133, 133, 133, 133, 133, 136, 136, + 136, 136, 136, 138, 138, 138, 138, 138, 143, 90, - 142, 175, 175, 175, 175, 175, 178, 178, 178, 178, - 178, 89, 289, 89, 89, 282, 89, 89, 273, 272, - 89, 89, 262, 261, 260, 89, 89, 89, 89, 248, - 247, 246, 89, 89, 89, 89, 230, 229, 228, 89, - 89, 89, 89, 89, 89, 89, 209, 208, 207, 206, - 89, 181, 174, 173, 172, 89, 89, 89, 147, 146, - 141, 131, 130, 129, 125, 124, 97, 89, 93, 90, - 75, 68, 61, 304, 7, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 143, 143, 143, 176, 176, 176, 176, 176, 179, 179, + 179, 179, 179, 290, 90, 90, 283, 90, 90, 274, + 273, 90, 90, 263, 262, 261, 90, 90, 90, 90, + 249, 248, 247, 90, 90, 90, 90, 231, 230, 229, + 90, 90, 90, 90, 90, 90, 90, 210, 209, 208, + 207, 90, 182, 175, 174, 173, 90, 90, 90, 148, + 147, 142, 132, 131, 130, 126, 125, 98, 90, 94, + 91, 76, 69, 62, 305, 7, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; -static const flex_int16_t yy_chk[632] = +static const flex_int16_t yy_chk[634] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 4, 5, 6, - 12, 5, 6, 16, 13, 3, 4, 15, 20, 22, - 15, 15, 13, 23, 28, 28, 22, 20, 35, 24, - 16, 12, 13, 36, 15, 24, 25, 316, 25, 37, - 24, 30, 30, 37, 35, 24, 25, 38, 39, 40, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 5, + 6, 12, 5, 6, 13, 23, 3, 4, 16, 20, + 15, 317, 13, 15, 15, 28, 28, 22, 20, 24, + 30, 30, 13, 12, 22, 24, 16, 15, 36, 25, + 24, 25, 37, 40, 23, 24, 43, 38, 39, 41, - 37, 23, 36, 40, 41, 38, 37, 43, 41, 42, - 44, 45, 39, 46, 39, 43, 40, 52, 42, 49, - 47, 46, 48, 71, 62, 42, 69, 44, 47, 64, - 45, 64, 50, 48, 73, 49, 50, 80, 86, 105, - 71, 48, 74, 50, 47, 62, 105, 69, 74, 52, - 88, 73, 64, 99, 80, 86, 87, 98, 87, 100, - 88, 99, 101, 103, 102, 74, 87, 104, 106, 98, - 107, 108, 103, 100, 101, 111, 112, 113, 114, 100, - 102, 115, 106, 118, 116, 119, 108, 104, 117, 107, - 120, 121, 119, 126, 113, 115, 116, 112, 111, 114, + 25, 38, 44, 41, 36, 43, 39, 40, 38, 40, + 44, 37, 43, 42, 38, 45, 41, 42, 46, 47, + 48, 53, 49, 50, 63, 51, 70, 47, 48, 51, + 184, 72, 45, 49, 74, 81, 51, 46, 65, 50, + 65, 49, 87, 184, 48, 75, 63, 89, 70, 72, + 101, 75, 74, 81, 53, 88, 99, 88, 89, 100, + 87, 102, 65, 103, 101, 104, 88, 100, 99, 75, + 101, 105, 107, 102, 104, 106, 108, 109, 112, 103, + 114, 113, 106, 115, 116, 304, 107, 117, 118, 119, + 127, 105, 109, 121, 122, 108, 120, 114, 116, 117, - 117, 127, 120, 121, 128, 118, 128, 117, 132, 134, - 136, 134, 150, 135, 126, 139, 136, 137, 138, 143, - 151, 139, 127, 153, 148, 303, 150, 128, 151, 132, - 135, 152, 134, 136, 137, 138, 143, 149, 139, 148, - 155, 149, 154, 156, 153, 152, 154, 157, 155, 158, - 159, 160, 161, 162, 163, 166, 164, 158, 159, 160, - 156, 165, 162, 167, 161, 164, 168, 157, 170, 169, - 171, 167, 175, 176, 168, 166, 163, 169, 177, 178, - 177, 179, 165, 186, 171, 180, 183, 188, 187, 170, - 186, 180, 299, 175, 176, 190, 178, 191, 179, 183, + 118, 112, 113, 120, 115, 121, 122, 118, 128, 133, + 136, 119, 127, 129, 135, 129, 135, 137, 138, 140, + 149, 139, 144, 137, 154, 140, 152, 300, 136, 150, + 128, 133, 151, 150, 152, 149, 138, 129, 135, 139, + 144, 137, 153, 140, 155, 154, 151, 156, 155, 157, + 158, 159, 160, 161, 163, 156, 153, 162, 164, 159, + 160, 161, 165, 163, 166, 168, 157, 167, 169, 162, + 158, 165, 171, 168, 170, 172, 169, 176, 177, 178, + 164, 178, 170, 179, 180, 166, 181, 167, 187, 172, + 189, 191, 181, 171, 188, 187, 192, 195, 201, 176, - 187, 177, 192, 194, 195, 191, 192, 196, 180, 188, - 196, 190, 197, 195, 199, 200, 203, 194, 201, 204, - 199, 205, 201, 210, 211, 203, 212, 216, 204, 205, - 213, 197, 218, 216, 220, 225, 200, 221, 219, 224, - 204, 210, 212, 219, 213, 211, 219, 222, 221, 223, - 220, 224, 226, 231, 225, 232, 223, 218, 222, 233, - 235, 234, 238, 243, 226, 237, 232, 241, 244, 245, - 231, 235, 244, 237, 250, 249, 251, 298, 238, 243, - 254, 233, 234, 245, 251, 255, 241, 249, 256, 257, - 254, 258, 255, 250, 259, 263, 256, 257, 266, 264, + 177, 179, 180, 178, 192, 193, 188, 191, 196, 193, + 181, 195, 189, 197, 198, 200, 197, 196, 202, 201, + 204, 200, 202, 205, 211, 212, 206, 213, 219, 204, + 217, 214, 205, 198, 206, 221, 217, 222, 223, 226, + 234, 299, 211, 213, 205, 214, 212, 220, 222, 223, + 224, 221, 220, 219, 225, 220, 227, 224, 226, 232, + 233, 235, 234, 236, 238, 239, 225, 242, 227, 244, + 246, 233, 238, 245, 236, 250, 232, 245, 251, 255, + 252, 239, 235, 256, 246, 244, 242, 250, 252, 255, + 256, 257, 258, 259, 264, 260, 265, 251, 269, 257, - 268, 274, 269, 271, 268, 270, 258, 264, 259, 269, - 266, 263, 271, 270, 276, 275, 277, 280, 271, 275, - 281, 284, 274, 277, 281, 287, 288, 291, 284, 287, - 276, 292, 294, 295, 300, 297, 280, 292, 302, 296, - 294, 293, 291, 297, 295, 302, 290, 288, 289, 286, - 300, 305, 305, 305, 305, 305, 306, 306, 306, 306, - 306, 307, 307, 307, 307, 307, 308, 308, 308, 308, - 308, 309, 309, 309, 310, 310, 311, 311, 311, 311, - 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, - 313, 314, 314, 314, 314, 314, 315, 285, 315, 315, + 258, 267, 269, 271, 265, 270, 272, 275, 259, 260, + 264, 271, 270, 267, 276, 272, 277, 278, 276, 281, + 285, 272, 282, 289, 278, 288, 282, 285, 275, 288, + 292, 293, 277, 295, 298, 296, 301, 293, 281, 297, + 303, 295, 298, 294, 289, 292, 296, 303, 291, 290, + 287, 286, 301, 306, 306, 306, 306, 306, 307, 307, + 307, 307, 307, 308, 308, 308, 308, 308, 309, 309, + 309, 309, 309, 310, 310, 310, 311, 311, 312, 312, + 312, 312, 312, 313, 313, 313, 313, 313, 314, 314, + 314, 314, 314, 315, 315, 315, 315, 315, 316, 284, - 315, 317, 317, 317, 317, 317, 318, 318, 318, 318, - 318, 283, 282, 279, 278, 273, 267, 265, 262, 260, - 253, 252, 248, 247, 246, 242, 240, 239, 236, 230, - 229, 228, 227, 217, 215, 214, 208, 207, 206, 202, - 198, 193, 189, 185, 184, 182, 181, 174, 173, 172, - 145, 141, 131, 130, 129, 110, 109, 96, 95, 91, - 81, 67, 66, 65, 60, 57, 34, 31, 29, 26, - 19, 14, 11, 7, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 316, 316, 316, 318, 318, 318, 318, 318, 319, 319, + 319, 319, 319, 283, 280, 279, 274, 268, 266, 263, + 261, 254, 253, 249, 248, 247, 243, 241, 240, 237, + 231, 230, 229, 228, 218, 216, 215, 209, 208, 207, + 203, 199, 194, 190, 186, 185, 183, 182, 175, 174, + 173, 146, 142, 132, 131, 130, 111, 110, 97, 96, + 92, 82, 68, 67, 66, 61, 58, 35, 32, 29, + 26, 19, 14, 11, 7, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, - 304 + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305 } ; /* The intent behind this definition is that it'll catch @@ -1183,13 +1183,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 304 ); + while ( yy_current_state != 305 ); yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; @@ -1510,218 +1510,223 @@ YY_RULE_SETUP case 60: YY_RULE_SETUP #line 107 "lexer.lpp" -{ return s2::parser::make_INCREMENT(loc); } +{ return s2::parser::make_QMARK(loc); } YY_BREAK case 61: YY_RULE_SETUP #line 108 "lexer.lpp" -{ return s2::parser::make_DECREMENT(loc); } +{ return s2::parser::make_INCREMENT(loc); } YY_BREAK case 62: YY_RULE_SETUP #line 109 "lexer.lpp" -{ return s2::parser::make_ASSIGN_LSHIFT(loc); } +{ return s2::parser::make_DECREMENT(loc); } YY_BREAK case 63: YY_RULE_SETUP #line 110 "lexer.lpp" -{ return s2::parser::make_ASSIGN_RSHIFT(loc); } +{ return s2::parser::make_ASSIGN_LSHIFT(loc); } YY_BREAK case 64: YY_RULE_SETUP #line 111 "lexer.lpp" -{ return s2::parser::make_LSHIFT(loc); } +{ return s2::parser::make_ASSIGN_RSHIFT(loc); } YY_BREAK case 65: YY_RULE_SETUP #line 112 "lexer.lpp" -{ return s2::parser::make_RSHIFT(loc); } +{ return s2::parser::make_LSHIFT(loc); } YY_BREAK case 66: YY_RULE_SETUP #line 113 "lexer.lpp" -{ return s2::parser::make_OR(loc); } +{ return s2::parser::make_RSHIFT(loc); } YY_BREAK case 67: YY_RULE_SETUP #line 114 "lexer.lpp" -{ return s2::parser::make_AND(loc); } +{ return s2::parser::make_OR(loc); } YY_BREAK case 68: YY_RULE_SETUP #line 115 "lexer.lpp" -{ return s2::parser::make_EQUALITY(loc); } +{ return s2::parser::make_AND(loc); } YY_BREAK case 69: YY_RULE_SETUP #line 116 "lexer.lpp" -{ return s2::parser::make_INEQUALITY(loc); } +{ return s2::parser::make_EQUALITY(loc); } YY_BREAK case 70: YY_RULE_SETUP #line 117 "lexer.lpp" -{ return s2::parser::make_LESS_EQUAL(loc); } +{ return s2::parser::make_INEQUALITY(loc); } YY_BREAK case 71: YY_RULE_SETUP #line 118 "lexer.lpp" -{ return s2::parser::make_GREATER_EQUAL(loc); } +{ return s2::parser::make_LESS_EQUAL(loc); } YY_BREAK case 72: YY_RULE_SETUP #line 119 "lexer.lpp" -{ return s2::parser::make_LESS(loc); } +{ return s2::parser::make_GREATER_EQUAL(loc); } YY_BREAK case 73: YY_RULE_SETUP #line 120 "lexer.lpp" -{ return s2::parser::make_GREATER(loc); } +{ return s2::parser::make_LESS(loc); } YY_BREAK case 74: YY_RULE_SETUP #line 121 "lexer.lpp" -{ return s2::parser::make_ASSIGN_ADD(loc); } +{ return s2::parser::make_GREATER(loc); } YY_BREAK case 75: YY_RULE_SETUP #line 122 "lexer.lpp" -{ return s2::parser::make_ASSIGN_SUB(loc); } +{ return s2::parser::make_ASSIGN_ADD(loc); } YY_BREAK case 76: YY_RULE_SETUP #line 123 "lexer.lpp" -{ return s2::parser::make_ASSIGN_MULT(loc); } +{ return s2::parser::make_ASSIGN_SUB(loc); } YY_BREAK case 77: YY_RULE_SETUP #line 124 "lexer.lpp" -{ return s2::parser::make_ASSIGN_DIV(loc); } +{ return s2::parser::make_ASSIGN_MULT(loc); } YY_BREAK case 78: YY_RULE_SETUP #line 125 "lexer.lpp" -{ return s2::parser::make_ASSIGN_MOD(loc); } +{ return s2::parser::make_ASSIGN_DIV(loc); } YY_BREAK case 79: YY_RULE_SETUP #line 126 "lexer.lpp" -{ return s2::parser::make_ASSIGN_BITWISE_OR(loc); } +{ return s2::parser::make_ASSIGN_MOD(loc); } YY_BREAK case 80: YY_RULE_SETUP #line 127 "lexer.lpp" -{ return s2::parser::make_ASSIGN_BITWISE_AND(loc); } +{ return s2::parser::make_ASSIGN_BITWISE_OR(loc); } YY_BREAK case 81: YY_RULE_SETUP #line 128 "lexer.lpp" -{ return s2::parser::make_ASSIGN_BITWISE_EXOR(loc); } +{ return s2::parser::make_ASSIGN_BITWISE_AND(loc); } YY_BREAK case 82: YY_RULE_SETUP #line 129 "lexer.lpp" -{ return s2::parser::make_ASSIGN(loc); } +{ return s2::parser::make_ASSIGN_BITWISE_EXOR(loc); } YY_BREAK case 83: YY_RULE_SETUP #line 130 "lexer.lpp" -{ return s2::parser::make_ADD(loc); } +{ return s2::parser::make_ASSIGN(loc); } YY_BREAK case 84: YY_RULE_SETUP #line 131 "lexer.lpp" -{ return s2::parser::make_SUB(loc); } +{ return s2::parser::make_ADD(loc); } YY_BREAK case 85: YY_RULE_SETUP #line 132 "lexer.lpp" -{ return s2::parser::make_MULT(loc); } +{ return s2::parser::make_SUB(loc); } YY_BREAK case 86: YY_RULE_SETUP #line 133 "lexer.lpp" -{ return s2::parser::make_DIV(loc); } +{ return s2::parser::make_MULT(loc); } YY_BREAK case 87: YY_RULE_SETUP #line 134 "lexer.lpp" -{ return s2::parser::make_MOD(loc); } +{ return s2::parser::make_DIV(loc); } YY_BREAK case 88: YY_RULE_SETUP #line 135 "lexer.lpp" -{ return s2::parser::make_NOT(loc); } +{ return s2::parser::make_MOD(loc); } YY_BREAK case 89: YY_RULE_SETUP #line 136 "lexer.lpp" -{ return s2::parser::make_COMPLEMENT(loc); } +{ return s2::parser::make_NOT(loc); } YY_BREAK case 90: YY_RULE_SETUP #line 137 "lexer.lpp" -{ return s2::parser::make_BITWISE_OR(loc); } +{ return s2::parser::make_COMPLEMENT(loc); } YY_BREAK case 91: YY_RULE_SETUP #line 138 "lexer.lpp" -{ return s2::parser::make_BITWISE_AND(loc); } +{ return s2::parser::make_BITWISE_OR(loc); } YY_BREAK case 92: YY_RULE_SETUP #line 139 "lexer.lpp" -{ return s2::parser::make_BITWISE_EXOR(loc); } +{ return s2::parser::make_BITWISE_AND(loc); } YY_BREAK case 93: YY_RULE_SETUP #line 140 "lexer.lpp" -{ return s2::parser::make_FILE(utils::string::fordslash(yytext), loc); } +{ return s2::parser::make_BITWISE_EXOR(loc); } YY_BREAK case 94: YY_RULE_SETUP #line 141 "lexer.lpp" -{ return s2::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } +{ return s2::parser::make_FILE(utils::string::fordslash(yytext), loc); } YY_BREAK case 95: -/* rule 95 can match eol */ YY_RULE_SETUP #line 142 "lexer.lpp" -{ return s2::parser::make_ISTRING(std::string(yytext).substr(1), loc); } +{ return s2::parser::make_NAME((std::string(yytext, 3) == "_ID") ? std::string(yytext) : utils::string::to_lower(yytext), loc); } YY_BREAK case 96: /* rule 96 can match eol */ YY_RULE_SETUP #line 143 "lexer.lpp" -{ return s2::parser::make_STRING(std::string(yytext), loc); } +{ return s2::parser::make_ISTRING(std::string(yytext).substr(1), loc); } YY_BREAK case 97: +/* rule 97 can match eol */ YY_RULE_SETUP #line 144 "lexer.lpp" -{ return s2::parser::make_FLOAT(std::string(yytext), loc); } +{ return s2::parser::make_STRING(std::string(yytext), loc); } YY_BREAK case 98: YY_RULE_SETUP #line 145 "lexer.lpp" +{ return s2::parser::make_FLOAT(std::string(yytext), loc); } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 146 "lexer.lpp" { return s2::parser::make_INTEGER(std::string(yytext), loc); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMMENT_BLOCK_STATE): case YY_STATE_EOF(DEVELOPER_BLOCK_STATE): -#line 146 "lexer.lpp" +#line 147 "lexer.lpp" { return s2::parser::make_S2EOF(loc); } YY_BREAK -case 99: -/* rule 99 can match eol */ +case 100: +/* rule 100 can match eol */ YY_RULE_SETUP -#line 147 "lexer.lpp" +#line 148 "lexer.lpp" { throw s2::parser::syntax_error(loc, "bad token: \'" + std::string(yytext) + "\'"); } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" ECHO; YY_BREAK -#line 1724 "lexer.cpp" +#line 1729 "lexer.cpp" case YY_END_OF_BUFFER: { @@ -2019,7 +2024,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2048,11 +2053,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 305 ) + if ( yy_current_state >= 306 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 304); + yy_is_jam = (yy_current_state == 305); (void)yyg; return yy_is_jam ? 0 : yy_current_state; @@ -2851,6 +2856,6 @@ void yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" diff --git a/src/s2/xsk/lexer.hpp b/src/s2/xsk/lexer.hpp index d9dad53e..a934a9c5 100644 --- a/src/s2/xsk/lexer.hpp +++ b/src/s2/xsk/lexer.hpp @@ -700,7 +700,7 @@ extern int yylex (yyscan_t yyscanner); #undef yyTABLES_NAME #endif -#line 149 "lexer.lpp" +#line 150 "lexer.lpp" #line 706 "lexer.hpp" diff --git a/src/s2/xsk/parser.cpp b/src/s2/xsk/parser.cpp index 57d14bdb..227ba725 100644 --- a/src/s2/xsk/parser.cpp +++ b/src/s2/xsk/parser.cpp @@ -264,6 +264,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.YY_MOVE_OR_COPY< expr_ptr > (YY_MOVE (that.value)); @@ -530,6 +531,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (that.value)); @@ -796,6 +798,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (that.value); @@ -1061,6 +1064,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (that.value); @@ -1581,6 +1585,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive yylhs.value.emplace< expr_ptr > (); @@ -1805,1213 +1810,1225 @@ namespace xsk { namespace gsc { namespace s2 { switch (yyn) { case 2: // root: program -#line 239 "parser.ypp" +#line 243 "parser.ypp" { ast = std::move(yystack_[0].value.as < program_ptr > ()); } -#line 1811 "parser.cpp" +#line 1816 "parser.cpp" break; case 3: // root: %empty -#line 240 "parser.ypp" +#line 244 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1817 "parser.cpp" +#line 1822 "parser.cpp" break; case 4: // program: program include -#line 245 "parser.ypp" +#line 249 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1823 "parser.cpp" +#line 1828 "parser.cpp" break; case 5: // program: program define -#line 247 "parser.ypp" +#line 251 "parser.ypp" { yylhs.value.as < program_ptr > () = std::move(yystack_[1].value.as < program_ptr > ()); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1829 "parser.cpp" +#line 1834 "parser.cpp" break; case 6: // program: include -#line 249 "parser.ypp" +#line 253 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->includes.push_back(std::move(yystack_[0].value.as < include_ptr > ())); } -#line 1835 "parser.cpp" +#line 1840 "parser.cpp" break; case 7: // program: define -#line 251 "parser.ypp" +#line 255 "parser.ypp" { yylhs.value.as < program_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < program_ptr > ()->definitions.push_back(std::move(yystack_[0].value.as < define_ptr > ())); } -#line 1841 "parser.cpp" +#line 1846 "parser.cpp" break; case 8: // include: "#include" file ";" -#line 256 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < include_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < file_ptr > ())); } -#line 1847 "parser.cpp" +#line 1852 "parser.cpp" break; case 9: // define: usingtree -#line 260 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < define_ptr > ().as_usingtree = std::move(yystack_[0].value.as < usingtree_ptr > ()); } -#line 1853 "parser.cpp" +#line 1858 "parser.cpp" break; case 10: // define: constant -#line 261 "parser.ypp" +#line 265 "parser.ypp" { yylhs.value.as < define_ptr > ().as_constant = std::move(yystack_[0].value.as < constant_ptr > ()); } -#line 1859 "parser.cpp" +#line 1864 "parser.cpp" break; case 11: // define: thread -#line 262 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < define_ptr > ().as_thread = std::move(yystack_[0].value.as < thread_ptr > ()); } -#line 1865 "parser.cpp" +#line 1870 "parser.cpp" break; case 12: // usingtree: "#using_animtree" "(" string ")" ";" -#line 267 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < usingtree_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < string_ptr > ())); } -#line 1871 "parser.cpp" +#line 1876 "parser.cpp" break; case 13: // constant: name "=" expr ";" -#line 272 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < constant_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 1877 "parser.cpp" +#line 1882 "parser.cpp" break; case 14: // thread: name "(" parameters ")" stmt_block -#line 277 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < thread_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < name_ptr > ()), std::move(yystack_[2].value.as < parameters_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 1883 "parser.cpp" +#line 1888 "parser.cpp" break; case 15: // parameters: parameters "," name -#line 282 "parser.ypp" +#line 286 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::move(yystack_[2].value.as < parameters_ptr > ()); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1889 "parser.cpp" +#line 1894 "parser.cpp" break; case 16: // parameters: name -#line 284 "parser.ypp" +#line 288 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < parameters_ptr > ()->list.push_back(std::move(yystack_[0].value.as < name_ptr > ())); } -#line 1895 "parser.cpp" +#line 1900 "parser.cpp" break; case 17: // parameters: %empty -#line 286 "parser.ypp" +#line 290 "parser.ypp" { yylhs.value.as < parameters_ptr > () = std::make_unique(yylhs.location); } -#line 1901 "parser.cpp" +#line 1906 "parser.cpp" break; case 18: // stmt: stmt_block -#line 290 "parser.ypp" +#line 294 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::move(yystack_[0].value.as < stmt_list_ptr > ()); } -#line 1907 "parser.cpp" +#line 1912 "parser.cpp" break; case 19: // stmt: stmt_call -#line 291 "parser.ypp" +#line 295 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_call = std::move(yystack_[0].value.as < stmt_call_ptr > ()); } -#line 1913 "parser.cpp" +#line 1918 "parser.cpp" break; case 20: // stmt: stmt_assign -#line 292 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_assign = std::move(yystack_[0].value.as < stmt_assign_ptr > ()); } -#line 1919 "parser.cpp" +#line 1924 "parser.cpp" break; case 21: // stmt: stmt_endon -#line 293 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_endon = std::move(yystack_[0].value.as < stmt_endon_ptr > ()); } -#line 1925 "parser.cpp" +#line 1930 "parser.cpp" break; case 22: // stmt: stmt_notify -#line 294 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_notify = std::move(yystack_[0].value.as < stmt_notify_ptr > ()); } -#line 1931 "parser.cpp" +#line 1936 "parser.cpp" break; case 23: // stmt: stmt_wait -#line 295 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_wait = std::move(yystack_[0].value.as < stmt_wait_ptr > ()); } -#line 1937 "parser.cpp" +#line 1942 "parser.cpp" break; case 24: // stmt: stmt_waittill -#line 296 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittill = std::move(yystack_[0].value.as < stmt_waittill_ptr > ()); } -#line 1943 "parser.cpp" +#line 1948 "parser.cpp" break; case 25: // stmt: stmt_waittillmatch -#line 297 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillmatch = std::move(yystack_[0].value.as < stmt_waittillmatch_ptr > ()); } -#line 1949 "parser.cpp" +#line 1954 "parser.cpp" break; case 26: // stmt: stmt_waittillframeend -#line 298 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waittillframeend = std::move(yystack_[0].value.as < stmt_waittillframeend_ptr > ()); } -#line 1955 "parser.cpp" +#line 1960 "parser.cpp" break; case 27: // stmt: stmt_waitframe -#line 299 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_waitframe = std::move(yystack_[0].value.as < stmt_waitframe_ptr > ()); } -#line 1961 "parser.cpp" +#line 1966 "parser.cpp" break; case 28: // stmt: stmt_if -#line 300 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_if = std::move(yystack_[0].value.as < stmt_if_ptr > ()); } -#line 1967 "parser.cpp" +#line 1972 "parser.cpp" break; case 29: // stmt: stmt_ifelse -#line 301 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_ifelse = std::move(yystack_[0].value.as < stmt_ifelse_ptr > ()); } -#line 1973 "parser.cpp" +#line 1978 "parser.cpp" break; case 30: // stmt: stmt_while -#line 302 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_while = std::move(yystack_[0].value.as < stmt_while_ptr > ()); } -#line 1979 "parser.cpp" +#line 1984 "parser.cpp" break; case 31: // stmt: stmt_for -#line 303 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_for = std::move(yystack_[0].value.as < stmt_for_ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 32: // stmt: stmt_foreach -#line 304 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_foreach = std::move(yystack_[0].value.as < stmt_foreach_ptr > ()); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 33: // stmt: stmt_switch -#line 305 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_switch = std::move(yystack_[0].value.as < stmt_switch_ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 34: // stmt: stmt_case -#line 306 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_case = std::move(yystack_[0].value.as < stmt_case_ptr > ()); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 35: // stmt: stmt_default -#line 307 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_default = std::move(yystack_[0].value.as < stmt_default_ptr > ()); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 36: // stmt: stmt_break -#line 308 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_break = std::move(yystack_[0].value.as < stmt_break_ptr > ()); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 37: // stmt: stmt_continue -#line 309 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_continue = std::move(yystack_[0].value.as < stmt_continue_ptr > ()); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 38: // stmt: stmt_return -#line 310 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_return = std::move(yystack_[0].value.as < stmt_return_ptr > ()); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 39: // stmt: stmt_breakpoint -#line 311 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_breakpoint = std::move(yystack_[0].value.as < stmt_breakpoint_ptr > ()); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 40: // stmt: stmt_prof_begin -#line 312 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_begin = std::move(yystack_[0].value.as < stmt_prof_begin_ptr > ()); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 41: // stmt: stmt_prof_end -#line 313 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_prof_end = std::move(yystack_[0].value.as < stmt_prof_end_ptr > ()); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 42: // stmt_block: "{" stmt_list "}" -#line 317 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 43: // stmt_block: "{" "}" -#line 318 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 44: // stmt_list: stmt_list stmt -#line 323 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::move(yystack_[1].value.as < stmt_list_ptr > ()); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 45: // stmt_list: stmt -#line 325 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < stmt_list_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < stmt_list_ptr > ()->stmts.push_back(std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 46: // stmt_call: expr_call ";" -#line 330 "parser.ypp" +#line 334 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 47: // stmt_call: expr_call_thread ";" -#line 332 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < stmt_call_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_call_ptr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 48: // stmt_assign: expr_assign ";" -#line 337 "parser.ypp" +#line 341 "parser.ypp" { yylhs.value.as < stmt_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_assign_ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 49: // stmt_endon: object "endon" "(" expr ")" ";" -#line 342 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < stmt_endon_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ())); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 50: // stmt_notify: object "notify" "(" expr "," expr_arguments ")" ";" -#line 347 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 51: // stmt_notify: object "notify" "(" expr ")" ";" -#line 349 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < stmt_notify_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 52: // stmt_wait: "wait" expr ";" -#line 354 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < stmt_wait_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 53: // stmt_waittill: object "waittill" "(" expr "," expr_arguments ")" ";" -#line 359 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 54: // stmt_waittill: object "waittill" "(" expr ")" ";" -#line 361 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < stmt_waittill_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 55: // stmt_waittillmatch: object "waittillmatch" "(" expr "," expr_arguments ")" ";" -#line 366 "parser.ypp" +#line 370 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < node_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 56: // stmt_waittillmatch: object "waittillmatch" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < stmt_waittillmatch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < node_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::make_unique(yylhs.location)); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 57: // stmt_waittillframeend: "waittillframeend" ";" -#line 373 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < stmt_waittillframeend_ptr > () = std::make_unique(yylhs.location); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 58: // stmt_waitframe: "waitframe" ";" -#line 378 "parser.ypp" +#line 382 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 59: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 380 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < stmt_waitframe_ptr > () = std::make_unique(yylhs.location); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 60: // stmt_if: "if" "(" expr ")" stmt -#line 385 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < stmt_if_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 61: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 390 "parser.ypp" +#line 394 "parser.ypp" { yylhs.value.as < stmt_ifelse_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 62: // stmt_while: "while" "(" expr ")" stmt -#line 395 "parser.ypp" +#line 399 "parser.ypp" { yylhs.value.as < stmt_while_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 63: // stmt_for: "for" "(" for_stmt ";" for_expr ";" for_stmt ")" stmt -#line 400 "parser.ypp" +#line 404 "parser.ypp" { yylhs.value.as < stmt_for_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[6].value.as < stmt_ptr > ()), std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < stmt_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 64: // stmt_foreach: "foreach" "(" name "in" expr ")" stmt -#line 405 "parser.ypp" +#line 409 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 65: // stmt_foreach: "foreach" "(" name "," name "in" expr ")" stmt -#line 407 "parser.ypp" +#line 411 "parser.ypp" { yylhs.value.as < stmt_foreach_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[6].value.as < name_ptr > ())), expr_ptr(std::move(yystack_[4].value.as < name_ptr > ())), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_ptr > ())); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 66: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 412 "parser.ypp" +#line 416 "parser.ypp" { yylhs.value.as < stmt_switch_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < stmt_list_ptr > ())); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 67: // stmt_case: "case" integer ":" -#line 417 "parser.ypp" +#line 421 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 68: // stmt_case: "case" neg_integer ":" -#line 419 "parser.ypp" +#line 423 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < integer_ptr > ())), std::make_unique(yylhs.location)); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 69: // stmt_case: "case" string ":" -#line 421 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < stmt_case_ptr > () = std::make_unique(yylhs.location, expr_ptr(std::move(yystack_[1].value.as < string_ptr > ())), std::make_unique(yylhs.location)); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 70: // stmt_default: "default" ":" -#line 426 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < stmt_default_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 71: // stmt_break: "break" ";" -#line 431 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < stmt_break_ptr > () = std::make_unique(yylhs.location); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 72: // stmt_continue: "continue" ";" -#line 436 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < stmt_continue_ptr > () = std::make_unique(yylhs.location); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 73: // stmt_return: "return" expr ";" -#line 441 "parser.ypp" +#line 445 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 74: // stmt_return: "return" ";" -#line 443 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < stmt_return_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 75: // stmt_breakpoint: "breakpoint" ";" -#line 448 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < stmt_breakpoint_ptr > () = std::make_unique(yylhs.location); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 76: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 453 "parser.ypp" +#line 457 "parser.ypp" { yylhs.value.as < stmt_prof_begin_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 77: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 458 "parser.ypp" +#line 462 "parser.ypp" { yylhs.value.as < stmt_prof_end_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_arguments_ptr > ())); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 78: // for_stmt: expr_assign -#line 462 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_list = std::make_unique(yylhs.location); yylhs.value.as < stmt_ptr > ().as_list->stmts.push_back(stmt_ptr(std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_assign_ptr > ())))); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 79: // for_stmt: %empty -#line 463 "parser.ypp" +#line 467 "parser.ypp" { yylhs.value.as < stmt_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 80: // for_expr: expr -#line 467 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 81: // for_expr: %empty -#line 468 "parser.ypp" +#line 472 "parser.ypp" { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 82: // expr: expr_compare -#line 472 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; - case 83: // expr: expr_binary -#line 473 "parser.ypp" + case 83: // expr: expr_ternary +#line 477 "parser.ypp" { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; - case 84: // expr: expr_primitive -#line 474 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } -#line 2303 "parser.cpp" - break; - - case 85: // expr_assign: "++" object + case 84: // expr: expr_binary #line 478 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2309 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2308 "parser.cpp" break; - case 86: // expr_assign: "--" object + case 85: // expr: expr_primitive #line 479 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } -#line 2315 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[0].value.as < expr_ptr > ()); } +#line 2314 "parser.cpp" break; - case 87: // expr_assign: object "++" -#line 480 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2321 "parser.cpp" - break; - - case 88: // expr_assign: object "--" -#line 481 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2327 "parser.cpp" - break; - - case 89: // expr_assign: object "=" expr -#line 482 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2333 "parser.cpp" - break; - - case 90: // expr_assign: object "|=" expr + case 86: // expr_assign: "++" object #line 483 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2339 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2320 "parser.cpp" break; - case 91: // expr_assign: object "&=" expr + case 87: // expr_assign: "--" object #line 484 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2345 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < node_ptr > ())); } +#line 2326 "parser.cpp" break; - case 92: // expr_assign: object "^=" expr + case 88: // expr_assign: object "++" #line 485 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2351 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2332 "parser.cpp" break; - case 93: // expr_assign: object "<<=" expr + case 89: // expr_assign: object "--" #line 486 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } -#line 2357 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2338 "parser.cpp" break; - case 94: // expr_assign: object ">>=" expr + case 90: // expr_assign: object "=" expr #line 487 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2363 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2344 "parser.cpp" break; - case 95: // expr_assign: object "+=" expr + case 91: // expr_assign: object "|=" expr #line 488 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2369 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2350 "parser.cpp" break; - case 96: // expr_assign: object "-=" expr + case 92: // expr_assign: object "&=" expr #line 489 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2375 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2356 "parser.cpp" break; - case 97: // expr_assign: object "*=" expr + case 93: // expr_assign: object "^=" expr #line 490 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2381 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2362 "parser.cpp" break; - case 98: // expr_assign: object "/=" expr + case 94: // expr_assign: object "<<=" expr #line 491 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2387 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()),std::move( yystack_[0].value.as < expr_ptr > ())); } +#line 2368 "parser.cpp" break; - case 99: // expr_assign: object "%=" expr + case 95: // expr_assign: object ">>=" expr #line 492 "parser.ypp" - { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2393 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2374 "parser.cpp" break; - case 100: // expr_compare: expr "||" expr + case 96: // expr_assign: object "+=" expr +#line 493 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2380 "parser.cpp" + break; + + case 97: // expr_assign: object "-=" expr +#line 494 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2386 "parser.cpp" + break; + + case 98: // expr_assign: object "*=" expr +#line 495 "parser.ypp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2392 "parser.cpp" + break; + + case 99: // expr_assign: object "/=" expr #line 496 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2399 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2398 "parser.cpp" break; - case 101: // expr_compare: expr "&&" expr + case 100: // expr_assign: object "%=" expr #line 497 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2405 "parser.cpp" + { yylhs.value.as < expr_assign_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2404 "parser.cpp" break; - case 102: // expr_compare: expr "==" expr -#line 498 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2411 "parser.cpp" - break; - - case 103: // expr_compare: expr "!=" expr -#line 499 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2417 "parser.cpp" - break; - - case 104: // expr_compare: expr "<=" expr -#line 500 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2423 "parser.cpp" - break; - - case 105: // expr_compare: expr ">=" expr + case 101: // expr_compare: expr "||" expr #line 501 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2429 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2410 "parser.cpp" break; - case 106: // expr_compare: expr "<" expr + case 102: // expr_compare: expr "&&" expr #line 502 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2435 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2416 "parser.cpp" break; - case 107: // expr_compare: expr ">" expr + case 103: // expr_compare: expr "==" expr #line 503 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2441 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2422 "parser.cpp" break; - case 108: // expr_binary: expr "|" expr + case 104: // expr_compare: expr "!=" expr +#line 504 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2428 "parser.cpp" + break; + + case 105: // expr_compare: expr "<=" expr +#line 505 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2434 "parser.cpp" + break; + + case 106: // expr_compare: expr ">=" expr +#line 506 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2440 "parser.cpp" + break; + + case 107: // expr_compare: expr "<" expr #line 507 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2447 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2446 "parser.cpp" break; - case 109: // expr_binary: expr "&" expr + case 108: // expr_compare: expr ">" expr #line 508 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2453 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2452 "parser.cpp" break; - case 110: // expr_binary: expr "^" expr -#line 509 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2459 "parser.cpp" - break; - - case 111: // expr_binary: expr "<<" expr -#line 510 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2465 "parser.cpp" - break; - - case 112: // expr_binary: expr ">>" expr -#line 511 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2471 "parser.cpp" - break; - - case 113: // expr_binary: expr "+" expr + case 109: // expr_ternary: expr "?" expr ":" expr #line 512 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2477 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < expr_ptr > ()), std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2458 "parser.cpp" break; - case 114: // expr_binary: expr "-" expr -#line 513 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2483 "parser.cpp" - break; - - case 115: // expr_binary: expr "*" expr -#line 514 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2489 "parser.cpp" - break; - - case 116: // expr_binary: expr "/" expr -#line 515 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2495 "parser.cpp" - break; - - case 117: // expr_binary: expr "%" expr + case 110: // expr_binary: expr "|" expr #line 516 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2501 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2464 "parser.cpp" break; - case 118: // expr_primitive: "(" expr ")" + case 111: // expr_binary: expr "&" expr +#line 517 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2470 "parser.cpp" + break; + + case 112: // expr_binary: expr "^" expr +#line 518 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2476 "parser.cpp" + break; + + case 113: // expr_binary: expr "<<" expr +#line 519 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2482 "parser.cpp" + break; + + case 114: // expr_binary: expr ">>" expr #line 520 "parser.ypp" - { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } -#line 2507 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2488 "parser.cpp" break; - case 119: // expr_primitive: "~" expr + case 115: // expr_binary: expr "+" expr #line 521 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2513 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2494 "parser.cpp" break; - case 120: // expr_primitive: "!" expr + case 116: // expr_binary: expr "-" expr #line 522 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2519 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2500 "parser.cpp" break; - case 121: // expr_primitive: expr_call + case 117: // expr_binary: expr "*" expr #line 523 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2525 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2506 "parser.cpp" break; - case 122: // expr_primitive: expr_call_thread + case 118: // expr_binary: expr "/" expr #line 524 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2531 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2512 "parser.cpp" break; - case 123: // expr_primitive: expr_call_childthread + case 119: // expr_binary: expr "%" expr #line 525 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2537 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < expr_ptr > ()), std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2518 "parser.cpp" break; - case 124: // expr_primitive: expr_function -#line 526 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2543 "parser.cpp" - break; - - case 125: // expr_primitive: expr_add_array -#line 527 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2549 "parser.cpp" - break; - - case 126: // expr_primitive: expr_array -#line 528 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2555 "parser.cpp" - break; - - case 127: // expr_primitive: expr_field + case 120: // expr_primitive: "(" expr ")" #line 529 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2561 "parser.cpp" + { yylhs.value.as < expr_ptr > () = std::move(yystack_[1].value.as < expr_ptr > ()); } +#line 2524 "parser.cpp" break; - case 128: // expr_primitive: expr_size + case 121: // expr_primitive: "~" expr #line 530 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2567 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2530 "parser.cpp" break; - case 129: // expr_primitive: thisthread + case 122: // expr_primitive: "!" expr #line 531 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } -#line 2573 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < expr_ptr > ())); } +#line 2536 "parser.cpp" break; - case 130: // expr_primitive: empty_array + case 123: // expr_primitive: expr_call #line 532 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } -#line 2579 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2542 "parser.cpp" break; - case 131: // expr_primitive: undefined + case 124: // expr_primitive: expr_call_thread #line 533 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } -#line 2585 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2548 "parser.cpp" break; - case 132: // expr_primitive: game + case 125: // expr_primitive: expr_call_childthread #line 534 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2591 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2554 "parser.cpp" break; - case 133: // expr_primitive: self + case 126: // expr_primitive: expr_function #line 535 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2597 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2560 "parser.cpp" break; - case 134: // expr_primitive: anim + case 127: // expr_primitive: expr_add_array #line 536 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2603 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2566 "parser.cpp" break; - case 135: // expr_primitive: level + case 128: // expr_primitive: expr_array #line 537 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2609 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2572 "parser.cpp" break; - case 136: // expr_primitive: animation + case 129: // expr_primitive: expr_field #line 538 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } -#line 2615 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2578 "parser.cpp" break; - case 137: // expr_primitive: animtree + case 130: // expr_primitive: expr_size #line 539 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } -#line 2621 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2584 "parser.cpp" break; - case 138: // expr_primitive: name + case 131: // expr_primitive: thisthread #line 540 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2627 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < thisthread_ptr > ()); } +#line 2590 "parser.cpp" break; - case 139: // expr_primitive: istring + case 132: // expr_primitive: empty_array #line 541 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } -#line 2633 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < empty_array_ptr > ()); } +#line 2596 "parser.cpp" break; - case 140: // expr_primitive: string + case 133: // expr_primitive: undefined #line 542 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } -#line 2639 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < undefined_ptr > ()); } +#line 2602 "parser.cpp" break; - case 141: // expr_primitive: vector + case 134: // expr_primitive: game #line 543 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } -#line 2645 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2608 "parser.cpp" break; - case 142: // expr_primitive: neg_float + case 135: // expr_primitive: self #line 544 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2651 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2614 "parser.cpp" break; - case 143: // expr_primitive: neg_integer + case 136: // expr_primitive: anim #line 545 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2657 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2620 "parser.cpp" break; - case 144: // expr_primitive: float + case 137: // expr_primitive: level #line 546 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } -#line 2663 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2626 "parser.cpp" break; - case 145: // expr_primitive: integer + case 138: // expr_primitive: animation #line 547 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } -#line 2669 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animation_ptr > ()); } +#line 2632 "parser.cpp" break; - case 146: // expr_primitive: false + case 139: // expr_primitive: animtree #line 548 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } -#line 2675 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < animtree_ptr > ()); } +#line 2638 "parser.cpp" break; - case 147: // expr_primitive: true + case 140: // expr_primitive: name #line 549 "parser.ypp" - { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } -#line 2681 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2644 "parser.cpp" break; - case 148: // expr_call: expr_call_function + case 141: // expr_primitive: istring +#line 550 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < istring_ptr > ()); } +#line 2650 "parser.cpp" + break; + + case 142: // expr_primitive: string +#line 551 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < string_ptr > ()); } +#line 2656 "parser.cpp" + break; + + case 143: // expr_primitive: vector +#line 552 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < vector_ptr > ()); } +#line 2662 "parser.cpp" + break; + + case 144: // expr_primitive: neg_float #line 553 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2687 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2668 "parser.cpp" break; - case 149: // expr_call: expr_call_pointer + case 145: // expr_primitive: neg_integer #line 554 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2693 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2674 "parser.cpp" break; - case 150: // expr_call: object expr_call_function + case 146: // expr_primitive: float #line 555 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2699 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < float_ptr > ()); } +#line 2680 "parser.cpp" break; - case 151: // expr_call: object expr_call_pointer + case 147: // expr_primitive: integer #line 556 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2705 "parser.cpp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < integer_ptr > ()); } +#line 2686 "parser.cpp" break; - case 152: // expr_call_thread: "thread" expr_call_function -#line 560 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2711 "parser.cpp" + case 148: // expr_primitive: false +#line 557 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < false_ptr > ()); } +#line 2692 "parser.cpp" break; - case 153: // expr_call_thread: "thread" expr_call_pointer -#line 561 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2717 "parser.cpp" + case 149: // expr_primitive: true +#line 558 "parser.ypp" + { yylhs.value.as < expr_ptr > ().as_node = std::move(yystack_[0].value.as < true_ptr > ()); } +#line 2698 "parser.cpp" break; - case 154: // expr_call_thread: object "thread" expr_call_function + case 150: // expr_call: expr_call_function #line 562 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2723 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2704 "parser.cpp" break; - case 155: // expr_call_thread: object "thread" expr_call_pointer + case 151: // expr_call: expr_call_pointer #line 563 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2729 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2710 "parser.cpp" break; - case 156: // expr_call_childthread: "childthread" expr_call_function -#line 567 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2735 "parser.cpp" + case 152: // expr_call: object expr_call_function +#line 564 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2716 "parser.cpp" break; - case 157: // expr_call_childthread: "childthread" expr_call_pointer -#line 568 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2741 "parser.cpp" + case 153: // expr_call: object expr_call_pointer +#line 565 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, false, std::move(yystack_[1].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2722 "parser.cpp" break; - case 158: // expr_call_childthread: object "childthread" expr_call_function + case 154: // expr_call_thread: "thread" expr_call_function #line 569 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2747 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2728 "parser.cpp" break; - case 159: // expr_call_childthread: object "childthread" expr_call_pointer + case 155: // expr_call_thread: "thread" expr_call_pointer #line 570 "parser.ypp" - { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } -#line 2753 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2734 "parser.cpp" break; - case 160: // expr_call_function: name "(" expr_arguments ")" -#line 575 "parser.ypp" - {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2759 "parser.cpp" + case 156: // expr_call_thread: object "thread" expr_call_function +#line 571 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2740 "parser.cpp" break; - case 161: // expr_call_function: file "::" name "(" expr_arguments ")" + case 157: // expr_call_thread: object "thread" expr_call_pointer +#line 572 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, true, false, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2746 "parser.cpp" + break; + + case 158: // expr_call_childthread: "childthread" expr_call_function +#line 576 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2752 "parser.cpp" + break; + + case 159: // expr_call_childthread: "childthread" expr_call_pointer #line 577 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2765 "parser.cpp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2758 "parser.cpp" break; - case 162: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 582 "parser.ypp" - { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2771 "parser.cpp" + case 160: // expr_call_childthread: object "childthread" expr_call_function +#line 578 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2764 "parser.cpp" break; - case 163: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" + case 161: // expr_call_childthread: object "childthread" expr_call_pointer +#line 579 "parser.ypp" + { yylhs.value.as < expr_call_ptr > () = std::make_unique(yylhs.location, false, true, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < expr_call_type_ptr > ())); } +#line 2770 "parser.cpp" + break; + + case 162: // expr_call_function: name "(" expr_arguments ")" #line 584 "parser.ypp" + {yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::make_unique(), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2776 "parser.cpp" + break; + + case 163: // expr_call_function: file "::" name "(" expr_arguments ")" +#line 586 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_func = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < file_ptr > ()), std::move(yystack_[3].value.as < name_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2782 "parser.cpp" + break; + + case 164: // expr_call_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 591 "parser.ypp" + { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, false, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } +#line 2788 "parser.cpp" + break; + + case 165: // expr_call_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" +#line 593 "parser.ypp" { yylhs.value.as < expr_call_type_ptr > ().as_pointer = std::make_unique(yylhs.location, true, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2777 "parser.cpp" +#line 2794 "parser.cpp" break; - case 164: // expr_arguments: expr_arguments_filled -#line 588 "parser.ypp" + case 166: // expr_arguments: expr_arguments_filled +#line 597 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2783 "parser.cpp" +#line 2800 "parser.cpp" break; - case 165: // expr_arguments: expr_arguments_empty -#line 589 "parser.ypp" + case 167: // expr_arguments: expr_arguments_empty +#line 598 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[0].value.as < expr_arguments_ptr > ()); } -#line 2789 "parser.cpp" +#line 2806 "parser.cpp" break; - case 166: // expr_arguments_filled: expr_arguments "," expr -#line 594 "parser.ypp" + case 168: // expr_arguments_filled: expr_arguments "," expr +#line 603 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::move(yystack_[2].value.as < expr_arguments_ptr > ()); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2795 "parser.cpp" +#line 2812 "parser.cpp" break; - case 167: // expr_arguments_filled: expr -#line 596 "parser.ypp" + case 169: // expr_arguments_filled: expr +#line 605 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); yylhs.value.as < expr_arguments_ptr > ()->list.push_back(std::move(yystack_[0].value.as < expr_ptr > ())); } -#line 2801 "parser.cpp" +#line 2818 "parser.cpp" break; - case 168: // expr_arguments_empty: %empty -#line 601 "parser.ypp" + case 170: // expr_arguments_empty: %empty +#line 610 "parser.ypp" { yylhs.value.as < expr_arguments_ptr > () = std::make_unique(yylhs.location); } -#line 2807 "parser.cpp" +#line 2824 "parser.cpp" break; - case 169: // expr_function: "::" name -#line 606 "parser.ypp" + case 171: // expr_function: "::" name +#line 615 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2813 "parser.cpp" +#line 2830 "parser.cpp" break; - case 170: // expr_function: file "::" name -#line 608 "parser.ypp" + case 172: // expr_function: file "::" name +#line 617 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < file_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2819 "parser.cpp" +#line 2836 "parser.cpp" break; - case 171: // expr_add_array: "[" expr_arguments_filled "]" -#line 613 "parser.ypp" + case 173: // expr_add_array: "[" expr_arguments_filled "]" +#line 622 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < expr_arguments_ptr > ())); } -#line 2825 "parser.cpp" +#line 2842 "parser.cpp" break; - case 172: // expr_array: object "[" expr "]" -#line 618 "parser.ypp" + case 174: // expr_array: object "[" expr "]" +#line 627 "parser.ypp" { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < node_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2831 "parser.cpp" +#line 2848 "parser.cpp" break; - case 173: // expr_field: object "." name -#line 623 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } -#line 2837 "parser.cpp" - break; - - case 174: // expr_size: object ".size" -#line 628 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } -#line 2843 "parser.cpp" - break; - - case 175: // object: expr_call + case 175: // expr_field: object "." name #line 632 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } -#line 2849 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < node_ptr > ()), std::move(yystack_[0].value.as < name_ptr > ())); } +#line 2854 "parser.cpp" break; - case 176: // object: expr_array -#line 633 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2855 "parser.cpp" - break; - - case 177: // object: expr_field -#line 634 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } -#line 2861 "parser.cpp" - break; - - case 178: // object: game -#line 635 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } -#line 2867 "parser.cpp" - break; - - case 179: // object: self -#line 636 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } -#line 2873 "parser.cpp" - break; - - case 180: // object: anim + case 176: // expr_size: object ".size" #line 637 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } -#line 2879 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < node_ptr > ())); } +#line 2860 "parser.cpp" break; - case 181: // object: level -#line 638 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } -#line 2885 "parser.cpp" + case 177: // object: expr_call +#line 641 "parser.ypp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < expr_call_ptr > ()); } +#line 2866 "parser.cpp" break; - case 182: // object: name -#line 639 "parser.ypp" - { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } -#line 2891 "parser.cpp" - break; - - case 183: // thisthread: "thisthread" + case 178: // object: expr_array #line 642 "parser.ypp" - { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } -#line 2897 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2872 "parser.cpp" break; - case 184: // empty_array: "[" "]" + case 179: // object: expr_field #line 643 "parser.ypp" - { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } -#line 2903 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < node_ptr > ()); } +#line 2878 "parser.cpp" break; - case 185: // undefined: "undefined" + case 180: // object: game #line 644 "parser.ypp" - { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } -#line 2909 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < game_ptr > ()); } +#line 2884 "parser.cpp" break; - case 186: // game: "game" + case 181: // object: self #line 645 "parser.ypp" - { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } -#line 2915 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < self_ptr > ()); } +#line 2890 "parser.cpp" break; - case 187: // self: "self" + case 182: // object: anim #line 646 "parser.ypp" - { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } -#line 2921 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < anim_ptr > ()); } +#line 2896 "parser.cpp" break; - case 188: // anim: "anim" + case 183: // object: level #line 647 "parser.ypp" - { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } -#line 2927 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < level_ptr > ()); } +#line 2902 "parser.cpp" break; - case 189: // level: "level" + case 184: // object: name #line 648 "parser.ypp" - { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } -#line 2933 "parser.cpp" + { yylhs.value.as < node_ptr > () = std::move(yystack_[0].value.as < name_ptr > ()); } +#line 2908 "parser.cpp" break; - case 190: // animation: "%" "identifier" -#line 649 "parser.ypp" - { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2939 "parser.cpp" - break; - - case 191: // animtree: "#animtree" -#line 650 "parser.ypp" - { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } -#line 2945 "parser.cpp" - break; - - case 192: // name: "identifier" + case 185: // thisthread: "thisthread" #line 651 "parser.ypp" - { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2951 "parser.cpp" + { yylhs.value.as < thisthread_ptr > () = std::make_unique(yylhs.location); } +#line 2914 "parser.cpp" break; - case 193: // file: "file path" + case 186: // empty_array: "[" "]" #line 652 "parser.ypp" - { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2957 "parser.cpp" + { yylhs.value.as < empty_array_ptr > () = std::make_unique(yylhs.location); } +#line 2920 "parser.cpp" break; - case 194: // istring: "localized string" + case 187: // undefined: "undefined" #line 653 "parser.ypp" - { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2963 "parser.cpp" + { yylhs.value.as < undefined_ptr > () = std::make_unique(yylhs.location); } +#line 2926 "parser.cpp" break; - case 195: // string: "string literal" + case 188: // game: "game" #line 654 "parser.ypp" - { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2969 "parser.cpp" + { yylhs.value.as < game_ptr > () = std::make_unique(yylhs.location); } +#line 2932 "parser.cpp" break; - case 196: // vector: "(" expr "," expr "," expr ")" + case 189: // self: "self" #line 655 "parser.ypp" - { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } -#line 2975 "parser.cpp" + { yylhs.value.as < self_ptr > () = std::make_unique(yylhs.location); } +#line 2938 "parser.cpp" break; - case 197: // neg_float: "-" "float" + case 190: // anim: "anim" #line 656 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2981 "parser.cpp" + { yylhs.value.as < anim_ptr > () = std::make_unique(yylhs.location); } +#line 2944 "parser.cpp" break; - case 198: // neg_integer: "-" "int" + case 191: // level: "level" #line 657 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 2987 "parser.cpp" + { yylhs.value.as < level_ptr > () = std::make_unique(yylhs.location); } +#line 2950 "parser.cpp" break; - case 199: // float: "float" + case 192: // animation: "%" "identifier" #line 658 "parser.ypp" - { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2993 "parser.cpp" + { yylhs.value.as < animation_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2956 "parser.cpp" break; - case 200: // integer: "int" + case 193: // animtree: "#animtree" #line 659 "parser.ypp" - { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 2999 "parser.cpp" + { yylhs.value.as < animtree_ptr > () = std::make_unique(yylhs.location); } +#line 2962 "parser.cpp" break; - case 201: // false: "false" + case 194: // name: "identifier" #line 660 "parser.ypp" - { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } -#line 3005 "parser.cpp" + { yylhs.value.as < name_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2968 "parser.cpp" break; - case 202: // true: "true" + case 195: // file: "file path" #line 661 "parser.ypp" + { yylhs.value.as < file_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2974 "parser.cpp" + break; + + case 196: // istring: "localized string" +#line 662 "parser.ypp" + { yylhs.value.as < istring_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2980 "parser.cpp" + break; + + case 197: // string: "string literal" +#line 663 "parser.ypp" + { yylhs.value.as < string_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 2986 "parser.cpp" + break; + + case 198: // vector: "(" expr "," expr "," expr ")" +#line 664 "parser.ypp" + { yylhs.value.as < vector_ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < expr_ptr > ()), std::move(yystack_[3].value.as < expr_ptr > ()), std::move(yystack_[1].value.as < expr_ptr > ())); } +#line 2992 "parser.cpp" + break; + + case 199: // neg_float: "-" "float" +#line 665 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 2998 "parser.cpp" + break; + + case 200: // neg_integer: "-" "int" +#line 666 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } +#line 3004 "parser.cpp" + break; + + case 201: // float: "float" +#line 667 "parser.ypp" + { yylhs.value.as < float_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3010 "parser.cpp" + break; + + case 202: // integer: "int" +#line 668 "parser.ypp" + { yylhs.value.as < integer_ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3016 "parser.cpp" + break; + + case 203: // false: "false" +#line 669 "parser.ypp" + { yylhs.value.as < false_ptr > () = std::make_unique(yylhs.location); } +#line 3022 "parser.cpp" + break; + + case 204: // true: "true" +#line 670 "parser.ypp" { yylhs.value.as < true_ptr > () = std::make_unique(yylhs.location); } -#line 3011 "parser.cpp" +#line 3028 "parser.cpp" break; -#line 3015 "parser.cpp" +#line 3032 "parser.cpp" default: break; @@ -3202,11 +3219,11 @@ namespace xsk { namespace gsc { namespace s2 { "case", "default", "break", "continue", "return", "thread", "childthread", "thisthread", "call", "true", "false", "undefined", ".size", "game", "self", "anim", "level", "(", ")", "{", "}", "[", "]", - ",", ".", "::", ":", ";", "++", "--", "<<", ">>", "||", "&&", "==", "!=", - "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", - "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", + ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", + "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", + "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "file path", "identifier", "string literal", "localized string", "float", - "int", "ADD_ARRAY", "THEN", "NEG", "ANIMREF", "PREINC", "PREDEC", + "int", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "include", "define", "usingtree", "constant", "thread", "parameters", "stmt", "stmt_block", "stmt_list", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", @@ -3215,8 +3232,8 @@ namespace xsk { namespace gsc { namespace s2 { "stmt_while", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", "stmt_breakpoint", "stmt_prof_begin", "stmt_prof_end", "for_stmt", - "for_expr", "expr", "expr_assign", "expr_compare", "expr_binary", - "expr_primitive", "expr_call", "expr_call_thread", + "for_expr", "expr", "expr_assign", "expr_compare", "expr_ternary", + "expr_binary", "expr_primitive", "expr_call", "expr_call_thread", "expr_call_childthread", "expr_call_function", "expr_call_pointer", "expr_arguments", "expr_arguments_filled", "expr_arguments_empty", "expr_function", "expr_add_array", "expr_array", "expr_field", @@ -3488,532 +3505,572 @@ namespace xsk { namespace gsc { namespace s2 { } - const short parser::yypact_ninf_ = -236; + const short parser::yypact_ninf_ = -242; - const short parser::yytable_ninf_ = -183; + const short parser::yytable_ninf_ = -185; const short parser::yypact_[] = { - 8, -65, -6, -236, 25, 8, -236, -236, -236, -236, - -236, -32, -236, -8, -28, -236, -236, -236, -17, 774, - -236, -236, 21, 30, -236, -236, 6, 6, -236, 51, - -236, -236, -236, -236, -236, -236, -236, 774, 377, -17, - 774, 774, 10, -3, -236, -236, -236, 1403, -236, -236, - -236, 20, -236, -236, -236, -236, -236, -236, 403, 449, - -236, 472, -236, -236, -236, 739, 798, 858, 930, -236, - -236, 12, 17, -236, -236, -236, -236, -236, -236, -236, - -236, -236, 24, 50, -17, 63, -236, -236, 76, 79, - -236, -236, 80, 967, 377, -236, 1481, 71, 89, -236, - -236, -236, -236, -236, -236, -236, -236, 774, 774, 774, - 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 6, 6, -236, 836, -17, - -236, -236, 774, -17, -236, 599, -236, -236, 774, -17, - 774, -236, 774, 1274, 774, -236, 106, 106, 1491, 1000, - 1563, 1563, 130, 130, 130, 130, 1043, 1532, 1522, -37, - -37, -236, -236, -236, -236, -236, -236, -236, 1313, -236, - 31, -236, 96, 87, 101, 104, 774, 88, -20, 123, - 124, 127, 131, 134, -26, 121, 147, 152, 712, -236, - -15, -15, -236, -236, 643, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, 153, 155, - 157, -236, -236, 882, -236, -236, -236, -236, 76, 1274, - 96, 1352, 1390, 132, 1481, -236, -236, 774, -236, 774, - 774, 1437, -236, 140, -236, 774, 774, 544, -17, 774, - 117, 159, 166, 172, -236, -236, -236, -236, 1450, -236, - 173, 173, -236, -236, -236, -236, -236, 182, 184, 187, - 189, -236, -236, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 186, 774, 199, 39, 40, 42, - -236, 190, 1106, 1139, 191, -236, 932, -11, 1149, -236, - -236, -236, -236, 774, 774, 774, 774, 1481, 1481, 1481, - 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 205, 1182, - 774, -236, 196, 200, -236, 687, 687, 774, 774, -17, - 50, 1192, 1010, 1053, 1096, 774, -236, 48, -236, -236, - 225, -236, 203, 1481, 1225, 234, -236, 206, 209, 774, - 212, 774, 213, 774, 65, -236, 687, 544, 687, 774, - -236, -236, 69, -236, 73, -236, 82, -236, -236, 223, - -236, 1235, 217, 220, 222, 687, 687, -236, -236, -236, - -236, -236 + 8, -74, -23, -242, 25, 8, -242, -242, -242, -242, + -242, -21, -242, -16, -59, -242, -242, -242, -14, 810, + -242, -242, 20, -6, -242, -242, 7, 7, -242, 43, + -242, -242, -242, -242, -242, -242, -242, 810, 684, -14, + 810, 810, -43, 3, -242, -242, -242, 1562, -242, -242, + -242, -242, 21, -242, -242, -242, -242, -242, -242, 53, + 177, -242, 367, -242, -242, -242, 391, 426, 466, 707, + -242, -242, 13, 15, -242, -242, -242, -242, -242, -242, + -242, -242, -242, 14, 59, -14, 60, -242, -242, 65, + 68, -242, -242, 75, 1002, 684, -242, 1645, 80, 91, + -242, -242, -242, -242, -242, -242, -242, -242, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 7, 7, -242, + 873, -14, -242, -242, 810, -14, -242, 568, -242, -242, + 810, -14, 810, -242, 810, 806, 810, -242, 1527, 262, + 262, 1676, 1686, 454, 454, 203, 203, 203, 203, 1717, + 1758, 1727, 127, 127, -242, -242, -242, -242, -242, -242, + -242, 1412, -242, 32, -242, 100, 93, 104, 126, 810, + 117, 19, 130, 133, 134, 140, 144, -4, 139, 142, + 150, 747, -242, -15, -15, -242, -242, 613, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, 153, 163, 164, -242, -242, 920, -242, -242, -242, + -242, 65, 806, 100, 1452, 1491, 171, 1645, 810, -242, + -242, 810, -242, 810, 810, 1597, -242, 149, -242, 810, + 810, 770, -14, 810, 132, 168, 174, 176, -242, -242, + -242, -242, 1632, -242, -11, -11, -242, -242, -242, -242, + -242, 180, 187, 188, 192, -242, -242, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 189, 810, + 196, 1645, 49, 50, 71, -242, 191, 1168, 1202, 194, + -242, 966, 9, 1236, -242, -242, -242, -242, 810, 810, + 810, 810, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, + 1645, 1645, 1645, 198, 1270, 810, -242, 209, 210, -242, + 658, 658, 810, 810, -14, 59, 1304, 1046, 1090, 1134, + 810, -242, 72, -242, -242, 225, -242, 211, 1645, 1338, + 229, -242, 216, 217, 810, 218, 810, 223, 810, 83, + -242, 658, 770, 658, 810, -242, -242, 84, -242, 141, + -242, 145, -242, -242, 212, -242, 1372, 224, 231, 240, + 658, 658, -242, -242, -242, -242, -242 }; const unsigned char parser::yydefact_[] = { - 3, 0, 0, 192, 0, 2, 6, 7, 9, 10, - 11, 0, 193, 0, 0, 1, 4, 5, 17, 0, - 8, 195, 0, 0, 16, 191, 0, 0, 183, 0, - 202, 201, 185, 186, 187, 188, 189, 0, 168, 0, - 0, 0, 0, 0, 194, 199, 200, 0, 82, 83, - 84, 121, 122, 123, 148, 149, 124, 125, 126, 127, - 128, 0, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 0, 0, 0, 0, 152, 153, 0, 0, - 156, 157, 0, 0, 168, 184, 167, 0, 164, 165, - 169, 120, 119, 197, 198, 190, 13, 0, 0, 0, + 3, 0, 0, 194, 0, 2, 6, 7, 9, 10, + 11, 0, 195, 0, 0, 1, 4, 5, 17, 0, + 8, 197, 0, 0, 16, 193, 0, 0, 185, 0, + 204, 203, 187, 188, 189, 190, 191, 0, 170, 0, + 0, 0, 0, 0, 196, 201, 202, 0, 82, 83, + 84, 85, 123, 124, 125, 150, 151, 126, 127, 128, + 129, 130, 0, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 0, 0, 0, 0, 154, 155, 0, + 0, 158, 159, 0, 0, 170, 186, 169, 0, 166, + 167, 171, 122, 121, 199, 200, 192, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 150, 151, 168, 0, 12, 0, 14, 15, 0, 0, - 0, 118, 0, 167, 0, 171, 111, 112, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 113, - 114, 115, 116, 117, 154, 155, 158, 159, 0, 173, - 0, 164, 170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, - 0, 0, 45, 18, 0, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 0, 175, - 0, 176, 177, 0, 178, 179, 180, 181, 182, 0, - 0, 0, 0, 0, 166, 172, 160, 168, 75, 168, - 168, 0, 57, 0, 58, 0, 0, 79, 0, 0, - 0, 0, 0, 0, 70, 71, 72, 74, 0, 175, - 85, 86, 42, 44, 48, 46, 47, 0, 0, 0, - 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, + 0, 0, 152, 153, 170, 0, 12, 0, 14, 15, + 0, 0, 0, 120, 0, 169, 0, 173, 0, 113, + 114, 101, 102, 103, 104, 105, 106, 107, 108, 110, + 111, 112, 115, 116, 117, 118, 119, 156, 157, 160, + 161, 0, 175, 0, 166, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 78, 0, 0, 0, 69, - 68, 67, 73, 0, 0, 0, 0, 89, 95, 96, - 97, 98, 99, 90, 91, 92, 94, 93, 0, 0, - 168, 161, 0, 0, 59, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 168, 196, 0, 76, 77, - 60, 62, 0, 80, 0, 0, 66, 0, 0, 168, - 0, 168, 0, 168, 0, 162, 0, 79, 0, 0, - 49, 51, 0, 54, 0, 56, 0, 163, 61, 0, - 64, 0, 0, 0, 0, 0, 0, 50, 53, 55, - 63, 65 + 0, 0, 43, 0, 0, 45, 18, 0, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 0, 177, 0, 178, 179, 0, 180, 181, 182, + 183, 184, 0, 0, 0, 0, 0, 168, 0, 174, + 162, 170, 75, 170, 170, 0, 57, 0, 58, 0, + 0, 79, 0, 0, 0, 0, 0, 0, 70, 71, + 72, 74, 0, 177, 86, 87, 42, 44, 48, 46, + 47, 0, 0, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 52, 0, 0, 0, 0, + 78, 0, 0, 0, 69, 68, 67, 73, 0, 0, + 0, 0, 90, 96, 97, 98, 99, 100, 91, 92, + 93, 95, 94, 0, 0, 170, 163, 0, 0, 59, + 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, + 170, 198, 0, 76, 77, 60, 62, 0, 80, 0, + 0, 66, 0, 0, 170, 0, 170, 0, 170, 0, + 164, 0, 79, 0, 0, 49, 51, 0, 54, 0, + 56, 0, 165, 61, 0, 64, 0, 0, 0, 0, + 0, 0, 50, 53, 55, 63, 65 }; const short parser::yypgoto_[] = { - -236, -236, -236, 272, 273, -236, -236, -236, -236, -183, - -76, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, - -236, -236, -236, -236, -236, -78, -236, 38, -235, -236, - -236, -236, -82, -107, -236, -25, -23, -119, -21, -236, - -236, -236, -22, 98, -236, 156, -236, -236, -236, 192, - 197, 202, 236, -236, -236, 0, 5, -236, -5, -236, - -236, 97, -236, 102, -236, -236 + -242, -242, -242, 286, 288, -242, -242, -242, -242, -185, + -81, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -68, -242, 39, -241, -242, + -242, -242, -242, -83, 52, -242, -25, -19, -121, -29, + -242, -242, -242, -22, 78, -242, 106, -242, -242, -242, + 118, 159, 195, 200, -242, -242, 0, 5, -242, -10, + -242, -242, 108, -242, 115, -242, -242 }; const short parser::yydefgoto_[] = { - 0, 4, 5, 6, 7, 8, 9, 10, 23, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 294, 342, 96, 218, 48, - 49, 50, 51, 52, 53, 54, 55, 97, 171, 99, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 4, 5, 6, 7, 8, 9, 10, 23, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 299, 347, 97, 221, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 98, 174, + 100, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81 + 76, 77, 78, 79, 80, 81, 82 }; const short parser::yytable_[] = { - 11, 86, 90, 87, 91, 11, 13, 136, 18, 22, - 328, 263, 295, 170, 1, 2, 29, 98, 24, 12, - 243, 33, 34, 35, 36, 15, 88, 88, 220, 85, - 244, 89, 89, 19, 14, 329, 130, 29, 131, 100, - -182, -182, 20, -182, 122, 123, 124, -182, -175, -175, - 85, -175, 132, 219, 250, -175, -182, 47, 21, -182, - 21, 88, 82, 46, -175, 133, 89, -175, 3, 12, - 3, 83, 236, 98, 134, 93, 84, 144, 101, 102, - 321, 322, 105, 323, 137, 144, 144, 220, 144, 355, - 12, 3, 135, 3, 144, 92, -182, -182, 103, 104, - 164, 166, 165, 167, -175, -175, 367, 138, 259, 259, - 372, 144, 219, 221, 373, 144, 132, 144, 287, 144, - 288, 289, 295, 374, 140, 88, 88, 139, 144, 169, - 89, 89, 143, 172, 145, 228, 237, 238, 242, 230, - 89, 239, 340, 341, 240, 146, 147, 148, 149, 150, + 11, 87, 91, 138, 22, 11, 13, 88, 92, 99, + 300, 12, 267, 173, 1, 2, 29, 14, 24, 18, + 29, 33, 34, 35, 36, 15, 89, 89, 21, 86, + 333, 90, 90, 130, 20, 84, 131, 132, 29, 101, + 85, -184, -184, 133, -184, 19, 104, 105, -184, -177, + -177, 86, -177, 134, 222, 334, -177, -184, 47, 247, + -184, 83, 89, 135, 136, -177, 99, 90, -177, 248, + 12, 3, 3, 240, 12, 3, 94, 254, 146, 102, + 103, -178, -178, 21, -178, 139, 46, 93, -178, 106, + 326, 327, 12, 3, 3, 146, 146, -178, -184, -184, + -178, 137, 167, 169, 140, 134, -177, -177, 168, 170, + 263, 263, 328, 360, 222, 224, 141, 146, 146, 142, + 292, 300, 293, 294, 372, 377, 146, 89, 89, 146, + 146, 172, 90, 90, 145, 175, 147, 231, -178, -178, + 241, 233, 90, 242, 243, 345, 346, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 245, 246, 259, 168, 247, 221, 221, - 254, 248, 221, 368, 249, 370, 229, 286, 231, 251, - 232, 291, 234, 107, 108, 120, 121, 122, 123, 124, - 228, 228, 380, 381, 228, 89, 89, 255, 130, 89, - 131, 337, 256, 264, 29, 265, 104, 266, 299, 120, - 121, 122, 123, 124, 241, 300, 354, 128, 220, 220, - 129, 301, 303, 88, 304, 221, 258, 305, 89, 306, - 362, 318, 364, 222, 366, 130, 130, 131, 131, 320, - 324, 327, 356, 219, 219, 335, 338, 228, 297, 220, - 339, 220, 89, 357, 346, 359, 360, 12, 3, 361, - 88, 88, 363, 365, 375, 89, 89, 377, 220, 220, - 378, 130, 379, 131, 219, 259, 219, 16, 17, 369, - 0, 252, 0, 292, 293, 0, 253, 298, 222, 222, - 0, 223, 222, 219, 219, 0, 88, 0, 0, 0, - 0, 89, 0, 221, 221, 0, 0, 0, 0, 0, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 0, 319, 0, 228, 228, 224, 0, 345, - 89, 89, 225, 0, 221, 221, 221, 226, 0, 0, - 0, 331, 332, 333, 334, 222, 260, 261, 0, 0, - 223, 0, 0, 221, 221, 0, 228, 228, 228, 0, - 0, 89, 89, 89, 0, 343, 344, 0, 0, 0, - 0, 227, 0, 0, 0, 228, 228, 0, 0, 0, - 89, 89, 224, 224, 0, 25, 224, 225, 225, 0, - 0, 225, 226, 226, 0, 0, 226, 371, 0, 0, - 0, 0, 0, 296, 0, 26, 27, 28, 29, 30, + 161, 162, 163, 164, 165, 166, 244, 246, 263, 171, + 249, 224, 224, 250, 251, 224, 373, 255, 375, 232, + 252, 234, 378, 235, 253, 237, 379, 146, 258, 223, + 296, 146, 259, 231, 231, 385, 386, 231, 90, 90, + 260, 132, 90, 268, 342, -179, -179, 133, -179, 124, + 125, 126, -179, 269, 270, 225, 290, 304, 245, 359, + 308, -179, 105, 305, -179, 306, 89, 309, 310, 224, + 262, 90, 311, 367, 323, 369, 325, 371, 340, 132, + 132, 329, 361, 226, 332, 133, 133, 222, 222, 223, + 364, 231, 302, 380, 351, 227, 90, 109, 110, 343, + 344, 362, -179, -179, 89, 89, 365, 366, 368, 90, + 90, 225, 225, 370, 382, 225, 132, 291, 222, 263, + 222, 383, 133, 122, 123, 124, 125, 126, 297, 298, + 384, 16, 303, 17, 374, 256, 228, 222, 222, 264, + 265, 89, 257, 226, 0, 0, 90, 0, 224, 224, + 0, 227, 227, 0, 0, 227, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 0, 324, 225, + 231, 231, 229, 0, 350, 90, 90, 230, 0, 224, + 224, 224, 122, 123, 124, 125, 126, 336, 337, 338, + 339, 0, 228, 228, 0, 0, 228, 301, 224, 224, + 0, 231, 231, 231, 0, 0, 90, 90, 90, 227, + 0, 348, 349, 0, 0, 0, 0, 0, 0, 0, + 231, 231, 223, 223, 0, 90, 90, 0, 229, 229, + 0, 0, 229, 230, 230, 127, 128, 230, 29, 0, + 0, 0, 129, 376, 0, 0, 0, 0, 225, 225, + 228, 130, 0, 223, 131, 223, 0, 0, 0, -180, + -180, 0, -180, 0, 0, 0, -180, 0, 0, 0, + 0, 0, 223, 223, 0, -180, 226, 226, -180, 225, + 225, 225, 0, 0, 0, 0, 229, 0, 227, 227, + 0, 230, 12, 3, -181, -181, 0, -181, 225, 225, + 0, -181, 0, 0, 0, 0, 0, 226, 301, 226, + -181, 0, 0, -181, 0, 0, -180, -180, 0, 227, + 227, 227, 0, 0, 0, 0, 226, 226, 0, 228, + 228, 0, 0, 0, -182, -182, 0, -182, 227, 227, + 0, -182, 0, 0, 0, 0, 0, 0, 109, 110, + -182, -181, -181, -182, 115, 116, 117, 118, 0, 0, + 228, 228, 228, 0, 0, 229, 229, 0, 0, 0, + 230, 230, 0, 0, 122, 123, 124, 125, 126, 228, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -182, -182, 0, 0, 0, 229, 229, 229, 0, + 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, + 0, 176, 177, 178, 0, 229, 229, 0, 0, 179, + 230, 230, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 0, 0, 33, 34, 35, 36, 0, 0, + 137, 192, 86, 0, 0, 0, 176, 177, 178, 0, + 193, 194, 0, 0, 179, 0, 0, 180, 181, 182, + 0, 183, 184, 185, 0, 186, 187, 188, 189, 190, + 191, 26, 0, 0, 29, 0, 0, 0, 0, 33, + 34, 35, 36, 12, 3, 137, 266, 86, 0, 0, + 0, 176, 177, 178, 0, 193, 194, 0, 0, 179, + 0, 0, 180, 181, 182, 0, 183, 184, 185, 0, + 186, 187, 188, 189, 190, 191, 26, 0, 0, 29, + 0, 0, 25, 0, 33, 34, 35, 36, 12, 3, + 137, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 193, 194, 26, 27, 28, 29, 30, 31, 32, 0, + 33, 34, 35, 36, 37, 0, 0, 0, 95, 96, + 0, 0, 39, 0, 0, -183, -183, 0, -183, 0, + 0, 0, -183, 12, 3, 0, 0, 0, 40, 41, + 0, -183, 0, 0, -183, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 0, 0, 43, 12, + 3, 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 0, 0, - 0, 94, 95, 222, 222, 39, 227, 227, 0, 0, - 227, -176, -176, 0, -176, 0, 0, 0, -176, 224, - 40, 41, 0, 0, 225, 0, 0, -176, 0, 226, - -176, 0, 0, 0, 222, 222, 222, 42, 0, 0, - 43, 12, 3, 21, 44, 45, 46, 0, 0, 0, - 0, 0, 0, 222, 222, 0, 0, -177, -177, 0, - -177, 223, 223, 227, -177, 0, 0, -176, -176, 0, - 0, 0, 0, -177, 0, 0, -177, 0, 0, 0, - 125, 126, 0, 29, 0, 0, 0, 127, 0, 0, - 0, 0, 223, 296, 223, 0, 128, 224, 224, 129, - 0, 0, 225, 225, 0, 0, 0, 226, 226, 0, - 0, 223, 223, -177, -177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 224, 224, - 224, 0, 0, 225, 225, 225, 12, 3, 226, 226, - 226, 227, 227, 0, 0, 0, 0, 224, 224, 0, - 0, 0, 225, 225, 0, 29, 0, 226, 226, 0, - 33, 34, 35, 36, 0, 0, 0, 0, 85, 0, - 0, 0, 227, 227, 227, 190, 191, 0, 0, 0, - 0, 0, 173, 174, 175, 0, 0, 0, 0, 0, - 176, 227, 227, 177, 178, 179, 0, 180, 181, 182, - 0, 183, 184, 185, 186, 187, 188, 26, 12, 3, - 29, 0, 0, 0, 0, 33, 34, 35, 36, 0, - 0, 135, 189, 85, 0, 0, 173, 174, 175, 0, - 190, 191, 0, 0, 176, 0, 0, 177, 178, 179, - 0, 180, 181, 182, 0, 183, 184, 185, 186, 187, - 188, 26, 0, 0, 29, 0, 0, 0, 0, 33, - 34, 35, 36, 12, 3, 135, 262, 85, 0, 0, - 173, 174, 175, 0, 190, 191, 0, 0, 176, 0, - 0, 177, 178, 179, 0, 180, 181, 182, 0, 183, - 184, 185, 186, 187, 188, 26, 0, 0, 29, 0, - 25, 0, 0, 33, 34, 35, 36, 12, 3, 135, - 0, 85, 0, 0, 0, 0, 0, 0, 190, 191, - 26, 27, 28, 29, 30, 31, 32, 0, 33, 34, - 35, 36, 37, 0, 0, 0, 38, 0, 0, 0, - 39, 0, 257, 0, 0, 0, 0, -178, -178, 0, - -178, 12, 3, 0, -178, 40, 41, 0, 0, 0, - 0, 0, 25, -178, 0, 0, -178, 0, 0, 0, - 0, 0, 42, 0, 0, 43, 12, 3, 21, 44, - 45, 46, 26, 27, 28, 29, 30, 31, 32, 0, - 33, 34, 35, 36, 37, 0, 0, 0, 38, 0, - 0, 0, 39, -178, -178, 0, -179, -179, 0, -179, - 0, 0, 0, -179, 0, 0, 0, 40, 41, 0, - 0, 0, -179, 0, 25, -179, 0, 0, 0, 0, - 0, 0, 0, 0, 42, 0, 0, 43, 12, 3, - 21, 44, 45, 46, 26, 27, 28, 29, 30, 31, - 32, 0, 33, 34, 35, 36, 37, 0, 0, 0, - 94, 0, -179, -179, 39, 0, -180, -180, 0, -180, - 0, 267, 268, -180, 269, 270, 0, 0, 0, 40, - 41, 0, -180, 0, 0, -180, 0, 0, 0, 0, - 125, 0, 0, 29, 0, 0, 42, 0, 0, 43, - 12, 3, 21, 44, 45, 46, 128, 0, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, -180, -180, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, -181, -181, - 0, -181, 0, 29, 0, -181, 12, 3, 0, 0, - 0, 0, 0, 0, -181, 0, 128, -181, 0, 129, - 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 141, 0, - 0, 0, 0, 142, -181, -181, 12, 3, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 0, 38, -183, -183, 0, 39, 0, 261, 0, 0, + 0, 29, 0, 0, 0, 0, 33, 34, 35, 36, + 0, 40, 41, 0, 86, 0, 0, 0, 25, 0, + 0, 0, 193, 194, 0, 0, 0, 0, 42, 0, + 0, 43, 12, 3, 21, 44, 45, 46, 26, 27, + 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, + 37, 236, 0, 0, 38, 12, 3, 108, 39, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, + 0, 25, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 42, 0, 0, 43, 12, 3, 21, 44, 45, + 46, 26, 27, 28, 29, 30, 31, 32, 0, 33, + 34, 35, 36, 37, 0, 0, 0, 95, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 273, 274, 0, 0, 0, 40, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, + 0, 29, 0, 0, 42, 0, 0, 43, 12, 3, + 21, 44, 45, 46, 130, 0, 0, 131, 0, 0, + 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 29, 0, 0, + 0, 0, 0, 0, 0, 12, 3, 0, 0, 0, + 130, 0, 0, 131, 0, 0, 0, 0, 275, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 118, 119, 120, 121, 122, 123, - 124, 348, 0, 107, 108, 0, 349, 111, 112, 113, - 114, 115, 116, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 350, 0, 107, 108, 0, 351, - 111, 112, 113, 114, 115, 116, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 118, 119, 120, 121, 122, 123, 124, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 352, 0, 0, - 0, 0, 353, 0, 0, 0, 0, 325, 0, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, - 0, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 326, 0, 117, 118, 119, 120, 121, 122, 123, 124, - 330, 0, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 0, 0, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 336, 0, 117, 118, 119, 120, 121, - 122, 123, 124, 347, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 358, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 376, 0, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 0, - 0, 117, 118, 119, 120, 121, 122, 123, 124, 233, - 0, 0, 0, 0, 0, 0, 0, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, + 0, 0, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 143, 0, 0, 0, 0, 144, 0, + 0, 12, 3, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 353, 0, 0, + 0, 0, 354, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 117, 118, 119, 120, 121, 122, 123, 124, 235, 0, - 0, 0, 0, 0, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 284, 0, 0, - 0, 0, 0, 0, 0, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, - 119, 120, 121, 122, 123, 124, 285, 0, 0, 0, - 0, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 106, 0, 0, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 0, 0, 0, 0, 117, - 118, 119, 120, 121, 122, 123, 124, 290, 0, 0, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 302, 0, 0, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 0, 0, 0, 0, 0, 117, 118, 119, 120, - 121, 122, 123, 124, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 107, 108, 0, 110, 111, 112, - 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 0, 0, 117, 118, 119, - 120, 121, 122, 123, 124, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 107, 108, 0, 0, 111, - 112, 113, 114, 115, 116, 0, 0, 0, 0, 118, - 0, 120, 121, 122, 123, 124, 0, 0, 0, 0, - 0, 120, 121, 122, 123, 124, 107, 108, 0, 0, - 0, 0, 113, 114, 115, 116, 0, 0, 0, 0, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 355, 0, 0, 0, 0, 356, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 357, 0, 0, 0, 0, + 358, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 330, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 331, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 108, 0, 0, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 120, 121, 122, 123, 124 + 0, 341, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 108, 0, 0, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 0, 119, 120, 121, + 122, 123, 124, 125, 126, 108, 0, 0, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, + 0, 119, 120, 121, 122, 123, 124, 125, 126, 108, + 0, 0, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 381, 0, 119, 120, 121, 122, 123, + 124, 125, 126, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 239, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 288, 0, 0, + 0, 0, 0, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 289, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 119, 120, + 121, 122, 123, 124, 125, 126, 238, 0, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 107, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, + 120, 121, 122, 123, 124, 125, 126, 295, 108, 0, + 0, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119, 120, 121, 122, 123, 124, + 125, 126, 307, 108, 0, 0, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 108, 0, 0, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 0, 0, 0, + 0, 0, 119, 120, 121, 122, 123, 124, 125, 126, + 109, 110, 0, 112, 113, 114, 115, 116, 117, 118, + 109, 110, 0, 0, 113, 114, 115, 116, 117, 118, + 0, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 0, 0, 119, 120, 121, 122, 123, 124, 125, + 126, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 109, 110, 0, 0, 113, 114, 115, 116, 117, + 118, 0, 0, 0, 0, 120, 121, 122, 123, 124, + 125, 126, 0, 0, 0, 120, 0, 122, 123, 124, + 125, 126, 109, 110, 0, 0, 113, 114, 115, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, + 124, 125, 126 }; const short parser::yycheck_[] = { - 0, 26, 27, 26, 27, 5, 1, 83, 40, 14, - 21, 194, 247, 132, 6, 7, 31, 38, 18, 84, - 40, 36, 37, 38, 39, 0, 26, 27, 135, 44, - 50, 26, 27, 65, 40, 46, 61, 31, 61, 39, - 28, 29, 50, 31, 81, 82, 83, 35, 28, 29, - 44, 31, 40, 135, 80, 35, 44, 19, 86, 47, - 86, 61, 41, 89, 44, 48, 61, 47, 85, 84, - 85, 41, 41, 94, 50, 37, 46, 46, 40, 41, - 41, 41, 85, 41, 84, 46, 46, 194, 46, 41, - 84, 85, 42, 85, 46, 44, 84, 85, 88, 89, - 125, 126, 125, 126, 84, 85, 41, 44, 190, 191, - 41, 46, 194, 135, 41, 46, 40, 46, 237, 46, - 239, 240, 357, 41, 44, 125, 126, 48, 46, 129, - 125, 126, 94, 133, 45, 135, 40, 50, 50, 139, - 135, 40, 325, 326, 40, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 40, 40, 247, 128, 40, 190, 191, - 49, 40, 194, 356, 40, 358, 138, 45, 140, 184, - 142, 41, 144, 53, 54, 79, 80, 81, 82, 83, - 190, 191, 375, 376, 194, 190, 191, 50, 223, 194, - 223, 320, 50, 50, 31, 50, 89, 50, 49, 79, - 80, 81, 82, 83, 176, 49, 335, 44, 325, 326, - 47, 49, 40, 223, 40, 247, 188, 40, 223, 40, - 349, 45, 351, 135, 353, 260, 261, 260, 261, 40, - 50, 50, 17, 325, 326, 40, 50, 247, 248, 356, - 50, 358, 247, 50, 330, 21, 50, 84, 85, 50, - 260, 261, 50, 50, 41, 260, 261, 50, 375, 376, - 50, 296, 50, 296, 356, 357, 358, 5, 5, 357, - -1, 184, -1, 245, 246, -1, 184, 249, 190, 191, - -1, 135, 194, 375, 376, -1, 296, -1, -1, -1, - -1, 296, -1, 325, 326, -1, -1, -1, -1, -1, - -1, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, -1, 285, -1, 325, 326, 135, -1, 329, - 325, 326, 135, -1, 356, 357, 358, 135, -1, -1, - -1, 303, 304, 305, 306, 247, 190, 191, -1, -1, - 194, -1, -1, 375, 376, -1, 356, 357, 358, -1, - -1, 356, 357, 358, -1, 327, 328, -1, -1, -1, - -1, 135, -1, -1, -1, 375, 376, -1, -1, -1, - 375, 376, 190, 191, -1, 8, 194, 190, 191, -1, - -1, 194, 190, 191, -1, -1, 194, 359, -1, -1, - -1, -1, -1, 247, -1, 28, 29, 30, 31, 32, - 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, - -1, 44, 45, 325, 326, 48, 190, 191, -1, -1, - 194, 28, 29, -1, 31, -1, -1, -1, 35, 247, - 63, 64, -1, -1, 247, -1, -1, 44, -1, 247, - 47, -1, -1, -1, 356, 357, 358, 80, -1, -1, - 83, 84, 85, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, 375, 376, -1, -1, 28, 29, -1, - 31, 325, 326, 247, 35, -1, -1, 84, 85, -1, - -1, -1, -1, 44, -1, -1, 47, -1, -1, -1, - 28, 29, -1, 31, -1, -1, -1, 35, -1, -1, - -1, -1, 356, 357, 358, -1, 44, 325, 326, 47, - -1, -1, 325, 326, -1, -1, -1, 325, 326, -1, - -1, 375, 376, 84, 85, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, - 358, -1, -1, 356, 357, 358, 84, 85, 356, 357, - 358, 325, 326, -1, -1, -1, -1, 375, 376, -1, - -1, -1, 375, 376, -1, 31, -1, 375, 376, -1, - 36, 37, 38, 39, -1, -1, -1, -1, 44, -1, - -1, -1, 356, 357, 358, 51, 52, -1, -1, -1, - -1, -1, 3, 4, 5, -1, -1, -1, -1, -1, - 11, 375, 376, 14, 15, 16, -1, 18, 19, 20, - -1, 22, 23, 24, 25, 26, 27, 28, 84, 85, - 31, -1, -1, -1, -1, 36, 37, 38, 39, -1, - -1, 42, 43, 44, -1, -1, 3, 4, 5, -1, - 51, 52, -1, -1, 11, -1, -1, 14, 15, 16, + 0, 26, 27, 84, 14, 5, 1, 26, 27, 38, + 251, 85, 197, 134, 6, 7, 31, 40, 18, 40, + 31, 36, 37, 38, 39, 0, 26, 27, 87, 44, + 21, 26, 27, 44, 50, 41, 47, 62, 31, 39, + 46, 28, 29, 62, 31, 66, 89, 90, 35, 28, + 29, 44, 31, 40, 137, 46, 35, 44, 19, 40, + 47, 41, 62, 48, 50, 44, 95, 62, 47, 50, + 85, 86, 86, 41, 85, 86, 37, 81, 46, 40, + 41, 28, 29, 87, 31, 85, 90, 44, 35, 86, + 41, 41, 85, 86, 86, 46, 46, 44, 85, 86, + 47, 42, 127, 128, 44, 40, 85, 86, 127, 128, + 193, 194, 41, 41, 197, 137, 48, 46, 46, 44, + 241, 362, 243, 244, 41, 41, 46, 127, 128, 46, + 46, 131, 127, 128, 95, 135, 45, 137, 85, 86, + 40, 141, 137, 50, 40, 330, 331, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 40, 50, 251, 130, + 40, 193, 194, 40, 40, 197, 361, 187, 363, 140, + 40, 142, 41, 144, 40, 146, 41, 46, 49, 137, + 41, 46, 50, 193, 194, 380, 381, 197, 193, 194, + 50, 226, 197, 50, 325, 28, 29, 226, 31, 82, + 83, 84, 35, 50, 50, 137, 45, 49, 179, 340, + 40, 44, 90, 49, 47, 49, 226, 40, 40, 251, + 191, 226, 40, 354, 45, 356, 40, 358, 40, 264, + 265, 50, 17, 137, 50, 264, 265, 330, 331, 197, + 21, 251, 252, 41, 335, 137, 251, 54, 55, 50, + 50, 50, 85, 86, 264, 265, 50, 50, 50, 264, + 265, 193, 194, 50, 50, 197, 301, 238, 361, 362, + 363, 50, 301, 80, 81, 82, 83, 84, 249, 250, + 50, 5, 253, 5, 362, 187, 137, 380, 381, 193, + 194, 301, 187, 197, -1, -1, 301, -1, 330, 331, + -1, 193, 194, -1, -1, 197, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, -1, 289, 251, + 330, 331, 137, -1, 334, 330, 331, 137, -1, 361, + 362, 363, 80, 81, 82, 83, 84, 308, 309, 310, + 311, -1, 193, 194, -1, -1, 197, 251, 380, 381, + -1, 361, 362, 363, -1, -1, 361, 362, 363, 251, + -1, 332, 333, -1, -1, -1, -1, -1, -1, -1, + 380, 381, 330, 331, -1, 380, 381, -1, 193, 194, + -1, -1, 197, 193, 194, 28, 29, 197, 31, -1, + -1, -1, 35, 364, -1, -1, -1, -1, 330, 331, + 251, 44, -1, 361, 47, 363, -1, -1, -1, 28, + 29, -1, 31, -1, -1, -1, 35, -1, -1, -1, + -1, -1, 380, 381, -1, 44, 330, 331, 47, 361, + 362, 363, -1, -1, -1, -1, 251, -1, 330, 331, + -1, 251, 85, 86, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, 361, 362, 363, + 44, -1, -1, 47, -1, -1, 85, 86, -1, 361, + 362, 363, -1, -1, -1, -1, 380, 381, -1, 330, + 331, -1, -1, -1, 28, 29, -1, 31, 380, 381, + -1, 35, -1, -1, -1, -1, -1, -1, 54, 55, + 44, 85, 86, 47, 60, 61, 62, 63, -1, -1, + 361, 362, 363, -1, -1, 330, 331, -1, -1, -1, + 330, 331, -1, -1, 80, 81, 82, 83, 84, 380, + 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 85, 86, -1, -1, -1, 361, 362, 363, -1, + -1, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, 3, 4, 5, -1, 380, 381, -1, -1, 11, + 380, 381, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, -1, -1, 36, 37, 38, 39, -1, -1, + 42, 43, 44, -1, -1, -1, 3, 4, 5, -1, + 52, 53, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, -1, -1, -1, 36, - 37, 38, 39, 84, 85, 42, 43, 44, -1, -1, - 3, 4, 5, -1, 51, 52, -1, -1, 11, -1, - -1, 14, 15, 16, -1, 18, 19, 20, -1, 22, - 23, 24, 25, 26, 27, 28, -1, -1, 31, -1, - 8, -1, -1, 36, 37, 38, 39, 84, 85, 42, - -1, 44, -1, -1, -1, -1, -1, -1, 51, 52, - 28, 29, 30, 31, 32, 33, 34, -1, 36, 37, - 38, 39, 40, -1, -1, -1, 44, -1, -1, -1, - 48, -1, 50, -1, -1, -1, -1, 28, 29, -1, - 31, 84, 85, -1, 35, 63, 64, -1, -1, -1, - -1, -1, 8, 44, -1, -1, 47, -1, -1, -1, - -1, -1, 80, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 28, 29, 30, 31, 32, 33, 34, -1, - 36, 37, 38, 39, 40, -1, -1, -1, 44, -1, - -1, -1, 48, 84, 85, -1, 28, 29, -1, 31, - -1, -1, -1, 35, -1, -1, -1, 63, 64, -1, - -1, -1, 44, -1, 8, 47, -1, -1, -1, -1, - -1, -1, -1, -1, 80, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 28, 29, 30, 31, 32, 33, - 34, -1, 36, 37, 38, 39, 40, -1, -1, -1, - 44, -1, 84, 85, 48, -1, 28, 29, -1, 31, - -1, 9, 10, 35, 12, 13, -1, -1, -1, 63, - 64, -1, 44, -1, -1, 47, -1, -1, -1, -1, - 28, -1, -1, 31, -1, -1, 80, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 44, -1, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 28, 29, - -1, 31, -1, 31, -1, 35, 84, 85, -1, -1, - -1, -1, -1, -1, 44, -1, 44, 47, -1, 47, - -1, -1, -1, 51, 52, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 41, -1, - -1, -1, -1, 46, 84, 85, 84, 85, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 37, 38, 39, 85, 86, 42, 43, 44, -1, -1, + -1, 3, 4, 5, -1, 52, 53, -1, -1, 11, + -1, -1, 14, 15, 16, -1, 18, 19, 20, -1, + 22, 23, 24, 25, 26, 27, 28, -1, -1, 31, + -1, -1, 8, -1, 36, 37, 38, 39, 85, 86, + 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, + 52, 53, 28, 29, 30, 31, 32, 33, 34, -1, + 36, 37, 38, 39, 40, -1, -1, -1, 44, 45, + -1, -1, 48, -1, -1, 28, 29, -1, 31, -1, + -1, -1, 35, 85, 86, -1, -1, -1, 64, 65, + -1, 44, -1, -1, 47, 8, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, 84, 85, + 86, 87, 88, 89, 90, 28, 29, 30, 31, 32, + 33, 34, -1, 36, 37, 38, 39, 40, -1, -1, + -1, 44, 85, 86, -1, 48, -1, 50, -1, -1, + -1, 31, -1, -1, -1, -1, 36, 37, 38, 39, + -1, 64, 65, -1, 44, -1, -1, -1, 8, -1, + -1, -1, 52, 53, -1, -1, -1, -1, 81, -1, + -1, 84, 85, 86, 87, 88, 89, 90, 28, 29, + 30, 31, 32, 33, 34, -1, 36, 37, 38, 39, + 40, 45, -1, -1, 44, 85, 86, 51, 48, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + -1, -1, -1, -1, 64, 65, -1, -1, -1, -1, + -1, 8, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 81, -1, -1, 84, 85, 86, 87, 88, 89, + 90, 28, 29, 30, 31, 32, 33, 34, -1, 36, + 37, 38, 39, 40, -1, -1, -1, 44, -1, -1, + -1, 48, -1, -1, -1, -1, -1, -1, -1, 9, + 10, -1, 12, 13, -1, -1, -1, 64, 65, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, + -1, 31, -1, -1, 81, -1, -1, 84, 85, 86, + 87, 88, 89, 90, 44, -1, -1, 47, -1, -1, + -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 31, -1, -1, + -1, -1, -1, -1, -1, 85, 86, -1, -1, -1, + 44, -1, -1, 47, -1, -1, -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 76, 77, 78, 79, 80, 81, 82, - 83, 41, -1, 53, 54, -1, 46, 57, 58, 59, - 60, 61, 62, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 41, -1, 53, 54, -1, 46, - 57, 58, 59, 60, 61, 62, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - 77, 78, 79, 80, 81, 82, 83, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 41, -1, -1, - -1, -1, 46, -1, -1, -1, -1, 41, -1, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, - -1, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 76, 77, 78, 79, 80, 81, 82, 83, - 41, -1, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, -1, -1, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 76, 77, 78, 79, 80, - 81, 82, 83, 41, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 41, -1, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 76, 77, 78, 79, 80, 81, 82, 83, 45, - -1, -1, -1, -1, -1, -1, -1, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, + -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 41, -1, -1, -1, -1, 46, -1, + -1, 85, 86, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 41, -1, -1, + -1, -1, 46, -1, -1, -1, -1, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 76, 77, 78, 79, 80, 81, 82, 83, 45, -1, - -1, -1, -1, -1, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 45, -1, -1, - -1, -1, -1, -1, -1, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 76, 77, - 78, 79, 80, 81, 82, 83, 46, -1, -1, -1, - -1, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 50, -1, -1, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 76, 77, 78, 79, - 80, 81, 82, 83, -1, -1, -1, -1, -1, 76, - 77, 78, 79, 80, 81, 82, 83, 50, -1, -1, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 50, -1, -1, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, -1, 76, 77, 78, 79, - 80, 81, 82, 83, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 53, 54, -1, 56, 57, 58, - 59, 60, 61, 62, -1, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 76, 77, 78, - 79, 80, 81, 82, 83, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, 53, 54, -1, -1, 57, - 58, 59, 60, 61, 62, -1, -1, -1, -1, 77, - -1, 79, 80, 81, 82, 83, -1, -1, -1, -1, - -1, 79, 80, 81, 82, 83, 53, 54, -1, -1, - -1, -1, 59, 60, 61, 62, -1, -1, -1, -1, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 41, -1, -1, -1, -1, 46, -1, -1, -1, + -1, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 41, -1, -1, -1, -1, + 46, -1, -1, -1, -1, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 41, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 51, -1, -1, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, 80, 81, 82, 83 + -1, 41, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 51, -1, -1, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, 77, 78, 79, + 80, 81, 82, 83, 84, 51, -1, -1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, + -1, 77, 78, 79, 80, 81, 82, 83, 84, 51, + -1, -1, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 41, -1, 77, 78, 79, 80, 81, + 82, 83, 84, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 45, -1, -1, + -1, -1, -1, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 46, -1, -1, + -1, -1, 51, -1, -1, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 77, 78, + 79, 80, 81, 82, 83, 84, 49, -1, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 77, + 78, 79, 80, 81, 82, 83, 84, 50, 51, -1, + -1, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 77, 78, 79, 80, 81, 82, + 83, 84, 50, 51, -1, -1, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 51, -1, -1, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, -1, -1, -1, + -1, -1, 77, 78, 79, 80, 81, 82, 83, 84, + 54, 55, -1, 57, 58, 59, 60, 61, 62, 63, + 54, 55, -1, -1, 58, 59, 60, 61, 62, 63, + -1, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, -1, -1, 77, 78, 79, 80, 81, 82, 83, + 84, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 54, 55, -1, -1, 58, 59, 60, 61, 62, + 63, -1, -1, -1, -1, 78, 79, 80, 81, 82, + 83, 84, -1, -1, -1, 78, -1, 80, 81, 82, + 83, 84, 54, 55, -1, -1, 58, 59, 60, 61, + 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84 }; const unsigned char parser::yystos_[] = { - 0, 6, 7, 85, 99, 100, 101, 102, 103, 104, - 105, 163, 84, 164, 40, 0, 101, 102, 40, 65, - 50, 86, 166, 106, 163, 8, 28, 29, 30, 31, + 0, 6, 7, 86, 101, 102, 103, 104, 105, 106, + 107, 166, 85, 167, 40, 0, 103, 104, 40, 66, + 50, 87, 169, 108, 166, 8, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 44, 48, - 63, 64, 80, 83, 87, 88, 89, 135, 137, 138, - 139, 140, 141, 142, 143, 144, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 41, 41, 46, 44, 143, 144, 163, 164, - 143, 144, 44, 135, 44, 45, 135, 145, 146, 147, - 163, 135, 135, 88, 89, 85, 50, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 76, 77, 78, - 79, 80, 81, 82, 83, 28, 29, 35, 44, 47, - 143, 144, 40, 48, 50, 42, 108, 163, 44, 48, - 44, 41, 46, 135, 46, 45, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 143, 144, 143, 144, 135, 163, - 145, 146, 163, 3, 4, 5, 11, 14, 15, 16, - 18, 19, 20, 22, 23, 24, 25, 26, 27, 43, - 51, 52, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 136, 140, - 141, 150, 151, 153, 157, 158, 159, 160, 163, 135, - 163, 135, 135, 45, 135, 45, 41, 40, 50, 40, - 40, 135, 50, 40, 50, 40, 40, 40, 40, 40, - 80, 166, 169, 171, 49, 50, 50, 50, 135, 140, - 153, 153, 43, 107, 50, 50, 50, 9, 10, 12, - 13, 51, 52, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 45, 46, 45, 145, 145, 145, - 50, 41, 135, 135, 133, 136, 153, 163, 135, 49, - 49, 49, 50, 40, 40, 40, 40, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 45, 135, - 40, 41, 41, 41, 50, 41, 41, 50, 21, 46, - 41, 135, 135, 135, 135, 40, 41, 145, 50, 50, - 107, 107, 134, 135, 135, 163, 108, 41, 41, 46, - 41, 46, 41, 46, 145, 41, 17, 50, 41, 21, - 50, 50, 145, 50, 145, 50, 145, 41, 107, 133, - 107, 135, 41, 41, 41, 41, 41, 50, 50, 50, - 107, 107 + 64, 65, 81, 84, 88, 89, 90, 137, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 41, 41, 46, 44, 146, 147, 166, + 167, 146, 147, 44, 137, 44, 45, 137, 148, 149, + 150, 166, 137, 137, 89, 90, 86, 50, 51, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 77, + 78, 79, 80, 81, 82, 83, 84, 28, 29, 35, + 44, 47, 146, 147, 40, 48, 50, 42, 110, 166, + 44, 48, 44, 41, 46, 137, 46, 45, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 146, 147, 146, + 147, 137, 166, 148, 149, 166, 3, 4, 5, 11, + 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, + 26, 27, 43, 52, 53, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 138, 143, 144, 153, 154, 156, 160, 161, 162, + 163, 166, 137, 166, 137, 137, 45, 137, 49, 45, + 41, 40, 50, 40, 40, 137, 50, 40, 50, 40, + 40, 40, 40, 40, 81, 169, 172, 174, 49, 50, + 50, 50, 137, 143, 156, 156, 43, 109, 50, 50, + 50, 9, 10, 12, 13, 52, 53, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 45, 46, + 45, 137, 148, 148, 148, 50, 41, 137, 137, 135, + 138, 156, 166, 137, 49, 49, 49, 50, 40, 40, + 40, 40, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 45, 137, 40, 41, 41, 41, 50, + 41, 41, 50, 21, 46, 41, 137, 137, 137, 137, + 40, 41, 148, 50, 50, 109, 109, 136, 137, 137, + 166, 110, 41, 41, 46, 41, 46, 41, 46, 148, + 41, 17, 50, 41, 21, 50, 50, 148, 50, 148, + 50, 148, 41, 109, 135, 109, 137, 41, 41, 41, + 41, 41, 50, 50, 50, 109, 109 }; const unsigned char parser::yyr1_[] = { - 0, 98, 99, 99, 100, 100, 100, 100, 101, 102, - 102, 102, 103, 104, 105, 106, 106, 106, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 108, 108, 109, 109, 110, 110, 111, 112, - 113, 113, 114, 115, 115, 116, 116, 117, 118, 118, - 119, 120, 121, 122, 123, 123, 124, 125, 125, 125, - 126, 127, 128, 129, 129, 130, 131, 132, 133, 133, - 134, 134, 135, 135, 135, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, - 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, - 143, 143, 144, 144, 145, 145, 146, 146, 147, 148, - 148, 149, 150, 151, 152, 153, 153, 153, 153, 153, - 153, 153, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173 + 0, 100, 101, 101, 102, 102, 102, 102, 103, 104, + 104, 104, 105, 106, 107, 108, 108, 108, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 110, 110, 111, 111, 112, 112, 113, 114, + 115, 115, 116, 117, 117, 118, 118, 119, 120, 120, + 121, 122, 123, 124, 125, 125, 126, 127, 127, 127, + 128, 129, 130, 131, 131, 132, 133, 134, 135, 135, + 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 143, 143, 143, 143, 144, 144, 144, 144, 145, 145, + 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, + 150, 151, 151, 152, 153, 154, 155, 156, 156, 156, + 156, 156, 156, 156, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176 }; const signed char @@ -4027,19 +4084,19 @@ namespace xsk { namespace gsc { namespace s2 { 8, 6, 3, 8, 6, 8, 6, 2, 2, 4, 5, 7, 5, 9, 7, 9, 5, 3, 3, 3, 2, 2, 2, 3, 2, 2, 5, 5, 1, 0, - 1, 0, 1, 1, 1, 2, 2, 2, 2, 3, + 1, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 3, 3, 2, 2, 3, 3, - 4, 6, 8, 9, 1, 1, 3, 1, 0, 2, - 3, 3, 4, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 7, 2, 2, 1, - 1, 1, 1 + 1, 1, 2, 2, 2, 2, 3, 3, 2, 2, + 3, 3, 4, 6, 8, 9, 1, 1, 3, 1, + 0, 2, 3, 3, 4, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 7, 2, + 2, 1, 1, 1, 1 }; @@ -4049,27 +4106,27 @@ namespace xsk { namespace gsc { namespace s2 { const short parser::yyrline_[] = { - 0, 239, 239, 240, 244, 246, 248, 250, 255, 260, - 261, 262, 266, 271, 276, 281, 283, 286, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 317, 318, 322, 324, 329, 331, 336, 341, - 346, 348, 353, 358, 360, 365, 367, 372, 377, 379, - 384, 389, 394, 399, 404, 406, 411, 416, 418, 420, - 425, 430, 435, 440, 442, 447, 452, 457, 462, 463, - 467, 468, 472, 473, 474, 478, 479, 480, 481, 482, - 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, - 496, 497, 498, 499, 500, 501, 502, 503, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545, 546, 547, 548, 549, 553, 554, - 555, 556, 560, 561, 562, 563, 567, 568, 569, 570, - 574, 576, 581, 583, 588, 589, 593, 595, 601, 605, - 607, 612, 617, 622, 627, 632, 633, 634, 635, 636, - 637, 638, 639, 642, 643, 644, 645, 646, 647, 648, - 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, - 659, 660, 661 + 0, 243, 243, 244, 248, 250, 252, 254, 259, 264, + 265, 266, 270, 275, 280, 285, 287, 290, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 321, 322, 326, 328, 333, 335, 340, 345, + 350, 352, 357, 362, 364, 369, 371, 376, 381, 383, + 388, 393, 398, 403, 408, 410, 415, 420, 422, 424, + 429, 434, 439, 444, 446, 451, 456, 461, 466, 467, + 471, 472, 476, 477, 478, 479, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 501, 502, 503, 504, 505, 506, 507, 508, 512, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, + 562, 563, 564, 565, 569, 570, 571, 572, 576, 577, + 578, 579, 583, 585, 590, 592, 597, 598, 602, 604, + 610, 614, 616, 621, 626, 631, 636, 641, 642, 643, + 644, 645, 646, 647, 648, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670 }; void @@ -4102,9 +4159,9 @@ namespace xsk { namespace gsc { namespace s2 { #line 13 "parser.ypp" } } } // xsk::gsc::s2 -#line 4106 "parser.cpp" +#line 4163 "parser.cpp" -#line 663 "parser.ypp" +#line 672 "parser.ypp" void xsk::gsc::s2::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/s2/xsk/parser.hpp b/src/s2/xsk/parser.hpp index bd67691a..9e6600d6 100644 --- a/src/s2/xsk/parser.hpp +++ b/src/s2/xsk/parser.hpp @@ -446,6 +446,7 @@ namespace xsk { namespace gsc { namespace s2 { // for_expr // expr // expr_compare + // expr_ternary // expr_binary // expr_primitive char dummy11[sizeof (expr_ptr)]; @@ -700,53 +701,55 @@ namespace xsk { namespace gsc { namespace s2 { DOUBLECOLON = 48, // "::" COLON = 49, // ":" SEMICOLON = 50, // ";" - INCREMENT = 51, // "++" - DECREMENT = 52, // "--" - LSHIFT = 53, // "<<" - RSHIFT = 54, // ">>" - OR = 55, // "||" - AND = 56, // "&&" - EQUALITY = 57, // "==" - INEQUALITY = 58, // "!=" - LESS_EQUAL = 59, // "<=" - GREATER_EQUAL = 60, // ">=" - LESS = 61, // "<" - GREATER = 62, // ">" - NOT = 63, // "!" - COMPLEMENT = 64, // "~" - ASSIGN = 65, // "=" - ASSIGN_ADD = 66, // "+=" - ASSIGN_SUB = 67, // "-=" - ASSIGN_MULT = 68, // "*=" - ASSIGN_DIV = 69, // "/=" - ASSIGN_MOD = 70, // "%=" - ASSIGN_BITWISE_OR = 71, // "|=" - ASSIGN_BITWISE_AND = 72, // "&=" - ASSIGN_BITWISE_EXOR = 73, // "^=" - ASSIGN_RSHIFT = 74, // ">>=" - ASSIGN_LSHIFT = 75, // "<<=" - BITWISE_OR = 76, // "|" - BITWISE_AND = 77, // "&" - BITWISE_EXOR = 78, // "^" - ADD = 79, // "+" - SUB = 80, // "-" - MULT = 81, // "*" - DIV = 82, // "/" - MOD = 83, // "%" - FILE = 84, // "file path" - NAME = 85, // "identifier" - STRING = 86, // "string literal" - ISTRING = 87, // "localized string" - FLOAT = 88, // "float" - INTEGER = 89, // "int" - ADD_ARRAY = 90, // ADD_ARRAY - THEN = 91, // THEN - NEG = 92, // NEG - ANIMREF = 93, // ANIMREF - PREINC = 94, // PREINC - PREDEC = 95, // PREDEC - POSTINC = 96, // POSTINC - POSTDEC = 97 // POSTDEC + QMARK = 51, // "?" + INCREMENT = 52, // "++" + DECREMENT = 53, // "--" + LSHIFT = 54, // "<<" + RSHIFT = 55, // ">>" + OR = 56, // "||" + AND = 57, // "&&" + EQUALITY = 58, // "==" + INEQUALITY = 59, // "!=" + LESS_EQUAL = 60, // "<=" + GREATER_EQUAL = 61, // ">=" + LESS = 62, // "<" + GREATER = 63, // ">" + NOT = 64, // "!" + COMPLEMENT = 65, // "~" + ASSIGN = 66, // "=" + ASSIGN_ADD = 67, // "+=" + ASSIGN_SUB = 68, // "-=" + ASSIGN_MULT = 69, // "*=" + ASSIGN_DIV = 70, // "/=" + ASSIGN_MOD = 71, // "%=" + ASSIGN_BITWISE_OR = 72, // "|=" + ASSIGN_BITWISE_AND = 73, // "&=" + ASSIGN_BITWISE_EXOR = 74, // "^=" + ASSIGN_RSHIFT = 75, // ">>=" + ASSIGN_LSHIFT = 76, // "<<=" + BITWISE_OR = 77, // "|" + BITWISE_AND = 78, // "&" + BITWISE_EXOR = 79, // "^" + ADD = 80, // "+" + SUB = 81, // "-" + MULT = 82, // "*" + DIV = 83, // "/" + MOD = 84, // "%" + FILE = 85, // "file path" + NAME = 86, // "identifier" + STRING = 87, // "string literal" + ISTRING = 88, // "localized string" + FLOAT = 89, // "float" + INTEGER = 90, // "int" + ADD_ARRAY = 91, // ADD_ARRAY + THEN = 92, // THEN + TERN = 93, // TERN + NEG = 94, // NEG + ANIMREF = 95, // ANIMREF + PREINC = 96, // PREINC + PREDEC = 97, // PREDEC + POSTINC = 98, // POSTINC + POSTDEC = 99 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -763,7 +766,7 @@ namespace xsk { namespace gsc { namespace s2 { { enum symbol_kind_type { - YYNTOKENS = 98, ///< Number of tokens. + YYNTOKENS = 100, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -816,129 +819,132 @@ namespace xsk { namespace gsc { namespace s2 { S_DOUBLECOLON = 48, // "::" S_COLON = 49, // ":" S_SEMICOLON = 50, // ";" - S_INCREMENT = 51, // "++" - S_DECREMENT = 52, // "--" - S_LSHIFT = 53, // "<<" - S_RSHIFT = 54, // ">>" - S_OR = 55, // "||" - S_AND = 56, // "&&" - S_EQUALITY = 57, // "==" - S_INEQUALITY = 58, // "!=" - S_LESS_EQUAL = 59, // "<=" - S_GREATER_EQUAL = 60, // ">=" - S_LESS = 61, // "<" - S_GREATER = 62, // ">" - S_NOT = 63, // "!" - S_COMPLEMENT = 64, // "~" - S_ASSIGN = 65, // "=" - S_ASSIGN_ADD = 66, // "+=" - S_ASSIGN_SUB = 67, // "-=" - S_ASSIGN_MULT = 68, // "*=" - S_ASSIGN_DIV = 69, // "/=" - S_ASSIGN_MOD = 70, // "%=" - S_ASSIGN_BITWISE_OR = 71, // "|=" - S_ASSIGN_BITWISE_AND = 72, // "&=" - S_ASSIGN_BITWISE_EXOR = 73, // "^=" - S_ASSIGN_RSHIFT = 74, // ">>=" - S_ASSIGN_LSHIFT = 75, // "<<=" - S_BITWISE_OR = 76, // "|" - S_BITWISE_AND = 77, // "&" - S_BITWISE_EXOR = 78, // "^" - S_ADD = 79, // "+" - S_SUB = 80, // "-" - S_MULT = 81, // "*" - S_DIV = 82, // "/" - S_MOD = 83, // "%" - S_FILE = 84, // "file path" - S_NAME = 85, // "identifier" - S_STRING = 86, // "string literal" - S_ISTRING = 87, // "localized string" - S_FLOAT = 88, // "float" - S_INTEGER = 89, // "int" - S_ADD_ARRAY = 90, // ADD_ARRAY - S_THEN = 91, // THEN - S_NEG = 92, // NEG - S_ANIMREF = 93, // ANIMREF - S_PREINC = 94, // PREINC - S_PREDEC = 95, // PREDEC - S_POSTINC = 96, // POSTINC - S_POSTDEC = 97, // POSTDEC - S_YYACCEPT = 98, // $accept - S_root = 99, // root - S_program = 100, // program - S_include = 101, // include - S_define = 102, // define - S_usingtree = 103, // usingtree - S_constant = 104, // constant - S_thread = 105, // thread - S_parameters = 106, // parameters - S_stmt = 107, // stmt - S_stmt_block = 108, // stmt_block - S_stmt_list = 109, // stmt_list - S_stmt_call = 110, // stmt_call - S_stmt_assign = 111, // stmt_assign - S_stmt_endon = 112, // stmt_endon - S_stmt_notify = 113, // stmt_notify - S_stmt_wait = 114, // stmt_wait - S_stmt_waittill = 115, // stmt_waittill - S_stmt_waittillmatch = 116, // stmt_waittillmatch - S_stmt_waittillframeend = 117, // stmt_waittillframeend - S_stmt_waitframe = 118, // stmt_waitframe - S_stmt_if = 119, // stmt_if - S_stmt_ifelse = 120, // stmt_ifelse - S_stmt_while = 121, // stmt_while - S_stmt_for = 122, // stmt_for - S_stmt_foreach = 123, // stmt_foreach - S_stmt_switch = 124, // stmt_switch - S_stmt_case = 125, // stmt_case - S_stmt_default = 126, // stmt_default - S_stmt_break = 127, // stmt_break - S_stmt_continue = 128, // stmt_continue - S_stmt_return = 129, // stmt_return - S_stmt_breakpoint = 130, // stmt_breakpoint - S_stmt_prof_begin = 131, // stmt_prof_begin - S_stmt_prof_end = 132, // stmt_prof_end - S_for_stmt = 133, // for_stmt - S_for_expr = 134, // for_expr - S_expr = 135, // expr - S_expr_assign = 136, // expr_assign - S_expr_compare = 137, // expr_compare - S_expr_binary = 138, // expr_binary - S_expr_primitive = 139, // expr_primitive - S_expr_call = 140, // expr_call - S_expr_call_thread = 141, // expr_call_thread - S_expr_call_childthread = 142, // expr_call_childthread - S_expr_call_function = 143, // expr_call_function - S_expr_call_pointer = 144, // expr_call_pointer - S_expr_arguments = 145, // expr_arguments - S_expr_arguments_filled = 146, // expr_arguments_filled - S_expr_arguments_empty = 147, // expr_arguments_empty - S_expr_function = 148, // expr_function - S_expr_add_array = 149, // expr_add_array - S_expr_array = 150, // expr_array - S_expr_field = 151, // expr_field - S_expr_size = 152, // expr_size - S_object = 153, // object - S_thisthread = 154, // thisthread - S_empty_array = 155, // empty_array - S_undefined = 156, // undefined - S_game = 157, // game - S_self = 158, // self - S_anim = 159, // anim - S_level = 160, // level - S_animation = 161, // animation - S_animtree = 162, // animtree - S_name = 163, // name - S_file = 164, // file - S_istring = 165, // istring - S_string = 166, // string - S_vector = 167, // vector - S_neg_float = 168, // neg_float - S_neg_integer = 169, // neg_integer - S_float = 170, // float - S_integer = 171, // integer - S_false = 172, // false - S_true = 173 // true + S_QMARK = 51, // "?" + S_INCREMENT = 52, // "++" + S_DECREMENT = 53, // "--" + S_LSHIFT = 54, // "<<" + S_RSHIFT = 55, // ">>" + S_OR = 56, // "||" + S_AND = 57, // "&&" + S_EQUALITY = 58, // "==" + S_INEQUALITY = 59, // "!=" + S_LESS_EQUAL = 60, // "<=" + S_GREATER_EQUAL = 61, // ">=" + S_LESS = 62, // "<" + S_GREATER = 63, // ">" + S_NOT = 64, // "!" + S_COMPLEMENT = 65, // "~" + S_ASSIGN = 66, // "=" + S_ASSIGN_ADD = 67, // "+=" + S_ASSIGN_SUB = 68, // "-=" + S_ASSIGN_MULT = 69, // "*=" + S_ASSIGN_DIV = 70, // "/=" + S_ASSIGN_MOD = 71, // "%=" + S_ASSIGN_BITWISE_OR = 72, // "|=" + S_ASSIGN_BITWISE_AND = 73, // "&=" + S_ASSIGN_BITWISE_EXOR = 74, // "^=" + S_ASSIGN_RSHIFT = 75, // ">>=" + S_ASSIGN_LSHIFT = 76, // "<<=" + S_BITWISE_OR = 77, // "|" + S_BITWISE_AND = 78, // "&" + S_BITWISE_EXOR = 79, // "^" + S_ADD = 80, // "+" + S_SUB = 81, // "-" + S_MULT = 82, // "*" + S_DIV = 83, // "/" + S_MOD = 84, // "%" + S_FILE = 85, // "file path" + S_NAME = 86, // "identifier" + S_STRING = 87, // "string literal" + S_ISTRING = 88, // "localized string" + S_FLOAT = 89, // "float" + S_INTEGER = 90, // "int" + S_ADD_ARRAY = 91, // ADD_ARRAY + S_THEN = 92, // THEN + S_TERN = 93, // TERN + S_NEG = 94, // NEG + S_ANIMREF = 95, // ANIMREF + S_PREINC = 96, // PREINC + S_PREDEC = 97, // PREDEC + S_POSTINC = 98, // POSTINC + S_POSTDEC = 99, // POSTDEC + S_YYACCEPT = 100, // $accept + S_root = 101, // root + S_program = 102, // program + S_include = 103, // include + S_define = 104, // define + S_usingtree = 105, // usingtree + S_constant = 106, // constant + S_thread = 107, // thread + S_parameters = 108, // parameters + S_stmt = 109, // stmt + S_stmt_block = 110, // stmt_block + S_stmt_list = 111, // stmt_list + S_stmt_call = 112, // stmt_call + S_stmt_assign = 113, // stmt_assign + S_stmt_endon = 114, // stmt_endon + S_stmt_notify = 115, // stmt_notify + S_stmt_wait = 116, // stmt_wait + S_stmt_waittill = 117, // stmt_waittill + S_stmt_waittillmatch = 118, // stmt_waittillmatch + S_stmt_waittillframeend = 119, // stmt_waittillframeend + S_stmt_waitframe = 120, // stmt_waitframe + S_stmt_if = 121, // stmt_if + S_stmt_ifelse = 122, // stmt_ifelse + S_stmt_while = 123, // stmt_while + S_stmt_for = 124, // stmt_for + S_stmt_foreach = 125, // stmt_foreach + S_stmt_switch = 126, // stmt_switch + S_stmt_case = 127, // stmt_case + S_stmt_default = 128, // stmt_default + S_stmt_break = 129, // stmt_break + S_stmt_continue = 130, // stmt_continue + S_stmt_return = 131, // stmt_return + S_stmt_breakpoint = 132, // stmt_breakpoint + S_stmt_prof_begin = 133, // stmt_prof_begin + S_stmt_prof_end = 134, // stmt_prof_end + S_for_stmt = 135, // for_stmt + S_for_expr = 136, // for_expr + S_expr = 137, // expr + S_expr_assign = 138, // expr_assign + S_expr_compare = 139, // expr_compare + S_expr_ternary = 140, // expr_ternary + S_expr_binary = 141, // expr_binary + S_expr_primitive = 142, // expr_primitive + S_expr_call = 143, // expr_call + S_expr_call_thread = 144, // expr_call_thread + S_expr_call_childthread = 145, // expr_call_childthread + S_expr_call_function = 146, // expr_call_function + S_expr_call_pointer = 147, // expr_call_pointer + S_expr_arguments = 148, // expr_arguments + S_expr_arguments_filled = 149, // expr_arguments_filled + S_expr_arguments_empty = 150, // expr_arguments_empty + S_expr_function = 151, // expr_function + S_expr_add_array = 152, // expr_add_array + S_expr_array = 153, // expr_array + S_expr_field = 154, // expr_field + S_expr_size = 155, // expr_size + S_object = 156, // object + S_thisthread = 157, // thisthread + S_empty_array = 158, // empty_array + S_undefined = 159, // undefined + S_game = 160, // game + S_self = 161, // self + S_anim = 162, // anim + S_level = 163, // level + S_animation = 164, // animation + S_animtree = 165, // animtree + S_name = 166, // name + S_file = 167, // file + S_istring = 168, // istring + S_string = 169, // string + S_vector = 170, // vector + S_neg_float = 171, // neg_float + S_neg_integer = 172, // neg_integer + S_float = 173, // float + S_integer = 174, // integer + S_false = 175, // false + S_true = 176 // true }; }; @@ -1023,6 +1029,7 @@ namespace xsk { namespace gsc { namespace s2 { case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (std::move (that.value)); @@ -2117,6 +2124,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.template destroy< expr_ptr > (); @@ -3241,6 +3249,21 @@ switch (yykind) return symbol_type (token::SEMICOLON, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_QMARK (location_type l) + { + return symbol_type (token::QMARK, std::move (l)); + } +#else + static + symbol_type + make_QMARK (const location_type& l) + { + return symbol_type (token::QMARK, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -3856,6 +3879,21 @@ switch (yykind) return symbol_type (token::THEN, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_TERN (location_type l) + { + return symbol_type (token::TERN, std::move (l)); + } +#else + static + symbol_type + make_TERN (const location_type& l) + { + return symbol_type (token::TERN, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4290,8 +4328,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1646, ///< Last index in yytable_. - yynnts_ = 76, ///< Number of nonterminal symbols. + yylast_ = 1842, ///< Last index in yytable_. + yynnts_ = 77, ///< Number of nonterminal symbols. yyfinal_ = 15 ///< Termination state number. }; @@ -4367,6 +4405,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.copy< expr_ptr > (YY_MOVE (that.value)); @@ -4647,6 +4686,7 @@ switch (yykind) case symbol_kind::S_for_expr: // for_expr case symbol_kind::S_expr: // expr case symbol_kind::S_expr_compare: // expr_compare + case symbol_kind::S_expr_ternary: // expr_ternary case symbol_kind::S_expr_binary: // expr_binary case symbol_kind::S_expr_primitive: // expr_primitive value.move< expr_ptr > (YY_MOVE (s.value)); @@ -4913,7 +4953,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::s2 -#line 4917 "parser.hpp" +#line 4957 "parser.hpp" diff --git a/src/utils/xsk/gsc/nodetree.hpp b/src/utils/xsk/gsc/nodetree.hpp index c97438c4..4b20b2ad 100644 --- a/src/utils/xsk/gsc/nodetree.hpp +++ b/src/utils/xsk/gsc/nodetree.hpp @@ -59,6 +59,7 @@ enum class node_t expr_greater, expr_or, expr_and, + expr_ternary, expr_assign_equal, expr_assign_add, expr_assign_sub, @@ -169,6 +170,7 @@ struct node_expr_less; struct node_expr_greater; struct node_expr_or; struct node_expr_and; +struct node_expr_ternary; struct node_expr_assign; struct node_expr_assign_equal; struct node_expr_assign_add; @@ -276,6 +278,7 @@ using expr_less_ptr = std::unique_ptr; using expr_greater_ptr = std::unique_ptr; using expr_or_ptr = std::unique_ptr; using expr_and_ptr = std::unique_ptr; +using expr_ternary_ptr = std::unique_ptr; using expr_assign_ptr = std::unique_ptr; using expr_assign_equal_ptr = std::unique_ptr; using expr_assign_add_ptr = std::unique_ptr; @@ -396,6 +399,7 @@ union expr_ptr expr_greater_ptr as_greater; expr_or_ptr as_or; expr_and_ptr as_and; + expr_ternary_ptr as_ternary; expr_binary_ptr as_binary; expr_assign_ptr as_assign; expr_assign_equal_ptr as_assign_equal; @@ -1459,6 +1463,24 @@ struct node_expr_and : public node_expr_binary } }; +struct node_expr_ternary : public node +{ + expr_ptr cond; + expr_ptr lvalue; + expr_ptr rvalue; + + node_expr_ternary(expr_ptr cond, expr_ptr lvalue, expr_ptr rvalue) + : node(node_t::expr_ternary), cond(std::move(cond)), lvalue(std::move(lvalue)), rvalue(std::move(rvalue)) {} + + node_expr_ternary(const location& loc, expr_ptr cond, expr_ptr lvalue, expr_ptr rvalue) + : node(node_t::expr_ternary, loc), cond(std::move(cond)), lvalue(std::move(lvalue)), rvalue(std::move(rvalue)) {} + + auto print() -> std::string override + { + return cond.as_node->print() + " ? " + lvalue.as_node->print() + " : " + rvalue.as_node->print(); + } +}; + struct node_expr_assign: public node { expr_ptr lvalue;