diff --git a/gen/h1/parser.ypp b/gen/h1/parser.ypp index 3296677f..9ea826b5 100644 --- a/gen/h1/parser.ypp +++ b/gen/h1/parser.ypp @@ -28,6 +28,8 @@ { #include "h1.hpp" namespace xsk::gsc::h1 { class lexer; } +typedef void *yyscan_t; +#define YY_DECL xsk::gsc::h1::parser::symbol_type yylex(yyscan_t yyscanner, xsk::gsc::location& loc) } %code top @@ -125,6 +127,7 @@ xsk::gsc::h1::parser::symbol_type H1lex(xsk::gsc::h1::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -703,6 +706,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/h2/parser.ypp b/gen/h2/parser.ypp index cf204d50..2ce95735 100644 --- a/gen/h2/parser.ypp +++ b/gen/h2/parser.ypp @@ -125,6 +125,7 @@ xsk::gsc::h2::parser::symbol_type H2lex(xsk::gsc::h2::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -703,6 +704,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/iw5/parser.ypp b/gen/iw5/parser.ypp index 0c8d504f..159af2cd 100644 --- a/gen/iw5/parser.ypp +++ b/gen/iw5/parser.ypp @@ -124,6 +124,7 @@ xsk::gsc::iw5::parser::symbol_type IW5lex(xsk::gsc::iw5::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -693,6 +694,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/iw6/parser.ypp b/gen/iw6/parser.ypp index ec0e424e..ed326058 100644 --- a/gen/iw6/parser.ypp +++ b/gen/iw6/parser.ypp @@ -124,6 +124,7 @@ xsk::gsc::iw6::parser::symbol_type IW6lex(xsk::gsc::iw6::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -693,6 +694,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/iw7/parser.ypp b/gen/iw7/parser.ypp index 665504f3..72ea18d4 100644 --- a/gen/iw7/parser.ypp +++ b/gen/iw7/parser.ypp @@ -124,6 +124,7 @@ xsk::gsc::iw7::parser::symbol_type IW7lex(xsk::gsc::iw7::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -693,6 +694,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/iw8/parser.ypp b/gen/iw8/parser.ypp index 4a06432b..775f2290 100644 --- a/gen/iw8/parser.ypp +++ b/gen/iw8/parser.ypp @@ -127,6 +127,7 @@ xsk::gsc::iw8::parser::symbol_type IW8lex(xsk::gsc::iw8::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -719,6 +720,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/s1/parser.ypp b/gen/s1/parser.ypp index fa7218af..44ca9b1f 100644 --- a/gen/s1/parser.ypp +++ b/gen/s1/parser.ypp @@ -125,6 +125,7 @@ xsk::gsc::s1::parser::symbol_type S1lex(xsk::gsc::s1::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -703,6 +704,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/s2/parser.ypp b/gen/s2/parser.ypp index 5ff46e34..6f4cde57 100644 --- a/gen/s2/parser.ypp +++ b/gen/s2/parser.ypp @@ -125,6 +125,7 @@ xsk::gsc::s2::parser::symbol_type S2lex(xsk::gsc::s2::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -703,6 +704,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/gen/s4/parser.ypp b/gen/s4/parser.ypp index 853796b9..a51657e6 100644 --- a/gen/s4/parser.ypp +++ b/gen/s4/parser.ypp @@ -127,6 +127,7 @@ xsk::gsc::s4::parser::symbol_type S4lex(xsk::gsc::s4::lexer& lexer); %token MUL "*" %token DIV "/" %token MOD "%" +%token FIELD "field" %token PATH "path" %token IDENTIFIER "identifier" %token STRING "string literal" @@ -719,6 +720,8 @@ expr_array expr_field : expr_object DOT expr_identifier { $$ = std::make_unique(@$, std::move($1), std::move($3)); } + | expr_object FIELD + { $$ = std::make_unique(@$, std::move($1), std::make_unique(@$, $2)); } ; expr_size diff --git a/src/h1/xsk/lexer.cpp b/src/h1/xsk/lexer.cpp index c7470939..9d471e85 100644 --- a/src/h1/xsk/lexer.cpp +++ b/src/h1/xsk/lexer.cpp @@ -60,7 +60,6 @@ enum class keyword KW_true, KW_false, KW_undefined, - KW_dotsize, KW_game, KW_self, KW_anim, @@ -68,9 +67,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -80,18 +79,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -139,7 +129,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -185,24 +175,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw h1::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return h1::parser::make_H1EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -216,7 +210,7 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return h1::parser::make_DIV(loc_); reader_.advance(); @@ -226,29 +220,27 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw h1::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return h1::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw h1::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -262,16 +254,15 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw h1::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -284,7 +275,7 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -294,69 +285,43 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw h1::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return h1::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return h1::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw h1::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return h1::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw h1::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return h1::parser::make_ASSIGN_MUL(loc_); - return h1::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return h1::parser::make_LPAREN(loc_); case ')': @@ -376,6 +341,7 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type case ':': if (curr != ':') return h1::parser::make_COLON(loc_); + reader_.advance(); return h1::parser::make_DOUBLECOLON(loc_); case '?': @@ -383,43 +349,70 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type case '=': if (curr != '=') return h1::parser::make_ASSIGN(loc_); + reader_.advance(); return h1::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return h1::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? h1::parser::make_INCREMENT(loc_) : h1::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return h1::parser::make_INCREMENT(loc_); + + return h1::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return h1::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? h1::parser::make_DECREMENT(loc_) : h1::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return h1::parser::make_DECREMENT(loc_); + + return h1::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return h1::parser::make_MOD(loc_); + reader_.advance(); + return h1::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return h1::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? h1::parser::make_OR(loc_) : h1::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return h1::parser::make_OR(loc_); + + return h1::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return h1::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? h1::parser::make_AND(loc_) : h1::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return h1::parser::make_AND(loc_); + + if (last == '=') + return h1::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return h1::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return h1::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return h1::parser::make_NOT(loc_); + reader_.advance(); return h1::parser::make_INEQUALITY(loc_); case '~': @@ -427,144 +420,222 @@ auto lexer::lex() -> xsk::gsc::h1::parser::symbol_type case '<': if (curr != '<' && curr != '=') return h1::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? h1::parser::make_ASSIGN_LSHIFT(loc_) : h1::parser::make_LSHIFT(loc_); - } - return h1::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return h1::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return h1::parser::make_LSHIFT(loc_); + + reader_.advance(); + return h1::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return h1::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? h1::parser::make_ASSIGN_RSHIFT(loc_) : h1::parser::make_RSHIFT(loc_); - } - return h1::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return h1::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return h1::parser::make_RSHIFT(loc_); + + reader_.advance(); + return h1::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw h1::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::h1::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw h1::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw h1::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return h1::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return h1::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::h1::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw h1::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw h1::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return h1::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return h1::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return h1::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return h1::parser::make_SIZE(loc_); + } + + return h1::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return h1::parser::make_PATH(xsk::gsc::h1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return h1::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return h1::parser::make_IDENTIFIER(xsk::gsc::h1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return h1::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return h1::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return h1::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -581,30 +652,24 @@ auto lexer::read_number(char first) -> xsk::gsc::h1::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return h1::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return h1::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -616,35 +681,29 @@ auto lexer::read_number(char first) -> xsk::gsc::h1::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return h1::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -661,163 +720,15 @@ auto lexer::read_number(char first) -> xsk::gsc::h1::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return h1::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw h1::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw h1::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw h1::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return h1::parser::make_FLOAT(std::string(data, len), loc_); - - return h1::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::h1::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw h1::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw h1::parser::syntax_error(loc_, "invalid path end '\\'"); - - return h1::parser::make_PATH(xsk::gsc::h1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return h1::parser::make_IDENTIFIER(xsk::gsc::h1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::h1::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return h1::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return h1::parser::make_DOT(loc_); - - } - else return h1::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::h1::parser::symbol_type { switch (k) @@ -890,8 +801,6 @@ auto lexer::keyword_token(keyword k) -> xsk::gsc::h1::parser::symbol_type return h1::parser::make_FALSE(loc_); case keyword::KW_undefined: return h1::parser::make_UNDEFINED(loc_); - case keyword::KW_dotsize: - return h1::parser::make_SIZE(loc_); case keyword::KW_game: return h1::parser::make_GAME(loc_); case keyword::KW_self: @@ -980,7 +889,6 @@ std::unordered_map lexer::keywords { "true", keyword::KW_true }, { "false", keyword::KW_false }, { "undefined", keyword::KW_undefined }, - { ".size", keyword::KW_dotsize }, { "game", keyword::KW_game }, { "self", keyword::KW_self }, { "anim", keyword::KW_anim }, diff --git a/src/h1/xsk/lexer.hpp b/src/h1/xsk/lexer.hpp index a8a47aca..8615e3f0 100644 --- a/src/h1/xsk/lexer.hpp +++ b/src/h1/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::h1 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::h1::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::h1::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::h1::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::h1::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::h1::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/h1/xsk/parser.cpp b/src/h1/xsk/parser.cpp index 9c5f219a..e182be50 100644 --- a/src/h1/xsk/parser.cpp +++ b/src/h1/xsk/parser.cpp @@ -35,7 +35,7 @@ // private implementation details that can be changed or removed. // "%code top" blocks. -#line 34 "parser.ypp" +#line 36 "parser.ypp" #include "stdafx.hpp" #include "parser.hpp" @@ -491,6 +491,7 @@ namespace xsk { namespace gsc { namespace h1 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -792,6 +793,7 @@ namespace xsk { namespace gsc { namespace h1 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1093,6 +1095,7 @@ namespace xsk { namespace gsc { namespace h1 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1393,6 +1396,7 @@ namespace xsk { namespace gsc { namespace h1 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1948,6 +1952,7 @@ namespace xsk { namespace gsc { namespace h1 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1979,1303 +1984,1309 @@ namespace xsk { namespace gsc { namespace h1 { switch (yyn) { case 2: // root: program -#line 245 "parser.ypp" +#line 248 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 3: // root: %empty -#line 246 "parser.ypp" +#line 249 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 4: // program: program inline -#line 251 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 5: // program: program include -#line 253 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 6: // program: program declaration -#line 255 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 7: // program: inline -#line 257 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 8: // program: include -#line 259 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 9: // program: declaration -#line 261 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 265 "parser.ypp" +#line 268 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 270 "parser.ypp" +#line 273 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 12: // declaration: "/#" -#line 274 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 13: // declaration: "#/" -#line 275 "parser.ypp" +#line 278 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 276 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 15: // declaration: decl_constant -#line 277 "parser.ypp" +#line 280 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 16: // declaration: decl_thread -#line 278 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 283 "parser.ypp" +#line 286 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 288 "parser.ypp" +#line 291 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 293 "parser.ypp" +#line 296 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 297 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 21: // stmt: stmt_block -#line 298 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 22: // stmt: stmt_call -#line 299 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 300 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 301 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 302 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 303 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 304 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 305 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 306 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 307 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 31: // stmt: stmt_if -#line 308 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 309 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 33: // stmt: stmt_while -#line 310 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 311 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 35: // stmt: stmt_for -#line 312 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 313 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 314 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 38: // stmt: stmt_case -#line 315 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 39: // stmt: stmt_default -#line 316 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 40: // stmt: stmt_break -#line 317 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 318 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 42: // stmt: stmt_return -#line 319 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 320 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 321 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 322 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 326 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 327 "parser.ypp" +#line 330 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 331 "parser.ypp" +#line 334 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 332 "parser.ypp" +#line 335 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 337 "parser.ypp" +#line 340 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 51: // stmt_list: stmt -#line 339 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 344 "parser.ypp" +#line 347 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 346 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 348 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 350 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2303 "parser.cpp" +#line 2308 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 355 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2309 "parser.cpp" +#line 2314 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 357 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2315 "parser.cpp" +#line 2320 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 362 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2321 "parser.cpp" +#line 2326 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 364 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2327 "parser.cpp" +#line 2332 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 366 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2333 "parser.cpp" +#line 2338 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 371 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2339 "parser.cpp" +#line 2344 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 376 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2345 "parser.cpp" +#line 2350 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 378 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2351 "parser.cpp" +#line 2356 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 383 "parser.ypp" +#line 386 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2357 "parser.cpp" +#line 2362 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 388 "parser.ypp" +#line 391 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2363 "parser.cpp" +#line 2368 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 390 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2369 "parser.cpp" +#line 2374 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 395 "parser.ypp" +#line 398 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2375 "parser.cpp" +#line 2380 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 397 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2381 "parser.cpp" +#line 2386 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 402 "parser.ypp" +#line 405 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2387 "parser.cpp" +#line 2392 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 407 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2393 "parser.cpp" +#line 2398 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 409 "parser.ypp" +#line 412 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2399 "parser.cpp" +#line 2404 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 417 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2405 "parser.cpp" +#line 2410 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 419 "parser.ypp" +#line 422 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2411 "parser.cpp" +#line 2416 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 424 "parser.ypp" +#line 427 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2417 "parser.cpp" +#line 2422 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 429 "parser.ypp" +#line 432 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2423 "parser.cpp" +#line 2428 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 434 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2429 "parser.cpp" +#line 2434 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 439 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2435 "parser.cpp" +#line 2440 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 441 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2441 "parser.cpp" +#line 2446 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 446 "parser.ypp" +#line 449 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2447 "parser.cpp" +#line 2452 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 451 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2453 "parser.cpp" +#line 2458 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 453 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2459 "parser.cpp" +#line 2464 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 458 "parser.ypp" +#line 461 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2465 "parser.cpp" +#line 2470 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 463 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2471 "parser.cpp" +#line 2476 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 468 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2477 "parser.cpp" +#line 2482 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 473 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2483 "parser.cpp" +#line 2488 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 475 "parser.ypp" +#line 478 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2489 "parser.cpp" +#line 2494 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 480 "parser.ypp" +#line 483 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2495 "parser.cpp" +#line 2500 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 485 "parser.ypp" +#line 488 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2501 "parser.cpp" +#line 2506 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 490 "parser.ypp" +#line 493 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2507 "parser.cpp" +#line 2512 "parser.cpp" break; case 90: // expr: expr_ternary -#line 494 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2513 "parser.cpp" +#line 2518 "parser.cpp" break; case 91: // expr: expr_binary -#line 495 "parser.ypp" +#line 498 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2519 "parser.cpp" +#line 2524 "parser.cpp" break; case 92: // expr: expr_primitive -#line 496 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2525 "parser.cpp" +#line 2530 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 500 "parser.ypp" +#line 503 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2531 "parser.cpp" +#line 2536 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 501 "parser.ypp" +#line 504 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2537 "parser.cpp" +#line 2542 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 506 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2543 "parser.cpp" +#line 2548 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 508 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2549 "parser.cpp" +#line 2554 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 510 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2555 "parser.cpp" +#line 2560 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 512 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2561 "parser.cpp" +#line 2566 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 514 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2567 "parser.cpp" +#line 2572 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 516 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2573 "parser.cpp" +#line 2578 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 518 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2579 "parser.cpp" +#line 2584 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 520 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2585 "parser.cpp" +#line 2590 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 522 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2591 "parser.cpp" +#line 2596 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 524 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2597 "parser.cpp" +#line 2602 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 526 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2603 "parser.cpp" +#line 2608 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 531 "parser.ypp" +#line 534 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2609 "parser.cpp" +#line 2614 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 533 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2615 "parser.cpp" +#line 2620 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 538 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2621 "parser.cpp" +#line 2626 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 540 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2627 "parser.cpp" +#line 2632 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 545 "parser.ypp" +#line 548 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2633 "parser.cpp" +#line 2638 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 550 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2639 "parser.cpp" +#line 2644 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 552 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2645 "parser.cpp" +#line 2650 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 554 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2651 "parser.cpp" +#line 2656 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 556 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2657 "parser.cpp" +#line 2662 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 558 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2663 "parser.cpp" +#line 2668 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 560 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2669 "parser.cpp" +#line 2674 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 562 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2675 "parser.cpp" +#line 2680 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 564 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2681 "parser.cpp" +#line 2686 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 566 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2687 "parser.cpp" +#line 2692 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 568 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2693 "parser.cpp" +#line 2698 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 570 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2699 "parser.cpp" +#line 2704 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 572 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2705 "parser.cpp" +#line 2710 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 574 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2711 "parser.cpp" +#line 2716 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 576 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2717 "parser.cpp" +#line 2722 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 578 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2723 "parser.cpp" +#line 2728 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 580 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2729 "parser.cpp" +#line 2734 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 582 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2735 "parser.cpp" +#line 2740 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 584 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2741 "parser.cpp" +#line 2746 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 588 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2747 "parser.cpp" +#line 2752 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 589 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2753 "parser.cpp" +#line 2758 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 590 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2759 "parser.cpp" +#line 2764 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 591 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2765 "parser.cpp" +#line 2770 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 592 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2771 "parser.cpp" +#line 2776 "parser.cpp" break; case 134: // expr_primitive: expr_reference -#line 593 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2777 "parser.cpp" +#line 2782 "parser.cpp" break; case 135: // expr_primitive: expr_array -#line 594 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2783 "parser.cpp" +#line 2788 "parser.cpp" break; case 136: // expr_primitive: expr_field -#line 595 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2789 "parser.cpp" +#line 2794 "parser.cpp" break; case 137: // expr_primitive: expr_size -#line 596 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2795 "parser.cpp" +#line 2800 "parser.cpp" break; case 138: // expr_primitive: expr_paren -#line 597 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2801 "parser.cpp" +#line 2806 "parser.cpp" break; case 139: // expr_primitive: expr_thisthread -#line 598 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2807 "parser.cpp" +#line 2812 "parser.cpp" break; case 140: // expr_primitive: expr_empty_array -#line 599 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2813 "parser.cpp" +#line 2818 "parser.cpp" break; case 141: // expr_primitive: expr_undefined -#line 600 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2819 "parser.cpp" +#line 2824 "parser.cpp" break; case 142: // expr_primitive: expr_game -#line 601 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2825 "parser.cpp" +#line 2830 "parser.cpp" break; case 143: // expr_primitive: expr_self -#line 602 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2831 "parser.cpp" +#line 2836 "parser.cpp" break; case 144: // expr_primitive: expr_anim -#line 603 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2837 "parser.cpp" +#line 2842 "parser.cpp" break; case 145: // expr_primitive: expr_level -#line 604 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2843 "parser.cpp" +#line 2848 "parser.cpp" break; case 146: // expr_primitive: expr_animation -#line 605 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2849 "parser.cpp" +#line 2854 "parser.cpp" break; case 147: // expr_primitive: expr_animtree -#line 606 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2855 "parser.cpp" +#line 2860 "parser.cpp" break; case 148: // expr_primitive: expr_identifier -#line 607 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2861 "parser.cpp" +#line 2866 "parser.cpp" break; case 149: // expr_primitive: expr_istring -#line 608 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2867 "parser.cpp" +#line 2872 "parser.cpp" break; case 150: // expr_primitive: expr_string -#line 609 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2873 "parser.cpp" +#line 2878 "parser.cpp" break; case 151: // expr_primitive: expr_color -#line 610 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2879 "parser.cpp" +#line 2884 "parser.cpp" break; case 152: // expr_primitive: expr_vector -#line 611 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2885 "parser.cpp" +#line 2890 "parser.cpp" break; case 153: // expr_primitive: expr_float -#line 612 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2891 "parser.cpp" +#line 2896 "parser.cpp" break; case 154: // expr_primitive: expr_integer -#line 613 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2897 "parser.cpp" +#line 2902 "parser.cpp" break; case 155: // expr_primitive: expr_false -#line 614 "parser.ypp" +#line 617 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2903 "parser.cpp" +#line 2908 "parser.cpp" break; case 156: // expr_primitive: expr_true -#line 615 "parser.ypp" +#line 618 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2909 "parser.cpp" +#line 2914 "parser.cpp" break; case 157: // expr_complement: "~" expr -#line 620 "parser.ypp" +#line 623 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2915 "parser.cpp" +#line 2920 "parser.cpp" break; case 158: // expr_not: "!" expr -#line 625 "parser.ypp" +#line 628 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2921 "parser.cpp" +#line 2926 "parser.cpp" break; case 159: // expr_call: expr_function -#line 629 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2927 "parser.cpp" +#line 2932 "parser.cpp" break; case 160: // expr_call: expr_pointer -#line 630 "parser.ypp" +#line 633 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2933 "parser.cpp" +#line 2938 "parser.cpp" break; case 161: // expr_method: expr_object expr_function -#line 633 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2939 "parser.cpp" +#line 2944 "parser.cpp" break; case 162: // expr_method: expr_object expr_pointer -#line 634 "parser.ypp" +#line 637 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2945 "parser.cpp" +#line 2950 "parser.cpp" break; case 163: // expr_function: expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 642 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2951 "parser.cpp" +#line 2956 "parser.cpp" break; case 164: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 641 "parser.ypp" +#line 644 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2957 "parser.cpp" +#line 2962 "parser.cpp" break; case 165: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 643 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2963 "parser.cpp" +#line 2968 "parser.cpp" break; case 166: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2969 "parser.cpp" +#line 2974 "parser.cpp" break; case 167: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2975 "parser.cpp" +#line 2980 "parser.cpp" break; case 168: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 652 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2981 "parser.cpp" +#line 2986 "parser.cpp" break; case 169: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 654 "parser.ypp" +#line 657 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2987 "parser.cpp" +#line 2992 "parser.cpp" break; case 170: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 656 "parser.ypp" +#line 659 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2993 "parser.cpp" +#line 2998 "parser.cpp" break; case 171: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 658 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2999 "parser.cpp" +#line 3004 "parser.cpp" break; case 172: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3005 "parser.cpp" +#line 3010 "parser.cpp" break; case 173: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 665 "parser.ypp" +#line 668 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3011 "parser.cpp" +#line 3016 "parser.cpp" break; case 174: // expr_parameters: expr_parameters "," expr_identifier -#line 670 "parser.ypp" +#line 673 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3017 "parser.cpp" +#line 3022 "parser.cpp" break; case 175: // expr_parameters: expr_identifier -#line 672 "parser.ypp" +#line 675 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3023 "parser.cpp" +#line 3028 "parser.cpp" break; case 176: // expr_parameters: %empty -#line 674 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3029 "parser.cpp" +#line 3034 "parser.cpp" break; case 177: // expr_arguments: expr_arguments_no_empty -#line 679 "parser.ypp" +#line 682 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3035 "parser.cpp" +#line 3040 "parser.cpp" break; case 178: // expr_arguments: %empty -#line 681 "parser.ypp" +#line 684 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3041 "parser.cpp" +#line 3046 "parser.cpp" break; case 179: // expr_arguments_no_empty: expr_arguments "," expr -#line 686 "parser.ypp" +#line 689 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3047 "parser.cpp" +#line 3052 "parser.cpp" break; case 180: // expr_arguments_no_empty: expr -#line 688 "parser.ypp" +#line 691 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3053 "parser.cpp" +#line 3058 "parser.cpp" break; case 181: // expr_reference: "::" expr_identifier -#line 693 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3059 "parser.cpp" +#line 3064 "parser.cpp" break; case 182: // expr_reference: expr_path "::" expr_identifier -#line 695 "parser.ypp" +#line 698 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3065 "parser.cpp" +#line 3070 "parser.cpp" break; case 183: // expr_array: expr_object "[" expr "]" -#line 700 "parser.ypp" +#line 703 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3071 "parser.cpp" +#line 3076 "parser.cpp" break; case 184: // expr_field: expr_object "." expr_identifier -#line 705 "parser.ypp" +#line 708 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3077 "parser.cpp" +#line 3082 "parser.cpp" break; - case 185: // expr_size: expr_object ".size" + case 185: // expr_field: expr_object "field" #line 710 "parser.ypp" - { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3083 "parser.cpp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3088 "parser.cpp" break; - case 186: // expr_paren: "(" expr ")" + case 186: // expr_size: expr_object ".size" #line 715 "parser.ypp" - { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3089 "parser.cpp" + { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } +#line 3094 "parser.cpp" break; - case 187: // expr_object: expr_call -#line 719 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3095 "parser.cpp" - break; - - case 188: // expr_object: expr_method + case 187: // expr_paren: "(" expr ")" #line 720 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3101 "parser.cpp" + { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } +#line 3100 "parser.cpp" break; - case 189: // expr_object: expr_array -#line 721 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3107 "parser.cpp" - break; - - case 190: // expr_object: expr_field -#line 722 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3113 "parser.cpp" - break; - - case 191: // expr_object: expr_game -#line 723 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3119 "parser.cpp" - break; - - case 192: // expr_object: expr_self + case 188: // expr_object: expr_call #line 724 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3125 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3106 "parser.cpp" break; - case 193: // expr_object: expr_anim + case 189: // expr_object: expr_method #line 725 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3131 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3112 "parser.cpp" break; - case 194: // expr_object: expr_level + case 190: // expr_object: expr_array #line 726 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3137 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3118 "parser.cpp" break; - case 195: // expr_object: expr_identifier + case 191: // expr_object: expr_field #line 727 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3143 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3124 "parser.cpp" break; - case 196: // expr_thisthread: "thisthread" + case 192: // expr_object: expr_game +#line 728 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3130 "parser.cpp" + break; + + case 193: // expr_object: expr_self +#line 729 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3136 "parser.cpp" + break; + + case 194: // expr_object: expr_anim +#line 730 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3142 "parser.cpp" + break; + + case 195: // expr_object: expr_level +#line 731 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3148 "parser.cpp" + break; + + case 196: // expr_object: expr_identifier #line 732 "parser.ypp" - { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3149 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } +#line 3154 "parser.cpp" break; - case 197: // expr_empty_array: "[" "]" + case 197: // expr_thisthread: "thisthread" #line 737 "parser.ypp" - { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3155 "parser.cpp" + { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } +#line 3160 "parser.cpp" break; - case 198: // expr_undefined: "undefined" + case 198: // expr_empty_array: "[" "]" #line 742 "parser.ypp" - { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3161 "parser.cpp" + { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } +#line 3166 "parser.cpp" break; - case 199: // expr_game: "game" + case 199: // expr_undefined: "undefined" #line 747 "parser.ypp" - { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3167 "parser.cpp" + { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } +#line 3172 "parser.cpp" break; - case 200: // expr_self: "self" + case 200: // expr_game: "game" #line 752 "parser.ypp" - { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3173 "parser.cpp" + { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } +#line 3178 "parser.cpp" break; - case 201: // expr_anim: "anim" + case 201: // expr_self: "self" #line 757 "parser.ypp" - { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3179 "parser.cpp" + { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } +#line 3184 "parser.cpp" break; - case 202: // expr_level: "level" + case 202: // expr_anim: "anim" #line 762 "parser.ypp" - { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3185 "parser.cpp" + { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } +#line 3190 "parser.cpp" break; - case 203: // expr_animation: "%" "identifier" + case 203: // expr_level: "level" #line 767 "parser.ypp" - { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3191 "parser.cpp" + { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } +#line 3196 "parser.cpp" break; - case 204: // expr_animtree: "#animtree" + case 204: // expr_animation: "%" "identifier" #line 772 "parser.ypp" - { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3197 "parser.cpp" + { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3202 "parser.cpp" break; - case 205: // expr_identifier: "identifier" + case 205: // expr_animtree: "#animtree" #line 777 "parser.ypp" - { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3203 "parser.cpp" + { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } +#line 3208 "parser.cpp" break; - case 206: // expr_path: "path" + case 206: // expr_identifier: "identifier" #line 782 "parser.ypp" + { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3214 "parser.cpp" + break; + + case 207: // expr_path: "path" +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3209 "parser.cpp" +#line 3220 "parser.cpp" break; - case 207: // expr_path: expr_identifier -#line 784 "parser.ypp" - { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3215 "parser.cpp" - break; - - case 208: // expr_istring: "localized string" + case 208: // expr_path: expr_identifier #line 789 "parser.ypp" - { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3221 "parser.cpp" + { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } +#line 3226 "parser.cpp" break; - case 209: // expr_string: "string literal" + case 209: // expr_istring: "localized string" #line 794 "parser.ypp" - { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3227 "parser.cpp" + { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3232 "parser.cpp" break; - case 210: // expr_color: "color" + case 210: // expr_string: "string literal" #line 799 "parser.ypp" - { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3233 "parser.cpp" + { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3238 "parser.cpp" break; - case 211: // expr_vector: "(" expr "," expr "," expr ")" + case 211: // expr_color: "color" #line 804 "parser.ypp" - { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3239 "parser.cpp" + { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3244 "parser.cpp" break; - case 212: // expr_float: "-" "float" + case 212: // expr_vector: "(" expr "," expr "," expr ")" #line 809 "parser.ypp" + { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } +#line 3250 "parser.cpp" + break; + + case 213: // expr_float: "-" "float" +#line 814 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3245 "parser.cpp" +#line 3256 "parser.cpp" break; - case 213: // expr_float: "float" -#line 811 "parser.ypp" - { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3251 "parser.cpp" - break; - - case 214: // expr_integer: "-" "integer" + case 214: // expr_float: "float" #line 816 "parser.ypp" + { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3262 "parser.cpp" + break; + + case 215: // expr_integer: "-" "integer" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3257 "parser.cpp" +#line 3268 "parser.cpp" break; - case 215: // expr_integer: "integer" -#line 818 "parser.ypp" - { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3263 "parser.cpp" - break; - - case 216: // expr_false: "false" + case 216: // expr_integer: "integer" #line 823 "parser.ypp" - { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3269 "parser.cpp" + { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } +#line 3274 "parser.cpp" break; - case 217: // expr_true: "true" + case 217: // expr_false: "false" #line 828 "parser.ypp" + { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } +#line 3280 "parser.cpp" + break; + + case 218: // expr_true: "true" +#line 833 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3275 "parser.cpp" +#line 3286 "parser.cpp" break; -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" default: break; @@ -3469,7 +3480,7 @@ namespace xsk { namespace gsc { namespace h1 { "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", - "+", "-", "*", "/", "%", "path", "identifier", "string literal", + "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", "include", "declaration", @@ -3755,131 +3766,131 @@ namespace xsk { namespace gsc { namespace h1 { } - const short parser::yypact_ninf_ = -261; + const short parser::yypact_ninf_ = -267; - const short parser::yytable_ninf_ = -208; + const short parser::yytable_ninf_ = -209; const short parser::yypact_[] = { - 24, -261, -261, -71, -71, -23, -261, 39, 24, -261, - -261, -261, -261, -261, -261, -20, -261, -261, -5, -3, - -26, -261, -261, -261, -261, -35, 1143, -261, -261, -261, - 28, 17, -261, -261, -36, -33, -261, 27, -261, -261, - -261, -261, -261, -261, -261, 1143, 1015, -35, 1143, 1143, - -58, 7, -261, -261, -261, -261, 1897, -261, -261, -261, - -261, -261, 345, 435, -261, -261, -261, -261, 581, 609, - -261, -261, 614, -261, -261, -261, 848, 950, 1104, 1168, - -261, -261, 74, 46, -261, -261, -261, -261, -261, -261, - -261, -261, 54, 69, -35, 79, 73, 91, 83, 104, - 101, 110, 1222, 1015, -261, 1980, 111, 116, -261, -261, - -261, -261, -261, -261, -261, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, -261, 1207, -35, -261, -261, 122, - 121, 1143, -35, -261, 785, -261, -261, 1143, 1143, -35, - 1143, 1143, -35, 1143, -261, 1143, 1666, 1143, -261, 1862, - 114, 114, 2011, 2021, 2103, 2103, 53, 53, 53, 53, - 2052, 2093, 2062, 59, 59, -261, -261, -261, 1706, -261, - -35, 18, -261, 130, 836, 1143, 125, -11, 137, 989, - 138, 139, 150, 159, -53, 153, 154, 158, 1079, 160, - 163, 176, -261, 173, 127, 127, -261, -261, -261, 887, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, 168, 171, 174, 179, 180, -261, - -261, 683, -261, -261, -261, -261, 8, 1746, 21, 183, - 1786, 29, 186, 1826, 1010, 182, 1980, 1143, -261, 130, - -261, 1143, -261, 938, 1932, -261, 193, -261, 1143, 220, - 1143, 550, -35, 1143, 145, 191, 195, -261, -261, -261, - -261, 1967, -261, 1143, 1143, 1143, -261, -261, 210, 210, - -261, -261, -261, -261, -261, -261, -261, 202, 208, 212, - 216, -261, -261, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 205, -261, 1143, 213, -261, 1143, - 215, 1143, 222, 1980, 31, -261, -261, 214, 1388, 223, - 1422, 219, -261, -261, -261, 13, -6, 1456, -261, -261, - -261, 32, 50, 1666, 1143, 1143, 1143, 1143, 1980, 1980, - 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 230, - 51, 231, 60, 232, 1490, 1143, -261, -261, 989, 1143, - 989, 1143, 1143, -35, 69, 224, 225, 1524, 1266, 1310, - 1354, 1143, -261, 1143, -261, 1143, -261, 71, 263, 1558, - -261, 1980, 227, 1592, 260, -261, -261, -261, 233, 237, - 1143, 238, 1143, 239, 1143, 78, 84, 85, -261, 989, - 242, 550, 989, 1143, -261, -261, 252, -261, 253, -261, - 256, -261, -261, -261, -261, -261, 278, -261, 1626, 271, - 274, 276, 989, 989, -261, -261, -261, -261, -261 + 13, -267, -267, 8, 8, -11, -267, 27, 13, -267, + -267, -267, -267, -267, -267, -31, -267, -267, -16, -10, + -42, -267, -267, -267, -267, -38, 1203, -267, -267, -267, + 20, -21, -267, -267, -17, -5, -267, 29, -267, -267, + -267, -267, -267, -267, -267, 1203, 1073, -38, 1203, 1203, + 52, -2, -267, -267, -267, -267, 2007, -267, -267, -267, + -267, -267, 31, 354, -267, -267, -267, -267, 440, 813, + -267, -267, 943, -267, -267, -267, 1169, 1234, 1282, 1296, + -267, -267, 556, 49, -267, -267, -267, -267, -267, -267, + -267, -267, 43, 35, -38, 69, 79, 85, 93, 113, + 110, 119, 1333, 1073, -267, 2090, 118, 120, -267, -267, + -267, -267, -267, -267, -267, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, -267, 1268, -38, -267, -267, -267, + 126, 122, 1203, -38, -267, 787, -267, -267, 1203, 1203, + -38, 1203, 1203, -38, 1203, -267, 1203, 1069, 1203, -267, + 1972, 142, 142, 2121, 2131, 617, 617, 44, 44, 44, + 44, 2162, 2203, 2172, 73, 73, -267, -267, -267, 1777, + -267, -38, -8, -267, 128, 865, 1203, 129, -18, 132, + 1047, 136, 138, 143, 144, -64, 148, 135, 141, 1138, + 149, 153, 158, -267, 159, 123, 123, -267, -267, -267, + 917, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, 154, 155, 161, 165, 177, + -267, -267, 36, -267, -267, -267, -267, -22, 1817, 7, + 188, 1857, 9, 190, 1897, 1936, 186, 2090, 1203, -267, + 128, -267, 1203, -267, 995, 2042, -267, 192, -267, 1203, + 219, 1203, 542, -38, 1203, 150, 194, 196, -267, -267, + -267, -267, 2077, -267, 1203, 1203, 1203, -267, -267, 185, + 185, -267, -267, -267, -267, -267, -267, -267, 201, 206, + 207, 209, -267, -267, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 205, -267, 1203, 208, -267, + 1203, 210, 1203, 211, 2090, 11, -267, -267, 202, 1499, + 217, 1533, 213, -267, -267, -267, 677, 1, 1567, -267, + -267, -267, 17, 38, 1069, 1203, 1203, 1203, 1203, 2090, + 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, + 218, 45, 221, 46, 224, 1601, 1203, -267, -267, 1047, + 1203, 1047, 1203, 1203, -38, 35, 223, 225, 1635, 1377, + 1421, 1465, 1203, -267, 1203, -267, 1203, -267, 55, 264, + 1669, -267, 2090, 231, 1703, 241, -267, -267, -267, 232, + 233, 1203, 234, 1203, 237, 1203, 74, 90, 99, -267, + 1047, 238, 542, 1047, 1203, -267, -267, 248, -267, 249, + -267, 255, -267, -267, -267, -267, -267, 256, -267, 1737, + 251, 253, 254, 1047, 1047, -267, -267, -267, -267, -267 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 205, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 206, 207, 0, 0, - 0, 1, 4, 5, 6, 176, 0, 10, 11, 209, - 0, 0, 175, 204, 0, 0, 196, 0, 217, 216, - 198, 199, 200, 201, 202, 0, 178, 0, 0, 0, - 0, 0, 208, 210, 213, 215, 0, 90, 91, 92, + 3, 12, 13, 0, 0, 0, 206, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 207, 208, 0, 0, + 0, 1, 4, 5, 6, 176, 0, 10, 11, 210, + 0, 0, 175, 205, 0, 0, 197, 0, 218, 217, + 199, 200, 201, 202, 203, 0, 178, 0, 0, 0, + 0, 0, 209, 211, 214, 216, 0, 90, 91, 92, 129, 130, 131, 132, 159, 160, 133, 134, 135, 136, 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, 149, 150, 151, 152, 153, 154, - 155, 156, 0, 0, 0, 0, 207, 0, 0, 207, - 0, 0, 0, 178, 197, 180, 0, 177, 181, 158, - 157, 212, 214, 203, 18, 0, 0, 0, 0, 0, + 155, 156, 0, 0, 0, 0, 208, 0, 0, 208, + 0, 0, 0, 178, 198, 180, 0, 177, 181, 158, + 157, 213, 215, 204, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 161, 162, 207, - 0, 178, 0, 17, 0, 19, 174, 0, 178, 0, - 0, 178, 0, 0, 186, 0, 180, 0, 173, 0, - 122, 123, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 124, 125, 126, 127, 128, 0, 184, - 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 0, 185, 161, 162, + 208, 0, 178, 0, 17, 0, 19, 174, 0, 178, + 0, 0, 178, 0, 0, 187, 0, 180, 0, 173, + 0, 122, 123, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 0, + 184, 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 51, 20, 21, 0, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 0, 0, 0, 187, 188, 189, - 190, 0, 191, 192, 193, 194, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 183, 0, - 163, 178, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 178, 178, 0, 187, 188, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 165, 178, 0, 167, 178, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 178, 164, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 178, 166, 178, 168, 178, 211, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 178, 0, 178, 0, 178, 0, 0, 0, 169, 0, - 0, 55, 0, 0, 61, 63, 177, 66, 177, 68, - 177, 170, 171, 172, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 0, 0, 49, 0, 0, 0, 51, 20, 21, + 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 0, 0, 0, 188, 189, + 190, 191, 0, 192, 193, 194, 195, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 183, + 0, 163, 178, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 178, 178, 0, 188, 189, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 178, 0, 167, + 178, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 178, 164, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 166, 178, 168, 178, 212, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 178, 0, 178, 0, 178, 0, 0, 0, 169, + 0, 0, 55, 0, 0, 61, 63, 177, 66, 177, + 68, 177, 170, 171, 172, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -261, -261, -261, 321, 323, 324, -261, -261, -261, -183, - -261, -88, 100, -78, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, 187, -261, - -260, -257, -254, -261, -261, -261, -261, -261, -85, -12, - -70, -65, -261, -261, -128, -45, -261, 177, 247, -261, - -261, 257, -261, -261, -261, 275, 332, 359, 365, -261, - -261, 0, 6, -261, 2, -261, -261, -261, 142, -261, - -261 + -267, -267, -267, 294, 298, 301, -267, -267, -267, -72, + -267, -91, 146, -83, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 195, -267, + -266, -260, -258, -267, -267, -267, -267, -267, -130, -12, + -67, -65, -267, -267, 340, -45, -267, -6, 246, -267, + -267, 252, -267, -267, -267, 280, 329, 348, 366, -267, + -267, 0, 6, -267, -9, -267, -267, -267, 137, -267, + -267 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, - 207, 208, 209, 331, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 105, 392, - 234, 235, 236, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 31, 106, 182, 67, 68, 69, 70, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 207, + 208, 209, 210, 332, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 105, 393, + 235, 236, 237, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 @@ -3888,209 +3899,220 @@ namespace xsk { namespace gsc { namespace h1 { const short parser::yytable_[] = { - 15, 107, 137, 17, 17, 145, 269, 138, 15, 18, - 19, 332, 95, 181, 333, 98, 372, 334, 16, 6, - 248, 20, 30, 251, 25, 32, 291, 1, 2, 3, - 4, 5, 274, 266, 96, 99, 111, 112, 29, 21, - 97, 100, 55, 267, 373, 34, 35, 108, 37, 27, - 26, 28, 141, 16, 6, 6, 16, 6, 107, 237, - -207, 135, 93, 260, 136, 29, 315, 94, 157, 301, - 302, 157, 139, 92, 318, 101, 366, 375, 140, 157, - 291, 157, 157, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 146, 376, 382, 113, 142, 237, - 157, 157, 16, 6, 237, 384, -195, -195, 143, -195, - 157, 116, 117, -195, 6, 144, 408, 148, 141, 286, - 286, 157, -195, 421, 237, -195, -207, 147, 157, 422, - 423, 150, 238, 324, 157, 157, 179, 129, 130, 131, - 132, 133, 183, 149, 246, 131, 132, 133, 151, 249, - 140, 332, 252, 152, 333, 341, 342, 334, 153, 34, - 35, 157, 37, -195, -195, 158, 141, 41, 42, 43, - 44, 137, 238, 180, 261, 203, 138, 238, 237, 265, - 259, 268, 270, 271, 246, 388, 286, 390, 360, 246, - 140, 362, 287, 287, 272, 140, 275, 238, 129, 130, - 131, 132, 133, 273, 246, 246, 277, 283, 278, 246, - 140, 140, 279, 56, 282, 140, 16, 6, 137, 137, - 284, 285, 292, 138, 138, 293, 424, 316, 294, 427, - 319, 322, 102, 295, 296, 109, 110, 387, 327, 329, - 112, 139, 34, 35, 338, 37, 344, 140, 339, 437, - 438, 238, 345, 405, 359, 406, 346, 407, 135, 287, - 347, 136, 361, 246, 363, 137, 365, 369, 367, 140, - 138, 246, 336, 371, 381, 383, 385, 140, 396, 397, - 409, 411, 413, 237, 263, 237, 395, 414, 139, 139, - 156, 415, 417, 419, 140, 140, 425, 429, 430, 16, - 6, 431, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 239, 178, 432, 237, 434, 286, 237, 435, 22, - 436, 23, 24, 426, 247, 139, 276, 250, 0, 0, - 253, 140, 254, 0, 256, 0, 0, 237, 237, 0, - 0, 0, 0, 0, 0, 416, 238, 418, 238, 420, - 0, 239, 0, 0, 0, 0, 239, 0, 246, 0, - 246, 0, 264, 394, 140, 0, 140, -187, -187, 0, - -187, 239, 239, 0, -187, 281, 239, 0, 0, 0, - 0, 240, 0, -187, 0, 0, -187, 238, 0, 287, - 238, 241, 0, 0, 0, 0, 0, 0, 0, 246, - 0, 246, 246, 0, 0, 140, 0, 140, 140, 242, - 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 246, 246, -187, -187, 240, 0, 140, 140, - 239, 241, 0, 0, 323, 0, 241, 0, 239, 0, - 0, 240, 240, 0, 0, 328, 240, 330, 0, 242, - 337, 288, 289, 0, 242, 0, 241, -188, -188, 0, - -188, 0, 343, 0, -188, 0, 243, 0, 0, 242, - 242, 0, 0, -188, 242, 0, -188, 0, 0, 0, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 0, 0, 244, 0, 0, 0, 0, 364, 245, - 240, 0, 0, 0, 0, 0, 243, 0, 240, 0, - 241, 243, 0, 0, -188, -188, 0, 0, 335, 0, - 0, 377, 378, 379, 380, 0, 243, 243, 242, 0, - 0, 243, 0, 244, 0, 239, 242, 239, 244, 245, - 0, 0, 0, 0, 245, 0, 389, 0, 391, 393, - 0, 0, 0, 244, 244, 0, 0, 0, 244, 245, - 245, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 0, 34, 35, 0, 37, 239, 0, 239, 239, - 41, 42, 43, 44, 0, 243, 0, 0, 203, 0, - 428, 0, 0, 243, 0, 0, 204, 205, 0, 239, - 239, 0, 0, -189, -189, 240, -189, 240, 0, 0, - -189, 0, 244, 0, 0, 241, 0, 241, 245, -189, - 244, 0, -189, 0, 0, 0, 245, 0, 0, 16, - 6, -190, -190, 242, -190, 242, 34, 35, -190, 37, - 0, 0, 0, 134, 0, 0, 240, -190, 240, 240, - -190, 0, 135, 0, 0, 136, 241, 0, 335, 241, - -189, -189, 0, 0, 0, 0, 0, 0, 0, 240, - 240, 0, 0, 0, 242, 0, 242, 242, 0, 241, - 241, 0, 297, 298, 0, 299, 300, 0, -190, -190, - 243, 0, 243, 16, 6, 0, 0, 242, 242, 0, - 0, 0, 0, 0, 0, 34, 35, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 244, - 0, 135, 0, 245, 136, 245, 0, 0, 0, 301, - 302, 243, 0, 243, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 243, 243, 0, 0, 244, 0, - 244, 244, 16, 6, 245, 0, 245, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 244, 244, 0, 0, 0, 185, 245, 245, 186, - 187, 188, 0, 189, 190, 191, 192, 0, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 34, 35, 0, - 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, - 0, 144, 202, 203, 0, 0, 0, 0, 0, 184, - 262, 204, 205, 0, 0, 0, 0, 185, 0, 0, - 186, 187, 188, 0, 189, 190, 191, 192, 0, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, - 0, 37, 0, 0, 16, 6, 41, 42, 43, 44, - -191, -191, 144, -191, 203, 0, 0, -191, 0, 0, - 184, 0, 204, 205, 0, 0, -191, 0, 185, -191, - 0, 186, 187, 188, 0, 189, 190, 191, 192, 0, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 34, + 15, 107, 146, 17, 17, 138, 333, 139, 15, 18, + 19, 30, 334, 25, 335, 238, 1, 2, 3, 4, + 5, 275, 142, 373, 93, 32, 267, 21, 29, 94, + -208, 95, 55, 20, 96, 99, 268, 261, 27, 26, + 97, 100, 158, 98, 28, 298, 299, 108, 300, 301, + 29, 374, 316, 6, 319, 238, 367, 158, 107, 158, + 238, 158, 376, -188, -188, 92, -188, 158, 34, 35, + -188, 37, 140, 16, 6, 287, 287, 101, 141, -188, + 238, 145, -188, 377, 135, 16, 6, 136, 158, 113, + 383, 385, 302, 303, 147, 158, 158, 144, 16, 6, + 409, 143, 116, 117, 6, 158, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 148, 270, 422, + -188, -188, -188, 149, 158, 137, 16, 6, 129, 130, + 131, 132, 133, 239, 238, 423, 180, 150, 292, 240, + 158, 151, 287, 184, 424, 247, 333, 111, 112, 158, + 250, 141, 334, 253, 335, 34, 35, 152, 37, 131, + 132, 133, 153, 41, 42, 43, 44, 154, 158, 159, + 142, 204, 262, 239, 181, 138, 269, 139, 239, 240, + 271, 260, 272, 266, 240, 247, 276, 273, 274, 279, + 247, 141, 292, 288, 288, 280, 141, 284, 239, 240, + 240, 278, 285, 283, 240, 247, 247, 286, 293, 294, + 247, 141, 141, 16, 6, 295, 141, 34, 35, 296, + 37, 56, 138, 138, 139, 139, 129, 130, 131, 132, + 133, 297, 317, 135, 320, 323, 136, 328, 330, 238, + 102, 238, 140, 109, 110, 345, 112, 339, 141, 340, + 346, 347, 239, 348, 360, 366, 368, 362, 240, 364, + 288, 370, 382, 414, 247, 384, 240, 372, 386, 138, + 141, 139, 247, 337, 137, 16, 6, 397, 141, 398, + 238, 410, 287, 238, 396, 412, 415, 416, 418, 140, + 140, 420, 426, 430, 431, 141, 141, 389, 157, 391, + 432, 433, 22, 238, 238, 435, 23, 436, 437, 24, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 427, + 179, 264, 277, 0, 0, 0, 140, 0, 425, 0, + 0, 428, 141, 248, 0, 0, 251, 0, 0, 254, + 0, 255, 0, 257, 0, 0, 417, 239, 419, 239, + 421, 438, 439, 240, 0, 240, 0, 0, 0, 247, + 0, 247, 0, 0, 395, 141, 0, 141, 0, 0, + 0, 265, 0, 0, 0, 0, -189, -189, 0, -189, + 0, 241, 0, -189, 282, 0, 0, 242, 239, 0, + 288, 239, -189, 0, 240, -189, 240, 240, 0, 0, + 247, 0, 247, 247, 0, 0, 141, 0, 141, 141, + 0, 239, 239, 0, 0, 243, 0, 240, 240, 0, + 0, 241, 0, 247, 247, 0, 241, 242, 0, 141, + 141, 0, 242, -189, -189, -189, 0, 0, 0, 0, + 0, 241, 241, 324, 0, 0, 241, 289, 290, 0, + 0, 0, 242, 0, 329, 243, 331, 0, 0, 338, + 243, 0, -190, -190, 244, -190, 0, 0, 0, -190, + 0, 344, 182, 0, 0, 243, 243, 0, -190, 249, + 243, -190, 252, 245, 0, 0, 0, 0, 0, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 241, 246, 0, 0, 244, 0, 242, 365, 241, 244, + 0, 0, 0, 0, 336, 0, 0, 0, 0, -190, + -190, -190, 0, 245, 244, 244, 0, 0, 245, 244, + 378, 379, 380, 381, 243, 0, 0, 0, 0, 0, + 0, 246, 243, 245, 245, 0, 246, 0, 245, 0, + 0, 0, 0, 0, 0, 390, 0, 392, 394, 0, + 0, 246, 246, 0, 34, 35, 246, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, -196, -196, + 204, -196, 0, 244, 0, -196, 0, 0, 205, 206, + 142, 244, 325, 0, -196, 0, 0, -196, -208, 429, + 0, 0, 245, 0, 0, 241, 0, 241, 0, 0, + 245, 242, 0, 242, 342, 343, 0, 0, 0, 0, + 246, 0, 16, 6, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, -196, -196, -196, 0, 243, + 0, 243, 0, 0, 0, 0, 241, 361, 241, 241, + 363, 0, 242, 0, 336, 242, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 117, 0, 0, 241, + 241, 122, 123, 124, 125, 242, 242, 0, 0, 0, + 243, 0, 243, 243, 0, 0, 0, 0, 244, 0, + 244, 129, 130, 131, 132, 133, 388, 0, 0, 34, + 35, 0, 37, 243, 243, 0, 0, 245, 0, 245, + 0, 0, 406, 0, 407, 135, 408, 0, 136, 0, + 0, 0, 0, 302, 303, 246, 0, 246, 0, 244, + 0, 244, 244, 0, 0, 0, 0, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 245, 0, + 245, 245, 244, 244, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 246, 246, + 0, 245, 245, 0, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 186, 246, + 246, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, + 44, 0, 0, 145, 203, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, -191, -191, 0, -191, 0, + 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, + 0, -191, 0, 0, -191, 0, 0, 0, 185, 263, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, -191, -191, -191, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, 43, - 44, 0, 0, 144, 290, 203, 0, -191, -191, 0, - 0, 184, 325, 204, 205, 0, 0, 0, 0, 185, - 0, 0, 186, 187, 188, 0, 189, 190, 191, 192, - 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, - 43, 44, -192, -192, 144, -192, 203, 0, 0, -192, - 0, 0, 184, 0, 204, 205, 0, 0, -192, 0, - 185, -192, 0, 186, 187, 188, 0, 189, 190, 191, - 192, 0, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 34, 35, 33, 37, 0, 0, 16, 6, 41, - 42, 43, 44, 0, 0, 144, 0, 203, 0, -192, - -192, 0, 0, 0, 0, 204, 205, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 321, 0, 0, 103, 104, 115, 0, 47, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 16, 6, - 0, 0, 0, 48, 49, 0, 0, 33, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, - 0, 47, 0, 280, 0, 0, -193, -193, 0, -193, - 0, 0, 0, -193, 0, 0, 0, 48, 49, 0, - 0, 33, -193, 0, 0, -193, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 51, 16, 6, + 44, 0, 0, 145, 291, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 0, 37, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 136, 0, 0, 0, 185, 326, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, 137, 16, 6, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 33, 37, 0, 0, 16, 6, 41, 42, 43, + 44, 0, 0, 145, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 256, 0, + 0, 103, 104, 0, 115, 47, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 16, 6, 0, + 0, 48, 49, 0, 0, 0, 33, 0, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 281, 0, 0, 0, 0, 0, 0, 0, + 0, -192, -192, 0, -192, 0, 48, 49, -192, 0, + 0, 33, 0, 0, 0, 0, 0, -192, 0, 0, + -192, 0, 0, 50, 0, 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 46, 0, -193, -193, 47, 0, 0, 0, 0, - -194, -194, 0, -194, 0, 0, 0, -194, 0, 0, - 0, 48, 49, 0, 0, 33, -194, 0, 0, -194, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 0, 0, 0, 103, 0, -194, -194, 47, - 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 155, 0, 0, 48, 49, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 50, 0, 0, 51, 16, 6, 29, 52, - 53, 54, 55, 126, 127, 128, 129, 130, 131, 132, - 133, 399, 0, 0, 0, 0, 400, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 401, 0, 0, 0, 0, - 402, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, + 0, 46, 0, 0, 0, 47, 0, 0, -192, -192, + -192, 0, 0, 0, 0, 0, -193, -193, 0, -193, + 0, 48, 49, -193, 0, 0, 33, 0, 0, 0, + 0, 0, -193, 0, 0, -193, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, -194, -194, 103, -194, 0, 0, + 47, -194, 0, -193, -193, -193, 0, 0, -195, -195, + -194, -195, 0, -194, 0, -195, 48, 49, 0, 0, + 0, 0, 0, 0, -195, 0, 0, -195, 0, 0, + 0, 0, 0, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 0, 0, 0, 0, 0, + 0, -194, -194, -194, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 156, 0, -195, -195, -195, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 400, 0, 0, 0, 0, 401, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 402, 0, 0, 0, + 0, 403, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 403, - 0, 0, 0, 0, 404, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 369, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 375, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 387, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 386, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 410, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 433, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 255, 0, 0, 0, 0, + 399, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 434, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 259, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 315, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 321, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 322, 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 258, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 314, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 317, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 320, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 257, 0, 115, 0, 0, + 129, 130, 131, 132, 133, 258, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, - 128, 129, 130, 131, 132, 133, 326, 115, 0, 0, + 128, 129, 130, 131, 132, 133, 327, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 340, 115, 0, 0, 116, 117, 118, 119, 120, + 133, 341, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, @@ -4104,203 +4126,213 @@ namespace xsk { namespace gsc { namespace h1 { 0, 0, 0, 0, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, 123, 124, - 125, 116, 117, 0, 0, 0, 0, 122, 123, 124, - 125, 0, 0, 0, 0, 0, 0, 129, 130, 131, - 132, 133, 0, 0, 0, 0, 0, 129, 130, 131, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 72, 3, 4, 93, 189, 72, 8, 3, - 4, 271, 48, 141, 271, 48, 22, 271, 89, 90, - 148, 44, 20, 151, 44, 25, 209, 3, 4, 5, - 6, 7, 85, 44, 34, 35, 94, 95, 91, 0, - 34, 35, 95, 54, 50, 32, 33, 47, 35, 54, - 70, 54, 44, 89, 90, 90, 89, 90, 103, 144, - 52, 48, 45, 45, 51, 91, 45, 50, 50, 56, - 57, 50, 72, 45, 45, 48, 45, 45, 72, 50, - 263, 50, 50, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 94, 45, 45, 90, 52, 184, - 50, 50, 89, 90, 189, 45, 32, 33, 54, 35, - 50, 58, 59, 39, 90, 46, 45, 44, 44, 204, - 205, 50, 48, 45, 209, 51, 52, 48, 50, 45, - 45, 48, 144, 261, 50, 50, 136, 84, 85, 86, - 87, 88, 142, 52, 144, 86, 87, 88, 44, 149, - 144, 411, 152, 52, 411, 283, 284, 411, 48, 32, - 33, 50, 35, 89, 90, 49, 44, 40, 41, 42, - 43, 241, 184, 52, 44, 48, 241, 189, 263, 54, - 180, 44, 44, 44, 184, 368, 271, 370, 316, 189, - 184, 319, 204, 205, 44, 189, 194, 209, 84, 85, - 86, 87, 88, 44, 204, 205, 53, 44, 54, 209, - 204, 205, 54, 26, 54, 209, 89, 90, 288, 289, - 44, 48, 54, 288, 289, 54, 409, 44, 54, 412, - 44, 49, 45, 54, 54, 48, 49, 365, 45, 19, - 95, 241, 32, 33, 53, 35, 44, 241, 53, 432, - 433, 263, 44, 381, 49, 383, 44, 385, 48, 271, - 44, 51, 49, 263, 49, 335, 44, 44, 54, 263, - 335, 271, 272, 54, 44, 44, 44, 271, 54, 54, - 17, 54, 22, 368, 184, 370, 374, 54, 288, 289, - 103, 54, 54, 54, 288, 289, 54, 45, 45, 89, - 90, 45, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 144, 135, 45, 409, 54, 411, 412, 54, 8, - 54, 8, 8, 411, 147, 335, 194, 150, -1, -1, - 153, 335, 155, -1, 157, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 400, 368, 402, 370, 404, - -1, 184, -1, -1, -1, -1, 189, -1, 368, -1, - 370, -1, 185, 373, 368, -1, 370, 32, 33, -1, - 35, 204, 205, -1, 39, 198, 209, -1, -1, -1, - -1, 144, -1, 48, -1, -1, 51, 409, -1, 411, - 412, 144, -1, -1, -1, -1, -1, -1, -1, 409, - -1, 411, 412, -1, -1, 409, -1, 411, 412, 144, - 432, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 184, 432, 433, 89, 90, 189, -1, 432, 433, - 263, 184, -1, -1, 257, -1, 189, -1, 271, -1, - -1, 204, 205, -1, -1, 268, 209, 270, -1, 184, - 273, 204, 205, -1, 189, -1, 209, 32, 33, -1, - 35, -1, 285, -1, 39, -1, 144, -1, -1, 204, - 205, -1, -1, 48, 209, -1, 51, -1, -1, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, 144, -1, -1, -1, -1, 321, 144, - 263, -1, -1, -1, -1, -1, 184, -1, 271, -1, - 263, 189, -1, -1, 89, 90, -1, -1, 271, -1, - -1, 344, 345, 346, 347, -1, 204, 205, 263, -1, - -1, 209, -1, 184, -1, 368, 271, 370, 189, 184, - -1, -1, -1, -1, 189, -1, 369, -1, 371, 372, - -1, -1, -1, 204, 205, -1, -1, -1, 209, 204, - 205, -1, -1, -1, 209, -1, -1, -1, -1, -1, - -1, -1, 32, 33, -1, 35, 409, -1, 411, 412, - 40, 41, 42, 43, -1, 263, -1, -1, 48, -1, - 413, -1, -1, 271, -1, -1, 56, 57, -1, 432, - 433, -1, -1, 32, 33, 368, 35, 370, -1, -1, - 39, -1, 263, -1, -1, 368, -1, 370, 263, 48, - 271, -1, 51, -1, -1, -1, 271, -1, -1, 89, - 90, 32, 33, 368, 35, 370, 32, 33, 39, 35, - -1, -1, -1, 39, -1, -1, 409, 48, 411, 412, - 51, -1, 48, -1, -1, 51, 409, -1, 411, 412, - 89, 90, -1, -1, -1, -1, -1, -1, -1, 432, - 433, -1, -1, -1, 409, -1, 411, 412, -1, 432, - 433, -1, 9, 10, -1, 12, 13, -1, 89, 90, - 368, -1, 370, 89, 90, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 32, 33, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 48, -1, 368, 51, 370, -1, -1, -1, 56, - 57, 409, -1, 411, 412, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 432, 433, -1, -1, 409, -1, - 411, 412, 89, 90, 409, -1, 411, 412, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, - -1, 432, 433, -1, -1, -1, 11, 432, 433, 14, + 0, 46, 93, 3, 4, 72, 272, 72, 8, 3, + 4, 20, 272, 44, 272, 145, 3, 4, 5, 6, + 7, 85, 44, 22, 45, 25, 44, 0, 92, 50, + 52, 48, 96, 44, 34, 35, 54, 45, 54, 70, + 34, 35, 50, 48, 54, 9, 10, 47, 12, 13, + 92, 50, 45, 91, 45, 185, 45, 50, 103, 50, + 190, 50, 45, 32, 33, 45, 35, 50, 32, 33, + 39, 35, 72, 90, 91, 205, 206, 48, 72, 48, + 210, 46, 51, 45, 48, 90, 91, 51, 50, 91, + 45, 45, 56, 57, 94, 50, 50, 54, 90, 91, + 45, 52, 58, 59, 91, 50, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 48, 190, 45, + 89, 90, 91, 44, 50, 89, 90, 91, 84, 85, + 86, 87, 88, 145, 264, 45, 136, 52, 210, 145, + 50, 48, 272, 143, 45, 145, 412, 95, 96, 50, + 150, 145, 412, 153, 412, 32, 33, 44, 35, 86, + 87, 88, 52, 40, 41, 42, 43, 48, 50, 49, + 44, 48, 44, 185, 52, 242, 44, 242, 190, 185, + 44, 181, 44, 54, 190, 185, 195, 44, 44, 54, + 190, 185, 264, 205, 206, 54, 190, 44, 210, 205, + 206, 53, 44, 54, 210, 205, 206, 48, 54, 54, + 210, 205, 206, 90, 91, 54, 210, 32, 33, 54, + 35, 26, 289, 290, 289, 290, 84, 85, 86, 87, + 88, 54, 44, 48, 44, 49, 51, 45, 19, 369, + 45, 371, 242, 48, 49, 44, 96, 53, 242, 53, + 44, 44, 264, 44, 49, 44, 54, 49, 264, 49, + 272, 44, 44, 22, 264, 44, 272, 54, 44, 336, + 264, 336, 272, 273, 89, 90, 91, 54, 272, 54, + 410, 17, 412, 413, 375, 54, 54, 54, 54, 289, + 290, 54, 54, 45, 45, 289, 290, 369, 103, 371, + 45, 45, 8, 433, 434, 54, 8, 54, 54, 8, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 412, + 135, 185, 195, -1, -1, -1, 336, -1, 410, -1, + -1, 413, 336, 148, -1, -1, 151, -1, -1, 154, + -1, 156, -1, 158, -1, -1, 401, 369, 403, 371, + 405, 433, 434, 369, -1, 371, -1, -1, -1, 369, + -1, 371, -1, -1, 374, 369, -1, 371, -1, -1, + -1, 186, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 145, -1, 39, 199, -1, -1, 145, 410, -1, + 412, 413, 48, -1, 410, 51, 412, 413, -1, -1, + 410, -1, 412, 413, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, 145, -1, 433, 434, -1, + -1, 185, -1, 433, 434, -1, 190, 185, -1, 433, + 434, -1, 190, 89, 90, 91, -1, -1, -1, -1, + -1, 205, 206, 258, -1, -1, 210, 205, 206, -1, + -1, -1, 210, -1, 269, 185, 271, -1, -1, 274, + 190, -1, 32, 33, 145, 35, -1, -1, -1, 39, + -1, 286, 142, -1, -1, 205, 206, -1, 48, 149, + 210, 51, 152, 145, -1, -1, -1, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 264, 145, -1, -1, 185, -1, 264, 322, 272, 190, + -1, -1, -1, -1, 272, -1, -1, -1, -1, 89, + 90, 91, -1, 185, 205, 206, -1, -1, 190, 210, + 345, 346, 347, 348, 264, -1, -1, -1, -1, -1, + -1, 185, 272, 205, 206, -1, 190, -1, 210, -1, + -1, -1, -1, -1, -1, 370, -1, 372, 373, -1, + -1, 205, 206, -1, 32, 33, 210, 35, -1, -1, + -1, -1, 40, 41, 42, 43, -1, -1, 32, 33, + 48, 35, -1, 264, -1, 39, -1, -1, 56, 57, + 44, 272, 262, -1, 48, -1, -1, 51, 52, 414, + -1, -1, 264, -1, -1, 369, -1, 371, -1, -1, + 272, 369, -1, 371, 284, 285, -1, -1, -1, -1, + 264, -1, 90, 91, -1, -1, -1, -1, 272, -1, + -1, -1, -1, -1, -1, 89, 90, 91, -1, 369, + -1, 371, -1, -1, -1, -1, 410, 317, 412, 413, + 320, -1, 410, -1, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, 433, + 434, 64, 65, 66, 67, 433, 434, -1, -1, -1, + 410, -1, 412, 413, -1, -1, -1, -1, 369, -1, + 371, 84, 85, 86, 87, 88, 366, -1, -1, 32, + 33, -1, 35, 433, 434, -1, -1, 369, -1, 371, + -1, -1, 382, -1, 384, 48, 386, -1, 51, -1, + -1, -1, -1, 56, 57, 369, -1, 371, -1, 410, + -1, 412, 413, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 410, -1, + 412, 413, 433, 434, -1, -1, 89, 90, 91, -1, + -1, -1, -1, -1, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, -1, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, 11, 433, + 434, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, -1, -1, -1, -1, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, 3, - 4, 56, 57, -1, -1, -1, -1, 11, -1, -1, - 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, 35, -1, -1, 89, 90, 40, 41, 42, 43, - 32, 33, 46, 35, 48, -1, -1, 39, -1, -1, - 3, -1, 56, 57, -1, -1, 48, -1, 11, 51, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, 35, -1, -1, 89, 90, 40, 41, 42, - 43, -1, -1, 46, 47, 48, -1, 89, 90, -1, - -1, 3, 4, 56, 57, -1, -1, -1, -1, 11, - -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, -1, -1, 89, 90, 40, 41, - 42, 43, 32, 33, 46, 35, 48, -1, -1, 39, - -1, -1, 3, -1, 56, 57, -1, -1, 48, -1, - 11, 51, -1, 14, 15, 16, -1, 18, 19, 20, - 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 8, 35, -1, -1, 89, 90, 40, - 41, 42, 43, -1, -1, 46, -1, 48, -1, 89, - 90, -1, -1, -1, -1, 56, 57, 32, 33, 34, - 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 50, -1, -1, 48, 49, 55, -1, 52, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 89, 90, - -1, -1, -1, 68, 69, -1, -1, 8, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, -1, - 85, -1, -1, 88, 89, 90, 91, 92, 93, 94, - 95, 32, 33, 34, 35, 36, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, 48, -1, -1, - -1, 52, -1, 54, -1, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, 68, 69, -1, - -1, 8, 48, -1, -1, 51, -1, -1, -1, -1, - -1, -1, -1, -1, 85, -1, -1, 88, 89, 90, - 91, 92, 93, 94, 95, 32, 33, 34, 35, 36, + 33, -1, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, + -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 8, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, -1, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 49, -1, + -1, 48, 49, -1, 55, 52, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 90, 91, -1, + -1, 68, 69, -1, -1, -1, 8, -1, -1, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, -1, -1, -1, + 52, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 32, 33, -1, 35, -1, 68, 69, 39, -1, + -1, 8, -1, -1, -1, -1, -1, 48, -1, -1, + 51, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, - -1, 48, -1, 89, 90, 52, -1, -1, -1, -1, - 32, 33, -1, 35, -1, -1, -1, 39, -1, -1, - -1, 68, 69, -1, -1, 8, 48, -1, -1, 51, - -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, - -1, 88, 89, 90, 91, 92, 93, 94, 95, 32, - 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, 48, -1, 89, 90, 52, - -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, - -1, -1, 50, -1, -1, 68, 69, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, 85, -1, -1, 88, 89, 90, 91, 92, - 93, 94, 95, 81, 82, 83, 84, 85, 86, 87, - 88, 45, -1, -1, -1, -1, 50, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 45, -1, -1, -1, -1, - 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, + -1, 48, -1, -1, -1, 52, -1, -1, 89, 90, + 91, -1, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 68, 69, 39, -1, -1, 8, -1, -1, -1, + -1, -1, 48, -1, -1, 51, -1, -1, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, 32, 33, 48, 35, -1, -1, + 52, 39, -1, 89, 90, 91, -1, -1, 32, 33, + 48, 35, -1, 51, -1, 39, 68, 69, -1, -1, + -1, -1, -1, -1, 48, -1, -1, 51, -1, -1, + -1, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, -1, -1, -1, -1, -1, + -1, 89, 90, 91, -1, -1, -1, -1, 45, -1, + -1, -1, -1, 50, -1, 89, 90, 91, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 45, -1, -1, -1, -1, 50, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 45, -1, -1, -1, + -1, 50, -1, -1, -1, -1, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 45, - -1, -1, -1, -1, 50, -1, -1, -1, -1, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 45, -1, -1, -1, -1, 50, -1, -1, -1, -1, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 45, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 45, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, + 45, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, @@ -4329,86 +4361,85 @@ namespace xsk { namespace gsc { namespace h1 { -1, -1, -1, -1, 82, 83, 84, 85, 86, 87, 88, -1, -1, -1, 82, -1, 84, 85, 86, 87, 88, 58, 59, -1, -1, 62, 63, 64, 65, 66, - 67, 58, 59, -1, -1, -1, -1, 64, 65, 66, - 67, -1, -1, -1, -1, -1, -1, 84, 85, 86, - 87, 88, -1, -1, -1, -1, -1, 84, 85, 86, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 84, 85, 86, 87, 88 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, - 109, 110, 111, 112, 113, 176, 89, 176, 177, 177, - 44, 0, 108, 109, 110, 44, 70, 54, 54, 91, - 179, 158, 176, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 91, 107, 108, 109, + 110, 111, 112, 113, 114, 177, 90, 177, 178, 178, + 44, 0, 109, 110, 111, 44, 70, 54, 54, 92, + 180, 159, 177, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 52, 68, 69, - 85, 88, 92, 93, 94, 95, 143, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 45, 45, 50, 48, 176, 177, 48, 176, - 177, 48, 143, 48, 49, 143, 159, 160, 176, 143, - 143, 94, 95, 90, 54, 55, 58, 59, 60, 61, + 85, 88, 93, 94, 95, 96, 144, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 45, 45, 50, 48, 177, 178, 48, 177, + 178, 48, 144, 48, 49, 144, 160, 161, 177, 144, + 144, 95, 96, 91, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 81, 82, 83, 84, - 85, 86, 87, 88, 39, 48, 51, 155, 156, 176, - 177, 44, 52, 54, 46, 116, 176, 48, 44, 52, - 48, 44, 52, 48, 45, 50, 143, 50, 49, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 176, - 52, 159, 160, 176, 3, 11, 14, 15, 16, 18, - 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 47, 48, 56, 57, 114, 115, 116, 117, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 85, 86, 87, 88, 39, 48, 51, 89, 156, 157, + 177, 178, 44, 52, 54, 46, 117, 177, 48, 44, + 52, 48, 44, 52, 48, 45, 50, 144, 50, 49, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 177, 52, 160, 161, 177, 3, 11, 14, 15, 16, + 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 47, 48, 56, 57, 115, 116, 117, + 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 145, 146, 147, 153, 154, 162, - 163, 166, 170, 171, 172, 173, 176, 143, 159, 176, - 143, 159, 176, 143, 143, 49, 143, 53, 49, 176, - 45, 44, 4, 117, 143, 54, 44, 54, 44, 114, - 44, 44, 44, 44, 85, 179, 183, 53, 54, 54, - 54, 143, 54, 44, 44, 48, 153, 154, 166, 166, - 47, 114, 54, 54, 54, 54, 54, 9, 10, 12, - 13, 56, 57, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 49, 45, 44, 49, 45, 44, - 49, 50, 49, 143, 159, 4, 54, 45, 143, 19, - 143, 118, 145, 146, 147, 166, 176, 143, 53, 53, - 54, 159, 159, 143, 44, 44, 44, 44, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 49, - 159, 49, 159, 49, 143, 44, 45, 54, 45, 44, - 45, 54, 22, 50, 45, 45, 45, 143, 143, 143, - 143, 44, 45, 44, 45, 44, 45, 159, 114, 143, - 114, 143, 144, 143, 176, 116, 54, 54, 45, 45, - 50, 45, 50, 45, 50, 159, 159, 159, 45, 17, - 45, 54, 45, 22, 54, 54, 160, 54, 160, 54, - 160, 45, 45, 45, 114, 54, 118, 114, 143, 45, - 45, 45, 45, 45, 54, 54, 54, 114, 114 + 139, 140, 141, 142, 143, 146, 147, 148, 154, 155, + 163, 164, 167, 171, 172, 173, 174, 177, 144, 160, + 177, 144, 160, 177, 144, 144, 49, 144, 53, 49, + 177, 45, 44, 4, 118, 144, 54, 44, 54, 44, + 115, 44, 44, 44, 44, 85, 180, 184, 53, 54, + 54, 54, 144, 54, 44, 44, 48, 154, 155, 167, + 167, 47, 115, 54, 54, 54, 54, 54, 9, 10, + 12, 13, 56, 57, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 49, 45, 44, 49, 45, + 44, 49, 50, 49, 144, 160, 4, 54, 45, 144, + 19, 144, 119, 146, 147, 148, 167, 177, 144, 53, + 53, 54, 160, 160, 144, 44, 44, 44, 44, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 49, 160, 49, 160, 49, 144, 44, 45, 54, 45, + 44, 45, 54, 22, 50, 45, 45, 45, 144, 144, + 144, 144, 44, 45, 44, 45, 44, 45, 160, 115, + 144, 115, 144, 145, 144, 177, 117, 54, 54, 45, + 45, 50, 45, 50, 45, 50, 160, 160, 160, 45, + 17, 45, 54, 45, 22, 54, 54, 161, 54, 161, + 54, 161, 45, 45, 45, 115, 54, 119, 115, 144, + 45, 45, 45, 45, 45, 54, 54, 54, 115, 115 }; const unsigned char parser::yyr1_[] = { - 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, - 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 115, 115, 116, 116, - 117, 117, 118, 118, 118, 118, 119, 119, 120, 120, - 120, 121, 122, 122, 123, 124, 124, 125, 125, 126, - 127, 127, 128, 129, 130, 131, 132, 133, 133, 134, - 135, 135, 136, 137, 138, 139, 139, 140, 141, 142, - 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 146, 146, 147, 147, - 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 151, 152, 153, - 153, 154, 154, 155, 155, 155, 155, 155, 155, 156, - 156, 156, 156, 157, 158, 158, 158, 159, 159, 160, - 160, 161, 161, 162, 163, 164, 165, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 177, 178, 179, - 180, 181, 182, 182, 183, 183, 184, 185 + 0, 106, 107, 107, 108, 108, 108, 108, 108, 108, + 109, 110, 111, 111, 111, 111, 111, 112, 113, 114, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 116, 116, 117, 117, + 118, 118, 119, 119, 119, 119, 120, 120, 121, 121, + 121, 122, 123, 123, 124, 125, 125, 126, 126, 127, + 128, 128, 129, 130, 131, 132, 133, 134, 134, 135, + 136, 136, 137, 138, 139, 140, 140, 141, 142, 143, + 144, 144, 144, 145, 145, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 147, 147, 148, 148, + 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 152, 153, 154, + 154, 155, 155, 156, 156, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 159, 159, 159, 160, 160, 161, + 161, 162, 162, 163, 164, 164, 165, 166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 178, 179, + 180, 181, 182, 183, 183, 184, 184, 185, 186 }; const signed char @@ -4432,10 +4463,10 @@ namespace xsk { namespace gsc { namespace h1 { 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, - 1, 2, 3, 4, 3, 2, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 7, 2, 1, 2, 1, 1, 1 + 1, 2, 3, 4, 3, 2, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 7, 2, 1, 2, 1, 1, 1 }; @@ -4445,28 +4476,28 @@ namespace xsk { namespace gsc { namespace h1 { const short parser::yyrline_[] = { - 0, 245, 245, 246, 250, 252, 254, 256, 258, 260, - 265, 269, 274, 275, 276, 277, 278, 282, 287, 292, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 326, 327, 331, 332, - 336, 338, 343, 345, 347, 350, 354, 356, 361, 363, - 365, 370, 375, 377, 382, 387, 389, 394, 396, 401, - 406, 408, 413, 418, 423, 428, 433, 438, 440, 445, - 450, 452, 457, 462, 467, 472, 474, 479, 484, 489, - 494, 495, 496, 500, 501, 505, 507, 509, 511, 513, - 515, 517, 519, 521, 523, 525, 530, 532, 537, 539, - 544, 549, 551, 553, 555, 557, 559, 561, 563, 565, - 567, 569, 571, 573, 575, 577, 579, 581, 583, 588, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 619, 624, 629, - 630, 633, 634, 638, 640, 642, 644, 646, 648, 653, - 655, 657, 659, 664, 669, 671, 674, 678, 681, 685, - 687, 692, 694, 699, 704, 709, 714, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 731, 736, 741, 746, - 751, 756, 761, 766, 771, 776, 781, 783, 788, 793, - 798, 803, 808, 810, 815, 817, 822, 827 + 0, 248, 248, 249, 253, 255, 257, 259, 261, 263, + 268, 272, 277, 278, 279, 280, 281, 285, 290, 295, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 329, 330, 334, 335, + 339, 341, 346, 348, 350, 353, 357, 359, 364, 366, + 368, 373, 378, 380, 385, 390, 392, 397, 399, 404, + 409, 411, 416, 421, 426, 431, 436, 441, 443, 448, + 453, 455, 460, 465, 470, 475, 477, 482, 487, 492, + 497, 498, 499, 503, 504, 508, 510, 512, 514, 516, + 518, 520, 522, 524, 526, 528, 533, 535, 540, 542, + 547, 552, 554, 556, 558, 560, 562, 564, 566, 568, + 570, 572, 574, 576, 578, 580, 582, 584, 586, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 622, 627, 632, + 633, 636, 637, 641, 643, 645, 647, 649, 651, 656, + 658, 660, 662, 667, 672, 674, 677, 681, 684, 688, + 690, 695, 697, 702, 707, 709, 714, 719, 724, 725, + 726, 727, 728, 729, 730, 731, 732, 736, 741, 746, + 751, 756, 761, 766, 771, 776, 781, 786, 788, 793, + 798, 803, 808, 813, 815, 820, 822, 827, 832 }; void @@ -4499,9 +4530,9 @@ namespace xsk { namespace gsc { namespace h1 { #line 13 "parser.ypp" } } } // xsk::gsc::h1 -#line 4503 "parser.cpp" +#line 4534 "parser.cpp" -#line 831 "parser.ypp" +#line 836 "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 b7daac55..22ec3cb4 100644 --- a/src/h1/xsk/parser.hpp +++ b/src/h1/xsk/parser.hpp @@ -49,8 +49,10 @@ #include "h1.hpp" namespace xsk::gsc::h1 { class lexer; } +typedef void *yyscan_t; +#define YY_DECL xsk::gsc::h1::parser::symbol_type yylex(yyscan_t yyscanner, xsk::gsc::location& loc) -#line 54 "parser.hpp" +#line 56 "parser.hpp" # include # include // std::abort @@ -193,7 +195,7 @@ namespace xsk::gsc::h1 { class lexer; } #line 13 "parser.ypp" namespace xsk { namespace gsc { namespace h1 { -#line 197 "parser.hpp" +#line 199 "parser.hpp" @@ -617,6 +619,7 @@ namespace xsk { namespace gsc { namespace h1 { // stmt_while char dummy66[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -762,22 +765,23 @@ namespace xsk { namespace gsc { namespace h1 { MUL = 86, // "*" DIV = 87, // "/" MOD = 88, // "%" - PATH = 89, // "path" - IDENTIFIER = 90, // "identifier" - STRING = 91, // "string literal" - ISTRING = 92, // "localized string" - COLOR = 93, // "color" - FLOAT = 94, // "float" - INTEGER = 95, // "integer" - ADD_ARRAY = 96, // ADD_ARRAY - THEN = 97, // THEN - TERN = 98, // TERN - NEG = 99, // NEG - ANIMREF = 100, // ANIMREF - PREINC = 101, // PREINC - PREDEC = 102, // PREDEC - POSTINC = 103, // POSTINC - POSTDEC = 104 // POSTDEC + FIELD = 89, // "field" + PATH = 90, // "path" + IDENTIFIER = 91, // "identifier" + STRING = 92, // "string literal" + ISTRING = 93, // "localized string" + COLOR = 94, // "color" + FLOAT = 95, // "float" + INTEGER = 96, // "integer" + ADD_ARRAY = 97, // ADD_ARRAY + THEN = 98, // THEN + TERN = 99, // TERN + NEG = 100, // NEG + ANIMREF = 101, // ANIMREF + PREINC = 102, // PREINC + PREDEC = 103, // PREDEC + POSTINC = 104, // POSTINC + POSTDEC = 105 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -794,7 +798,7 @@ namespace xsk { namespace gsc { namespace h1 { { enum symbol_kind_type { - YYNTOKENS = 105, ///< Number of tokens. + YYNTOKENS = 106, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -885,103 +889,104 @@ namespace xsk { namespace gsc { namespace h1 { S_MUL = 86, // "*" S_DIV = 87, // "/" S_MOD = 88, // "%" - S_PATH = 89, // "path" - S_IDENTIFIER = 90, // "identifier" - S_STRING = 91, // "string literal" - S_ISTRING = 92, // "localized string" - S_COLOR = 93, // "color" - S_FLOAT = 94, // "float" - S_INTEGER = 95, // "integer" - S_ADD_ARRAY = 96, // ADD_ARRAY - S_THEN = 97, // THEN - S_TERN = 98, // TERN - S_NEG = 99, // NEG - S_ANIMREF = 100, // ANIMREF - S_PREINC = 101, // PREINC - S_PREDEC = 102, // PREDEC - S_POSTINC = 103, // POSTINC - S_POSTDEC = 104, // POSTDEC - S_YYACCEPT = 105, // $accept - S_root = 106, // root - S_program = 107, // program - S_inline = 108, // inline - S_include = 109, // include - S_declaration = 110, // declaration - S_decl_usingtree = 111, // decl_usingtree - S_decl_constant = 112, // decl_constant - S_decl_thread = 113, // decl_thread - S_stmt = 114, // stmt - S_stmt_dev = 115, // stmt_dev - S_stmt_block = 116, // stmt_block - S_stmt_list = 117, // stmt_list - S_stmt_expr = 118, // stmt_expr - S_stmt_call = 119, // stmt_call - S_stmt_assign = 120, // stmt_assign - S_stmt_endon = 121, // stmt_endon - S_stmt_notify = 122, // stmt_notify - S_stmt_wait = 123, // stmt_wait - S_stmt_waittill = 124, // stmt_waittill - S_stmt_waittillmatch = 125, // stmt_waittillmatch - S_stmt_waittillframeend = 126, // stmt_waittillframeend - S_stmt_waitframe = 127, // stmt_waitframe - S_stmt_if = 128, // stmt_if - S_stmt_ifelse = 129, // stmt_ifelse - S_stmt_while = 130, // stmt_while - S_stmt_dowhile = 131, // stmt_dowhile - S_stmt_for = 132, // stmt_for - S_stmt_foreach = 133, // stmt_foreach - S_stmt_switch = 134, // stmt_switch - S_stmt_case = 135, // stmt_case - S_stmt_default = 136, // stmt_default - S_stmt_break = 137, // stmt_break - S_stmt_continue = 138, // stmt_continue - S_stmt_return = 139, // stmt_return - S_stmt_breakpoint = 140, // stmt_breakpoint - S_stmt_prof_begin = 141, // stmt_prof_begin - S_stmt_prof_end = 142, // stmt_prof_end - S_expr = 143, // expr - S_expr_or_empty = 144, // expr_or_empty - S_expr_assign = 145, // expr_assign - S_expr_increment = 146, // expr_increment - S_expr_decrement = 147, // expr_decrement - S_expr_ternary = 148, // expr_ternary - S_expr_binary = 149, // expr_binary - S_expr_primitive = 150, // expr_primitive - S_expr_complement = 151, // expr_complement - S_expr_not = 152, // expr_not - S_expr_call = 153, // expr_call - S_expr_method = 154, // expr_method - S_expr_function = 155, // expr_function - S_expr_pointer = 156, // expr_pointer - S_expr_add_array = 157, // expr_add_array - S_expr_parameters = 158, // expr_parameters - S_expr_arguments = 159, // expr_arguments - S_expr_arguments_no_empty = 160, // expr_arguments_no_empty - S_expr_reference = 161, // expr_reference - S_expr_array = 162, // expr_array - S_expr_field = 163, // expr_field - S_expr_size = 164, // expr_size - S_expr_paren = 165, // expr_paren - S_expr_object = 166, // expr_object - S_expr_thisthread = 167, // expr_thisthread - S_expr_empty_array = 168, // expr_empty_array - S_expr_undefined = 169, // expr_undefined - S_expr_game = 170, // expr_game - S_expr_self = 171, // expr_self - S_expr_anim = 172, // expr_anim - S_expr_level = 173, // expr_level - S_expr_animation = 174, // expr_animation - S_expr_animtree = 175, // expr_animtree - S_expr_identifier = 176, // expr_identifier - S_expr_path = 177, // expr_path - S_expr_istring = 178, // expr_istring - S_expr_string = 179, // expr_string - S_expr_color = 180, // expr_color - S_expr_vector = 181, // expr_vector - S_expr_float = 182, // expr_float - S_expr_integer = 183, // expr_integer - S_expr_false = 184, // expr_false - S_expr_true = 185 // expr_true + S_FIELD = 89, // "field" + S_PATH = 90, // "path" + S_IDENTIFIER = 91, // "identifier" + S_STRING = 92, // "string literal" + S_ISTRING = 93, // "localized string" + S_COLOR = 94, // "color" + S_FLOAT = 95, // "float" + S_INTEGER = 96, // "integer" + S_ADD_ARRAY = 97, // ADD_ARRAY + S_THEN = 98, // THEN + S_TERN = 99, // TERN + S_NEG = 100, // NEG + S_ANIMREF = 101, // ANIMREF + S_PREINC = 102, // PREINC + S_PREDEC = 103, // PREDEC + S_POSTINC = 104, // POSTINC + S_POSTDEC = 105, // POSTDEC + S_YYACCEPT = 106, // $accept + S_root = 107, // root + S_program = 108, // program + S_inline = 109, // inline + S_include = 110, // include + S_declaration = 111, // declaration + S_decl_usingtree = 112, // decl_usingtree + S_decl_constant = 113, // decl_constant + S_decl_thread = 114, // decl_thread + S_stmt = 115, // stmt + S_stmt_dev = 116, // stmt_dev + S_stmt_block = 117, // stmt_block + S_stmt_list = 118, // stmt_list + S_stmt_expr = 119, // stmt_expr + S_stmt_call = 120, // stmt_call + S_stmt_assign = 121, // stmt_assign + S_stmt_endon = 122, // stmt_endon + S_stmt_notify = 123, // stmt_notify + S_stmt_wait = 124, // stmt_wait + S_stmt_waittill = 125, // stmt_waittill + S_stmt_waittillmatch = 126, // stmt_waittillmatch + S_stmt_waittillframeend = 127, // stmt_waittillframeend + S_stmt_waitframe = 128, // stmt_waitframe + S_stmt_if = 129, // stmt_if + S_stmt_ifelse = 130, // stmt_ifelse + S_stmt_while = 131, // stmt_while + S_stmt_dowhile = 132, // stmt_dowhile + S_stmt_for = 133, // stmt_for + S_stmt_foreach = 134, // stmt_foreach + S_stmt_switch = 135, // stmt_switch + S_stmt_case = 136, // stmt_case + S_stmt_default = 137, // stmt_default + S_stmt_break = 138, // stmt_break + S_stmt_continue = 139, // stmt_continue + S_stmt_return = 140, // stmt_return + S_stmt_breakpoint = 141, // stmt_breakpoint + S_stmt_prof_begin = 142, // stmt_prof_begin + S_stmt_prof_end = 143, // stmt_prof_end + S_expr = 144, // expr + S_expr_or_empty = 145, // expr_or_empty + S_expr_assign = 146, // expr_assign + S_expr_increment = 147, // expr_increment + S_expr_decrement = 148, // expr_decrement + S_expr_ternary = 149, // expr_ternary + S_expr_binary = 150, // expr_binary + S_expr_primitive = 151, // expr_primitive + S_expr_complement = 152, // expr_complement + S_expr_not = 153, // expr_not + S_expr_call = 154, // expr_call + S_expr_method = 155, // expr_method + S_expr_function = 156, // expr_function + S_expr_pointer = 157, // expr_pointer + S_expr_add_array = 158, // expr_add_array + S_expr_parameters = 159, // expr_parameters + S_expr_arguments = 160, // expr_arguments + S_expr_arguments_no_empty = 161, // expr_arguments_no_empty + S_expr_reference = 162, // expr_reference + S_expr_array = 163, // expr_array + S_expr_field = 164, // expr_field + S_expr_size = 165, // expr_size + S_expr_paren = 166, // expr_paren + S_expr_object = 167, // expr_object + S_expr_thisthread = 168, // expr_thisthread + S_expr_empty_array = 169, // expr_empty_array + S_expr_undefined = 170, // expr_undefined + S_expr_game = 171, // expr_game + S_expr_self = 172, // expr_self + S_expr_anim = 173, // expr_anim + S_expr_level = 174, // expr_level + S_expr_animation = 175, // expr_animation + S_expr_animtree = 176, // expr_animtree + S_expr_identifier = 177, // expr_identifier + S_expr_path = 178, // expr_path + S_expr_istring = 179, // expr_istring + S_expr_string = 180, // expr_string + S_expr_color = 181, // expr_color + S_expr_vector = 182, // expr_vector + S_expr_float = 183, // expr_float + S_expr_integer = 184, // expr_integer + S_expr_false = 185, // expr_false + S_expr_true = 186 // expr_true }; }; @@ -1294,6 +1299,7 @@ namespace xsk { namespace gsc { namespace h1 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2563,6 +2569,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2679,7 +2686,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - H1_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + H1_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4064,6 +4071,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4648,7 +4670,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2191, ///< Last index in yytable_. + yylast_ = 2291, ///< Last index in yytable_. yynnts_ = 81, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4952,6 +4974,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5267,6 +5290,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5340,7 +5364,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::h1 -#line 5344 "parser.hpp" +#line 5368 "parser.hpp" diff --git a/src/h2/xsk/lexer.cpp b/src/h2/xsk/lexer.cpp index d9a171ae..b8f1521e 100644 --- a/src/h2/xsk/lexer.cpp +++ b/src/h2/xsk/lexer.cpp @@ -68,9 +68,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -80,18 +80,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -139,7 +130,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -185,24 +176,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw h2::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return h2::parser::make_H2EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -216,7 +211,7 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return h2::parser::make_DIV(loc_); reader_.advance(); @@ -226,29 +221,27 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw h2::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return h2::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw h2::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -262,16 +255,15 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw h2::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -284,7 +276,7 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -294,69 +286,43 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw h2::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return h2::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return h2::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw h2::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return h2::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw h2::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return h2::parser::make_ASSIGN_MUL(loc_); - return h2::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return h2::parser::make_LPAREN(loc_); case ')': @@ -376,6 +342,7 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type case ':': if (curr != ':') return h2::parser::make_COLON(loc_); + reader_.advance(); return h2::parser::make_DOUBLECOLON(loc_); case '?': @@ -383,43 +350,70 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type case '=': if (curr != '=') return h2::parser::make_ASSIGN(loc_); + reader_.advance(); return h2::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return h2::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? h2::parser::make_INCREMENT(loc_) : h2::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return h2::parser::make_INCREMENT(loc_); + + return h2::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return h2::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? h2::parser::make_DECREMENT(loc_) : h2::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return h2::parser::make_DECREMENT(loc_); + + return h2::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return h2::parser::make_MOD(loc_); + reader_.advance(); + return h2::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return h2::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? h2::parser::make_OR(loc_) : h2::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return h2::parser::make_OR(loc_); + + return h2::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return h2::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? h2::parser::make_AND(loc_) : h2::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return h2::parser::make_AND(loc_); + + if (last == '=') + return h2::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return h2::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return h2::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return h2::parser::make_NOT(loc_); + reader_.advance(); return h2::parser::make_INEQUALITY(loc_); case '~': @@ -427,144 +421,222 @@ auto lexer::lex() -> xsk::gsc::h2::parser::symbol_type case '<': if (curr != '<' && curr != '=') return h2::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? h2::parser::make_ASSIGN_LSHIFT(loc_) : h2::parser::make_LSHIFT(loc_); - } - return h2::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return h2::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return h2::parser::make_LSHIFT(loc_); + + reader_.advance(); + return h2::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return h2::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? h2::parser::make_ASSIGN_RSHIFT(loc_) : h2::parser::make_RSHIFT(loc_); - } - return h2::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return h2::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return h2::parser::make_RSHIFT(loc_); + + reader_.advance(); + return h2::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw h2::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::h2::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw h2::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw h2::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return h2::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return h2::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::h2::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw h2::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw h2::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return h2::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return h2::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return h2::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return h2::parser::make_SIZE(loc_); + } + + return h2::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return h2::parser::make_PATH(xsk::gsc::h2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return h2::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return h2::parser::make_IDENTIFIER(xsk::gsc::h2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return h2::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return h2::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return h2::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -581,30 +653,24 @@ auto lexer::read_number(char first) -> xsk::gsc::h2::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return h2::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return h2::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -616,35 +682,29 @@ auto lexer::read_number(char first) -> xsk::gsc::h2::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return h2::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -661,163 +721,15 @@ auto lexer::read_number(char first) -> xsk::gsc::h2::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return h2::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw h2::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw h2::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw h2::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return h2::parser::make_FLOAT(std::string(data, len), loc_); - - return h2::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::h2::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw h2::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw h2::parser::syntax_error(loc_, "invalid path end '\\'"); - - return h2::parser::make_PATH(xsk::gsc::h2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return h2::parser::make_IDENTIFIER(xsk::gsc::h2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::h2::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return h2::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return h2::parser::make_DOT(loc_); - - } - else return h2::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::h2::parser::symbol_type { switch (k) diff --git a/src/h2/xsk/lexer.hpp b/src/h2/xsk/lexer.hpp index 9ed5cd3f..f7f147c3 100644 --- a/src/h2/xsk/lexer.hpp +++ b/src/h2/xsk/lexer.hpp @@ -10,11 +10,12 @@ namespace xsk::gsc::h2 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -23,13 +24,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -45,15 +46,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -63,10 +66,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::h2::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::h2::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::h2::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::h2::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::h2::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/h2/xsk/parser.cpp b/src/h2/xsk/parser.cpp index 6201d461..4d499484 100644 --- a/src/h2/xsk/parser.cpp +++ b/src/h2/xsk/parser.cpp @@ -491,6 +491,7 @@ namespace xsk { namespace gsc { namespace h2 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -792,6 +793,7 @@ namespace xsk { namespace gsc { namespace h2 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1093,6 +1095,7 @@ namespace xsk { namespace gsc { namespace h2 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1393,6 +1396,7 @@ namespace xsk { namespace gsc { namespace h2 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1948,6 +1952,7 @@ namespace xsk { namespace gsc { namespace h2 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1979,1303 +1984,1309 @@ namespace xsk { namespace gsc { namespace h2 { switch (yyn) { case 2: // root: program -#line 245 "parser.ypp" +#line 246 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 3: // root: %empty -#line 246 "parser.ypp" +#line 247 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 4: // program: program inline -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 5: // program: program include -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 6: // program: program declaration -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 7: // program: inline -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 8: // program: include -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 9: // program: declaration -#line 261 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 265 "parser.ypp" +#line 266 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 270 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 12: // declaration: "/#" -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 13: // declaration: "#/" -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 15: // declaration: decl_constant -#line 277 "parser.ypp" +#line 278 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 16: // declaration: decl_thread -#line 278 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 283 "parser.ypp" +#line 284 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 288 "parser.ypp" +#line 289 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 293 "parser.ypp" +#line 294 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 21: // stmt: stmt_block -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 22: // stmt: stmt_call -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 31: // stmt: stmt_if -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 33: // stmt: stmt_while -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 35: // stmt: stmt_for -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 38: // stmt: stmt_case -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 39: // stmt: stmt_default -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 40: // stmt: stmt_break -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 42: // stmt: stmt_return -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 320 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 321 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 322 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 326 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 327 "parser.ypp" +#line 328 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 331 "parser.ypp" +#line 332 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 332 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 337 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 51: // stmt_list: stmt -#line 339 "parser.ypp" +#line 340 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 344 "parser.ypp" +#line 345 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 346 "parser.ypp" +#line 347 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 348 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 350 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2303 "parser.cpp" +#line 2308 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 355 "parser.ypp" +#line 356 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2309 "parser.cpp" +#line 2314 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 357 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2315 "parser.cpp" +#line 2320 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 362 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2321 "parser.cpp" +#line 2326 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 364 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2327 "parser.cpp" +#line 2332 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 366 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2333 "parser.cpp" +#line 2338 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 371 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2339 "parser.cpp" +#line 2344 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 376 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2345 "parser.cpp" +#line 2350 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 378 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2351 "parser.cpp" +#line 2356 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 383 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2357 "parser.cpp" +#line 2362 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 388 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2363 "parser.cpp" +#line 2368 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 390 "parser.ypp" +#line 391 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2369 "parser.cpp" +#line 2374 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 395 "parser.ypp" +#line 396 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2375 "parser.cpp" +#line 2380 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 397 "parser.ypp" +#line 398 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2381 "parser.cpp" +#line 2386 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 402 "parser.ypp" +#line 403 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2387 "parser.cpp" +#line 2392 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 407 "parser.ypp" +#line 408 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2393 "parser.cpp" +#line 2398 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2399 "parser.cpp" +#line 2404 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2405 "parser.cpp" +#line 2410 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2411 "parser.cpp" +#line 2416 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2417 "parser.cpp" +#line 2422 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2423 "parser.cpp" +#line 2428 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 434 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2429 "parser.cpp" +#line 2434 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 439 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2435 "parser.cpp" +#line 2440 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2441 "parser.cpp" +#line 2446 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 446 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2447 "parser.cpp" +#line 2452 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 451 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2453 "parser.cpp" +#line 2458 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2459 "parser.cpp" +#line 2464 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2465 "parser.cpp" +#line 2470 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2471 "parser.cpp" +#line 2476 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 468 "parser.ypp" +#line 469 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2477 "parser.cpp" +#line 2482 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 473 "parser.ypp" +#line 474 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2483 "parser.cpp" +#line 2488 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2489 "parser.cpp" +#line 2494 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2495 "parser.cpp" +#line 2500 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2501 "parser.cpp" +#line 2506 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2507 "parser.cpp" +#line 2512 "parser.cpp" break; case 90: // expr: expr_ternary -#line 494 "parser.ypp" +#line 495 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2513 "parser.cpp" +#line 2518 "parser.cpp" break; case 91: // expr: expr_binary -#line 495 "parser.ypp" +#line 496 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2519 "parser.cpp" +#line 2524 "parser.cpp" break; case 92: // expr: expr_primitive -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2525 "parser.cpp" +#line 2530 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2531 "parser.cpp" +#line 2536 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 501 "parser.ypp" +#line 502 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2537 "parser.cpp" +#line 2542 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2543 "parser.cpp" +#line 2548 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2549 "parser.cpp" +#line 2554 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2555 "parser.cpp" +#line 2560 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2561 "parser.cpp" +#line 2566 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2567 "parser.cpp" +#line 2572 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2573 "parser.cpp" +#line 2578 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 518 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2579 "parser.cpp" +#line 2584 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 520 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2585 "parser.cpp" +#line 2590 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 522 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2591 "parser.cpp" +#line 2596 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 524 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2597 "parser.cpp" +#line 2602 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 526 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2603 "parser.cpp" +#line 2608 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 531 "parser.ypp" +#line 532 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2609 "parser.cpp" +#line 2614 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 533 "parser.ypp" +#line 534 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2615 "parser.cpp" +#line 2620 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 538 "parser.ypp" +#line 539 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2621 "parser.cpp" +#line 2626 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2627 "parser.cpp" +#line 2632 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 545 "parser.ypp" +#line 546 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2633 "parser.cpp" +#line 2638 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2639 "parser.cpp" +#line 2644 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2645 "parser.cpp" +#line 2650 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2651 "parser.cpp" +#line 2656 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2657 "parser.cpp" +#line 2662 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2663 "parser.cpp" +#line 2668 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2669 "parser.cpp" +#line 2674 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2675 "parser.cpp" +#line 2680 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2681 "parser.cpp" +#line 2686 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2687 "parser.cpp" +#line 2692 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2693 "parser.cpp" +#line 2698 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2699 "parser.cpp" +#line 2704 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2705 "parser.cpp" +#line 2710 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2711 "parser.cpp" +#line 2716 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 576 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2717 "parser.cpp" +#line 2722 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2723 "parser.cpp" +#line 2728 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2729 "parser.cpp" +#line 2734 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2735 "parser.cpp" +#line 2740 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2741 "parser.cpp" +#line 2746 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2747 "parser.cpp" +#line 2752 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2753 "parser.cpp" +#line 2758 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2759 "parser.cpp" +#line 2764 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2765 "parser.cpp" +#line 2770 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2771 "parser.cpp" +#line 2776 "parser.cpp" break; case 134: // expr_primitive: expr_reference -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2777 "parser.cpp" +#line 2782 "parser.cpp" break; case 135: // expr_primitive: expr_array -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2783 "parser.cpp" +#line 2788 "parser.cpp" break; case 136: // expr_primitive: expr_field -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2789 "parser.cpp" +#line 2794 "parser.cpp" break; case 137: // expr_primitive: expr_size -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2795 "parser.cpp" +#line 2800 "parser.cpp" break; case 138: // expr_primitive: expr_paren -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2801 "parser.cpp" +#line 2806 "parser.cpp" break; case 139: // expr_primitive: expr_thisthread -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2807 "parser.cpp" +#line 2812 "parser.cpp" break; case 140: // expr_primitive: expr_empty_array -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2813 "parser.cpp" +#line 2818 "parser.cpp" break; case 141: // expr_primitive: expr_undefined -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2819 "parser.cpp" +#line 2824 "parser.cpp" break; case 142: // expr_primitive: expr_game -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2825 "parser.cpp" +#line 2830 "parser.cpp" break; case 143: // expr_primitive: expr_self -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2831 "parser.cpp" +#line 2836 "parser.cpp" break; case 144: // expr_primitive: expr_anim -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2837 "parser.cpp" +#line 2842 "parser.cpp" break; case 145: // expr_primitive: expr_level -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2843 "parser.cpp" +#line 2848 "parser.cpp" break; case 146: // expr_primitive: expr_animation -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2849 "parser.cpp" +#line 2854 "parser.cpp" break; case 147: // expr_primitive: expr_animtree -#line 606 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2855 "parser.cpp" +#line 2860 "parser.cpp" break; case 148: // expr_primitive: expr_identifier -#line 607 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2861 "parser.cpp" +#line 2866 "parser.cpp" break; case 149: // expr_primitive: expr_istring -#line 608 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2867 "parser.cpp" +#line 2872 "parser.cpp" break; case 150: // expr_primitive: expr_string -#line 609 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2873 "parser.cpp" +#line 2878 "parser.cpp" break; case 151: // expr_primitive: expr_color -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2879 "parser.cpp" +#line 2884 "parser.cpp" break; case 152: // expr_primitive: expr_vector -#line 611 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2885 "parser.cpp" +#line 2890 "parser.cpp" break; case 153: // expr_primitive: expr_float -#line 612 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2891 "parser.cpp" +#line 2896 "parser.cpp" break; case 154: // expr_primitive: expr_integer -#line 613 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2897 "parser.cpp" +#line 2902 "parser.cpp" break; case 155: // expr_primitive: expr_false -#line 614 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2903 "parser.cpp" +#line 2908 "parser.cpp" break; case 156: // expr_primitive: expr_true -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2909 "parser.cpp" +#line 2914 "parser.cpp" break; case 157: // expr_complement: "~" expr -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2915 "parser.cpp" +#line 2920 "parser.cpp" break; case 158: // expr_not: "!" expr -#line 625 "parser.ypp" +#line 626 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2921 "parser.cpp" +#line 2926 "parser.cpp" break; case 159: // expr_call: expr_function -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2927 "parser.cpp" +#line 2932 "parser.cpp" break; case 160: // expr_call: expr_pointer -#line 630 "parser.ypp" +#line 631 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2933 "parser.cpp" +#line 2938 "parser.cpp" break; case 161: // expr_method: expr_object expr_function -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2939 "parser.cpp" +#line 2944 "parser.cpp" break; case 162: // expr_method: expr_object expr_pointer -#line 634 "parser.ypp" +#line 635 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2945 "parser.cpp" +#line 2950 "parser.cpp" break; case 163: // expr_function: expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2951 "parser.cpp" +#line 2956 "parser.cpp" break; case 164: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 641 "parser.ypp" +#line 642 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2957 "parser.cpp" +#line 2962 "parser.cpp" break; case 165: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 643 "parser.ypp" +#line 644 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2963 "parser.cpp" +#line 2968 "parser.cpp" break; case 166: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2969 "parser.cpp" +#line 2974 "parser.cpp" break; case 167: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2975 "parser.cpp" +#line 2980 "parser.cpp" break; case 168: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2981 "parser.cpp" +#line 2986 "parser.cpp" break; case 169: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 654 "parser.ypp" +#line 655 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2987 "parser.cpp" +#line 2992 "parser.cpp" break; case 170: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 656 "parser.ypp" +#line 657 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2993 "parser.cpp" +#line 2998 "parser.cpp" break; case 171: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 658 "parser.ypp" +#line 659 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2999 "parser.cpp" +#line 3004 "parser.cpp" break; case 172: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3005 "parser.cpp" +#line 3010 "parser.cpp" break; case 173: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 665 "parser.ypp" +#line 666 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3011 "parser.cpp" +#line 3016 "parser.cpp" break; case 174: // expr_parameters: expr_parameters "," expr_identifier -#line 670 "parser.ypp" +#line 671 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3017 "parser.cpp" +#line 3022 "parser.cpp" break; case 175: // expr_parameters: expr_identifier -#line 672 "parser.ypp" +#line 673 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3023 "parser.cpp" +#line 3028 "parser.cpp" break; case 176: // expr_parameters: %empty -#line 674 "parser.ypp" +#line 675 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3029 "parser.cpp" +#line 3034 "parser.cpp" break; case 177: // expr_arguments: expr_arguments_no_empty -#line 679 "parser.ypp" +#line 680 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3035 "parser.cpp" +#line 3040 "parser.cpp" break; case 178: // expr_arguments: %empty -#line 681 "parser.ypp" +#line 682 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3041 "parser.cpp" +#line 3046 "parser.cpp" break; case 179: // expr_arguments_no_empty: expr_arguments "," expr -#line 686 "parser.ypp" +#line 687 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3047 "parser.cpp" +#line 3052 "parser.cpp" break; case 180: // expr_arguments_no_empty: expr -#line 688 "parser.ypp" +#line 689 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3053 "parser.cpp" +#line 3058 "parser.cpp" break; case 181: // expr_reference: "::" expr_identifier -#line 693 "parser.ypp" +#line 694 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3059 "parser.cpp" +#line 3064 "parser.cpp" break; case 182: // expr_reference: expr_path "::" expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3065 "parser.cpp" +#line 3070 "parser.cpp" break; case 183: // expr_array: expr_object "[" expr "]" -#line 700 "parser.ypp" +#line 701 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3071 "parser.cpp" +#line 3076 "parser.cpp" break; case 184: // expr_field: expr_object "." expr_identifier -#line 705 "parser.ypp" +#line 706 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3077 "parser.cpp" +#line 3082 "parser.cpp" break; - case 185: // expr_size: expr_object ".size" -#line 710 "parser.ypp" + case 185: // expr_field: expr_object "field" +#line 708 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3088 "parser.cpp" + break; + + case 186: // expr_size: expr_object ".size" +#line 713 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3083 "parser.cpp" +#line 3094 "parser.cpp" break; - case 186: // expr_paren: "(" expr ")" -#line 715 "parser.ypp" + case 187: // expr_paren: "(" expr ")" +#line 718 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3089 "parser.cpp" +#line 3100 "parser.cpp" break; - case 187: // expr_object: expr_call -#line 719 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3095 "parser.cpp" - break; - - case 188: // expr_object: expr_method -#line 720 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3101 "parser.cpp" - break; - - case 189: // expr_object: expr_array -#line 721 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3107 "parser.cpp" - break; - - case 190: // expr_object: expr_field + case 188: // expr_object: expr_call #line 722 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3113 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3106 "parser.cpp" break; - case 191: // expr_object: expr_game + case 189: // expr_object: expr_method #line 723 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3119 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3112 "parser.cpp" break; - case 192: // expr_object: expr_self + case 190: // expr_object: expr_array #line 724 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3125 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3118 "parser.cpp" break; - case 193: // expr_object: expr_anim + case 191: // expr_object: expr_field #line 725 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3131 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3124 "parser.cpp" break; - case 194: // expr_object: expr_level + case 192: // expr_object: expr_game #line 726 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3137 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3130 "parser.cpp" break; - case 195: // expr_object: expr_identifier + case 193: // expr_object: expr_self #line 727 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3136 "parser.cpp" + break; + + case 194: // expr_object: expr_anim +#line 728 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3142 "parser.cpp" + break; + + case 195: // expr_object: expr_level +#line 729 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3148 "parser.cpp" + break; + + case 196: // expr_object: expr_identifier +#line 730 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3143 "parser.cpp" +#line 3154 "parser.cpp" break; - case 196: // expr_thisthread: "thisthread" -#line 732 "parser.ypp" + case 197: // expr_thisthread: "thisthread" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3149 "parser.cpp" +#line 3160 "parser.cpp" break; - case 197: // expr_empty_array: "[" "]" -#line 737 "parser.ypp" + case 198: // expr_empty_array: "[" "]" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3155 "parser.cpp" +#line 3166 "parser.cpp" break; - case 198: // expr_undefined: "undefined" -#line 742 "parser.ypp" + case 199: // expr_undefined: "undefined" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3161 "parser.cpp" +#line 3172 "parser.cpp" break; - case 199: // expr_game: "game" -#line 747 "parser.ypp" + case 200: // expr_game: "game" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3167 "parser.cpp" +#line 3178 "parser.cpp" break; - case 200: // expr_self: "self" -#line 752 "parser.ypp" + case 201: // expr_self: "self" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3173 "parser.cpp" +#line 3184 "parser.cpp" break; - case 201: // expr_anim: "anim" -#line 757 "parser.ypp" + case 202: // expr_anim: "anim" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3179 "parser.cpp" +#line 3190 "parser.cpp" break; - case 202: // expr_level: "level" -#line 762 "parser.ypp" + case 203: // expr_level: "level" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3185 "parser.cpp" +#line 3196 "parser.cpp" break; - case 203: // expr_animation: "%" "identifier" -#line 767 "parser.ypp" + case 204: // expr_animation: "%" "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3191 "parser.cpp" +#line 3202 "parser.cpp" break; - case 204: // expr_animtree: "#animtree" -#line 772 "parser.ypp" + case 205: // expr_animtree: "#animtree" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3197 "parser.cpp" +#line 3208 "parser.cpp" break; - case 205: // expr_identifier: "identifier" -#line 777 "parser.ypp" + case 206: // expr_identifier: "identifier" +#line 780 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3203 "parser.cpp" +#line 3214 "parser.cpp" break; - case 206: // expr_path: "path" -#line 782 "parser.ypp" + case 207: // expr_path: "path" +#line 785 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3209 "parser.cpp" +#line 3220 "parser.cpp" break; - case 207: // expr_path: expr_identifier -#line 784 "parser.ypp" + case 208: // expr_path: expr_identifier +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3215 "parser.cpp" +#line 3226 "parser.cpp" break; - case 208: // expr_istring: "localized string" -#line 789 "parser.ypp" + case 209: // expr_istring: "localized string" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3221 "parser.cpp" +#line 3232 "parser.cpp" break; - case 209: // expr_string: "string literal" -#line 794 "parser.ypp" + case 210: // expr_string: "string literal" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3227 "parser.cpp" +#line 3238 "parser.cpp" break; - case 210: // expr_color: "color" -#line 799 "parser.ypp" + case 211: // expr_color: "color" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3233 "parser.cpp" +#line 3244 "parser.cpp" break; - case 211: // expr_vector: "(" expr "," expr "," expr ")" -#line 804 "parser.ypp" + case 212: // expr_vector: "(" expr "," expr "," expr ")" +#line 807 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3239 "parser.cpp" +#line 3250 "parser.cpp" break; - case 212: // expr_float: "-" "float" -#line 809 "parser.ypp" + case 213: // expr_float: "-" "float" +#line 812 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3245 "parser.cpp" +#line 3256 "parser.cpp" break; - case 213: // expr_float: "float" -#line 811 "parser.ypp" + case 214: // expr_float: "float" +#line 814 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3251 "parser.cpp" +#line 3262 "parser.cpp" break; - case 214: // expr_integer: "-" "integer" -#line 816 "parser.ypp" + case 215: // expr_integer: "-" "integer" +#line 819 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3257 "parser.cpp" +#line 3268 "parser.cpp" break; - case 215: // expr_integer: "integer" -#line 818 "parser.ypp" + case 216: // expr_integer: "integer" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3263 "parser.cpp" +#line 3274 "parser.cpp" break; - case 216: // expr_false: "false" -#line 823 "parser.ypp" + case 217: // expr_false: "false" +#line 826 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3269 "parser.cpp" +#line 3280 "parser.cpp" break; - case 217: // expr_true: "true" -#line 828 "parser.ypp" + case 218: // expr_true: "true" +#line 831 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3275 "parser.cpp" +#line 3286 "parser.cpp" break; -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" default: break; @@ -3469,7 +3480,7 @@ namespace xsk { namespace gsc { namespace h2 { "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", - "+", "-", "*", "/", "%", "path", "identifier", "string literal", + "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", "include", "declaration", @@ -3755,131 +3766,131 @@ namespace xsk { namespace gsc { namespace h2 { } - const short parser::yypact_ninf_ = -261; + const short parser::yypact_ninf_ = -267; - const short parser::yytable_ninf_ = -208; + const short parser::yytable_ninf_ = -209; const short parser::yypact_[] = { - 24, -261, -261, -71, -71, -23, -261, 39, 24, -261, - -261, -261, -261, -261, -261, -20, -261, -261, -5, -3, - -26, -261, -261, -261, -261, -35, 1143, -261, -261, -261, - 28, 17, -261, -261, -36, -33, -261, 27, -261, -261, - -261, -261, -261, -261, -261, 1143, 1015, -35, 1143, 1143, - -58, 7, -261, -261, -261, -261, 1897, -261, -261, -261, - -261, -261, 345, 435, -261, -261, -261, -261, 581, 609, - -261, -261, 614, -261, -261, -261, 848, 950, 1104, 1168, - -261, -261, 74, 46, -261, -261, -261, -261, -261, -261, - -261, -261, 54, 69, -35, 79, 73, 91, 83, 104, - 101, 110, 1222, 1015, -261, 1980, 111, 116, -261, -261, - -261, -261, -261, -261, -261, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, -261, 1207, -35, -261, -261, 122, - 121, 1143, -35, -261, 785, -261, -261, 1143, 1143, -35, - 1143, 1143, -35, 1143, -261, 1143, 1666, 1143, -261, 1862, - 114, 114, 2011, 2021, 2103, 2103, 53, 53, 53, 53, - 2052, 2093, 2062, 59, 59, -261, -261, -261, 1706, -261, - -35, 18, -261, 130, 836, 1143, 125, -11, 137, 989, - 138, 139, 150, 159, -53, 153, 154, 158, 1079, 160, - 163, 176, -261, 173, 127, 127, -261, -261, -261, 887, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, 168, 171, 174, 179, 180, -261, - -261, 683, -261, -261, -261, -261, 8, 1746, 21, 183, - 1786, 29, 186, 1826, 1010, 182, 1980, 1143, -261, 130, - -261, 1143, -261, 938, 1932, -261, 193, -261, 1143, 220, - 1143, 550, -35, 1143, 145, 191, 195, -261, -261, -261, - -261, 1967, -261, 1143, 1143, 1143, -261, -261, 210, 210, - -261, -261, -261, -261, -261, -261, -261, 202, 208, 212, - 216, -261, -261, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 205, -261, 1143, 213, -261, 1143, - 215, 1143, 222, 1980, 31, -261, -261, 214, 1388, 223, - 1422, 219, -261, -261, -261, 13, -6, 1456, -261, -261, - -261, 32, 50, 1666, 1143, 1143, 1143, 1143, 1980, 1980, - 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 230, - 51, 231, 60, 232, 1490, 1143, -261, -261, 989, 1143, - 989, 1143, 1143, -35, 69, 224, 225, 1524, 1266, 1310, - 1354, 1143, -261, 1143, -261, 1143, -261, 71, 263, 1558, - -261, 1980, 227, 1592, 260, -261, -261, -261, 233, 237, - 1143, 238, 1143, 239, 1143, 78, 84, 85, -261, 989, - 242, 550, 989, 1143, -261, -261, 252, -261, 253, -261, - 256, -261, -261, -261, -261, -261, 278, -261, 1626, 271, - 274, 276, 989, 989, -261, -261, -261, -261, -261 + 13, -267, -267, 8, 8, -11, -267, 27, 13, -267, + -267, -267, -267, -267, -267, -31, -267, -267, -16, -10, + -42, -267, -267, -267, -267, -38, 1203, -267, -267, -267, + 20, -21, -267, -267, -17, -5, -267, 29, -267, -267, + -267, -267, -267, -267, -267, 1203, 1073, -38, 1203, 1203, + 52, -2, -267, -267, -267, -267, 2007, -267, -267, -267, + -267, -267, 31, 354, -267, -267, -267, -267, 440, 813, + -267, -267, 943, -267, -267, -267, 1169, 1234, 1282, 1296, + -267, -267, 556, 49, -267, -267, -267, -267, -267, -267, + -267, -267, 43, 35, -38, 69, 79, 85, 93, 113, + 110, 119, 1333, 1073, -267, 2090, 118, 120, -267, -267, + -267, -267, -267, -267, -267, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, -267, 1268, -38, -267, -267, -267, + 126, 122, 1203, -38, -267, 787, -267, -267, 1203, 1203, + -38, 1203, 1203, -38, 1203, -267, 1203, 1069, 1203, -267, + 1972, 142, 142, 2121, 2131, 617, 617, 44, 44, 44, + 44, 2162, 2203, 2172, 73, 73, -267, -267, -267, 1777, + -267, -38, -8, -267, 128, 865, 1203, 129, -18, 132, + 1047, 136, 138, 143, 144, -64, 148, 135, 141, 1138, + 149, 153, 158, -267, 159, 123, 123, -267, -267, -267, + 917, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, 154, 155, 161, 165, 177, + -267, -267, 36, -267, -267, -267, -267, -22, 1817, 7, + 188, 1857, 9, 190, 1897, 1936, 186, 2090, 1203, -267, + 128, -267, 1203, -267, 995, 2042, -267, 192, -267, 1203, + 219, 1203, 542, -38, 1203, 150, 194, 196, -267, -267, + -267, -267, 2077, -267, 1203, 1203, 1203, -267, -267, 185, + 185, -267, -267, -267, -267, -267, -267, -267, 201, 206, + 207, 209, -267, -267, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 205, -267, 1203, 208, -267, + 1203, 210, 1203, 211, 2090, 11, -267, -267, 202, 1499, + 217, 1533, 213, -267, -267, -267, 677, 1, 1567, -267, + -267, -267, 17, 38, 1069, 1203, 1203, 1203, 1203, 2090, + 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, + 218, 45, 221, 46, 224, 1601, 1203, -267, -267, 1047, + 1203, 1047, 1203, 1203, -38, 35, 223, 225, 1635, 1377, + 1421, 1465, 1203, -267, 1203, -267, 1203, -267, 55, 264, + 1669, -267, 2090, 231, 1703, 241, -267, -267, -267, 232, + 233, 1203, 234, 1203, 237, 1203, 74, 90, 99, -267, + 1047, 238, 542, 1047, 1203, -267, -267, 248, -267, 249, + -267, 255, -267, -267, -267, -267, -267, 256, -267, 1737, + 251, 253, 254, 1047, 1047, -267, -267, -267, -267, -267 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 205, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 206, 207, 0, 0, - 0, 1, 4, 5, 6, 176, 0, 10, 11, 209, - 0, 0, 175, 204, 0, 0, 196, 0, 217, 216, - 198, 199, 200, 201, 202, 0, 178, 0, 0, 0, - 0, 0, 208, 210, 213, 215, 0, 90, 91, 92, + 3, 12, 13, 0, 0, 0, 206, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 207, 208, 0, 0, + 0, 1, 4, 5, 6, 176, 0, 10, 11, 210, + 0, 0, 175, 205, 0, 0, 197, 0, 218, 217, + 199, 200, 201, 202, 203, 0, 178, 0, 0, 0, + 0, 0, 209, 211, 214, 216, 0, 90, 91, 92, 129, 130, 131, 132, 159, 160, 133, 134, 135, 136, 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, 149, 150, 151, 152, 153, 154, - 155, 156, 0, 0, 0, 0, 207, 0, 0, 207, - 0, 0, 0, 178, 197, 180, 0, 177, 181, 158, - 157, 212, 214, 203, 18, 0, 0, 0, 0, 0, + 155, 156, 0, 0, 0, 0, 208, 0, 0, 208, + 0, 0, 0, 178, 198, 180, 0, 177, 181, 158, + 157, 213, 215, 204, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 161, 162, 207, - 0, 178, 0, 17, 0, 19, 174, 0, 178, 0, - 0, 178, 0, 0, 186, 0, 180, 0, 173, 0, - 122, 123, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 124, 125, 126, 127, 128, 0, 184, - 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 0, 185, 161, 162, + 208, 0, 178, 0, 17, 0, 19, 174, 0, 178, + 0, 0, 178, 0, 0, 187, 0, 180, 0, 173, + 0, 122, 123, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 0, + 184, 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 51, 20, 21, 0, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 0, 0, 0, 187, 188, 189, - 190, 0, 191, 192, 193, 194, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 183, 0, - 163, 178, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 178, 178, 0, 187, 188, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 165, 178, 0, 167, 178, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 178, 164, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 178, 166, 178, 168, 178, 211, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 178, 0, 178, 0, 178, 0, 0, 0, 169, 0, - 0, 55, 0, 0, 61, 63, 177, 66, 177, 68, - 177, 170, 171, 172, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 0, 0, 49, 0, 0, 0, 51, 20, 21, + 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 0, 0, 0, 188, 189, + 190, 191, 0, 192, 193, 194, 195, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 183, + 0, 163, 178, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 178, 178, 0, 188, 189, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 178, 0, 167, + 178, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 178, 164, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 166, 178, 168, 178, 212, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 178, 0, 178, 0, 178, 0, 0, 0, 169, + 0, 0, 55, 0, 0, 61, 63, 177, 66, 177, + 68, 177, 170, 171, 172, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -261, -261, -261, 321, 323, 324, -261, -261, -261, -183, - -261, -88, 100, -78, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, 187, -261, - -260, -257, -254, -261, -261, -261, -261, -261, -85, -12, - -70, -65, -261, -261, -128, -45, -261, 177, 247, -261, - -261, 257, -261, -261, -261, 275, 332, 359, 365, -261, - -261, 0, 6, -261, 2, -261, -261, -261, 142, -261, - -261 + -267, -267, -267, 294, 298, 301, -267, -267, -267, -72, + -267, -91, 146, -83, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 195, -267, + -266, -260, -258, -267, -267, -267, -267, -267, -130, -12, + -67, -65, -267, -267, 340, -45, -267, -6, 246, -267, + -267, 252, -267, -267, -267, 280, 329, 348, 366, -267, + -267, 0, 6, -267, -9, -267, -267, -267, 137, -267, + -267 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, - 207, 208, 209, 331, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 105, 392, - 234, 235, 236, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 31, 106, 182, 67, 68, 69, 70, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 207, + 208, 209, 210, 332, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 105, 393, + 235, 236, 237, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 @@ -3888,209 +3899,220 @@ namespace xsk { namespace gsc { namespace h2 { const short parser::yytable_[] = { - 15, 107, 137, 17, 17, 145, 269, 138, 15, 18, - 19, 332, 95, 181, 333, 98, 372, 334, 16, 6, - 248, 20, 30, 251, 25, 32, 291, 1, 2, 3, - 4, 5, 274, 266, 96, 99, 111, 112, 29, 21, - 97, 100, 55, 267, 373, 34, 35, 108, 37, 27, - 26, 28, 141, 16, 6, 6, 16, 6, 107, 237, - -207, 135, 93, 260, 136, 29, 315, 94, 157, 301, - 302, 157, 139, 92, 318, 101, 366, 375, 140, 157, - 291, 157, 157, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 146, 376, 382, 113, 142, 237, - 157, 157, 16, 6, 237, 384, -195, -195, 143, -195, - 157, 116, 117, -195, 6, 144, 408, 148, 141, 286, - 286, 157, -195, 421, 237, -195, -207, 147, 157, 422, - 423, 150, 238, 324, 157, 157, 179, 129, 130, 131, - 132, 133, 183, 149, 246, 131, 132, 133, 151, 249, - 140, 332, 252, 152, 333, 341, 342, 334, 153, 34, - 35, 157, 37, -195, -195, 158, 141, 41, 42, 43, - 44, 137, 238, 180, 261, 203, 138, 238, 237, 265, - 259, 268, 270, 271, 246, 388, 286, 390, 360, 246, - 140, 362, 287, 287, 272, 140, 275, 238, 129, 130, - 131, 132, 133, 273, 246, 246, 277, 283, 278, 246, - 140, 140, 279, 56, 282, 140, 16, 6, 137, 137, - 284, 285, 292, 138, 138, 293, 424, 316, 294, 427, - 319, 322, 102, 295, 296, 109, 110, 387, 327, 329, - 112, 139, 34, 35, 338, 37, 344, 140, 339, 437, - 438, 238, 345, 405, 359, 406, 346, 407, 135, 287, - 347, 136, 361, 246, 363, 137, 365, 369, 367, 140, - 138, 246, 336, 371, 381, 383, 385, 140, 396, 397, - 409, 411, 413, 237, 263, 237, 395, 414, 139, 139, - 156, 415, 417, 419, 140, 140, 425, 429, 430, 16, - 6, 431, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 239, 178, 432, 237, 434, 286, 237, 435, 22, - 436, 23, 24, 426, 247, 139, 276, 250, 0, 0, - 253, 140, 254, 0, 256, 0, 0, 237, 237, 0, - 0, 0, 0, 0, 0, 416, 238, 418, 238, 420, - 0, 239, 0, 0, 0, 0, 239, 0, 246, 0, - 246, 0, 264, 394, 140, 0, 140, -187, -187, 0, - -187, 239, 239, 0, -187, 281, 239, 0, 0, 0, - 0, 240, 0, -187, 0, 0, -187, 238, 0, 287, - 238, 241, 0, 0, 0, 0, 0, 0, 0, 246, - 0, 246, 246, 0, 0, 140, 0, 140, 140, 242, - 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 246, 246, -187, -187, 240, 0, 140, 140, - 239, 241, 0, 0, 323, 0, 241, 0, 239, 0, - 0, 240, 240, 0, 0, 328, 240, 330, 0, 242, - 337, 288, 289, 0, 242, 0, 241, -188, -188, 0, - -188, 0, 343, 0, -188, 0, 243, 0, 0, 242, - 242, 0, 0, -188, 242, 0, -188, 0, 0, 0, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 0, 0, 244, 0, 0, 0, 0, 364, 245, - 240, 0, 0, 0, 0, 0, 243, 0, 240, 0, - 241, 243, 0, 0, -188, -188, 0, 0, 335, 0, - 0, 377, 378, 379, 380, 0, 243, 243, 242, 0, - 0, 243, 0, 244, 0, 239, 242, 239, 244, 245, - 0, 0, 0, 0, 245, 0, 389, 0, 391, 393, - 0, 0, 0, 244, 244, 0, 0, 0, 244, 245, - 245, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 0, 34, 35, 0, 37, 239, 0, 239, 239, - 41, 42, 43, 44, 0, 243, 0, 0, 203, 0, - 428, 0, 0, 243, 0, 0, 204, 205, 0, 239, - 239, 0, 0, -189, -189, 240, -189, 240, 0, 0, - -189, 0, 244, 0, 0, 241, 0, 241, 245, -189, - 244, 0, -189, 0, 0, 0, 245, 0, 0, 16, - 6, -190, -190, 242, -190, 242, 34, 35, -190, 37, - 0, 0, 0, 134, 0, 0, 240, -190, 240, 240, - -190, 0, 135, 0, 0, 136, 241, 0, 335, 241, - -189, -189, 0, 0, 0, 0, 0, 0, 0, 240, - 240, 0, 0, 0, 242, 0, 242, 242, 0, 241, - 241, 0, 297, 298, 0, 299, 300, 0, -190, -190, - 243, 0, 243, 16, 6, 0, 0, 242, 242, 0, - 0, 0, 0, 0, 0, 34, 35, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 244, - 0, 135, 0, 245, 136, 245, 0, 0, 0, 301, - 302, 243, 0, 243, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 243, 243, 0, 0, 244, 0, - 244, 244, 16, 6, 245, 0, 245, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 244, 244, 0, 0, 0, 185, 245, 245, 186, - 187, 188, 0, 189, 190, 191, 192, 0, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 34, 35, 0, - 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, - 0, 144, 202, 203, 0, 0, 0, 0, 0, 184, - 262, 204, 205, 0, 0, 0, 0, 185, 0, 0, - 186, 187, 188, 0, 189, 190, 191, 192, 0, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, - 0, 37, 0, 0, 16, 6, 41, 42, 43, 44, - -191, -191, 144, -191, 203, 0, 0, -191, 0, 0, - 184, 0, 204, 205, 0, 0, -191, 0, 185, -191, - 0, 186, 187, 188, 0, 189, 190, 191, 192, 0, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 34, + 15, 107, 146, 17, 17, 138, 333, 139, 15, 18, + 19, 30, 334, 25, 335, 238, 1, 2, 3, 4, + 5, 275, 142, 373, 93, 32, 267, 21, 29, 94, + -208, 95, 55, 20, 96, 99, 268, 261, 27, 26, + 97, 100, 158, 98, 28, 298, 299, 108, 300, 301, + 29, 374, 316, 6, 319, 238, 367, 158, 107, 158, + 238, 158, 376, -188, -188, 92, -188, 158, 34, 35, + -188, 37, 140, 16, 6, 287, 287, 101, 141, -188, + 238, 145, -188, 377, 135, 16, 6, 136, 158, 113, + 383, 385, 302, 303, 147, 158, 158, 144, 16, 6, + 409, 143, 116, 117, 6, 158, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 148, 270, 422, + -188, -188, -188, 149, 158, 137, 16, 6, 129, 130, + 131, 132, 133, 239, 238, 423, 180, 150, 292, 240, + 158, 151, 287, 184, 424, 247, 333, 111, 112, 158, + 250, 141, 334, 253, 335, 34, 35, 152, 37, 131, + 132, 133, 153, 41, 42, 43, 44, 154, 158, 159, + 142, 204, 262, 239, 181, 138, 269, 139, 239, 240, + 271, 260, 272, 266, 240, 247, 276, 273, 274, 279, + 247, 141, 292, 288, 288, 280, 141, 284, 239, 240, + 240, 278, 285, 283, 240, 247, 247, 286, 293, 294, + 247, 141, 141, 16, 6, 295, 141, 34, 35, 296, + 37, 56, 138, 138, 139, 139, 129, 130, 131, 132, + 133, 297, 317, 135, 320, 323, 136, 328, 330, 238, + 102, 238, 140, 109, 110, 345, 112, 339, 141, 340, + 346, 347, 239, 348, 360, 366, 368, 362, 240, 364, + 288, 370, 382, 414, 247, 384, 240, 372, 386, 138, + 141, 139, 247, 337, 137, 16, 6, 397, 141, 398, + 238, 410, 287, 238, 396, 412, 415, 416, 418, 140, + 140, 420, 426, 430, 431, 141, 141, 389, 157, 391, + 432, 433, 22, 238, 238, 435, 23, 436, 437, 24, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 427, + 179, 264, 277, 0, 0, 0, 140, 0, 425, 0, + 0, 428, 141, 248, 0, 0, 251, 0, 0, 254, + 0, 255, 0, 257, 0, 0, 417, 239, 419, 239, + 421, 438, 439, 240, 0, 240, 0, 0, 0, 247, + 0, 247, 0, 0, 395, 141, 0, 141, 0, 0, + 0, 265, 0, 0, 0, 0, -189, -189, 0, -189, + 0, 241, 0, -189, 282, 0, 0, 242, 239, 0, + 288, 239, -189, 0, 240, -189, 240, 240, 0, 0, + 247, 0, 247, 247, 0, 0, 141, 0, 141, 141, + 0, 239, 239, 0, 0, 243, 0, 240, 240, 0, + 0, 241, 0, 247, 247, 0, 241, 242, 0, 141, + 141, 0, 242, -189, -189, -189, 0, 0, 0, 0, + 0, 241, 241, 324, 0, 0, 241, 289, 290, 0, + 0, 0, 242, 0, 329, 243, 331, 0, 0, 338, + 243, 0, -190, -190, 244, -190, 0, 0, 0, -190, + 0, 344, 182, 0, 0, 243, 243, 0, -190, 249, + 243, -190, 252, 245, 0, 0, 0, 0, 0, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 241, 246, 0, 0, 244, 0, 242, 365, 241, 244, + 0, 0, 0, 0, 336, 0, 0, 0, 0, -190, + -190, -190, 0, 245, 244, 244, 0, 0, 245, 244, + 378, 379, 380, 381, 243, 0, 0, 0, 0, 0, + 0, 246, 243, 245, 245, 0, 246, 0, 245, 0, + 0, 0, 0, 0, 0, 390, 0, 392, 394, 0, + 0, 246, 246, 0, 34, 35, 246, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, -196, -196, + 204, -196, 0, 244, 0, -196, 0, 0, 205, 206, + 142, 244, 325, 0, -196, 0, 0, -196, -208, 429, + 0, 0, 245, 0, 0, 241, 0, 241, 0, 0, + 245, 242, 0, 242, 342, 343, 0, 0, 0, 0, + 246, 0, 16, 6, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, -196, -196, -196, 0, 243, + 0, 243, 0, 0, 0, 0, 241, 361, 241, 241, + 363, 0, 242, 0, 336, 242, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 117, 0, 0, 241, + 241, 122, 123, 124, 125, 242, 242, 0, 0, 0, + 243, 0, 243, 243, 0, 0, 0, 0, 244, 0, + 244, 129, 130, 131, 132, 133, 388, 0, 0, 34, + 35, 0, 37, 243, 243, 0, 0, 245, 0, 245, + 0, 0, 406, 0, 407, 135, 408, 0, 136, 0, + 0, 0, 0, 302, 303, 246, 0, 246, 0, 244, + 0, 244, 244, 0, 0, 0, 0, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 245, 0, + 245, 245, 244, 244, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 246, 246, + 0, 245, 245, 0, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 186, 246, + 246, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, + 44, 0, 0, 145, 203, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, -191, -191, 0, -191, 0, + 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, + 0, -191, 0, 0, -191, 0, 0, 0, 185, 263, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, -191, -191, -191, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, 43, - 44, 0, 0, 144, 290, 203, 0, -191, -191, 0, - 0, 184, 325, 204, 205, 0, 0, 0, 0, 185, - 0, 0, 186, 187, 188, 0, 189, 190, 191, 192, - 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, - 43, 44, -192, -192, 144, -192, 203, 0, 0, -192, - 0, 0, 184, 0, 204, 205, 0, 0, -192, 0, - 185, -192, 0, 186, 187, 188, 0, 189, 190, 191, - 192, 0, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 34, 35, 33, 37, 0, 0, 16, 6, 41, - 42, 43, 44, 0, 0, 144, 0, 203, 0, -192, - -192, 0, 0, 0, 0, 204, 205, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 321, 0, 0, 103, 104, 115, 0, 47, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 16, 6, - 0, 0, 0, 48, 49, 0, 0, 33, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, - 0, 47, 0, 280, 0, 0, -193, -193, 0, -193, - 0, 0, 0, -193, 0, 0, 0, 48, 49, 0, - 0, 33, -193, 0, 0, -193, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 51, 16, 6, + 44, 0, 0, 145, 291, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 0, 37, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 136, 0, 0, 0, 185, 326, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, 137, 16, 6, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 33, 37, 0, 0, 16, 6, 41, 42, 43, + 44, 0, 0, 145, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 256, 0, + 0, 103, 104, 0, 115, 47, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 16, 6, 0, + 0, 48, 49, 0, 0, 0, 33, 0, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 281, 0, 0, 0, 0, 0, 0, 0, + 0, -192, -192, 0, -192, 0, 48, 49, -192, 0, + 0, 33, 0, 0, 0, 0, 0, -192, 0, 0, + -192, 0, 0, 50, 0, 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 46, 0, -193, -193, 47, 0, 0, 0, 0, - -194, -194, 0, -194, 0, 0, 0, -194, 0, 0, - 0, 48, 49, 0, 0, 33, -194, 0, 0, -194, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 0, 0, 0, 103, 0, -194, -194, 47, - 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 155, 0, 0, 48, 49, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 50, 0, 0, 51, 16, 6, 29, 52, - 53, 54, 55, 126, 127, 128, 129, 130, 131, 132, - 133, 399, 0, 0, 0, 0, 400, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 401, 0, 0, 0, 0, - 402, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, + 0, 46, 0, 0, 0, 47, 0, 0, -192, -192, + -192, 0, 0, 0, 0, 0, -193, -193, 0, -193, + 0, 48, 49, -193, 0, 0, 33, 0, 0, 0, + 0, 0, -193, 0, 0, -193, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, -194, -194, 103, -194, 0, 0, + 47, -194, 0, -193, -193, -193, 0, 0, -195, -195, + -194, -195, 0, -194, 0, -195, 48, 49, 0, 0, + 0, 0, 0, 0, -195, 0, 0, -195, 0, 0, + 0, 0, 0, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 0, 0, 0, 0, 0, + 0, -194, -194, -194, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 156, 0, -195, -195, -195, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 400, 0, 0, 0, 0, 401, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 402, 0, 0, 0, + 0, 403, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 403, - 0, 0, 0, 0, 404, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 369, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 375, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 387, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 386, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 410, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 433, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 255, 0, 0, 0, 0, + 399, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 434, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 259, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 315, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 321, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 322, 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 258, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 314, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 317, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 320, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 257, 0, 115, 0, 0, + 129, 130, 131, 132, 133, 258, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, - 128, 129, 130, 131, 132, 133, 326, 115, 0, 0, + 128, 129, 130, 131, 132, 133, 327, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 340, 115, 0, 0, 116, 117, 118, 119, 120, + 133, 341, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, @@ -4104,203 +4126,213 @@ namespace xsk { namespace gsc { namespace h2 { 0, 0, 0, 0, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, 123, 124, - 125, 116, 117, 0, 0, 0, 0, 122, 123, 124, - 125, 0, 0, 0, 0, 0, 0, 129, 130, 131, - 132, 133, 0, 0, 0, 0, 0, 129, 130, 131, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 72, 3, 4, 93, 189, 72, 8, 3, - 4, 271, 48, 141, 271, 48, 22, 271, 89, 90, - 148, 44, 20, 151, 44, 25, 209, 3, 4, 5, - 6, 7, 85, 44, 34, 35, 94, 95, 91, 0, - 34, 35, 95, 54, 50, 32, 33, 47, 35, 54, - 70, 54, 44, 89, 90, 90, 89, 90, 103, 144, - 52, 48, 45, 45, 51, 91, 45, 50, 50, 56, - 57, 50, 72, 45, 45, 48, 45, 45, 72, 50, - 263, 50, 50, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 94, 45, 45, 90, 52, 184, - 50, 50, 89, 90, 189, 45, 32, 33, 54, 35, - 50, 58, 59, 39, 90, 46, 45, 44, 44, 204, - 205, 50, 48, 45, 209, 51, 52, 48, 50, 45, - 45, 48, 144, 261, 50, 50, 136, 84, 85, 86, - 87, 88, 142, 52, 144, 86, 87, 88, 44, 149, - 144, 411, 152, 52, 411, 283, 284, 411, 48, 32, - 33, 50, 35, 89, 90, 49, 44, 40, 41, 42, - 43, 241, 184, 52, 44, 48, 241, 189, 263, 54, - 180, 44, 44, 44, 184, 368, 271, 370, 316, 189, - 184, 319, 204, 205, 44, 189, 194, 209, 84, 85, - 86, 87, 88, 44, 204, 205, 53, 44, 54, 209, - 204, 205, 54, 26, 54, 209, 89, 90, 288, 289, - 44, 48, 54, 288, 289, 54, 409, 44, 54, 412, - 44, 49, 45, 54, 54, 48, 49, 365, 45, 19, - 95, 241, 32, 33, 53, 35, 44, 241, 53, 432, - 433, 263, 44, 381, 49, 383, 44, 385, 48, 271, - 44, 51, 49, 263, 49, 335, 44, 44, 54, 263, - 335, 271, 272, 54, 44, 44, 44, 271, 54, 54, - 17, 54, 22, 368, 184, 370, 374, 54, 288, 289, - 103, 54, 54, 54, 288, 289, 54, 45, 45, 89, - 90, 45, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 144, 135, 45, 409, 54, 411, 412, 54, 8, - 54, 8, 8, 411, 147, 335, 194, 150, -1, -1, - 153, 335, 155, -1, 157, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 400, 368, 402, 370, 404, - -1, 184, -1, -1, -1, -1, 189, -1, 368, -1, - 370, -1, 185, 373, 368, -1, 370, 32, 33, -1, - 35, 204, 205, -1, 39, 198, 209, -1, -1, -1, - -1, 144, -1, 48, -1, -1, 51, 409, -1, 411, - 412, 144, -1, -1, -1, -1, -1, -1, -1, 409, - -1, 411, 412, -1, -1, 409, -1, 411, 412, 144, - 432, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 184, 432, 433, 89, 90, 189, -1, 432, 433, - 263, 184, -1, -1, 257, -1, 189, -1, 271, -1, - -1, 204, 205, -1, -1, 268, 209, 270, -1, 184, - 273, 204, 205, -1, 189, -1, 209, 32, 33, -1, - 35, -1, 285, -1, 39, -1, 144, -1, -1, 204, - 205, -1, -1, 48, 209, -1, 51, -1, -1, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, 144, -1, -1, -1, -1, 321, 144, - 263, -1, -1, -1, -1, -1, 184, -1, 271, -1, - 263, 189, -1, -1, 89, 90, -1, -1, 271, -1, - -1, 344, 345, 346, 347, -1, 204, 205, 263, -1, - -1, 209, -1, 184, -1, 368, 271, 370, 189, 184, - -1, -1, -1, -1, 189, -1, 369, -1, 371, 372, - -1, -1, -1, 204, 205, -1, -1, -1, 209, 204, - 205, -1, -1, -1, 209, -1, -1, -1, -1, -1, - -1, -1, 32, 33, -1, 35, 409, -1, 411, 412, - 40, 41, 42, 43, -1, 263, -1, -1, 48, -1, - 413, -1, -1, 271, -1, -1, 56, 57, -1, 432, - 433, -1, -1, 32, 33, 368, 35, 370, -1, -1, - 39, -1, 263, -1, -1, 368, -1, 370, 263, 48, - 271, -1, 51, -1, -1, -1, 271, -1, -1, 89, - 90, 32, 33, 368, 35, 370, 32, 33, 39, 35, - -1, -1, -1, 39, -1, -1, 409, 48, 411, 412, - 51, -1, 48, -1, -1, 51, 409, -1, 411, 412, - 89, 90, -1, -1, -1, -1, -1, -1, -1, 432, - 433, -1, -1, -1, 409, -1, 411, 412, -1, 432, - 433, -1, 9, 10, -1, 12, 13, -1, 89, 90, - 368, -1, 370, 89, 90, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 32, 33, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 48, -1, 368, 51, 370, -1, -1, -1, 56, - 57, 409, -1, 411, 412, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 432, 433, -1, -1, 409, -1, - 411, 412, 89, 90, 409, -1, 411, 412, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, - -1, 432, 433, -1, -1, -1, 11, 432, 433, 14, + 0, 46, 93, 3, 4, 72, 272, 72, 8, 3, + 4, 20, 272, 44, 272, 145, 3, 4, 5, 6, + 7, 85, 44, 22, 45, 25, 44, 0, 92, 50, + 52, 48, 96, 44, 34, 35, 54, 45, 54, 70, + 34, 35, 50, 48, 54, 9, 10, 47, 12, 13, + 92, 50, 45, 91, 45, 185, 45, 50, 103, 50, + 190, 50, 45, 32, 33, 45, 35, 50, 32, 33, + 39, 35, 72, 90, 91, 205, 206, 48, 72, 48, + 210, 46, 51, 45, 48, 90, 91, 51, 50, 91, + 45, 45, 56, 57, 94, 50, 50, 54, 90, 91, + 45, 52, 58, 59, 91, 50, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 48, 190, 45, + 89, 90, 91, 44, 50, 89, 90, 91, 84, 85, + 86, 87, 88, 145, 264, 45, 136, 52, 210, 145, + 50, 48, 272, 143, 45, 145, 412, 95, 96, 50, + 150, 145, 412, 153, 412, 32, 33, 44, 35, 86, + 87, 88, 52, 40, 41, 42, 43, 48, 50, 49, + 44, 48, 44, 185, 52, 242, 44, 242, 190, 185, + 44, 181, 44, 54, 190, 185, 195, 44, 44, 54, + 190, 185, 264, 205, 206, 54, 190, 44, 210, 205, + 206, 53, 44, 54, 210, 205, 206, 48, 54, 54, + 210, 205, 206, 90, 91, 54, 210, 32, 33, 54, + 35, 26, 289, 290, 289, 290, 84, 85, 86, 87, + 88, 54, 44, 48, 44, 49, 51, 45, 19, 369, + 45, 371, 242, 48, 49, 44, 96, 53, 242, 53, + 44, 44, 264, 44, 49, 44, 54, 49, 264, 49, + 272, 44, 44, 22, 264, 44, 272, 54, 44, 336, + 264, 336, 272, 273, 89, 90, 91, 54, 272, 54, + 410, 17, 412, 413, 375, 54, 54, 54, 54, 289, + 290, 54, 54, 45, 45, 289, 290, 369, 103, 371, + 45, 45, 8, 433, 434, 54, 8, 54, 54, 8, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 412, + 135, 185, 195, -1, -1, -1, 336, -1, 410, -1, + -1, 413, 336, 148, -1, -1, 151, -1, -1, 154, + -1, 156, -1, 158, -1, -1, 401, 369, 403, 371, + 405, 433, 434, 369, -1, 371, -1, -1, -1, 369, + -1, 371, -1, -1, 374, 369, -1, 371, -1, -1, + -1, 186, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 145, -1, 39, 199, -1, -1, 145, 410, -1, + 412, 413, 48, -1, 410, 51, 412, 413, -1, -1, + 410, -1, 412, 413, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, 145, -1, 433, 434, -1, + -1, 185, -1, 433, 434, -1, 190, 185, -1, 433, + 434, -1, 190, 89, 90, 91, -1, -1, -1, -1, + -1, 205, 206, 258, -1, -1, 210, 205, 206, -1, + -1, -1, 210, -1, 269, 185, 271, -1, -1, 274, + 190, -1, 32, 33, 145, 35, -1, -1, -1, 39, + -1, 286, 142, -1, -1, 205, 206, -1, 48, 149, + 210, 51, 152, 145, -1, -1, -1, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 264, 145, -1, -1, 185, -1, 264, 322, 272, 190, + -1, -1, -1, -1, 272, -1, -1, -1, -1, 89, + 90, 91, -1, 185, 205, 206, -1, -1, 190, 210, + 345, 346, 347, 348, 264, -1, -1, -1, -1, -1, + -1, 185, 272, 205, 206, -1, 190, -1, 210, -1, + -1, -1, -1, -1, -1, 370, -1, 372, 373, -1, + -1, 205, 206, -1, 32, 33, 210, 35, -1, -1, + -1, -1, 40, 41, 42, 43, -1, -1, 32, 33, + 48, 35, -1, 264, -1, 39, -1, -1, 56, 57, + 44, 272, 262, -1, 48, -1, -1, 51, 52, 414, + -1, -1, 264, -1, -1, 369, -1, 371, -1, -1, + 272, 369, -1, 371, 284, 285, -1, -1, -1, -1, + 264, -1, 90, 91, -1, -1, -1, -1, 272, -1, + -1, -1, -1, -1, -1, 89, 90, 91, -1, 369, + -1, 371, -1, -1, -1, -1, 410, 317, 412, 413, + 320, -1, 410, -1, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, 433, + 434, 64, 65, 66, 67, 433, 434, -1, -1, -1, + 410, -1, 412, 413, -1, -1, -1, -1, 369, -1, + 371, 84, 85, 86, 87, 88, 366, -1, -1, 32, + 33, -1, 35, 433, 434, -1, -1, 369, -1, 371, + -1, -1, 382, -1, 384, 48, 386, -1, 51, -1, + -1, -1, -1, 56, 57, 369, -1, 371, -1, 410, + -1, 412, 413, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 410, -1, + 412, 413, 433, 434, -1, -1, 89, 90, 91, -1, + -1, -1, -1, -1, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, -1, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, 11, 433, + 434, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, -1, -1, -1, -1, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, 3, - 4, 56, 57, -1, -1, -1, -1, 11, -1, -1, - 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, 35, -1, -1, 89, 90, 40, 41, 42, 43, - 32, 33, 46, 35, 48, -1, -1, 39, -1, -1, - 3, -1, 56, 57, -1, -1, 48, -1, 11, 51, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, 35, -1, -1, 89, 90, 40, 41, 42, - 43, -1, -1, 46, 47, 48, -1, 89, 90, -1, - -1, 3, 4, 56, 57, -1, -1, -1, -1, 11, - -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, -1, -1, 89, 90, 40, 41, - 42, 43, 32, 33, 46, 35, 48, -1, -1, 39, - -1, -1, 3, -1, 56, 57, -1, -1, 48, -1, - 11, 51, -1, 14, 15, 16, -1, 18, 19, 20, - 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 8, 35, -1, -1, 89, 90, 40, - 41, 42, 43, -1, -1, 46, -1, 48, -1, 89, - 90, -1, -1, -1, -1, 56, 57, 32, 33, 34, - 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 50, -1, -1, 48, 49, 55, -1, 52, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 89, 90, - -1, -1, -1, 68, 69, -1, -1, 8, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, -1, - 85, -1, -1, 88, 89, 90, 91, 92, 93, 94, - 95, 32, 33, 34, 35, 36, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, 48, -1, -1, - -1, 52, -1, 54, -1, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, 68, 69, -1, - -1, 8, 48, -1, -1, 51, -1, -1, -1, -1, - -1, -1, -1, -1, 85, -1, -1, 88, 89, 90, - 91, 92, 93, 94, 95, 32, 33, 34, 35, 36, + 33, -1, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, + -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 8, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, -1, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 49, -1, + -1, 48, 49, -1, 55, 52, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 90, 91, -1, + -1, 68, 69, -1, -1, -1, 8, -1, -1, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, -1, -1, -1, + 52, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 32, 33, -1, 35, -1, 68, 69, 39, -1, + -1, 8, -1, -1, -1, -1, -1, 48, -1, -1, + 51, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, - -1, 48, -1, 89, 90, 52, -1, -1, -1, -1, - 32, 33, -1, 35, -1, -1, -1, 39, -1, -1, - -1, 68, 69, -1, -1, 8, 48, -1, -1, 51, - -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, - -1, 88, 89, 90, 91, 92, 93, 94, 95, 32, - 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, 48, -1, 89, 90, 52, - -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, - -1, -1, 50, -1, -1, 68, 69, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, 85, -1, -1, 88, 89, 90, 91, 92, - 93, 94, 95, 81, 82, 83, 84, 85, 86, 87, - 88, 45, -1, -1, -1, -1, 50, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 45, -1, -1, -1, -1, - 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, + -1, 48, -1, -1, -1, 52, -1, -1, 89, 90, + 91, -1, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 68, 69, 39, -1, -1, 8, -1, -1, -1, + -1, -1, 48, -1, -1, 51, -1, -1, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, 32, 33, 48, 35, -1, -1, + 52, 39, -1, 89, 90, 91, -1, -1, 32, 33, + 48, 35, -1, 51, -1, 39, 68, 69, -1, -1, + -1, -1, -1, -1, 48, -1, -1, 51, -1, -1, + -1, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, -1, -1, -1, -1, -1, + -1, 89, 90, 91, -1, -1, -1, -1, 45, -1, + -1, -1, -1, 50, -1, 89, 90, 91, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 45, -1, -1, -1, -1, 50, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 45, -1, -1, -1, + -1, 50, -1, -1, -1, -1, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 45, - -1, -1, -1, -1, 50, -1, -1, -1, -1, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 45, -1, -1, -1, -1, 50, -1, -1, -1, -1, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 45, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 45, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, + 45, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, @@ -4329,86 +4361,85 @@ namespace xsk { namespace gsc { namespace h2 { -1, -1, -1, -1, 82, 83, 84, 85, 86, 87, 88, -1, -1, -1, 82, -1, 84, 85, 86, 87, 88, 58, 59, -1, -1, 62, 63, 64, 65, 66, - 67, 58, 59, -1, -1, -1, -1, 64, 65, 66, - 67, -1, -1, -1, -1, -1, -1, 84, 85, 86, - 87, 88, -1, -1, -1, -1, -1, 84, 85, 86, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 84, 85, 86, 87, 88 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, - 109, 110, 111, 112, 113, 176, 89, 176, 177, 177, - 44, 0, 108, 109, 110, 44, 70, 54, 54, 91, - 179, 158, 176, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 91, 107, 108, 109, + 110, 111, 112, 113, 114, 177, 90, 177, 178, 178, + 44, 0, 109, 110, 111, 44, 70, 54, 54, 92, + 180, 159, 177, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 52, 68, 69, - 85, 88, 92, 93, 94, 95, 143, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 45, 45, 50, 48, 176, 177, 48, 176, - 177, 48, 143, 48, 49, 143, 159, 160, 176, 143, - 143, 94, 95, 90, 54, 55, 58, 59, 60, 61, + 85, 88, 93, 94, 95, 96, 144, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 45, 45, 50, 48, 177, 178, 48, 177, + 178, 48, 144, 48, 49, 144, 160, 161, 177, 144, + 144, 95, 96, 91, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 81, 82, 83, 84, - 85, 86, 87, 88, 39, 48, 51, 155, 156, 176, - 177, 44, 52, 54, 46, 116, 176, 48, 44, 52, - 48, 44, 52, 48, 45, 50, 143, 50, 49, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 176, - 52, 159, 160, 176, 3, 11, 14, 15, 16, 18, - 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 47, 48, 56, 57, 114, 115, 116, 117, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 85, 86, 87, 88, 39, 48, 51, 89, 156, 157, + 177, 178, 44, 52, 54, 46, 117, 177, 48, 44, + 52, 48, 44, 52, 48, 45, 50, 144, 50, 49, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 177, 52, 160, 161, 177, 3, 11, 14, 15, 16, + 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 47, 48, 56, 57, 115, 116, 117, + 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 145, 146, 147, 153, 154, 162, - 163, 166, 170, 171, 172, 173, 176, 143, 159, 176, - 143, 159, 176, 143, 143, 49, 143, 53, 49, 176, - 45, 44, 4, 117, 143, 54, 44, 54, 44, 114, - 44, 44, 44, 44, 85, 179, 183, 53, 54, 54, - 54, 143, 54, 44, 44, 48, 153, 154, 166, 166, - 47, 114, 54, 54, 54, 54, 54, 9, 10, 12, - 13, 56, 57, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 49, 45, 44, 49, 45, 44, - 49, 50, 49, 143, 159, 4, 54, 45, 143, 19, - 143, 118, 145, 146, 147, 166, 176, 143, 53, 53, - 54, 159, 159, 143, 44, 44, 44, 44, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 49, - 159, 49, 159, 49, 143, 44, 45, 54, 45, 44, - 45, 54, 22, 50, 45, 45, 45, 143, 143, 143, - 143, 44, 45, 44, 45, 44, 45, 159, 114, 143, - 114, 143, 144, 143, 176, 116, 54, 54, 45, 45, - 50, 45, 50, 45, 50, 159, 159, 159, 45, 17, - 45, 54, 45, 22, 54, 54, 160, 54, 160, 54, - 160, 45, 45, 45, 114, 54, 118, 114, 143, 45, - 45, 45, 45, 45, 54, 54, 54, 114, 114 + 139, 140, 141, 142, 143, 146, 147, 148, 154, 155, + 163, 164, 167, 171, 172, 173, 174, 177, 144, 160, + 177, 144, 160, 177, 144, 144, 49, 144, 53, 49, + 177, 45, 44, 4, 118, 144, 54, 44, 54, 44, + 115, 44, 44, 44, 44, 85, 180, 184, 53, 54, + 54, 54, 144, 54, 44, 44, 48, 154, 155, 167, + 167, 47, 115, 54, 54, 54, 54, 54, 9, 10, + 12, 13, 56, 57, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 49, 45, 44, 49, 45, + 44, 49, 50, 49, 144, 160, 4, 54, 45, 144, + 19, 144, 119, 146, 147, 148, 167, 177, 144, 53, + 53, 54, 160, 160, 144, 44, 44, 44, 44, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 49, 160, 49, 160, 49, 144, 44, 45, 54, 45, + 44, 45, 54, 22, 50, 45, 45, 45, 144, 144, + 144, 144, 44, 45, 44, 45, 44, 45, 160, 115, + 144, 115, 144, 145, 144, 177, 117, 54, 54, 45, + 45, 50, 45, 50, 45, 50, 160, 160, 160, 45, + 17, 45, 54, 45, 22, 54, 54, 161, 54, 161, + 54, 161, 45, 45, 45, 115, 54, 119, 115, 144, + 45, 45, 45, 45, 45, 54, 54, 54, 115, 115 }; const unsigned char parser::yyr1_[] = { - 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, - 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 115, 115, 116, 116, - 117, 117, 118, 118, 118, 118, 119, 119, 120, 120, - 120, 121, 122, 122, 123, 124, 124, 125, 125, 126, - 127, 127, 128, 129, 130, 131, 132, 133, 133, 134, - 135, 135, 136, 137, 138, 139, 139, 140, 141, 142, - 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 146, 146, 147, 147, - 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 151, 152, 153, - 153, 154, 154, 155, 155, 155, 155, 155, 155, 156, - 156, 156, 156, 157, 158, 158, 158, 159, 159, 160, - 160, 161, 161, 162, 163, 164, 165, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 177, 178, 179, - 180, 181, 182, 182, 183, 183, 184, 185 + 0, 106, 107, 107, 108, 108, 108, 108, 108, 108, + 109, 110, 111, 111, 111, 111, 111, 112, 113, 114, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 116, 116, 117, 117, + 118, 118, 119, 119, 119, 119, 120, 120, 121, 121, + 121, 122, 123, 123, 124, 125, 125, 126, 126, 127, + 128, 128, 129, 130, 131, 132, 133, 134, 134, 135, + 136, 136, 137, 138, 139, 140, 140, 141, 142, 143, + 144, 144, 144, 145, 145, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 147, 147, 148, 148, + 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 152, 153, 154, + 154, 155, 155, 156, 156, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 159, 159, 159, 160, 160, 161, + 161, 162, 162, 163, 164, 164, 165, 166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 178, 179, + 180, 181, 182, 183, 183, 184, 184, 185, 186 }; const signed char @@ -4432,10 +4463,10 @@ namespace xsk { namespace gsc { namespace h2 { 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, - 1, 2, 3, 4, 3, 2, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 7, 2, 1, 2, 1, 1, 1 + 1, 2, 3, 4, 3, 2, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 7, 2, 1, 2, 1, 1, 1 }; @@ -4445,28 +4476,28 @@ namespace xsk { namespace gsc { namespace h2 { const short parser::yyrline_[] = { - 0, 245, 245, 246, 250, 252, 254, 256, 258, 260, - 265, 269, 274, 275, 276, 277, 278, 282, 287, 292, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 326, 327, 331, 332, - 336, 338, 343, 345, 347, 350, 354, 356, 361, 363, - 365, 370, 375, 377, 382, 387, 389, 394, 396, 401, - 406, 408, 413, 418, 423, 428, 433, 438, 440, 445, - 450, 452, 457, 462, 467, 472, 474, 479, 484, 489, - 494, 495, 496, 500, 501, 505, 507, 509, 511, 513, - 515, 517, 519, 521, 523, 525, 530, 532, 537, 539, - 544, 549, 551, 553, 555, 557, 559, 561, 563, 565, - 567, 569, 571, 573, 575, 577, 579, 581, 583, 588, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 619, 624, 629, - 630, 633, 634, 638, 640, 642, 644, 646, 648, 653, - 655, 657, 659, 664, 669, 671, 674, 678, 681, 685, - 687, 692, 694, 699, 704, 709, 714, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 731, 736, 741, 746, - 751, 756, 761, 766, 771, 776, 781, 783, 788, 793, - 798, 803, 808, 810, 815, 817, 822, 827 + 0, 246, 246, 247, 251, 253, 255, 257, 259, 261, + 266, 270, 275, 276, 277, 278, 279, 283, 288, 293, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 327, 328, 332, 333, + 337, 339, 344, 346, 348, 351, 355, 357, 362, 364, + 366, 371, 376, 378, 383, 388, 390, 395, 397, 402, + 407, 409, 414, 419, 424, 429, 434, 439, 441, 446, + 451, 453, 458, 463, 468, 473, 475, 480, 485, 490, + 495, 496, 497, 501, 502, 506, 508, 510, 512, 514, + 516, 518, 520, 522, 524, 526, 531, 533, 538, 540, + 545, 550, 552, 554, 556, 558, 560, 562, 564, 566, + 568, 570, 572, 574, 576, 578, 580, 582, 584, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 620, 625, 630, + 631, 634, 635, 639, 641, 643, 645, 647, 649, 654, + 656, 658, 660, 665, 670, 672, 675, 679, 682, 686, + 688, 693, 695, 700, 705, 707, 712, 717, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 734, 739, 744, + 749, 754, 759, 764, 769, 774, 779, 784, 786, 791, + 796, 801, 806, 811, 813, 818, 820, 825, 830 }; void @@ -4499,9 +4530,9 @@ namespace xsk { namespace gsc { namespace h2 { #line 13 "parser.ypp" } } } // xsk::gsc::h2 -#line 4503 "parser.cpp" +#line 4534 "parser.cpp" -#line 831 "parser.ypp" +#line 834 "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 76ddd9f6..2806a383 100644 --- a/src/h2/xsk/parser.hpp +++ b/src/h2/xsk/parser.hpp @@ -617,6 +617,7 @@ namespace xsk { namespace gsc { namespace h2 { // stmt_while char dummy66[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -762,22 +763,23 @@ namespace xsk { namespace gsc { namespace h2 { MUL = 86, // "*" DIV = 87, // "/" MOD = 88, // "%" - PATH = 89, // "path" - IDENTIFIER = 90, // "identifier" - STRING = 91, // "string literal" - ISTRING = 92, // "localized string" - COLOR = 93, // "color" - FLOAT = 94, // "float" - INTEGER = 95, // "integer" - ADD_ARRAY = 96, // ADD_ARRAY - THEN = 97, // THEN - TERN = 98, // TERN - NEG = 99, // NEG - ANIMREF = 100, // ANIMREF - PREINC = 101, // PREINC - PREDEC = 102, // PREDEC - POSTINC = 103, // POSTINC - POSTDEC = 104 // POSTDEC + FIELD = 89, // "field" + PATH = 90, // "path" + IDENTIFIER = 91, // "identifier" + STRING = 92, // "string literal" + ISTRING = 93, // "localized string" + COLOR = 94, // "color" + FLOAT = 95, // "float" + INTEGER = 96, // "integer" + ADD_ARRAY = 97, // ADD_ARRAY + THEN = 98, // THEN + TERN = 99, // TERN + NEG = 100, // NEG + ANIMREF = 101, // ANIMREF + PREINC = 102, // PREINC + PREDEC = 103, // PREDEC + POSTINC = 104, // POSTINC + POSTDEC = 105 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -794,7 +796,7 @@ namespace xsk { namespace gsc { namespace h2 { { enum symbol_kind_type { - YYNTOKENS = 105, ///< Number of tokens. + YYNTOKENS = 106, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -885,103 +887,104 @@ namespace xsk { namespace gsc { namespace h2 { S_MUL = 86, // "*" S_DIV = 87, // "/" S_MOD = 88, // "%" - S_PATH = 89, // "path" - S_IDENTIFIER = 90, // "identifier" - S_STRING = 91, // "string literal" - S_ISTRING = 92, // "localized string" - S_COLOR = 93, // "color" - S_FLOAT = 94, // "float" - S_INTEGER = 95, // "integer" - S_ADD_ARRAY = 96, // ADD_ARRAY - S_THEN = 97, // THEN - S_TERN = 98, // TERN - S_NEG = 99, // NEG - S_ANIMREF = 100, // ANIMREF - S_PREINC = 101, // PREINC - S_PREDEC = 102, // PREDEC - S_POSTINC = 103, // POSTINC - S_POSTDEC = 104, // POSTDEC - S_YYACCEPT = 105, // $accept - S_root = 106, // root - S_program = 107, // program - S_inline = 108, // inline - S_include = 109, // include - S_declaration = 110, // declaration - S_decl_usingtree = 111, // decl_usingtree - S_decl_constant = 112, // decl_constant - S_decl_thread = 113, // decl_thread - S_stmt = 114, // stmt - S_stmt_dev = 115, // stmt_dev - S_stmt_block = 116, // stmt_block - S_stmt_list = 117, // stmt_list - S_stmt_expr = 118, // stmt_expr - S_stmt_call = 119, // stmt_call - S_stmt_assign = 120, // stmt_assign - S_stmt_endon = 121, // stmt_endon - S_stmt_notify = 122, // stmt_notify - S_stmt_wait = 123, // stmt_wait - S_stmt_waittill = 124, // stmt_waittill - S_stmt_waittillmatch = 125, // stmt_waittillmatch - S_stmt_waittillframeend = 126, // stmt_waittillframeend - S_stmt_waitframe = 127, // stmt_waitframe - S_stmt_if = 128, // stmt_if - S_stmt_ifelse = 129, // stmt_ifelse - S_stmt_while = 130, // stmt_while - S_stmt_dowhile = 131, // stmt_dowhile - S_stmt_for = 132, // stmt_for - S_stmt_foreach = 133, // stmt_foreach - S_stmt_switch = 134, // stmt_switch - S_stmt_case = 135, // stmt_case - S_stmt_default = 136, // stmt_default - S_stmt_break = 137, // stmt_break - S_stmt_continue = 138, // stmt_continue - S_stmt_return = 139, // stmt_return - S_stmt_breakpoint = 140, // stmt_breakpoint - S_stmt_prof_begin = 141, // stmt_prof_begin - S_stmt_prof_end = 142, // stmt_prof_end - S_expr = 143, // expr - S_expr_or_empty = 144, // expr_or_empty - S_expr_assign = 145, // expr_assign - S_expr_increment = 146, // expr_increment - S_expr_decrement = 147, // expr_decrement - S_expr_ternary = 148, // expr_ternary - S_expr_binary = 149, // expr_binary - S_expr_primitive = 150, // expr_primitive - S_expr_complement = 151, // expr_complement - S_expr_not = 152, // expr_not - S_expr_call = 153, // expr_call - S_expr_method = 154, // expr_method - S_expr_function = 155, // expr_function - S_expr_pointer = 156, // expr_pointer - S_expr_add_array = 157, // expr_add_array - S_expr_parameters = 158, // expr_parameters - S_expr_arguments = 159, // expr_arguments - S_expr_arguments_no_empty = 160, // expr_arguments_no_empty - S_expr_reference = 161, // expr_reference - S_expr_array = 162, // expr_array - S_expr_field = 163, // expr_field - S_expr_size = 164, // expr_size - S_expr_paren = 165, // expr_paren - S_expr_object = 166, // expr_object - S_expr_thisthread = 167, // expr_thisthread - S_expr_empty_array = 168, // expr_empty_array - S_expr_undefined = 169, // expr_undefined - S_expr_game = 170, // expr_game - S_expr_self = 171, // expr_self - S_expr_anim = 172, // expr_anim - S_expr_level = 173, // expr_level - S_expr_animation = 174, // expr_animation - S_expr_animtree = 175, // expr_animtree - S_expr_identifier = 176, // expr_identifier - S_expr_path = 177, // expr_path - S_expr_istring = 178, // expr_istring - S_expr_string = 179, // expr_string - S_expr_color = 180, // expr_color - S_expr_vector = 181, // expr_vector - S_expr_float = 182, // expr_float - S_expr_integer = 183, // expr_integer - S_expr_false = 184, // expr_false - S_expr_true = 185 // expr_true + S_FIELD = 89, // "field" + S_PATH = 90, // "path" + S_IDENTIFIER = 91, // "identifier" + S_STRING = 92, // "string literal" + S_ISTRING = 93, // "localized string" + S_COLOR = 94, // "color" + S_FLOAT = 95, // "float" + S_INTEGER = 96, // "integer" + S_ADD_ARRAY = 97, // ADD_ARRAY + S_THEN = 98, // THEN + S_TERN = 99, // TERN + S_NEG = 100, // NEG + S_ANIMREF = 101, // ANIMREF + S_PREINC = 102, // PREINC + S_PREDEC = 103, // PREDEC + S_POSTINC = 104, // POSTINC + S_POSTDEC = 105, // POSTDEC + S_YYACCEPT = 106, // $accept + S_root = 107, // root + S_program = 108, // program + S_inline = 109, // inline + S_include = 110, // include + S_declaration = 111, // declaration + S_decl_usingtree = 112, // decl_usingtree + S_decl_constant = 113, // decl_constant + S_decl_thread = 114, // decl_thread + S_stmt = 115, // stmt + S_stmt_dev = 116, // stmt_dev + S_stmt_block = 117, // stmt_block + S_stmt_list = 118, // stmt_list + S_stmt_expr = 119, // stmt_expr + S_stmt_call = 120, // stmt_call + S_stmt_assign = 121, // stmt_assign + S_stmt_endon = 122, // stmt_endon + S_stmt_notify = 123, // stmt_notify + S_stmt_wait = 124, // stmt_wait + S_stmt_waittill = 125, // stmt_waittill + S_stmt_waittillmatch = 126, // stmt_waittillmatch + S_stmt_waittillframeend = 127, // stmt_waittillframeend + S_stmt_waitframe = 128, // stmt_waitframe + S_stmt_if = 129, // stmt_if + S_stmt_ifelse = 130, // stmt_ifelse + S_stmt_while = 131, // stmt_while + S_stmt_dowhile = 132, // stmt_dowhile + S_stmt_for = 133, // stmt_for + S_stmt_foreach = 134, // stmt_foreach + S_stmt_switch = 135, // stmt_switch + S_stmt_case = 136, // stmt_case + S_stmt_default = 137, // stmt_default + S_stmt_break = 138, // stmt_break + S_stmt_continue = 139, // stmt_continue + S_stmt_return = 140, // stmt_return + S_stmt_breakpoint = 141, // stmt_breakpoint + S_stmt_prof_begin = 142, // stmt_prof_begin + S_stmt_prof_end = 143, // stmt_prof_end + S_expr = 144, // expr + S_expr_or_empty = 145, // expr_or_empty + S_expr_assign = 146, // expr_assign + S_expr_increment = 147, // expr_increment + S_expr_decrement = 148, // expr_decrement + S_expr_ternary = 149, // expr_ternary + S_expr_binary = 150, // expr_binary + S_expr_primitive = 151, // expr_primitive + S_expr_complement = 152, // expr_complement + S_expr_not = 153, // expr_not + S_expr_call = 154, // expr_call + S_expr_method = 155, // expr_method + S_expr_function = 156, // expr_function + S_expr_pointer = 157, // expr_pointer + S_expr_add_array = 158, // expr_add_array + S_expr_parameters = 159, // expr_parameters + S_expr_arguments = 160, // expr_arguments + S_expr_arguments_no_empty = 161, // expr_arguments_no_empty + S_expr_reference = 162, // expr_reference + S_expr_array = 163, // expr_array + S_expr_field = 164, // expr_field + S_expr_size = 165, // expr_size + S_expr_paren = 166, // expr_paren + S_expr_object = 167, // expr_object + S_expr_thisthread = 168, // expr_thisthread + S_expr_empty_array = 169, // expr_empty_array + S_expr_undefined = 170, // expr_undefined + S_expr_game = 171, // expr_game + S_expr_self = 172, // expr_self + S_expr_anim = 173, // expr_anim + S_expr_level = 174, // expr_level + S_expr_animation = 175, // expr_animation + S_expr_animtree = 176, // expr_animtree + S_expr_identifier = 177, // expr_identifier + S_expr_path = 178, // expr_path + S_expr_istring = 179, // expr_istring + S_expr_string = 180, // expr_string + S_expr_color = 181, // expr_color + S_expr_vector = 182, // expr_vector + S_expr_float = 183, // expr_float + S_expr_integer = 184, // expr_integer + S_expr_false = 185, // expr_false + S_expr_true = 186 // expr_true }; }; @@ -1294,6 +1297,7 @@ namespace xsk { namespace gsc { namespace h2 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2563,6 +2567,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2679,7 +2684,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - H2_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + H2_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4064,6 +4069,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4648,7 +4668,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2191, ///< Last index in yytable_. + yylast_ = 2291, ///< Last index in yytable_. yynnts_ = 81, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4952,6 +4972,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5267,6 +5288,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5340,7 +5362,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::h2 -#line 5344 "parser.hpp" +#line 5366 "parser.hpp" diff --git a/src/iw5/xsk/lexer.cpp b/src/iw5/xsk/lexer.cpp index 9d1fe648..86294451 100644 --- a/src/iw5/xsk/lexer.cpp +++ b/src/iw5/xsk/lexer.cpp @@ -67,9 +67,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -79,18 +79,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -138,7 +129,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -184,24 +175,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw iw5::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return iw5::parser::make_IW5EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -215,7 +210,7 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return iw5::parser::make_DIV(loc_); reader_.advance(); @@ -225,29 +220,27 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw iw5::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return iw5::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw iw5::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -261,16 +254,15 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw iw5::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -283,7 +275,7 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -293,69 +285,43 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw iw5::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return iw5::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return iw5::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw iw5::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return iw5::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw iw5::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return iw5::parser::make_ASSIGN_MUL(loc_); - return iw5::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return iw5::parser::make_LPAREN(loc_); case ')': @@ -375,6 +341,7 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type case ':': if (curr != ':') return iw5::parser::make_COLON(loc_); + reader_.advance(); return iw5::parser::make_DOUBLECOLON(loc_); case '?': @@ -382,43 +349,70 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type case '=': if (curr != '=') return iw5::parser::make_ASSIGN(loc_); + reader_.advance(); return iw5::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return iw5::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? iw5::parser::make_INCREMENT(loc_) : iw5::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return iw5::parser::make_INCREMENT(loc_); + + return iw5::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return iw5::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? iw5::parser::make_DECREMENT(loc_) : iw5::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return iw5::parser::make_DECREMENT(loc_); + + return iw5::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return iw5::parser::make_MOD(loc_); + reader_.advance(); + return iw5::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return iw5::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? iw5::parser::make_OR(loc_) : iw5::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return iw5::parser::make_OR(loc_); + + return iw5::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return iw5::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? iw5::parser::make_AND(loc_) : iw5::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return iw5::parser::make_AND(loc_); + + if (last == '=') + return iw5::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return iw5::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return iw5::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return iw5::parser::make_NOT(loc_); + reader_.advance(); return iw5::parser::make_INEQUALITY(loc_); case '~': @@ -426,144 +420,222 @@ auto lexer::lex() -> xsk::gsc::iw5::parser::symbol_type case '<': if (curr != '<' && curr != '=') return iw5::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? iw5::parser::make_ASSIGN_LSHIFT(loc_) : iw5::parser::make_LSHIFT(loc_); - } - return iw5::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return iw5::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return iw5::parser::make_LSHIFT(loc_); + + reader_.advance(); + return iw5::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return iw5::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? iw5::parser::make_ASSIGN_RSHIFT(loc_) : iw5::parser::make_RSHIFT(loc_); - } - return iw5::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return iw5::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return iw5::parser::make_RSHIFT(loc_); + + reader_.advance(); + return iw5::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw iw5::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::iw5::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw iw5::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw iw5::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return iw5::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return iw5::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::iw5::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw iw5::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw iw5::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return iw5::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return iw5::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return iw5::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return iw5::parser::make_SIZE(loc_); + } + + return iw5::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return iw5::parser::make_PATH(xsk::gsc::iw5::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw5::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return iw5::parser::make_IDENTIFIER(xsk::gsc::iw5::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw5::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return iw5::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return iw5::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -580,30 +652,24 @@ auto lexer::read_number(char first) -> xsk::gsc::iw5::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return iw5::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return iw5::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -615,35 +681,29 @@ auto lexer::read_number(char first) -> xsk::gsc::iw5::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return iw5::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -660,163 +720,15 @@ auto lexer::read_number(char first) -> xsk::gsc::iw5::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return iw5::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw iw5::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw iw5::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw iw5::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return iw5::parser::make_FLOAT(std::string(data, len), loc_); - - return iw5::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::iw5::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw iw5::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw iw5::parser::syntax_error(loc_, "invalid path end '\\'"); - - return iw5::parser::make_PATH(xsk::gsc::iw5::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return iw5::parser::make_IDENTIFIER(xsk::gsc::iw5::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::iw5::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return iw5::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return iw5::parser::make_DOT(loc_); - - } - else return iw5::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::iw5::parser::symbol_type { switch (k) diff --git a/src/iw5/xsk/lexer.hpp b/src/iw5/xsk/lexer.hpp index 0359062c..f56ac16b 100644 --- a/src/iw5/xsk/lexer.hpp +++ b/src/iw5/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::iw5 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::iw5::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::iw5::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::iw5::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::iw5::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::iw5::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/iw5/xsk/parser.cpp b/src/iw5/xsk/parser.cpp index 044f7a98..07005ac1 100644 --- a/src/iw5/xsk/parser.cpp +++ b/src/iw5/xsk/parser.cpp @@ -487,6 +487,7 @@ namespace xsk { namespace gsc { namespace iw5 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -784,6 +785,7 @@ namespace xsk { namespace gsc { namespace iw5 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1081,6 +1083,7 @@ namespace xsk { namespace gsc { namespace iw5 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1377,6 +1380,7 @@ namespace xsk { namespace gsc { namespace iw5 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1928,6 +1932,7 @@ namespace xsk { namespace gsc { namespace iw5 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1959,1285 +1964,1291 @@ namespace xsk { namespace gsc { namespace iw5 { switch (yyn) { case 2: // root: program -#line 243 "parser.ypp" +#line 244 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 3: // root: %empty -#line 244 "parser.ypp" +#line 245 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 4: // program: program inline -#line 249 "parser.ypp" +#line 250 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 5: // program: program include -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 6: // program: program declaration -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 7: // program: inline -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 8: // program: include -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 9: // program: declaration -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 263 "parser.ypp" +#line 264 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 268 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 12: // declaration: "/#" -#line 272 "parser.ypp" +#line 273 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 13: // declaration: "#/" -#line 273 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 15: // declaration: decl_constant -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 16: // declaration: decl_thread -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 281 "parser.ypp" +#line 282 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 286 "parser.ypp" +#line 287 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 291 "parser.ypp" +#line 292 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 295 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 21: // stmt: stmt_block -#line 296 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 22: // stmt: stmt_call -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 30: // stmt: stmt_if -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 31: // stmt: stmt_ifelse -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 32: // stmt: stmt_while -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 33: // stmt: stmt_dowhile -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 34: // stmt: stmt_for -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 35: // stmt: stmt_foreach -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 36: // stmt: stmt_switch -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 37: // stmt: stmt_case -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 38: // stmt: stmt_default -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 39: // stmt: stmt_break -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 40: // stmt: stmt_continue -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 41: // stmt: stmt_return -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 42: // stmt: stmt_breakpoint -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 43: // stmt: stmt_prof_begin -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 44: // stmt: stmt_prof_end -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 45: // stmt_dev: "/#" stmt_list "#/" -#line 323 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 46: // stmt_dev: "/#" "#/" -#line 324 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 47: // stmt_block: "{" stmt_list "}" -#line 328 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 48: // stmt_block: "{" "}" -#line 329 "parser.ypp" +#line 330 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 49: // stmt_list: stmt_list stmt -#line 334 "parser.ypp" +#line 335 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 50: // stmt_list: stmt -#line 336 "parser.ypp" +#line 337 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; case 51: // stmt_expr: expr_assign -#line 341 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; case 52: // stmt_expr: expr_increment -#line 343 "parser.ypp" +#line 344 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2265 "parser.cpp" +#line 2270 "parser.cpp" break; case 53: // stmt_expr: expr_decrement -#line 345 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2271 "parser.cpp" +#line 2276 "parser.cpp" break; case 54: // stmt_expr: %empty -#line 347 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2277 "parser.cpp" +#line 2282 "parser.cpp" break; case 55: // stmt_call: expr_call ";" -#line 352 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2283 "parser.cpp" +#line 2288 "parser.cpp" break; case 56: // stmt_call: expr_method ";" -#line 354 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2289 "parser.cpp" +#line 2294 "parser.cpp" break; case 57: // stmt_assign: expr_assign ";" -#line 359 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2295 "parser.cpp" +#line 2300 "parser.cpp" break; case 58: // stmt_assign: expr_increment ";" -#line 361 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2301 "parser.cpp" +#line 2306 "parser.cpp" break; case 59: // stmt_assign: expr_decrement ";" -#line 363 "parser.ypp" +#line 364 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2307 "parser.cpp" +#line 2312 "parser.cpp" break; case 60: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2313 "parser.cpp" +#line 2318 "parser.cpp" break; case 61: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 373 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2319 "parser.cpp" +#line 2324 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 375 "parser.ypp" +#line 376 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2325 "parser.cpp" +#line 2330 "parser.cpp" break; case 63: // stmt_wait: "wait" expr ";" -#line 380 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2331 "parser.cpp" +#line 2336 "parser.cpp" break; case 64: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 385 "parser.ypp" +#line 386 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2337 "parser.cpp" +#line 2342 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 387 "parser.ypp" +#line 388 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2343 "parser.cpp" +#line 2348 "parser.cpp" break; case 66: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 392 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2349 "parser.cpp" +#line 2354 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 394 "parser.ypp" +#line 395 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2355 "parser.cpp" +#line 2360 "parser.cpp" break; case 68: // stmt_waittillframeend: "waittillframeend" ";" -#line 399 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2361 "parser.cpp" +#line 2366 "parser.cpp" break; case 69: // stmt_if: "if" "(" expr ")" stmt -#line 404 "parser.ypp" +#line 405 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2367 "parser.cpp" +#line 2372 "parser.cpp" break; case 70: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2373 "parser.cpp" +#line 2378 "parser.cpp" break; case 71: // stmt_while: "while" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2379 "parser.cpp" +#line 2384 "parser.cpp" break; case 72: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2385 "parser.cpp" +#line 2390 "parser.cpp" break; case 73: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2391 "parser.cpp" +#line 2396 "parser.cpp" break; case 74: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2397 "parser.cpp" +#line 2402 "parser.cpp" break; case 75: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 431 "parser.ypp" +#line 432 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2403 "parser.cpp" +#line 2408 "parser.cpp" break; case 76: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 436 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2409 "parser.cpp" +#line 2414 "parser.cpp" break; case 77: // stmt_case: "case" expr_integer ":" -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2415 "parser.cpp" +#line 2420 "parser.cpp" break; case 78: // stmt_case: "case" expr_string ":" -#line 443 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2421 "parser.cpp" +#line 2426 "parser.cpp" break; case 79: // stmt_default: "default" ":" -#line 448 "parser.ypp" +#line 449 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2427 "parser.cpp" +#line 2432 "parser.cpp" break; case 80: // stmt_break: "break" ";" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2433 "parser.cpp" +#line 2438 "parser.cpp" break; case 81: // stmt_continue: "continue" ";" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2439 "parser.cpp" +#line 2444 "parser.cpp" break; case 82: // stmt_return: "return" expr ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2445 "parser.cpp" +#line 2450 "parser.cpp" break; case 83: // stmt_return: "return" ";" -#line 465 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2451 "parser.cpp" +#line 2456 "parser.cpp" break; case 84: // stmt_breakpoint: "breakpoint" ";" -#line 470 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2457 "parser.cpp" +#line 2462 "parser.cpp" break; case 85: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2463 "parser.cpp" +#line 2468 "parser.cpp" break; case 86: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2469 "parser.cpp" +#line 2474 "parser.cpp" break; case 87: // expr: expr_ternary -#line 484 "parser.ypp" +#line 485 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2475 "parser.cpp" +#line 2480 "parser.cpp" break; case 88: // expr: expr_binary -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2481 "parser.cpp" +#line 2486 "parser.cpp" break; case 89: // expr: expr_primitive -#line 486 "parser.ypp" +#line 487 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2487 "parser.cpp" +#line 2492 "parser.cpp" break; case 90: // expr_or_empty: expr -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2493 "parser.cpp" +#line 2498 "parser.cpp" break; case 91: // expr_or_empty: %empty -#line 491 "parser.ypp" +#line 492 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2499 "parser.cpp" +#line 2504 "parser.cpp" break; case 92: // expr_assign: expr_object "=" expr -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2505 "parser.cpp" +#line 2510 "parser.cpp" break; case 93: // expr_assign: expr_object "|=" expr -#line 498 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2511 "parser.cpp" +#line 2516 "parser.cpp" break; case 94: // expr_assign: expr_object "&=" expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2517 "parser.cpp" +#line 2522 "parser.cpp" break; case 95: // expr_assign: expr_object "^=" expr -#line 502 "parser.ypp" +#line 503 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2523 "parser.cpp" +#line 2528 "parser.cpp" break; case 96: // expr_assign: expr_object "<<=" expr -#line 504 "parser.ypp" +#line 505 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2529 "parser.cpp" +#line 2534 "parser.cpp" break; case 97: // expr_assign: expr_object ">>=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2535 "parser.cpp" +#line 2540 "parser.cpp" break; case 98: // expr_assign: expr_object "+=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2541 "parser.cpp" +#line 2546 "parser.cpp" break; case 99: // expr_assign: expr_object "-=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2547 "parser.cpp" +#line 2552 "parser.cpp" break; case 100: // expr_assign: expr_object "*=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2553 "parser.cpp" +#line 2558 "parser.cpp" break; case 101: // expr_assign: expr_object "/=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2559 "parser.cpp" +#line 2564 "parser.cpp" break; case 102: // expr_assign: expr_object "%=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2565 "parser.cpp" +#line 2570 "parser.cpp" break; case 103: // expr_increment: "++" expr_object -#line 521 "parser.ypp" +#line 522 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2571 "parser.cpp" +#line 2576 "parser.cpp" break; case 104: // expr_increment: expr_object "++" -#line 523 "parser.ypp" +#line 524 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2577 "parser.cpp" +#line 2582 "parser.cpp" break; case 105: // expr_decrement: "--" expr_object -#line 528 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2583 "parser.cpp" +#line 2588 "parser.cpp" break; case 106: // expr_decrement: expr_object "--" -#line 530 "parser.ypp" +#line 531 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2589 "parser.cpp" +#line 2594 "parser.cpp" break; case 107: // expr_ternary: expr "?" expr ":" expr -#line 535 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2595 "parser.cpp" +#line 2600 "parser.cpp" break; case 108: // expr_binary: expr "||" expr -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2601 "parser.cpp" +#line 2606 "parser.cpp" break; case 109: // expr_binary: expr "&&" expr -#line 542 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2607 "parser.cpp" +#line 2612 "parser.cpp" break; case 110: // expr_binary: expr "==" expr -#line 544 "parser.ypp" +#line 545 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2613 "parser.cpp" +#line 2618 "parser.cpp" break; case 111: // expr_binary: expr "!=" expr -#line 546 "parser.ypp" +#line 547 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2619 "parser.cpp" +#line 2624 "parser.cpp" break; case 112: // expr_binary: expr "<=" expr -#line 548 "parser.ypp" +#line 549 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2625 "parser.cpp" +#line 2630 "parser.cpp" break; case 113: // expr_binary: expr ">=" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2631 "parser.cpp" +#line 2636 "parser.cpp" break; case 114: // expr_binary: expr "<" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2637 "parser.cpp" +#line 2642 "parser.cpp" break; case 115: // expr_binary: expr ">" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2643 "parser.cpp" +#line 2648 "parser.cpp" break; case 116: // expr_binary: expr "|" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2649 "parser.cpp" +#line 2654 "parser.cpp" break; case 117: // expr_binary: expr "&" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2655 "parser.cpp" +#line 2660 "parser.cpp" break; case 118: // expr_binary: expr "^" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2661 "parser.cpp" +#line 2666 "parser.cpp" break; case 119: // expr_binary: expr "<<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2667 "parser.cpp" +#line 2672 "parser.cpp" break; case 120: // expr_binary: expr ">>" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2673 "parser.cpp" +#line 2678 "parser.cpp" break; case 121: // expr_binary: expr "+" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2679 "parser.cpp" +#line 2684 "parser.cpp" break; case 122: // expr_binary: expr "-" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2685 "parser.cpp" +#line 2690 "parser.cpp" break; case 123: // expr_binary: expr "*" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2691 "parser.cpp" +#line 2696 "parser.cpp" break; case 124: // expr_binary: expr "/" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2697 "parser.cpp" +#line 2702 "parser.cpp" break; case 125: // expr_binary: expr "%" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2703 "parser.cpp" +#line 2708 "parser.cpp" break; case 126: // expr_primitive: expr_complement -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2709 "parser.cpp" +#line 2714 "parser.cpp" break; case 127: // expr_primitive: expr_not -#line 579 "parser.ypp" +#line 580 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2715 "parser.cpp" +#line 2720 "parser.cpp" break; case 128: // expr_primitive: expr_call -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2721 "parser.cpp" +#line 2726 "parser.cpp" break; case 129: // expr_primitive: expr_method -#line 581 "parser.ypp" +#line 582 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2727 "parser.cpp" +#line 2732 "parser.cpp" break; case 130: // expr_primitive: expr_add_array -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2733 "parser.cpp" +#line 2738 "parser.cpp" break; case 131: // expr_primitive: expr_reference -#line 583 "parser.ypp" +#line 584 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2739 "parser.cpp" +#line 2744 "parser.cpp" break; case 132: // expr_primitive: expr_array -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2745 "parser.cpp" +#line 2750 "parser.cpp" break; case 133: // expr_primitive: expr_field -#line 585 "parser.ypp" +#line 586 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2751 "parser.cpp" +#line 2756 "parser.cpp" break; case 134: // expr_primitive: expr_size -#line 586 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2757 "parser.cpp" +#line 2762 "parser.cpp" break; case 135: // expr_primitive: expr_paren -#line 587 "parser.ypp" +#line 588 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2763 "parser.cpp" +#line 2768 "parser.cpp" break; case 136: // expr_primitive: expr_thisthread -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2769 "parser.cpp" +#line 2774 "parser.cpp" break; case 137: // expr_primitive: expr_empty_array -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2775 "parser.cpp" +#line 2780 "parser.cpp" break; case 138: // expr_primitive: expr_undefined -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2781 "parser.cpp" +#line 2786 "parser.cpp" break; case 139: // expr_primitive: expr_game -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2787 "parser.cpp" +#line 2792 "parser.cpp" break; case 140: // expr_primitive: expr_self -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2793 "parser.cpp" +#line 2798 "parser.cpp" break; case 141: // expr_primitive: expr_anim -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2799 "parser.cpp" +#line 2804 "parser.cpp" break; case 142: // expr_primitive: expr_level -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2805 "parser.cpp" +#line 2810 "parser.cpp" break; case 143: // expr_primitive: expr_animation -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2811 "parser.cpp" +#line 2816 "parser.cpp" break; case 144: // expr_primitive: expr_animtree -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2817 "parser.cpp" +#line 2822 "parser.cpp" break; case 145: // expr_primitive: expr_identifier -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2823 "parser.cpp" +#line 2828 "parser.cpp" break; case 146: // expr_primitive: expr_istring -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2829 "parser.cpp" +#line 2834 "parser.cpp" break; case 147: // expr_primitive: expr_string -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2835 "parser.cpp" +#line 2840 "parser.cpp" break; case 148: // expr_primitive: expr_color -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2841 "parser.cpp" +#line 2846 "parser.cpp" break; case 149: // expr_primitive: expr_vector -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2847 "parser.cpp" +#line 2852 "parser.cpp" break; case 150: // expr_primitive: expr_float -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2853 "parser.cpp" +#line 2858 "parser.cpp" break; case 151: // expr_primitive: expr_integer -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2859 "parser.cpp" +#line 2864 "parser.cpp" break; case 152: // expr_primitive: expr_false -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2865 "parser.cpp" +#line 2870 "parser.cpp" break; case 153: // expr_primitive: expr_true -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2871 "parser.cpp" +#line 2876 "parser.cpp" break; case 154: // expr_complement: "~" expr -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2877 "parser.cpp" +#line 2882 "parser.cpp" break; case 155: // expr_not: "!" expr -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2883 "parser.cpp" +#line 2888 "parser.cpp" break; case 156: // expr_call: expr_function -#line 619 "parser.ypp" +#line 620 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2889 "parser.cpp" +#line 2894 "parser.cpp" break; case 157: // expr_call: expr_pointer -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2895 "parser.cpp" +#line 2900 "parser.cpp" break; case 158: // expr_method: expr_object expr_function -#line 623 "parser.ypp" +#line 624 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2901 "parser.cpp" +#line 2906 "parser.cpp" break; case 159: // expr_method: expr_object expr_pointer -#line 624 "parser.ypp" +#line 625 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2907 "parser.cpp" +#line 2912 "parser.cpp" break; case 160: // expr_function: expr_identifier "(" expr_arguments ")" -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2913 "parser.cpp" +#line 2918 "parser.cpp" break; case 161: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 631 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2919 "parser.cpp" +#line 2924 "parser.cpp" break; case 162: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2925 "parser.cpp" +#line 2930 "parser.cpp" break; case 163: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 635 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2931 "parser.cpp" +#line 2936 "parser.cpp" break; case 164: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 637 "parser.ypp" +#line 638 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2937 "parser.cpp" +#line 2942 "parser.cpp" break; case 165: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2943 "parser.cpp" +#line 2948 "parser.cpp" break; case 166: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 644 "parser.ypp" +#line 645 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2949 "parser.cpp" +#line 2954 "parser.cpp" break; case 167: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 646 "parser.ypp" +#line 647 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2955 "parser.cpp" +#line 2960 "parser.cpp" break; case 168: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 648 "parser.ypp" +#line 649 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2961 "parser.cpp" +#line 2966 "parser.cpp" break; case 169: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 650 "parser.ypp" +#line 651 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 2967 "parser.cpp" +#line 2972 "parser.cpp" break; case 170: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 655 "parser.ypp" +#line 656 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 2973 "parser.cpp" +#line 2978 "parser.cpp" break; case 171: // expr_parameters: expr_parameters "," expr_identifier -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2979 "parser.cpp" +#line 2984 "parser.cpp" break; case 172: // expr_parameters: expr_identifier -#line 662 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2985 "parser.cpp" +#line 2990 "parser.cpp" break; case 173: // expr_parameters: %empty -#line 664 "parser.ypp" +#line 665 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 2991 "parser.cpp" +#line 2996 "parser.cpp" break; case 174: // expr_arguments: expr_arguments_no_empty -#line 669 "parser.ypp" +#line 670 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 2997 "parser.cpp" +#line 3002 "parser.cpp" break; case 175: // expr_arguments: %empty -#line 671 "parser.ypp" +#line 672 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3003 "parser.cpp" +#line 3008 "parser.cpp" break; case 176: // expr_arguments_no_empty: expr_arguments "," expr -#line 676 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3009 "parser.cpp" +#line 3014 "parser.cpp" break; case 177: // expr_arguments_no_empty: expr -#line 678 "parser.ypp" +#line 679 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3015 "parser.cpp" +#line 3020 "parser.cpp" break; case 178: // expr_reference: "::" expr_identifier -#line 683 "parser.ypp" +#line 684 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3021 "parser.cpp" +#line 3026 "parser.cpp" break; case 179: // expr_reference: expr_path "::" expr_identifier -#line 685 "parser.ypp" +#line 686 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3027 "parser.cpp" +#line 3032 "parser.cpp" break; case 180: // expr_array: expr_object "[" expr "]" -#line 690 "parser.ypp" +#line 691 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3033 "parser.cpp" +#line 3038 "parser.cpp" break; case 181: // expr_field: expr_object "." expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3039 "parser.cpp" +#line 3044 "parser.cpp" break; - case 182: // expr_size: expr_object ".size" -#line 700 "parser.ypp" + case 182: // expr_field: expr_object "field" +#line 698 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3050 "parser.cpp" + break; + + case 183: // expr_size: expr_object ".size" +#line 703 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3045 "parser.cpp" +#line 3056 "parser.cpp" break; - case 183: // expr_paren: "(" expr ")" -#line 705 "parser.ypp" + case 184: // expr_paren: "(" expr ")" +#line 708 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3051 "parser.cpp" +#line 3062 "parser.cpp" break; - case 184: // expr_object: expr_call -#line 709 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3057 "parser.cpp" - break; - - case 185: // expr_object: expr_method -#line 710 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3063 "parser.cpp" - break; - - case 186: // expr_object: expr_array -#line 711 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3069 "parser.cpp" - break; - - case 187: // expr_object: expr_field + case 185: // expr_object: expr_call #line 712 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3075 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3068 "parser.cpp" break; - case 188: // expr_object: expr_game + case 186: // expr_object: expr_method #line 713 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3081 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3074 "parser.cpp" break; - case 189: // expr_object: expr_self + case 187: // expr_object: expr_array #line 714 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3087 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3080 "parser.cpp" break; - case 190: // expr_object: expr_anim + case 188: // expr_object: expr_field #line 715 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3093 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3086 "parser.cpp" break; - case 191: // expr_object: expr_level + case 189: // expr_object: expr_game #line 716 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3099 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3092 "parser.cpp" break; - case 192: // expr_object: expr_identifier + case 190: // expr_object: expr_self #line 717 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3098 "parser.cpp" + break; + + case 191: // expr_object: expr_anim +#line 718 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3104 "parser.cpp" + break; + + case 192: // expr_object: expr_level +#line 719 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3110 "parser.cpp" + break; + + case 193: // expr_object: expr_identifier +#line 720 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3105 "parser.cpp" +#line 3116 "parser.cpp" break; - case 193: // expr_thisthread: "thisthread" -#line 722 "parser.ypp" + case 194: // expr_thisthread: "thisthread" +#line 725 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3111 "parser.cpp" +#line 3122 "parser.cpp" break; - case 194: // expr_empty_array: "[" "]" -#line 727 "parser.ypp" + case 195: // expr_empty_array: "[" "]" +#line 730 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3117 "parser.cpp" +#line 3128 "parser.cpp" break; - case 195: // expr_undefined: "undefined" -#line 732 "parser.ypp" + case 196: // expr_undefined: "undefined" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3123 "parser.cpp" +#line 3134 "parser.cpp" break; - case 196: // expr_game: "game" -#line 737 "parser.ypp" + case 197: // expr_game: "game" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3129 "parser.cpp" +#line 3140 "parser.cpp" break; - case 197: // expr_self: "self" -#line 742 "parser.ypp" + case 198: // expr_self: "self" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3135 "parser.cpp" +#line 3146 "parser.cpp" break; - case 198: // expr_anim: "anim" -#line 747 "parser.ypp" + case 199: // expr_anim: "anim" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3141 "parser.cpp" +#line 3152 "parser.cpp" break; - case 199: // expr_level: "level" -#line 752 "parser.ypp" + case 200: // expr_level: "level" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3147 "parser.cpp" +#line 3158 "parser.cpp" break; - case 200: // expr_animation: "%" "identifier" -#line 757 "parser.ypp" + case 201: // expr_animation: "%" "identifier" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3153 "parser.cpp" +#line 3164 "parser.cpp" break; - case 201: // expr_animtree: "#animtree" -#line 762 "parser.ypp" + case 202: // expr_animtree: "#animtree" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3159 "parser.cpp" +#line 3170 "parser.cpp" break; - case 202: // expr_identifier: "identifier" -#line 767 "parser.ypp" + case 203: // expr_identifier: "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3165 "parser.cpp" +#line 3176 "parser.cpp" break; - case 203: // expr_path: "path" -#line 772 "parser.ypp" + case 204: // expr_path: "path" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3171 "parser.cpp" +#line 3182 "parser.cpp" break; - case 204: // expr_path: expr_identifier -#line 774 "parser.ypp" + case 205: // expr_path: expr_identifier +#line 777 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3177 "parser.cpp" +#line 3188 "parser.cpp" break; - case 205: // expr_istring: "localized string" -#line 779 "parser.ypp" + case 206: // expr_istring: "localized string" +#line 782 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3183 "parser.cpp" +#line 3194 "parser.cpp" break; - case 206: // expr_string: "string literal" -#line 784 "parser.ypp" + case 207: // expr_string: "string literal" +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3189 "parser.cpp" +#line 3200 "parser.cpp" break; - case 207: // expr_color: "color" -#line 789 "parser.ypp" + case 208: // expr_color: "color" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3195 "parser.cpp" +#line 3206 "parser.cpp" break; - case 208: // expr_vector: "(" expr "," expr "," expr ")" -#line 794 "parser.ypp" + case 209: // expr_vector: "(" expr "," expr "," expr ")" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3201 "parser.cpp" +#line 3212 "parser.cpp" break; - case 209: // expr_float: "-" "float" -#line 799 "parser.ypp" + case 210: // expr_float: "-" "float" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3207 "parser.cpp" +#line 3218 "parser.cpp" break; - case 210: // expr_float: "float" -#line 801 "parser.ypp" + case 211: // expr_float: "float" +#line 804 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3213 "parser.cpp" +#line 3224 "parser.cpp" break; - case 211: // expr_integer: "-" "integer" -#line 806 "parser.ypp" + case 212: // expr_integer: "-" "integer" +#line 809 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3219 "parser.cpp" +#line 3230 "parser.cpp" break; - case 212: // expr_integer: "integer" -#line 808 "parser.ypp" + case 213: // expr_integer: "integer" +#line 811 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3225 "parser.cpp" +#line 3236 "parser.cpp" break; - case 213: // expr_false: "false" -#line 813 "parser.ypp" + case 214: // expr_false: "false" +#line 816 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3231 "parser.cpp" +#line 3242 "parser.cpp" break; - case 214: // expr_true: "true" -#line 818 "parser.ypp" + case 215: // expr_true: "true" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3237 "parser.cpp" +#line 3248 "parser.cpp" break; -#line 3241 "parser.cpp" +#line 3252 "parser.cpp" default: break; @@ -3431,13 +3442,13 @@ namespace xsk { namespace gsc { namespace iw5 { ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", - "path", "identifier", "string literal", "localized string", "color", - "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", - "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", - "inline", "include", "declaration", "decl_usingtree", "decl_constant", - "decl_thread", "stmt", "stmt_dev", "stmt_block", "stmt_list", - "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", - "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "field", "path", "identifier", "string literal", "localized string", + "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", + "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", + "program", "inline", "include", "declaration", "decl_usingtree", + "decl_constant", "decl_thread", "stmt", "stmt_dev", "stmt_block", + "stmt_list", "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", + "stmt_notify", "stmt_wait", "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", "stmt_dowhile", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", @@ -3717,130 +3728,130 @@ namespace xsk { namespace gsc { namespace iw5 { } - const short parser::yypact_ninf_ = -263; + const short parser::yypact_ninf_ = -260; - const short parser::yytable_ninf_ = -205; + const short parser::yytable_ninf_ = -206; const short parser::yypact_[] = { - 34, -263, -263, -22, -22, -28, -263, 19, 34, -263, - -263, -263, -263, -263, -263, -17, -263, -263, -4, 4, - -48, -263, -263, -263, -263, -38, 1180, -263, -263, -263, - 15, 33, -263, -263, -33, -24, -263, 6, -263, -263, - -263, -263, -263, -263, -263, 1180, 630, -38, 1180, 1180, - -15, -16, -263, -263, -263, -263, 2051, -263, -263, -263, - -263, -263, -14, 78, -263, -263, -263, -263, 532, 652, - -263, -263, 678, -263, -263, -263, 713, 727, 756, 866, - -263, -263, 57, 32, -263, -263, -263, -263, -263, -263, - -263, -263, 37, 54, -38, 56, 71, 62, 73, 88, - 90, 93, 1377, 630, -263, 2134, 98, 116, -263, -263, - -263, -263, -263, -263, -263, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, -263, 1244, -38, -263, -263, 94, - 110, 1180, -38, -263, 835, -263, -263, 1180, 1180, -38, - 1180, 1180, -38, 1180, -263, 1180, 1176, 1180, -263, 2016, - 115, 115, 2165, 1321, 948, 948, 271, 271, 271, 271, - 747, 2206, 2175, 84, 84, -263, -263, -263, 1821, -263, - -38, 48, -263, 122, 911, 1180, 119, 125, 1089, 131, - 132, 133, 134, 21, 135, 136, 137, 1116, 138, 143, - 151, -263, 149, 605, 605, -263, -263, -263, 962, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, 152, 153, 154, 156, 157, -263, -263, 1292, - -263, -263, -263, -263, 3, 1861, 49, 172, 1901, 52, - 173, 1941, 1980, 178, 2134, 1180, -263, 122, -263, 1180, - -263, 1038, 2086, -263, 1180, 202, 1180, 29, -38, 1180, - 127, 175, 176, -263, -263, -263, -263, 2121, -263, 1180, - 1180, 1180, -263, -263, -2, -2, -263, -263, -263, -263, - -263, -263, -263, 186, 188, 189, 193, -263, -263, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 187, -263, 1180, 190, -263, 1180, 194, 1180, 198, 2134, - 75, -263, -263, 1543, 200, 1577, 184, -263, -263, -263, - 1341, 1, 1611, -263, -263, -263, 83, 85, 1176, 1180, - 1180, 1180, 1180, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 201, 86, 204, 89, 206, 1645, - 1180, -263, 1089, 1180, 1089, 1180, 1180, -38, 54, 197, - 199, 1679, 1421, 1465, 1509, 1180, -263, 1180, -263, 1180, - -263, 106, 235, 1713, -263, 2134, 203, 1747, 232, -263, - -263, -263, 207, 209, 1180, 210, 1180, 212, 1180, 107, - 113, 114, -263, 1089, 213, 29, 1089, 1180, -263, -263, - 227, -263, 228, -263, 231, -263, -263, -263, -263, -263, - 237, -263, 1781, 226, 230, 233, 1089, 1089, -263, -263, - -263, -263, -263 + 16, -260, -260, -74, -74, -14, -260, 26, 16, -260, + -260, -260, -260, -260, -260, -33, -260, -260, -25, 4, + -43, -260, -260, -260, -260, -24, 1124, -260, -260, -260, + 21, -17, -260, -260, -40, -5, -260, 22, -260, -260, + -260, -260, -260, -260, -260, 1124, 994, -24, 1124, 1124, + -35, 11, -260, -260, -260, -260, 2038, -260, -260, -260, + -260, -260, 473, 541, -260, -260, -260, -260, 575, 624, + -260, -260, 653, -260, -260, -260, 677, 685, 1032, 1097, + -260, -260, 36, 24, -260, -260, -260, -260, -260, -260, + -260, -260, 23, 57, -24, 68, 69, 70, 84, 99, + 87, 93, 1324, 994, -260, 2121, 102, 107, -260, -260, + -260, -260, -260, -260, -260, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, -260, 1189, -24, -260, -260, -260, + 114, 108, 1124, -24, -260, 783, -260, -260, 1124, 1124, + -24, 1124, 1124, -24, 1124, -260, 1124, 1768, 1124, -260, + 2003, 116, 116, 2152, 1180, 158, 158, 77, 77, 77, + 77, 2162, 989, 1115, 43, 43, -260, -260, -260, 1808, + -260, -24, 7, -260, 115, 829, 1124, 113, 126, 967, + 128, 130, 132, 133, -13, 125, 131, 134, 1059, 135, + 140, 149, -260, 148, 392, 392, -260, -260, -260, 875, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, 144, 153, 154, 155, 157, -260, -260, + 1238, -260, -260, -260, -260, 2, 1848, 47, 169, 1888, + 48, 174, 1928, 1967, 178, 2121, 1124, -260, 115, -260, + 1124, -260, 921, 2073, -260, 1124, 160, 1124, -1, -24, + 1124, 141, 177, 186, -260, -260, -260, -260, 2108, -260, + 1124, 1124, 1124, -260, -260, 30, 30, -260, -260, -260, + -260, -260, -260, -260, 194, 196, 203, 204, -260, -260, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 200, -260, 1124, 202, -260, 1124, 205, 1124, 208, + 2121, 49, -260, -260, 1490, 209, 1524, 201, -260, -260, + -260, 1287, 3, 1558, -260, -260, -260, 51, 55, 1768, + 1124, 1124, 1124, 1124, 2121, 2121, 2121, 2121, 2121, 2121, + 2121, 2121, 2121, 2121, 2121, 214, 61, 215, 65, 216, + 1592, 1124, -260, 967, 1124, 967, 1124, 1124, -24, 57, + 207, 210, 1626, 1368, 1412, 1456, 1124, -260, 1124, -260, + 1124, -260, 67, 245, 1660, -260, 2121, 211, 1694, 246, + -260, -260, -260, 213, 217, 1124, 219, 1124, 221, 1124, + 95, 97, 121, -260, 967, 222, -1, 967, 1124, -260, + -260, 232, -260, 235, -260, 236, -260, -260, -260, -260, + -260, 238, -260, 1728, 231, 234, 237, 967, 967, -260, + -260, -260, -260, -260 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 202, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 203, 204, 0, 0, - 0, 1, 4, 5, 6, 173, 0, 10, 11, 206, - 0, 0, 172, 201, 0, 0, 193, 0, 214, 213, - 195, 196, 197, 198, 199, 0, 175, 0, 0, 0, - 0, 0, 205, 207, 210, 212, 0, 87, 88, 89, + 3, 12, 13, 0, 0, 0, 203, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 204, 205, 0, 0, + 0, 1, 4, 5, 6, 173, 0, 10, 11, 207, + 0, 0, 172, 202, 0, 0, 194, 0, 215, 214, + 196, 197, 198, 199, 200, 0, 175, 0, 0, 0, + 0, 0, 206, 208, 211, 213, 0, 87, 88, 89, 126, 127, 128, 129, 156, 157, 130, 131, 132, 133, 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 0, 146, 147, 148, 149, 150, 151, - 152, 153, 0, 0, 0, 0, 204, 0, 0, 204, - 0, 0, 0, 175, 194, 177, 0, 174, 178, 155, - 154, 209, 211, 200, 18, 0, 0, 0, 0, 0, + 152, 153, 0, 0, 0, 0, 205, 0, 0, 205, + 0, 0, 0, 175, 195, 177, 0, 174, 178, 155, + 154, 210, 212, 201, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 158, 159, 204, - 0, 175, 0, 17, 0, 19, 171, 0, 175, 0, - 0, 175, 0, 0, 183, 0, 177, 0, 170, 0, - 119, 120, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 121, 122, 123, 124, 125, 0, 181, - 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 183, 0, 0, 182, 158, 159, + 205, 0, 175, 0, 17, 0, 19, 171, 0, 175, + 0, 0, 175, 0, 0, 184, 0, 177, 0, 170, + 0, 119, 120, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 121, 122, 123, 124, 125, 0, + 181, 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 0, 0, 0, 50, 20, 21, 0, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 0, 0, 0, 184, 185, 186, 187, 0, - 188, 189, 190, 191, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 0, 180, 0, 160, 175, - 46, 0, 0, 68, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 79, 80, 81, 83, 0, 84, 175, - 175, 0, 184, 185, 103, 105, 47, 49, 57, 58, - 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, + 0, 0, 48, 0, 0, 0, 50, 20, 21, 0, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 0, 0, 0, 185, 186, 187, 188, + 0, 189, 190, 191, 192, 193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 176, 0, 180, 0, 160, + 175, 46, 0, 0, 68, 0, 0, 0, 54, 0, + 0, 0, 0, 0, 79, 80, 81, 83, 0, 84, + 175, 175, 0, 185, 186, 103, 105, 47, 49, 57, + 58, 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 175, 0, 164, 175, 0, 0, 0, 107, - 0, 45, 63, 0, 0, 0, 0, 51, 52, 53, - 0, 0, 0, 78, 77, 82, 0, 0, 0, 0, - 0, 0, 0, 92, 98, 99, 100, 101, 102, 93, - 94, 95, 97, 96, 0, 0, 0, 0, 0, 0, - 175, 161, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 163, 175, 165, 175, - 208, 0, 69, 0, 71, 90, 0, 0, 0, 76, - 85, 86, 0, 0, 175, 0, 175, 0, 175, 0, - 0, 0, 166, 0, 0, 54, 0, 0, 60, 62, - 174, 65, 174, 67, 174, 167, 168, 169, 70, 72, - 0, 74, 0, 0, 0, 0, 0, 0, 61, 64, - 66, 73, 75 + 0, 0, 162, 175, 0, 164, 175, 0, 0, 0, + 107, 0, 45, 63, 0, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 78, 77, 82, 0, 0, 0, + 0, 0, 0, 0, 92, 98, 99, 100, 101, 102, + 93, 94, 95, 97, 96, 0, 0, 0, 0, 0, + 0, 175, 161, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 175, 163, 175, 165, + 175, 209, 0, 69, 0, 71, 90, 0, 0, 0, + 76, 85, 86, 0, 0, 175, 0, 175, 0, 175, + 0, 0, 0, 166, 0, 0, 54, 0, 0, 60, + 62, 174, 65, 174, 67, 174, 167, 168, 169, 70, + 72, 0, 74, 0, 0, 0, 0, 0, 0, 61, + 64, 66, 73, 75 }; const short parser::yypgoto_[] = { - -263, -263, -263, 279, 281, 282, -263, -263, -263, -181, - -263, -91, 108, -114, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, 185, -263, -262, - -257, -251, -263, -263, -263, -263, -263, -82, 70, -66, - -61, -263, -263, -120, -45, -263, 181, 192, -263, -263, - 253, -263, -263, -263, 327, 365, 373, 421, -263, -263, - 0, 9, -263, -11, -263, -263, -263, 102, -263, -263 + -260, -260, -260, 281, 284, 288, -260, -260, -260, -172, + -260, -91, 112, -108, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, 185, -260, -259, + -257, -250, -260, -260, -260, -260, -260, -82, -72, -66, + -58, -260, -260, 321, -45, -260, -37, 192, -260, -260, + 240, -260, -260, -260, 253, 327, 355, 365, -260, -260, + 0, 9, -260, -15, -260, -260, -260, 105, -260, -260 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 205, - 206, 207, 208, 326, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 105, 386, 232, - 233, 234, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 31, 106, 182, 67, 68, 69, 70, 71, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, + 207, 208, 209, 327, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 105, 387, 233, + 234, 235, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 }; @@ -3848,547 +3859,537 @@ namespace xsk { namespace gsc { namespace iw5 { const short parser::yytable_[] = { - 15, 107, 145, 17, 17, 327, 137, 265, 15, 30, - 328, 138, 18, 19, 95, 20, 329, -184, -184, 21, - -184, 181, 366, 98, -184, 32, 25, 287, 246, 34, - 35, 249, 37, -184, 96, 99, -184, 1, 2, 3, - 4, 5, 29, 97, 100, 135, 141, 108, 136, 27, - 367, 6, 26, 101, -204, 16, 6, 28, 107, 92, - 34, 35, 235, 37, 16, 6, 16, 6, 41, 42, - 43, 44, 139, 113, -184, -184, 202, 93, 111, 112, - 287, 140, 94, 142, 203, 204, 16, 6, -192, -192, - 143, -192, 258, 311, 146, -192, 314, 157, 157, 144, - 141, 157, 235, 147, -192, 270, 235, -192, -204, -185, - -185, 29, -185, 149, 148, 55, -185, 16, 6, 361, - 150, 282, 282, 6, 157, -185, 235, 369, -185, 370, - 376, 151, 157, 378, 157, 157, 179, 141, 157, 320, - 153, 152, 183, 327, 244, -192, -192, 157, 328, 247, - 402, 415, 250, 140, 329, 157, 157, 416, 417, 336, - 337, 180, 157, 157, 158, 259, -185, -185, 264, 131, - 132, 133, 263, 137, 266, 267, 268, 269, 138, 235, - 257, 382, 271, 384, 244, 282, 279, 273, 244, 274, - 275, 278, 355, 140, 280, 357, 281, 140, 129, 130, - 131, 132, 133, 244, 244, 288, 289, 290, 244, 291, - 292, 56, 140, 140, 236, 312, 315, 140, 137, 137, - 324, 112, 418, 138, 138, 421, 318, 333, 334, 339, - 102, 340, 341, 109, 110, 354, 342, 365, 356, 139, - 381, 360, 358, 363, 375, 431, 432, 377, 140, 379, - 390, 403, 391, 407, 236, 399, 405, 400, 236, 401, - 408, 244, 409, 411, 137, 413, 419, 244, 331, 138, - 140, 423, 424, 283, 283, 425, 140, 389, 236, 428, - 235, 426, 235, 429, 139, 139, 430, 22, 156, 23, - 24, 420, 261, 140, 140, 272, 0, 0, 0, 0, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 235, 0, 282, 235, 237, 0, 0, 116, 117, - 139, 236, 245, 0, 0, 248, 238, 283, 251, 140, - 252, 0, 254, 0, 235, 235, 0, 0, 0, 410, - 0, 412, 0, 414, 129, 130, 131, 132, 133, 0, - 0, 0, 244, 0, 244, 237, 0, 388, 0, 237, - 262, 140, 0, 140, 0, 0, 238, 0, 0, 0, - 238, 0, 277, 0, 237, 237, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 238, 238, 239, 0, 0, - 238, 0, 0, 244, 0, 244, 244, 0, 0, 0, - 0, 0, 140, 0, 140, 140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 244, 0, 0, - 0, 0, 236, 0, 236, 140, 140, 239, 0, 0, - 319, 239, 237, 0, 0, 0, 0, 0, 237, 323, - 0, 325, 0, 238, 332, 0, 284, 285, 0, 238, - 0, 239, 0, 0, 0, 0, 338, 0, 0, 0, - 0, 240, 0, 236, 0, 283, 236, 0, 0, 0, - 0, 0, 0, 0, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 0, 236, 236, 0, 0, - 0, 0, 359, 0, 0, 0, 0, 0, 0, 241, - 0, 240, 0, 0, 239, 240, 0, 242, 0, 0, - 330, 0, 0, 0, 371, 372, 373, 374, 0, 0, - 240, 240, 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 237, 0, 0, 383, 241, - 385, 387, 0, 241, 238, 0, 238, 242, 0, 0, - 0, 242, 0, -186, -186, 243, -186, 0, 241, 241, - -186, 0, 0, 241, 0, 0, 242, 242, 0, -186, - 0, 242, -186, 0, 237, 0, 237, 237, 240, 0, - 0, 0, 422, 0, 240, 238, 0, 238, 238, 0, - 0, 0, 0, 0, 0, 243, 0, 237, 237, 243, - 0, 0, 0, 0, 0, 239, 0, 239, 238, 238, - -186, -186, 0, 0, 243, 243, 241, 0, 0, 243, - 0, 0, 241, 0, 242, 0, 34, 35, 33, 37, - 242, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 0, 0, 202, 0, 0, 0, 239, 0, 330, 239, - 0, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 103, 104, 239, - 239, 47, 243, -187, -187, 0, -187, 0, 243, 240, - -187, 240, 0, 16, 6, 0, 0, 48, 49, -187, - 0, 0, -187, 0, 0, 0, 0, 0, 0, 34, - 35, 0, 37, 0, 50, 0, 134, 51, 16, 6, - 29, 52, 53, 54, 55, 135, 0, 241, 136, 241, - 240, 0, 240, 240, 0, 242, 0, 242, 0, 0, - -187, -187, 0, 0, -188, -188, 0, -188, 0, 0, - 0, -188, 0, 240, 240, 0, 0, 0, -189, -189, - -188, -189, 0, -188, 0, -189, 16, 6, 241, 0, - 241, 241, 0, 0, -189, 0, 242, -189, 242, 242, - 0, 0, 0, 243, 0, 243, 0, -190, -190, 0, - -190, 241, 241, 0, -190, 0, 0, 0, 0, 242, - 242, -188, -188, -190, 116, 117, -190, 0, 120, 121, - 122, 123, 124, 125, 0, -189, -189, 0, 0, 0, - 0, 0, 0, 0, 243, 0, 243, 243, 127, 128, - 129, 130, 131, 132, 133, 0, 0, 0, 184, 0, - 0, 0, 0, 0, -190, -190, 185, 243, 243, 186, - 187, 0, 188, 189, 190, 191, 0, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 34, 35, 0, 37, - 0, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 144, 201, 202, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 0, 0, 0, 0, 0, -191, -191, 0, - -191, 0, 0, 0, -191, 0, 0, 0, 0, 0, - 0, 0, 0, -191, 184, 260, -191, 0, 0, 0, - 0, 0, 185, 16, 6, 186, 187, 0, 188, 189, - 190, 191, 0, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 34, 35, 0, 37, 0, 0, 0, 0, - 41, 42, 43, 44, -191, -191, 144, 0, 202, 0, - 0, 0, 0, 0, 0, 184, 203, 204, 0, 0, - 0, 0, 0, 185, 0, 0, 186, 187, 0, 188, - 189, 190, 191, 0, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 34, 35, 0, 37, 0, 0, 16, - 6, 41, 42, 43, 44, 116, 117, 144, 286, 202, - 0, 122, 123, 124, 125, 0, 0, 203, 204, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 130, 131, 132, 133, 0, 0, 0, 0, - 0, 184, 321, 0, 0, 0, 0, 0, 0, 185, - 16, 6, 186, 187, 0, 188, 189, 190, 191, 0, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 34, - 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, - 44, 0, 0, 144, 0, 202, 0, 0, 0, 0, - 0, 0, 184, 203, 204, 0, 0, 0, 0, 0, - 185, 0, 0, 186, 187, 0, 188, 189, 190, 191, - 0, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 34, 35, 0, 37, 33, 0, 16, 6, 41, 42, - 43, 44, 0, 0, 144, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 0, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 0, 0, 0, 46, 0, 0, 0, 47, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 16, 6, 0, - 0, 0, 0, 48, 49, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 253, 0, 0, 46, 0, 0, - 115, 47, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 48, 49, 0, - 0, 0, 33, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 50, 0, 0, 51, 16, 6, + 15, 107, 146, 17, 17, 30, 138, 95, 15, 328, + 25, 329, 18, 19, 139, 16, 6, 266, 330, 1, + 2, 3, 4, 5, 367, 32, 21, 93, 27, 20, + 34, 35, 94, 37, 96, 99, 26, 288, 41, 42, + 43, 44, 98, 97, 100, 142, 203, 108, 29, 16, + 6, 259, 368, -205, 204, 205, 158, 28, 107, 111, + 112, 34, 35, 236, 37, 92, 6, -193, -193, 101, + -193, 271, 140, 237, -193, 143, 144, 135, 29, 142, + 136, 141, 55, -193, 16, 6, -193, -205, 16, 6, + 288, 312, 315, 362, 147, 370, 158, 158, 158, 371, + 158, 113, 145, 236, 158, 377, 6, 236, 238, 379, + 158, 403, 149, 237, 158, 148, 158, 237, 137, 16, + 6, 150, 283, 283, -193, -193, -193, 236, 131, 132, + 133, 151, 284, 284, 116, 117, 180, 237, 153, 416, + 154, 417, 152, 184, 158, 245, 158, 328, 238, 329, + 248, 158, 238, 251, 141, 159, 330, 142, 260, 181, + 129, 130, 131, 132, 133, 418, 264, 238, 238, 265, + 158, 267, 238, 268, 138, 269, 270, 274, 325, 272, + 236, 258, 139, 280, 275, 245, 283, 276, 279, 245, + 237, 383, 281, 385, 141, 282, 284, 289, 141, 129, + 130, 131, 132, 133, 245, 245, 290, 291, 292, 245, + 293, 56, 313, 141, 141, 116, 117, 316, 141, 138, + 138, 122, 123, 124, 125, 238, 319, 139, 139, 334, + 102, 238, 419, 109, 110, 422, 112, 340, 335, 341, + 140, 129, 130, 131, 132, 133, 342, 343, 355, 141, + 357, 361, 364, 359, 366, 432, 433, 376, 378, 380, + 391, 404, 245, 392, 406, 138, 409, 408, 245, 332, + 410, 141, 412, 139, 414, 420, 424, 141, 390, 425, + 426, 236, 427, 236, 429, 140, 140, 430, 157, 22, + 431, 237, 23, 237, 141, 141, 24, 262, 421, 273, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 179, 0, 236, 0, 283, 236, 238, 0, 238, 0, + 0, 140, 237, 246, 284, 237, 249, 239, 0, 252, + 141, 253, 0, 255, 0, 236, 236, 0, 0, 0, + 411, 0, 413, 0, 415, 237, 237, 0, 0, 0, + 0, 0, 0, 245, 0, 245, 0, 238, 389, 238, + 238, 263, 141, 0, 141, 0, 0, 239, 0, 0, + 0, 239, 0, 278, 0, 240, 0, 0, 0, 0, + 238, 238, 0, 0, 0, 0, 239, 239, 241, 0, + 0, 239, 0, 0, 245, 0, 245, 245, 0, 0, + 0, 0, 0, 141, 0, 141, 141, 0, 0, 0, + 0, 0, 0, 34, 35, 240, 37, 245, 245, 240, + 0, 41, 42, 43, 44, 0, 141, 141, 241, 203, + 0, 320, 241, 0, 285, 286, 0, 0, 0, 240, + 324, 0, 326, 0, 239, 333, 0, 241, 241, 0, + 239, 0, 241, 182, 0, 0, 0, 339, 0, 0, + 247, 0, 242, 250, 0, 0, 0, 0, 0, 0, + 0, 16, 6, 0, 0, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 0, 0, 0, 0, + 243, 0, 240, 360, -185, -185, 0, -185, 331, 0, + 244, -185, 242, 0, 0, 241, 242, 0, 0, 0, + -185, 241, 0, -185, 0, 372, 373, 374, 375, 0, + 0, 242, 242, 0, 0, 0, 242, 0, 0, 0, + 243, 0, 0, 0, 243, 0, 0, 0, 0, 384, + 244, 386, 388, 0, 244, 239, 0, 239, 0, 243, + 243, -185, -185, -185, 243, 0, 0, 0, 0, 244, + 244, 0, -186, -186, 244, -186, 0, 0, 0, -186, + 0, 321, 0, 0, 0, 0, 0, 0, -186, 242, + 0, -186, 0, 423, 0, 242, 239, 0, 239, 239, + 0, 337, 338, 240, 0, 240, -187, -187, 0, -187, + 0, 0, 0, -187, 0, 0, 241, 243, 241, 239, + 239, 0, -187, 243, 0, -187, 0, 244, 0, -186, + -186, -186, 0, 244, 356, 0, 0, 358, 0, 0, + 0, 0, 0, 0, 240, 0, 331, 240, 0, 0, + 0, 0, 0, 0, 0, -188, -188, 241, -188, 241, + 241, 0, -188, -187, -187, -187, 0, 240, 240, 0, + 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, + 241, 241, 382, 0, 34, 35, 0, 37, 0, 0, + 242, 134, 242, 0, 0, 0, 0, 400, 0, 401, + 135, 402, 0, 136, 0, 0, 0, 0, -189, -189, + 0, -189, -188, -188, -188, -189, -190, -190, 243, -190, + 243, 0, 0, -190, -189, 0, 0, -189, 244, 0, + 244, 242, -190, 242, 242, -190, 0, 0, 0, 0, + 0, 137, 16, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 242, 242, 0, 0, 0, 243, + 0, 243, 243, 0, 0, -189, -189, -189, 0, 244, + 0, 244, 244, -190, -190, -190, 0, 0, 0, 0, + 0, 0, 243, 243, 0, 0, 185, 0, 0, 0, + 0, 0, 244, 244, 186, 0, 0, 187, 188, 0, + 189, 190, 191, 192, 0, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 34, 35, 0, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, 145, 202, + 203, 0, 185, 261, 0, 0, 0, 0, 204, 205, + 186, 0, 0, 187, 188, 0, 189, 190, 191, 192, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 34, 35, 0, 37, 0, 0, 0, 0, 41, 42, + 43, 44, 16, 6, 145, 0, 203, 0, 185, 0, + 0, 0, 0, 0, 204, 205, 186, 0, 0, 187, + 188, 0, 189, 190, 191, 192, 0, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 34, 35, 0, 37, + 0, 0, 0, 0, 41, 42, 43, 44, 16, 6, + 145, 287, 203, 0, 185, 322, 0, 0, 0, 0, + 204, 205, 186, 0, 0, 187, 188, 0, 189, 190, + 191, 192, 0, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 34, 35, 0, 37, 0, 0, 0, 0, + 41, 42, 43, 44, 16, 6, 145, 0, 203, 0, + 185, 0, 0, 0, 0, 0, 204, 205, 186, 0, + 0, 187, 188, 0, 189, 190, 191, 192, 0, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, + 0, 37, 33, 0, 0, 0, 41, 42, 43, 44, + 16, 6, 145, 0, 203, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 0, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, + 0, 103, 104, 0, 0, 47, 116, 117, 0, 0, + 120, 121, 122, 123, 124, 125, 16, 6, 0, 0, + 0, 48, 49, -191, -191, 0, -191, 33, 0, 0, + -191, 0, 129, 130, 131, 132, 133, 0, 50, -191, + 0, 51, -191, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 277, 0, 0, 0, 0, 0, 0, 0, + -191, -191, -191, 0, 0, 0, 48, 49, -192, -192, + 0, -192, 33, 0, 0, -192, 0, 0, 0, 0, + 0, 0, 0, 50, -192, 0, 51, -192, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 103, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 293, 294, 0, 295, 296, 0, 0, 0, 0, - 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 35, 0, 37, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 135, - 0, 0, 136, 0, 0, 0, 0, 297, 298, 0, + 0, 46, 116, 117, 0, 47, 120, 121, 122, 123, + 124, 125, 0, 0, 0, -192, -192, -192, 0, 0, + 0, 48, 49, 0, 0, 0, 127, 33, 129, 130, + 131, 132, 133, 0, 0, 0, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 103, 116, 117, 0, + 47, 120, 121, 122, 123, 124, 125, 294, 295, 0, + 296, 297, 0, 0, 0, 0, 48, 49, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 0, 34, + 35, 0, 37, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 135, 0, 0, 136, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 34, 35, + 0, 37, 0, 0, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 155, 0, + 0, 0, 0, 156, 0, 137, 16, 6, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 394, 0, 0, 0, 0, 395, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 396, 0, 0, 0, + 0, 397, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 34, 35, 0, 37, 0, 0, 116, 117, - 16, 6, 120, 121, 122, 123, 124, 125, 135, 0, - 0, 136, 0, 0, 0, 0, 297, 298, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 154, 0, 0, 0, 0, 155, 0, 0, 16, - 6, 115, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 369, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 381, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 393, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 405, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 428, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 254, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 257, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 311, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 314, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 317, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 393, 0, 0, 0, 0, - 394, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 395, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 397, 0, 0, 0, 0, 398, 0, - 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 362, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 129, 130, 131, 132, 133, 256, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 364, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 323, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 406, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 256, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 310, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 313, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 316, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 317, - 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 127, 128, 129, 130, 131, 132, 133, 255, 0, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 322, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 335, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, - 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, - 132, 133, 116, 117, 0, 119, 120, 121, 122, 123, - 124, 125, 116, 117, 0, 0, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, - 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, - 130, 131, 132, 133 + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 336, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, + 0, 126, 127, 128, 129, 130, 131, 132, 133, 116, + 117, 0, 119, 120, 121, 122, 123, 124, 125, 116, + 117, 0, 0, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 0, 0, 0, 127, 128, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 93, 3, 4, 267, 72, 188, 8, 20, - 267, 72, 3, 4, 47, 43, 267, 31, 32, 0, - 34, 141, 21, 47, 38, 25, 43, 208, 148, 31, - 32, 151, 34, 47, 34, 35, 50, 3, 4, 5, - 6, 7, 90, 34, 35, 47, 43, 47, 50, 53, - 49, 89, 69, 47, 51, 88, 89, 53, 103, 44, - 31, 32, 144, 34, 88, 89, 88, 89, 39, 40, - 41, 42, 72, 89, 88, 89, 47, 44, 93, 94, - 261, 72, 49, 51, 55, 56, 88, 89, 31, 32, - 53, 34, 44, 44, 94, 38, 44, 49, 49, 45, - 43, 49, 184, 47, 47, 84, 188, 50, 51, 31, - 32, 90, 34, 51, 43, 94, 38, 88, 89, 44, - 47, 203, 204, 89, 49, 47, 208, 44, 50, 44, - 44, 43, 49, 44, 49, 49, 136, 43, 49, 259, - 47, 51, 142, 405, 144, 88, 89, 49, 405, 149, - 44, 44, 152, 144, 405, 49, 49, 44, 44, 279, - 280, 51, 49, 49, 48, 43, 88, 89, 43, 85, - 86, 87, 53, 239, 43, 43, 43, 43, 239, 261, - 180, 362, 193, 364, 184, 267, 43, 52, 188, 53, - 53, 53, 312, 184, 43, 315, 47, 188, 83, 84, - 85, 86, 87, 203, 204, 53, 53, 53, 208, 53, - 53, 26, 203, 204, 144, 43, 43, 208, 284, 285, - 18, 94, 403, 284, 285, 406, 48, 52, 52, 43, - 45, 43, 43, 48, 49, 48, 43, 53, 48, 239, - 360, 43, 48, 43, 43, 426, 427, 43, 239, 43, - 53, 16, 53, 21, 184, 375, 53, 377, 188, 379, - 53, 261, 53, 53, 330, 53, 53, 267, 268, 330, - 261, 44, 44, 203, 204, 44, 267, 368, 208, 53, - 362, 44, 364, 53, 284, 285, 53, 8, 103, 8, - 8, 405, 184, 284, 285, 193, -1, -1, -1, -1, + 0, 46, 93, 3, 4, 20, 72, 47, 8, 268, + 43, 268, 3, 4, 72, 89, 90, 189, 268, 3, + 4, 5, 6, 7, 21, 25, 0, 44, 53, 43, + 31, 32, 49, 34, 34, 35, 69, 209, 39, 40, + 41, 42, 47, 34, 35, 43, 47, 47, 91, 89, + 90, 44, 49, 51, 55, 56, 49, 53, 103, 94, + 95, 31, 32, 145, 34, 44, 90, 31, 32, 47, + 34, 84, 72, 145, 38, 51, 53, 47, 91, 43, + 50, 72, 95, 47, 89, 90, 50, 51, 89, 90, + 262, 44, 44, 44, 94, 44, 49, 49, 49, 44, + 49, 90, 45, 185, 49, 44, 90, 189, 145, 44, + 49, 44, 43, 185, 49, 47, 49, 189, 88, 89, + 90, 51, 204, 205, 88, 89, 90, 209, 85, 86, + 87, 47, 204, 205, 57, 58, 136, 209, 51, 44, + 47, 44, 43, 143, 49, 145, 49, 406, 185, 406, + 150, 49, 189, 153, 145, 48, 406, 43, 43, 51, + 83, 84, 85, 86, 87, 44, 53, 204, 205, 43, + 49, 43, 209, 43, 240, 43, 43, 52, 18, 194, + 262, 181, 240, 43, 53, 185, 268, 53, 53, 189, + 262, 363, 43, 365, 185, 47, 268, 53, 189, 83, + 84, 85, 86, 87, 204, 205, 53, 53, 53, 209, + 53, 26, 43, 204, 205, 57, 58, 43, 209, 285, + 286, 63, 64, 65, 66, 262, 48, 285, 286, 52, + 45, 268, 404, 48, 49, 407, 95, 43, 52, 43, + 240, 83, 84, 85, 86, 87, 43, 43, 48, 240, + 48, 43, 43, 48, 53, 427, 428, 43, 43, 43, + 53, 16, 262, 53, 53, 331, 53, 21, 268, 269, + 53, 262, 53, 331, 53, 53, 44, 268, 369, 44, + 44, 363, 44, 365, 53, 285, 286, 53, 103, 8, + 53, 363, 8, 365, 285, 286, 8, 185, 406, 194, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 403, -1, 405, 406, 144, -1, -1, 57, 58, - 330, 261, 147, -1, -1, 150, 144, 267, 153, 330, - 155, -1, 157, -1, 426, 427, -1, -1, -1, 394, - -1, 396, -1, 398, 83, 84, 85, 86, 87, -1, - -1, -1, 362, -1, 364, 184, -1, 367, -1, 188, - 185, 362, -1, 364, -1, -1, 184, -1, -1, -1, - 188, -1, 197, -1, 203, 204, -1, -1, -1, 208, - -1, -1, -1, -1, -1, 203, 204, 144, -1, -1, - 208, -1, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, 403, -1, 405, 406, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 426, 427, -1, -1, - -1, -1, 362, -1, 364, 426, 427, 184, -1, -1, - 255, 188, 261, -1, -1, -1, -1, -1, 267, 264, - -1, 266, -1, 261, 269, -1, 203, 204, -1, 267, - -1, 208, -1, -1, -1, -1, 281, -1, -1, -1, - -1, 144, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, -1, -1, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 426, 427, -1, -1, - -1, -1, 317, -1, -1, -1, -1, -1, -1, 144, - -1, 184, -1, -1, 261, 188, -1, 144, -1, -1, - 267, -1, -1, -1, 339, 340, 341, 342, -1, -1, - 203, 204, -1, -1, -1, 208, -1, -1, -1, -1, - -1, -1, -1, 362, -1, 364, -1, -1, 363, 184, - 365, 366, -1, 188, 362, -1, 364, 184, -1, -1, - -1, 188, -1, 31, 32, 144, 34, -1, 203, 204, - 38, -1, -1, 208, -1, -1, 203, 204, -1, 47, - -1, 208, 50, -1, 403, -1, 405, 406, 261, -1, - -1, -1, 407, -1, 267, 403, -1, 405, 406, -1, - -1, -1, -1, -1, -1, 184, -1, 426, 427, 188, - -1, -1, -1, -1, -1, 362, -1, 364, 426, 427, - 88, 89, -1, -1, 203, 204, 261, -1, -1, 208, - -1, -1, 267, -1, 261, -1, 31, 32, 8, 34, - 267, -1, -1, -1, 39, 40, 41, 42, -1, -1, - -1, -1, 47, -1, -1, -1, 403, -1, 405, 406, - -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, -1, -1, -1, 47, 48, 426, - 427, 51, 261, 31, 32, -1, 34, -1, 267, 362, - 38, 364, -1, 88, 89, -1, -1, 67, 68, 47, - -1, -1, 50, -1, -1, -1, -1, -1, -1, 31, - 32, -1, 34, -1, 84, -1, 38, 87, 88, 89, - 90, 91, 92, 93, 94, 47, -1, 362, 50, 364, - 403, -1, 405, 406, -1, 362, -1, 364, -1, -1, - 88, 89, -1, -1, 31, 32, -1, 34, -1, -1, - -1, 38, -1, 426, 427, -1, -1, -1, 31, 32, - 47, 34, -1, 50, -1, 38, 88, 89, 403, -1, - 405, 406, -1, -1, 47, -1, 403, 50, 405, 406, - -1, -1, -1, 362, -1, 364, -1, 31, 32, -1, - 34, 426, 427, -1, 38, -1, -1, -1, -1, 426, - 427, 88, 89, 47, 57, 58, 50, -1, 61, 62, - 63, 64, 65, 66, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, 403, -1, 405, 406, 81, 82, - 83, 84, 85, 86, 87, -1, -1, -1, 3, -1, - -1, -1, -1, -1, 88, 89, 11, 426, 427, 14, - 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, - -1, -1, -1, -1, 39, 40, 41, 42, -1, -1, - 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, - 55, 56, -1, -1, -1, -1, -1, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, -1, -1, - -1, -1, -1, 47, 3, 4, 50, -1, -1, -1, - -1, -1, 11, 88, 89, 14, 15, -1, 17, 18, - 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, - 39, 40, 41, 42, 88, 89, 45, -1, 47, -1, - -1, -1, -1, -1, -1, 3, 55, 56, -1, -1, - -1, -1, -1, 11, -1, -1, 14, 15, -1, 17, - 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, 34, -1, -1, 88, - 89, 39, 40, 41, 42, 57, 58, 45, 46, 47, - -1, 63, 64, 65, 66, -1, -1, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 83, 84, 85, 86, 87, -1, -1, -1, -1, - -1, 3, 4, -1, -1, -1, -1, -1, -1, 11, - 88, 89, 14, 15, -1, 17, 18, 19, 20, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, 34, -1, -1, -1, -1, 39, 40, 41, - 42, -1, -1, 45, -1, 47, -1, -1, -1, -1, - -1, -1, 3, 55, 56, -1, -1, -1, -1, -1, + 135, -1, 404, -1, 406, 407, 363, -1, 365, -1, + -1, 331, 404, 148, 406, 407, 151, 145, -1, 154, + 331, 156, -1, 158, -1, 427, 428, -1, -1, -1, + 395, -1, 397, -1, 399, 427, 428, -1, -1, -1, + -1, -1, -1, 363, -1, 365, -1, 404, 368, 406, + 407, 186, 363, -1, 365, -1, -1, 185, -1, -1, + -1, 189, -1, 198, -1, 145, -1, -1, -1, -1, + 427, 428, -1, -1, -1, -1, 204, 205, 145, -1, + -1, 209, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, 404, -1, 406, 407, -1, -1, -1, + -1, -1, -1, 31, 32, 185, 34, 427, 428, 189, + -1, 39, 40, 41, 42, -1, 427, 428, 185, 47, + -1, 256, 189, -1, 204, 205, -1, -1, -1, 209, + 265, -1, 267, -1, 262, 270, -1, 204, 205, -1, + 268, -1, 209, 142, -1, -1, -1, 282, -1, -1, + 149, -1, 145, 152, -1, -1, -1, -1, -1, -1, + -1, 89, 90, -1, -1, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, -1, -1, -1, -1, + 145, -1, 262, 318, 31, 32, -1, 34, 268, -1, + 145, 38, 185, -1, -1, 262, 189, -1, -1, -1, + 47, 268, -1, 50, -1, 340, 341, 342, 343, -1, + -1, 204, 205, -1, -1, -1, 209, -1, -1, -1, + 185, -1, -1, -1, 189, -1, -1, -1, -1, 364, + 185, 366, 367, -1, 189, 363, -1, 365, -1, 204, + 205, 88, 89, 90, 209, -1, -1, -1, -1, 204, + 205, -1, 31, 32, 209, 34, -1, -1, -1, 38, + -1, 260, -1, -1, -1, -1, -1, -1, 47, 262, + -1, 50, -1, 408, -1, 268, 404, -1, 406, 407, + -1, 280, 281, 363, -1, 365, 31, 32, -1, 34, + -1, -1, -1, 38, -1, -1, 363, 262, 365, 427, + 428, -1, 47, 268, -1, 50, -1, 262, -1, 88, + 89, 90, -1, 268, 313, -1, -1, 316, -1, -1, + -1, -1, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, -1, -1, 31, 32, 404, 34, 406, + 407, -1, 38, 88, 89, 90, -1, 427, 428, -1, + -1, 47, -1, -1, 50, -1, -1, -1, -1, -1, + 427, 428, 361, -1, 31, 32, -1, 34, -1, -1, + 363, 38, 365, -1, -1, -1, -1, 376, -1, 378, + 47, 380, -1, 50, -1, -1, -1, -1, 31, 32, + -1, 34, 88, 89, 90, 38, 31, 32, 363, 34, + 365, -1, -1, 38, 47, -1, -1, 50, 363, -1, + 365, 404, 47, 406, 407, 50, -1, -1, -1, -1, + -1, 88, 89, 90, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 427, 428, -1, -1, -1, 404, + -1, 406, 407, -1, -1, 88, 89, 90, -1, 404, + -1, 406, 407, 88, 89, 90, -1, -1, -1, -1, + -1, -1, 427, 428, -1, -1, 3, -1, -1, -1, + -1, -1, 427, 428, 11, -1, -1, 14, 15, -1, + 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + -1, -1, 39, 40, 41, 42, -1, -1, 45, 46, + 47, -1, 3, 4, -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 8, -1, 88, 89, 39, 40, - 41, 42, -1, -1, 45, -1, 47, -1, -1, -1, - -1, -1, -1, -1, 55, 56, -1, 31, 32, 33, - 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, - -1, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, -1, -1, -1, -1, -1, 88, 89, -1, - -1, -1, -1, 67, 68, -1, -1, -1, 8, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 84, -1, -1, 87, 88, 89, 90, 91, 92, 93, - 94, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, 48, -1, -1, 47, -1, -1, - 54, 51, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, 67, 68, -1, - -1, -1, 8, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 84, -1, -1, 87, 88, 89, - 90, 91, 92, 93, 94, 31, 32, 33, 34, 35, + 31, 32, -1, 34, -1, -1, -1, -1, 39, 40, + 41, 42, 89, 90, 45, -1, 47, -1, 3, -1, + -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, + 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, -1, -1, 39, 40, 41, 42, 89, 90, + 45, 46, 47, -1, 3, 4, -1, -1, -1, -1, + 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, + 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, + 39, 40, 41, 42, 89, 90, 45, -1, 47, -1, + 3, -1, -1, -1, -1, -1, 55, 56, 11, -1, + -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, 34, 8, -1, -1, -1, 39, 40, 41, 42, + 89, 90, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, 55, 56, -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, - -1, 47, -1, -1, -1, 51, -1, -1, -1, -1, - -1, 9, 10, -1, 12, 13, -1, -1, -1, -1, - -1, 67, 68, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 31, 32, -1, 34, -1, 84, -1, - -1, 87, 88, 89, 90, 91, 92, 93, 94, 47, - -1, -1, 50, -1, -1, -1, -1, 55, 56, -1, + -1, 47, 48, -1, -1, 51, 57, 58, -1, -1, + 61, 62, 63, 64, 65, 66, 89, 90, -1, -1, + -1, 67, 68, 31, 32, -1, 34, 8, -1, -1, + 38, -1, 83, 84, 85, 86, 87, -1, 84, 47, + -1, 87, 50, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, -1, -1, -1, + 51, -1, 53, -1, -1, -1, -1, -1, -1, -1, + 88, 89, 90, -1, -1, -1, 67, 68, 31, 32, + -1, 34, 8, -1, -1, 38, -1, -1, -1, -1, + -1, -1, -1, 84, 47, -1, 87, 50, 89, 90, + 91, 92, 93, 94, 95, 31, 32, 33, 34, 35, + 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, + -1, 47, 57, 58, -1, 51, 61, 62, 63, 64, + 65, 66, -1, -1, -1, 88, 89, 90, -1, -1, + -1, 67, 68, -1, -1, -1, 81, 8, 83, 84, + 85, 86, 87, -1, -1, -1, -1, -1, 84, -1, + -1, 87, -1, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, 57, 58, -1, + 51, 61, 62, 63, 64, 65, 66, 9, 10, -1, + 12, 13, -1, -1, -1, -1, 67, 68, -1, -1, + 80, 81, 82, 83, 84, 85, 86, 87, -1, 31, + 32, -1, 34, 84, -1, -1, 87, -1, 89, 90, + 91, 92, 93, 94, 95, 47, -1, -1, 50, -1, + -1, -1, -1, 55, 56, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 31, 32, + -1, 34, -1, -1, -1, -1, 88, 89, 90, -1, + -1, -1, -1, -1, 47, -1, -1, 50, -1, -1, + -1, -1, 55, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, -1, 44, -1, + -1, -1, -1, 49, -1, 88, 89, 90, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 44, -1, -1, -1, -1, 49, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 44, -1, -1, -1, + -1, 49, -1, -1, -1, -1, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 31, 32, -1, 34, -1, -1, 57, 58, - 88, 89, 61, 62, 63, 64, 65, 66, 47, -1, - -1, 50, -1, -1, -1, -1, 55, 56, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, -1, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 44, -1, -1, -1, -1, 49, -1, -1, 88, - 89, 54, -1, -1, 57, 58, 59, 60, 61, 62, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 44, -1, -1, -1, -1, 49, -1, -1, -1, -1, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 49, -1, -1, -1, + -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 44, -1, -1, -1, -1, - 49, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 44, - -1, -1, -1, -1, 49, -1, -1, -1, -1, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 44, -1, -1, -1, -1, 49, -1, - -1, -1, -1, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + 83, 84, 85, 86, 87, 52, -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 49, - -1, -1, -1, -1, 54, -1, -1, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 80, 81, 82, 83, 84, 85, 86, 87, 52, -1, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 53, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 54, -1, - -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 80, 81, 82, 83, 84, 85, 86, 87, -1, - -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, - 86, 87, 57, 58, -1, 60, 61, 62, 63, 64, - 65, 66, 57, 58, -1, -1, 61, 62, 63, 64, - 65, 66, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, -1, -1, -1, 81, -1, 83, 84, - 85, 86, 87, 57, 58, -1, -1, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87 + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 54, -1, -1, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, + 82, 83, 84, 85, 86, 87, -1, -1, -1, -1, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 57, + 58, -1, -1, 61, 62, 63, 64, 65, 66, -1, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + -1, -1, -1, 81, 82, 83, 84, 85, 86, 87 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 89, 105, 106, 107, - 108, 109, 110, 111, 112, 174, 88, 174, 175, 175, - 43, 0, 107, 108, 109, 43, 69, 53, 53, 90, - 177, 156, 174, 8, 31, 32, 33, 34, 35, 36, + 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, + 109, 110, 111, 112, 113, 175, 89, 175, 176, 176, + 43, 0, 108, 109, 110, 43, 69, 53, 53, 91, + 178, 157, 175, 8, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 47, 51, 67, 68, - 84, 87, 91, 92, 93, 94, 141, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 44, 44, 49, 47, 174, 175, 47, 174, - 175, 47, 141, 47, 48, 141, 157, 158, 174, 141, - 141, 93, 94, 89, 53, 54, 57, 58, 59, 60, + 84, 87, 92, 93, 94, 95, 142, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 44, 44, 49, 47, 175, 176, 47, 175, + 176, 47, 142, 47, 48, 142, 158, 159, 175, 142, + 142, 94, 95, 90, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, 82, 83, - 84, 85, 86, 87, 38, 47, 50, 153, 154, 174, - 175, 43, 51, 53, 45, 115, 174, 47, 43, 51, - 47, 43, 51, 47, 44, 49, 141, 49, 48, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 174, - 51, 157, 158, 174, 3, 11, 14, 15, 17, 18, - 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 46, 47, 55, 56, 113, 114, 115, 116, 118, + 84, 85, 86, 87, 38, 47, 50, 88, 154, 155, + 175, 176, 43, 51, 53, 45, 116, 175, 47, 43, + 51, 47, 43, 51, 47, 44, 49, 142, 49, 48, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 175, 51, 158, 159, 175, 3, 11, 14, 15, 17, + 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 46, 47, 55, 56, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 143, 144, 145, 151, 152, 160, 161, 164, - 168, 169, 170, 171, 174, 141, 157, 174, 141, 157, - 174, 141, 141, 48, 141, 52, 48, 174, 44, 43, - 4, 116, 141, 53, 43, 113, 43, 43, 43, 43, - 84, 177, 181, 52, 53, 53, 53, 141, 53, 43, - 43, 47, 151, 152, 164, 164, 46, 113, 53, 53, - 53, 53, 53, 9, 10, 12, 13, 55, 56, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 48, 44, 43, 48, 44, 43, 48, 49, 48, 141, - 157, 4, 53, 141, 18, 141, 117, 143, 144, 145, - 164, 174, 141, 52, 52, 53, 157, 157, 141, 43, - 43, 43, 43, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 48, 157, 48, 157, 48, 141, - 43, 44, 44, 43, 44, 53, 21, 49, 44, 44, - 44, 141, 141, 141, 141, 43, 44, 43, 44, 43, - 44, 157, 113, 141, 113, 141, 142, 141, 174, 115, - 53, 53, 44, 44, 49, 44, 49, 44, 49, 157, - 157, 157, 44, 16, 44, 53, 44, 21, 53, 53, - 158, 53, 158, 53, 158, 44, 44, 44, 113, 53, - 117, 113, 141, 44, 44, 44, 44, 44, 53, 53, - 53, 113, 113 + 139, 140, 141, 144, 145, 146, 152, 153, 161, 162, + 165, 169, 170, 171, 172, 175, 142, 158, 175, 142, + 158, 175, 142, 142, 48, 142, 52, 48, 175, 44, + 43, 4, 117, 142, 53, 43, 114, 43, 43, 43, + 43, 84, 178, 182, 52, 53, 53, 53, 142, 53, + 43, 43, 47, 152, 153, 165, 165, 46, 114, 53, + 53, 53, 53, 53, 9, 10, 12, 13, 55, 56, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 48, 44, 43, 48, 44, 43, 48, 49, 48, + 142, 158, 4, 53, 142, 18, 142, 118, 144, 145, + 146, 165, 175, 142, 52, 52, 53, 158, 158, 142, + 43, 43, 43, 43, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 48, 158, 48, 158, 48, + 142, 43, 44, 44, 43, 44, 53, 21, 49, 44, + 44, 44, 142, 142, 142, 142, 43, 44, 43, 44, + 43, 44, 158, 114, 142, 114, 142, 143, 142, 175, + 116, 53, 53, 44, 44, 49, 44, 49, 44, 49, + 158, 158, 158, 44, 16, 44, 53, 44, 21, 53, + 53, 159, 53, 159, 53, 159, 44, 44, 44, 114, + 53, 118, 114, 142, 44, 44, 44, 44, 44, 53, + 53, 53, 114, 114 }; const unsigned char parser::yyr1_[] = { - 0, 104, 105, 105, 106, 106, 106, 106, 106, 106, - 107, 108, 109, 109, 109, 109, 109, 110, 111, 112, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 114, 114, 115, 115, 116, - 116, 117, 117, 117, 117, 118, 118, 119, 119, 119, - 120, 121, 121, 122, 123, 123, 124, 124, 125, 126, - 127, 128, 129, 130, 131, 131, 132, 133, 133, 134, - 135, 136, 137, 137, 138, 139, 140, 141, 141, 141, - 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 144, 144, 145, 145, 146, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, + 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, + 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 115, 115, 116, 116, 117, + 117, 118, 118, 118, 118, 119, 119, 120, 120, 120, + 121, 122, 122, 123, 124, 124, 125, 125, 126, 127, + 128, 129, 130, 131, 132, 132, 133, 134, 134, 135, + 136, 137, 138, 138, 139, 140, 141, 142, 142, 142, + 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 145, 145, 146, 146, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 149, 150, 151, 151, 152, 152, - 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, - 155, 156, 156, 156, 157, 157, 158, 158, 159, 159, - 160, 161, 162, 163, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 175, 176, 177, 178, 179, 180, - 180, 181, 181, 182, 183 + 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 150, 151, 152, 152, 153, 153, + 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, + 156, 157, 157, 157, 158, 158, 159, 159, 160, 160, + 161, 162, 162, 163, 164, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 176, 177, 178, 179, 180, + 181, 181, 182, 182, 183, 184 }; const signed char @@ -4412,10 +4413,10 @@ namespace xsk { namespace gsc { namespace iw5 { 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, 1, 2, 3, - 4, 3, 2, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 7, 2, - 1, 2, 1, 1, 1 + 4, 3, 2, 2, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 7, + 2, 1, 2, 1, 1, 1 }; @@ -4425,28 +4426,28 @@ namespace xsk { namespace gsc { namespace iw5 { const short parser::yyrline_[] = { - 0, 243, 243, 244, 248, 250, 252, 254, 256, 258, - 263, 267, 272, 273, 274, 275, 276, 280, 285, 290, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 323, 324, 328, 329, 333, - 335, 340, 342, 344, 347, 351, 353, 358, 360, 362, - 367, 372, 374, 379, 384, 386, 391, 393, 398, 403, - 408, 413, 418, 423, 428, 430, 435, 440, 442, 447, - 452, 457, 462, 464, 469, 474, 479, 484, 485, 486, - 490, 491, 495, 497, 499, 501, 503, 505, 507, 509, - 511, 513, 515, 520, 522, 527, 529, 534, 539, 541, - 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, - 563, 565, 567, 569, 571, 573, 578, 579, 580, 581, - 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 609, 614, 619, 620, 623, 624, - 628, 630, 632, 634, 636, 638, 643, 645, 647, 649, - 654, 659, 661, 664, 668, 671, 675, 677, 682, 684, - 689, 694, 699, 704, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 721, 726, 731, 736, 741, 746, 751, - 756, 761, 766, 771, 773, 778, 783, 788, 793, 798, - 800, 805, 807, 812, 817 + 0, 244, 244, 245, 249, 251, 253, 255, 257, 259, + 264, 268, 273, 274, 275, 276, 277, 281, 286, 291, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 324, 325, 329, 330, 334, + 336, 341, 343, 345, 348, 352, 354, 359, 361, 363, + 368, 373, 375, 380, 385, 387, 392, 394, 399, 404, + 409, 414, 419, 424, 429, 431, 436, 441, 443, 448, + 453, 458, 463, 465, 470, 475, 480, 485, 486, 487, + 491, 492, 496, 498, 500, 502, 504, 506, 508, 510, + 512, 514, 516, 521, 523, 528, 530, 535, 540, 542, + 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, + 564, 566, 568, 570, 572, 574, 579, 580, 581, 582, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 610, 615, 620, 621, 624, 625, + 629, 631, 633, 635, 637, 639, 644, 646, 648, 650, + 655, 660, 662, 665, 669, 672, 676, 678, 683, 685, + 690, 695, 697, 702, 707, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 724, 729, 734, 739, 744, 749, + 754, 759, 764, 769, 774, 776, 781, 786, 791, 796, + 801, 803, 808, 810, 815, 820 }; void @@ -4479,9 +4480,9 @@ namespace xsk { namespace gsc { namespace iw5 { #line 13 "parser.ypp" } } } // xsk::gsc::iw5 -#line 4483 "parser.cpp" +#line 4484 "parser.cpp" -#line 821 "parser.ypp" +#line 824 "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 65005cf7..cd83dfa9 100644 --- a/src/iw5/xsk/parser.hpp +++ b/src/iw5/xsk/parser.hpp @@ -614,6 +614,7 @@ namespace xsk { namespace gsc { namespace iw5 { // stmt_while char dummy65[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -758,22 +759,23 @@ namespace xsk { namespace gsc { namespace iw5 { MUL = 85, // "*" DIV = 86, // "/" MOD = 87, // "%" - PATH = 88, // "path" - IDENTIFIER = 89, // "identifier" - STRING = 90, // "string literal" - ISTRING = 91, // "localized string" - COLOR = 92, // "color" - FLOAT = 93, // "float" - INTEGER = 94, // "integer" - ADD_ARRAY = 95, // ADD_ARRAY - THEN = 96, // THEN - TERN = 97, // TERN - NEG = 98, // NEG - ANIMREF = 99, // ANIMREF - PREINC = 100, // PREINC - PREDEC = 101, // PREDEC - POSTINC = 102, // POSTINC - POSTDEC = 103 // POSTDEC + FIELD = 88, // "field" + PATH = 89, // "path" + IDENTIFIER = 90, // "identifier" + STRING = 91, // "string literal" + ISTRING = 92, // "localized string" + COLOR = 93, // "color" + FLOAT = 94, // "float" + INTEGER = 95, // "integer" + ADD_ARRAY = 96, // ADD_ARRAY + THEN = 97, // THEN + TERN = 98, // TERN + NEG = 99, // NEG + ANIMREF = 100, // ANIMREF + PREINC = 101, // PREINC + PREDEC = 102, // PREDEC + POSTINC = 103, // POSTINC + POSTDEC = 104 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -790,7 +792,7 @@ namespace xsk { namespace gsc { namespace iw5 { { enum symbol_kind_type { - YYNTOKENS = 104, ///< Number of tokens. + YYNTOKENS = 105, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -880,102 +882,103 @@ namespace xsk { namespace gsc { namespace iw5 { S_MUL = 85, // "*" S_DIV = 86, // "/" S_MOD = 87, // "%" - S_PATH = 88, // "path" - S_IDENTIFIER = 89, // "identifier" - S_STRING = 90, // "string literal" - S_ISTRING = 91, // "localized string" - S_COLOR = 92, // "color" - S_FLOAT = 93, // "float" - S_INTEGER = 94, // "integer" - S_ADD_ARRAY = 95, // ADD_ARRAY - S_THEN = 96, // THEN - S_TERN = 97, // TERN - S_NEG = 98, // NEG - S_ANIMREF = 99, // ANIMREF - S_PREINC = 100, // PREINC - S_PREDEC = 101, // PREDEC - S_POSTINC = 102, // POSTINC - S_POSTDEC = 103, // POSTDEC - S_YYACCEPT = 104, // $accept - S_root = 105, // root - S_program = 106, // program - S_inline = 107, // inline - S_include = 108, // include - S_declaration = 109, // declaration - S_decl_usingtree = 110, // decl_usingtree - S_decl_constant = 111, // decl_constant - S_decl_thread = 112, // decl_thread - S_stmt = 113, // stmt - S_stmt_dev = 114, // stmt_dev - S_stmt_block = 115, // stmt_block - S_stmt_list = 116, // stmt_list - S_stmt_expr = 117, // stmt_expr - S_stmt_call = 118, // stmt_call - S_stmt_assign = 119, // stmt_assign - S_stmt_endon = 120, // stmt_endon - S_stmt_notify = 121, // stmt_notify - S_stmt_wait = 122, // stmt_wait - S_stmt_waittill = 123, // stmt_waittill - S_stmt_waittillmatch = 124, // stmt_waittillmatch - S_stmt_waittillframeend = 125, // stmt_waittillframeend - S_stmt_if = 126, // stmt_if - S_stmt_ifelse = 127, // stmt_ifelse - S_stmt_while = 128, // stmt_while - S_stmt_dowhile = 129, // stmt_dowhile - S_stmt_for = 130, // stmt_for - S_stmt_foreach = 131, // stmt_foreach - S_stmt_switch = 132, // stmt_switch - S_stmt_case = 133, // stmt_case - S_stmt_default = 134, // stmt_default - S_stmt_break = 135, // stmt_break - S_stmt_continue = 136, // stmt_continue - S_stmt_return = 137, // stmt_return - S_stmt_breakpoint = 138, // stmt_breakpoint - S_stmt_prof_begin = 139, // stmt_prof_begin - S_stmt_prof_end = 140, // stmt_prof_end - S_expr = 141, // expr - S_expr_or_empty = 142, // expr_or_empty - S_expr_assign = 143, // expr_assign - S_expr_increment = 144, // expr_increment - S_expr_decrement = 145, // expr_decrement - S_expr_ternary = 146, // expr_ternary - S_expr_binary = 147, // expr_binary - S_expr_primitive = 148, // expr_primitive - S_expr_complement = 149, // expr_complement - S_expr_not = 150, // expr_not - S_expr_call = 151, // expr_call - S_expr_method = 152, // expr_method - S_expr_function = 153, // expr_function - S_expr_pointer = 154, // expr_pointer - S_expr_add_array = 155, // expr_add_array - S_expr_parameters = 156, // expr_parameters - S_expr_arguments = 157, // expr_arguments - S_expr_arguments_no_empty = 158, // expr_arguments_no_empty - S_expr_reference = 159, // expr_reference - S_expr_array = 160, // expr_array - S_expr_field = 161, // expr_field - S_expr_size = 162, // expr_size - S_expr_paren = 163, // expr_paren - S_expr_object = 164, // expr_object - S_expr_thisthread = 165, // expr_thisthread - S_expr_empty_array = 166, // expr_empty_array - S_expr_undefined = 167, // expr_undefined - S_expr_game = 168, // expr_game - S_expr_self = 169, // expr_self - S_expr_anim = 170, // expr_anim - S_expr_level = 171, // expr_level - S_expr_animation = 172, // expr_animation - S_expr_animtree = 173, // expr_animtree - S_expr_identifier = 174, // expr_identifier - S_expr_path = 175, // expr_path - S_expr_istring = 176, // expr_istring - S_expr_string = 177, // expr_string - S_expr_color = 178, // expr_color - S_expr_vector = 179, // expr_vector - S_expr_float = 180, // expr_float - S_expr_integer = 181, // expr_integer - S_expr_false = 182, // expr_false - S_expr_true = 183 // expr_true + S_FIELD = 88, // "field" + S_PATH = 89, // "path" + S_IDENTIFIER = 90, // "identifier" + S_STRING = 91, // "string literal" + S_ISTRING = 92, // "localized string" + S_COLOR = 93, // "color" + S_FLOAT = 94, // "float" + S_INTEGER = 95, // "integer" + S_ADD_ARRAY = 96, // ADD_ARRAY + S_THEN = 97, // THEN + S_TERN = 98, // TERN + S_NEG = 99, // NEG + S_ANIMREF = 100, // ANIMREF + S_PREINC = 101, // PREINC + S_PREDEC = 102, // PREDEC + S_POSTINC = 103, // POSTINC + S_POSTDEC = 104, // POSTDEC + S_YYACCEPT = 105, // $accept + S_root = 106, // root + S_program = 107, // program + S_inline = 108, // inline + S_include = 109, // include + S_declaration = 110, // declaration + S_decl_usingtree = 111, // decl_usingtree + S_decl_constant = 112, // decl_constant + S_decl_thread = 113, // decl_thread + S_stmt = 114, // stmt + S_stmt_dev = 115, // stmt_dev + S_stmt_block = 116, // stmt_block + S_stmt_list = 117, // stmt_list + S_stmt_expr = 118, // stmt_expr + S_stmt_call = 119, // stmt_call + S_stmt_assign = 120, // stmt_assign + S_stmt_endon = 121, // stmt_endon + S_stmt_notify = 122, // stmt_notify + S_stmt_wait = 123, // stmt_wait + S_stmt_waittill = 124, // stmt_waittill + S_stmt_waittillmatch = 125, // stmt_waittillmatch + S_stmt_waittillframeend = 126, // stmt_waittillframeend + S_stmt_if = 127, // stmt_if + S_stmt_ifelse = 128, // stmt_ifelse + S_stmt_while = 129, // stmt_while + S_stmt_dowhile = 130, // stmt_dowhile + S_stmt_for = 131, // stmt_for + S_stmt_foreach = 132, // stmt_foreach + S_stmt_switch = 133, // stmt_switch + S_stmt_case = 134, // stmt_case + S_stmt_default = 135, // stmt_default + S_stmt_break = 136, // stmt_break + S_stmt_continue = 137, // stmt_continue + S_stmt_return = 138, // stmt_return + S_stmt_breakpoint = 139, // stmt_breakpoint + S_stmt_prof_begin = 140, // stmt_prof_begin + S_stmt_prof_end = 141, // stmt_prof_end + S_expr = 142, // expr + S_expr_or_empty = 143, // expr_or_empty + S_expr_assign = 144, // expr_assign + S_expr_increment = 145, // expr_increment + S_expr_decrement = 146, // expr_decrement + S_expr_ternary = 147, // expr_ternary + S_expr_binary = 148, // expr_binary + S_expr_primitive = 149, // expr_primitive + S_expr_complement = 150, // expr_complement + S_expr_not = 151, // expr_not + S_expr_call = 152, // expr_call + S_expr_method = 153, // expr_method + S_expr_function = 154, // expr_function + S_expr_pointer = 155, // expr_pointer + S_expr_add_array = 156, // expr_add_array + S_expr_parameters = 157, // expr_parameters + S_expr_arguments = 158, // expr_arguments + S_expr_arguments_no_empty = 159, // expr_arguments_no_empty + S_expr_reference = 160, // expr_reference + S_expr_array = 161, // expr_array + S_expr_field = 162, // expr_field + S_expr_size = 163, // expr_size + S_expr_paren = 164, // expr_paren + S_expr_object = 165, // expr_object + S_expr_thisthread = 166, // expr_thisthread + S_expr_empty_array = 167, // expr_empty_array + S_expr_undefined = 168, // expr_undefined + S_expr_game = 169, // expr_game + S_expr_self = 170, // expr_self + S_expr_anim = 171, // expr_anim + S_expr_level = 172, // expr_level + S_expr_animation = 173, // expr_animation + S_expr_animtree = 174, // expr_animtree + S_expr_identifier = 175, // expr_identifier + S_expr_path = 176, // expr_path + S_expr_istring = 177, // expr_istring + S_expr_string = 178, // expr_string + S_expr_color = 179, // expr_color + S_expr_vector = 180, // expr_vector + S_expr_float = 181, // expr_float + S_expr_integer = 182, // expr_integer + S_expr_false = 183, // expr_false + S_expr_true = 184 // expr_true }; }; @@ -1284,6 +1287,7 @@ namespace xsk { namespace gsc { namespace iw5 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2535,6 +2539,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2651,7 +2656,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - IW5_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + IW5_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4021,6 +4026,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4605,7 +4625,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2293, ///< Last index in yytable_. + yylast_ = 2249, ///< Last index in yytable_. yynnts_ = 80, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4905,6 +4925,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5216,6 +5237,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5289,7 +5311,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw5 -#line 5293 "parser.hpp" +#line 5315 "parser.hpp" diff --git a/src/iw6/xsk/lexer.cpp b/src/iw6/xsk/lexer.cpp index 14eead01..9e8bd51e 100644 --- a/src/iw6/xsk/lexer.cpp +++ b/src/iw6/xsk/lexer.cpp @@ -67,9 +67,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -79,18 +79,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -138,7 +129,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -184,24 +175,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw iw6::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return iw6::parser::make_IW6EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -215,7 +210,7 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return iw6::parser::make_DIV(loc_); reader_.advance(); @@ -225,29 +220,27 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw iw6::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return iw6::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw iw6::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -261,16 +254,15 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw iw6::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -283,7 +275,7 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -293,69 +285,43 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw iw6::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return iw6::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return iw6::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw iw6::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return iw6::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw iw6::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return iw6::parser::make_ASSIGN_MUL(loc_); - return iw6::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return iw6::parser::make_LPAREN(loc_); case ')': @@ -375,6 +341,7 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type case ':': if (curr != ':') return iw6::parser::make_COLON(loc_); + reader_.advance(); return iw6::parser::make_DOUBLECOLON(loc_); case '?': @@ -382,43 +349,70 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type case '=': if (curr != '=') return iw6::parser::make_ASSIGN(loc_); + reader_.advance(); return iw6::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return iw6::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? iw6::parser::make_INCREMENT(loc_) : iw6::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return iw6::parser::make_INCREMENT(loc_); + + return iw6::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return iw6::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? iw6::parser::make_DECREMENT(loc_) : iw6::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return iw6::parser::make_DECREMENT(loc_); + + return iw6::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return iw6::parser::make_MOD(loc_); + reader_.advance(); + return iw6::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return iw6::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? iw6::parser::make_OR(loc_) : iw6::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return iw6::parser::make_OR(loc_); + + return iw6::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return iw6::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? iw6::parser::make_AND(loc_) : iw6::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return iw6::parser::make_AND(loc_); + + if (last == '=') + return iw6::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return iw6::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return iw6::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return iw6::parser::make_NOT(loc_); + reader_.advance(); return iw6::parser::make_INEQUALITY(loc_); case '~': @@ -426,144 +420,222 @@ auto lexer::lex() -> xsk::gsc::iw6::parser::symbol_type case '<': if (curr != '<' && curr != '=') return iw6::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? iw6::parser::make_ASSIGN_LSHIFT(loc_) : iw6::parser::make_LSHIFT(loc_); - } - return iw6::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return iw6::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return iw6::parser::make_LSHIFT(loc_); + + reader_.advance(); + return iw6::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return iw6::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? iw6::parser::make_ASSIGN_RSHIFT(loc_) : iw6::parser::make_RSHIFT(loc_); - } - return iw6::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return iw6::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return iw6::parser::make_RSHIFT(loc_); + + reader_.advance(); + return iw6::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw iw6::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::iw6::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw iw6::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw iw6::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return iw6::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return iw6::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::iw6::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw iw6::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw iw6::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return iw6::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return iw6::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return iw6::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return iw6::parser::make_SIZE(loc_); + } + + return iw6::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return iw6::parser::make_PATH(xsk::gsc::iw6::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw6::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return iw6::parser::make_IDENTIFIER(xsk::gsc::iw6::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw6::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return iw6::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return iw6::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -580,30 +652,24 @@ auto lexer::read_number(char first) -> xsk::gsc::iw6::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return iw6::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return iw6::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -615,35 +681,29 @@ auto lexer::read_number(char first) -> xsk::gsc::iw6::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return iw6::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -660,163 +720,15 @@ auto lexer::read_number(char first) -> xsk::gsc::iw6::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return iw6::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw iw6::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw iw6::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw iw6::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return iw6::parser::make_FLOAT(std::string(data, len), loc_); - - return iw6::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::iw6::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw iw6::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw iw6::parser::syntax_error(loc_, "invalid path end '\\'"); - - return iw6::parser::make_PATH(xsk::gsc::iw6::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return iw6::parser::make_IDENTIFIER(xsk::gsc::iw6::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::iw6::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return iw6::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return iw6::parser::make_DOT(loc_); - - } - else return iw6::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::iw6::parser::symbol_type { switch (k) diff --git a/src/iw6/xsk/lexer.hpp b/src/iw6/xsk/lexer.hpp index 4e37eea0..8b7ad376 100644 --- a/src/iw6/xsk/lexer.hpp +++ b/src/iw6/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::iw6 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::iw6::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::iw6::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::iw6::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::iw6::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::iw6::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/iw6/xsk/parser.cpp b/src/iw6/xsk/parser.cpp index 62c7d76a..53195716 100644 --- a/src/iw6/xsk/parser.cpp +++ b/src/iw6/xsk/parser.cpp @@ -487,6 +487,7 @@ namespace xsk { namespace gsc { namespace iw6 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -784,6 +785,7 @@ namespace xsk { namespace gsc { namespace iw6 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1081,6 +1083,7 @@ namespace xsk { namespace gsc { namespace iw6 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1377,6 +1380,7 @@ namespace xsk { namespace gsc { namespace iw6 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1928,6 +1932,7 @@ namespace xsk { namespace gsc { namespace iw6 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1959,1285 +1964,1291 @@ namespace xsk { namespace gsc { namespace iw6 { switch (yyn) { case 2: // root: program -#line 243 "parser.ypp" +#line 244 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 3: // root: %empty -#line 244 "parser.ypp" +#line 245 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 4: // program: program inline -#line 249 "parser.ypp" +#line 250 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 5: // program: program include -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 6: // program: program declaration -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 7: // program: inline -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 8: // program: include -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 9: // program: declaration -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 263 "parser.ypp" +#line 264 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 268 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 12: // declaration: "/#" -#line 272 "parser.ypp" +#line 273 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 13: // declaration: "#/" -#line 273 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 15: // declaration: decl_constant -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 16: // declaration: decl_thread -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 281 "parser.ypp" +#line 282 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 286 "parser.ypp" +#line 287 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 291 "parser.ypp" +#line 292 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 295 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 21: // stmt: stmt_block -#line 296 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 22: // stmt: stmt_call -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 30: // stmt: stmt_if -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 31: // stmt: stmt_ifelse -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 32: // stmt: stmt_while -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 33: // stmt: stmt_dowhile -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 34: // stmt: stmt_for -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 35: // stmt: stmt_foreach -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 36: // stmt: stmt_switch -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 37: // stmt: stmt_case -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 38: // stmt: stmt_default -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 39: // stmt: stmt_break -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 40: // stmt: stmt_continue -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 41: // stmt: stmt_return -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 42: // stmt: stmt_breakpoint -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 43: // stmt: stmt_prof_begin -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 44: // stmt: stmt_prof_end -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 45: // stmt_dev: "/#" stmt_list "#/" -#line 323 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 46: // stmt_dev: "/#" "#/" -#line 324 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 47: // stmt_block: "{" stmt_list "}" -#line 328 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 48: // stmt_block: "{" "}" -#line 329 "parser.ypp" +#line 330 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 49: // stmt_list: stmt_list stmt -#line 334 "parser.ypp" +#line 335 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 50: // stmt_list: stmt -#line 336 "parser.ypp" +#line 337 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; case 51: // stmt_expr: expr_assign -#line 341 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; case 52: // stmt_expr: expr_increment -#line 343 "parser.ypp" +#line 344 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2265 "parser.cpp" +#line 2270 "parser.cpp" break; case 53: // stmt_expr: expr_decrement -#line 345 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2271 "parser.cpp" +#line 2276 "parser.cpp" break; case 54: // stmt_expr: %empty -#line 347 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2277 "parser.cpp" +#line 2282 "parser.cpp" break; case 55: // stmt_call: expr_call ";" -#line 352 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2283 "parser.cpp" +#line 2288 "parser.cpp" break; case 56: // stmt_call: expr_method ";" -#line 354 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2289 "parser.cpp" +#line 2294 "parser.cpp" break; case 57: // stmt_assign: expr_assign ";" -#line 359 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2295 "parser.cpp" +#line 2300 "parser.cpp" break; case 58: // stmt_assign: expr_increment ";" -#line 361 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2301 "parser.cpp" +#line 2306 "parser.cpp" break; case 59: // stmt_assign: expr_decrement ";" -#line 363 "parser.ypp" +#line 364 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2307 "parser.cpp" +#line 2312 "parser.cpp" break; case 60: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2313 "parser.cpp" +#line 2318 "parser.cpp" break; case 61: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 373 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2319 "parser.cpp" +#line 2324 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 375 "parser.ypp" +#line 376 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2325 "parser.cpp" +#line 2330 "parser.cpp" break; case 63: // stmt_wait: "wait" expr ";" -#line 380 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2331 "parser.cpp" +#line 2336 "parser.cpp" break; case 64: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 385 "parser.ypp" +#line 386 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2337 "parser.cpp" +#line 2342 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 387 "parser.ypp" +#line 388 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2343 "parser.cpp" +#line 2348 "parser.cpp" break; case 66: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 392 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2349 "parser.cpp" +#line 2354 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 394 "parser.ypp" +#line 395 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2355 "parser.cpp" +#line 2360 "parser.cpp" break; case 68: // stmt_waittillframeend: "waittillframeend" ";" -#line 399 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2361 "parser.cpp" +#line 2366 "parser.cpp" break; case 69: // stmt_if: "if" "(" expr ")" stmt -#line 404 "parser.ypp" +#line 405 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2367 "parser.cpp" +#line 2372 "parser.cpp" break; case 70: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2373 "parser.cpp" +#line 2378 "parser.cpp" break; case 71: // stmt_while: "while" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2379 "parser.cpp" +#line 2384 "parser.cpp" break; case 72: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2385 "parser.cpp" +#line 2390 "parser.cpp" break; case 73: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2391 "parser.cpp" +#line 2396 "parser.cpp" break; case 74: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2397 "parser.cpp" +#line 2402 "parser.cpp" break; case 75: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 431 "parser.ypp" +#line 432 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2403 "parser.cpp" +#line 2408 "parser.cpp" break; case 76: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 436 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2409 "parser.cpp" +#line 2414 "parser.cpp" break; case 77: // stmt_case: "case" expr_integer ":" -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2415 "parser.cpp" +#line 2420 "parser.cpp" break; case 78: // stmt_case: "case" expr_string ":" -#line 443 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2421 "parser.cpp" +#line 2426 "parser.cpp" break; case 79: // stmt_default: "default" ":" -#line 448 "parser.ypp" +#line 449 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2427 "parser.cpp" +#line 2432 "parser.cpp" break; case 80: // stmt_break: "break" ";" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2433 "parser.cpp" +#line 2438 "parser.cpp" break; case 81: // stmt_continue: "continue" ";" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2439 "parser.cpp" +#line 2444 "parser.cpp" break; case 82: // stmt_return: "return" expr ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2445 "parser.cpp" +#line 2450 "parser.cpp" break; case 83: // stmt_return: "return" ";" -#line 465 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2451 "parser.cpp" +#line 2456 "parser.cpp" break; case 84: // stmt_breakpoint: "breakpoint" ";" -#line 470 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2457 "parser.cpp" +#line 2462 "parser.cpp" break; case 85: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2463 "parser.cpp" +#line 2468 "parser.cpp" break; case 86: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2469 "parser.cpp" +#line 2474 "parser.cpp" break; case 87: // expr: expr_ternary -#line 484 "parser.ypp" +#line 485 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2475 "parser.cpp" +#line 2480 "parser.cpp" break; case 88: // expr: expr_binary -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2481 "parser.cpp" +#line 2486 "parser.cpp" break; case 89: // expr: expr_primitive -#line 486 "parser.ypp" +#line 487 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2487 "parser.cpp" +#line 2492 "parser.cpp" break; case 90: // expr_or_empty: expr -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2493 "parser.cpp" +#line 2498 "parser.cpp" break; case 91: // expr_or_empty: %empty -#line 491 "parser.ypp" +#line 492 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2499 "parser.cpp" +#line 2504 "parser.cpp" break; case 92: // expr_assign: expr_object "=" expr -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2505 "parser.cpp" +#line 2510 "parser.cpp" break; case 93: // expr_assign: expr_object "|=" expr -#line 498 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2511 "parser.cpp" +#line 2516 "parser.cpp" break; case 94: // expr_assign: expr_object "&=" expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2517 "parser.cpp" +#line 2522 "parser.cpp" break; case 95: // expr_assign: expr_object "^=" expr -#line 502 "parser.ypp" +#line 503 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2523 "parser.cpp" +#line 2528 "parser.cpp" break; case 96: // expr_assign: expr_object "<<=" expr -#line 504 "parser.ypp" +#line 505 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2529 "parser.cpp" +#line 2534 "parser.cpp" break; case 97: // expr_assign: expr_object ">>=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2535 "parser.cpp" +#line 2540 "parser.cpp" break; case 98: // expr_assign: expr_object "+=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2541 "parser.cpp" +#line 2546 "parser.cpp" break; case 99: // expr_assign: expr_object "-=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2547 "parser.cpp" +#line 2552 "parser.cpp" break; case 100: // expr_assign: expr_object "*=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2553 "parser.cpp" +#line 2558 "parser.cpp" break; case 101: // expr_assign: expr_object "/=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2559 "parser.cpp" +#line 2564 "parser.cpp" break; case 102: // expr_assign: expr_object "%=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2565 "parser.cpp" +#line 2570 "parser.cpp" break; case 103: // expr_increment: "++" expr_object -#line 521 "parser.ypp" +#line 522 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2571 "parser.cpp" +#line 2576 "parser.cpp" break; case 104: // expr_increment: expr_object "++" -#line 523 "parser.ypp" +#line 524 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2577 "parser.cpp" +#line 2582 "parser.cpp" break; case 105: // expr_decrement: "--" expr_object -#line 528 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2583 "parser.cpp" +#line 2588 "parser.cpp" break; case 106: // expr_decrement: expr_object "--" -#line 530 "parser.ypp" +#line 531 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2589 "parser.cpp" +#line 2594 "parser.cpp" break; case 107: // expr_ternary: expr "?" expr ":" expr -#line 535 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2595 "parser.cpp" +#line 2600 "parser.cpp" break; case 108: // expr_binary: expr "||" expr -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2601 "parser.cpp" +#line 2606 "parser.cpp" break; case 109: // expr_binary: expr "&&" expr -#line 542 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2607 "parser.cpp" +#line 2612 "parser.cpp" break; case 110: // expr_binary: expr "==" expr -#line 544 "parser.ypp" +#line 545 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2613 "parser.cpp" +#line 2618 "parser.cpp" break; case 111: // expr_binary: expr "!=" expr -#line 546 "parser.ypp" +#line 547 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2619 "parser.cpp" +#line 2624 "parser.cpp" break; case 112: // expr_binary: expr "<=" expr -#line 548 "parser.ypp" +#line 549 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2625 "parser.cpp" +#line 2630 "parser.cpp" break; case 113: // expr_binary: expr ">=" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2631 "parser.cpp" +#line 2636 "parser.cpp" break; case 114: // expr_binary: expr "<" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2637 "parser.cpp" +#line 2642 "parser.cpp" break; case 115: // expr_binary: expr ">" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2643 "parser.cpp" +#line 2648 "parser.cpp" break; case 116: // expr_binary: expr "|" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2649 "parser.cpp" +#line 2654 "parser.cpp" break; case 117: // expr_binary: expr "&" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2655 "parser.cpp" +#line 2660 "parser.cpp" break; case 118: // expr_binary: expr "^" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2661 "parser.cpp" +#line 2666 "parser.cpp" break; case 119: // expr_binary: expr "<<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2667 "parser.cpp" +#line 2672 "parser.cpp" break; case 120: // expr_binary: expr ">>" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2673 "parser.cpp" +#line 2678 "parser.cpp" break; case 121: // expr_binary: expr "+" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2679 "parser.cpp" +#line 2684 "parser.cpp" break; case 122: // expr_binary: expr "-" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2685 "parser.cpp" +#line 2690 "parser.cpp" break; case 123: // expr_binary: expr "*" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2691 "parser.cpp" +#line 2696 "parser.cpp" break; case 124: // expr_binary: expr "/" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2697 "parser.cpp" +#line 2702 "parser.cpp" break; case 125: // expr_binary: expr "%" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2703 "parser.cpp" +#line 2708 "parser.cpp" break; case 126: // expr_primitive: expr_complement -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2709 "parser.cpp" +#line 2714 "parser.cpp" break; case 127: // expr_primitive: expr_not -#line 579 "parser.ypp" +#line 580 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2715 "parser.cpp" +#line 2720 "parser.cpp" break; case 128: // expr_primitive: expr_call -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2721 "parser.cpp" +#line 2726 "parser.cpp" break; case 129: // expr_primitive: expr_method -#line 581 "parser.ypp" +#line 582 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2727 "parser.cpp" +#line 2732 "parser.cpp" break; case 130: // expr_primitive: expr_add_array -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2733 "parser.cpp" +#line 2738 "parser.cpp" break; case 131: // expr_primitive: expr_reference -#line 583 "parser.ypp" +#line 584 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2739 "parser.cpp" +#line 2744 "parser.cpp" break; case 132: // expr_primitive: expr_array -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2745 "parser.cpp" +#line 2750 "parser.cpp" break; case 133: // expr_primitive: expr_field -#line 585 "parser.ypp" +#line 586 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2751 "parser.cpp" +#line 2756 "parser.cpp" break; case 134: // expr_primitive: expr_size -#line 586 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2757 "parser.cpp" +#line 2762 "parser.cpp" break; case 135: // expr_primitive: expr_paren -#line 587 "parser.ypp" +#line 588 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2763 "parser.cpp" +#line 2768 "parser.cpp" break; case 136: // expr_primitive: expr_thisthread -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2769 "parser.cpp" +#line 2774 "parser.cpp" break; case 137: // expr_primitive: expr_empty_array -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2775 "parser.cpp" +#line 2780 "parser.cpp" break; case 138: // expr_primitive: expr_undefined -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2781 "parser.cpp" +#line 2786 "parser.cpp" break; case 139: // expr_primitive: expr_game -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2787 "parser.cpp" +#line 2792 "parser.cpp" break; case 140: // expr_primitive: expr_self -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2793 "parser.cpp" +#line 2798 "parser.cpp" break; case 141: // expr_primitive: expr_anim -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2799 "parser.cpp" +#line 2804 "parser.cpp" break; case 142: // expr_primitive: expr_level -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2805 "parser.cpp" +#line 2810 "parser.cpp" break; case 143: // expr_primitive: expr_animation -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2811 "parser.cpp" +#line 2816 "parser.cpp" break; case 144: // expr_primitive: expr_animtree -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2817 "parser.cpp" +#line 2822 "parser.cpp" break; case 145: // expr_primitive: expr_identifier -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2823 "parser.cpp" +#line 2828 "parser.cpp" break; case 146: // expr_primitive: expr_istring -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2829 "parser.cpp" +#line 2834 "parser.cpp" break; case 147: // expr_primitive: expr_string -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2835 "parser.cpp" +#line 2840 "parser.cpp" break; case 148: // expr_primitive: expr_color -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2841 "parser.cpp" +#line 2846 "parser.cpp" break; case 149: // expr_primitive: expr_vector -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2847 "parser.cpp" +#line 2852 "parser.cpp" break; case 150: // expr_primitive: expr_float -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2853 "parser.cpp" +#line 2858 "parser.cpp" break; case 151: // expr_primitive: expr_integer -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2859 "parser.cpp" +#line 2864 "parser.cpp" break; case 152: // expr_primitive: expr_false -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2865 "parser.cpp" +#line 2870 "parser.cpp" break; case 153: // expr_primitive: expr_true -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2871 "parser.cpp" +#line 2876 "parser.cpp" break; case 154: // expr_complement: "~" expr -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2877 "parser.cpp" +#line 2882 "parser.cpp" break; case 155: // expr_not: "!" expr -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2883 "parser.cpp" +#line 2888 "parser.cpp" break; case 156: // expr_call: expr_function -#line 619 "parser.ypp" +#line 620 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2889 "parser.cpp" +#line 2894 "parser.cpp" break; case 157: // expr_call: expr_pointer -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2895 "parser.cpp" +#line 2900 "parser.cpp" break; case 158: // expr_method: expr_object expr_function -#line 623 "parser.ypp" +#line 624 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2901 "parser.cpp" +#line 2906 "parser.cpp" break; case 159: // expr_method: expr_object expr_pointer -#line 624 "parser.ypp" +#line 625 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2907 "parser.cpp" +#line 2912 "parser.cpp" break; case 160: // expr_function: expr_identifier "(" expr_arguments ")" -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2913 "parser.cpp" +#line 2918 "parser.cpp" break; case 161: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 631 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2919 "parser.cpp" +#line 2924 "parser.cpp" break; case 162: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2925 "parser.cpp" +#line 2930 "parser.cpp" break; case 163: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 635 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2931 "parser.cpp" +#line 2936 "parser.cpp" break; case 164: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 637 "parser.ypp" +#line 638 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2937 "parser.cpp" +#line 2942 "parser.cpp" break; case 165: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2943 "parser.cpp" +#line 2948 "parser.cpp" break; case 166: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 644 "parser.ypp" +#line 645 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2949 "parser.cpp" +#line 2954 "parser.cpp" break; case 167: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 646 "parser.ypp" +#line 647 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2955 "parser.cpp" +#line 2960 "parser.cpp" break; case 168: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 648 "parser.ypp" +#line 649 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2961 "parser.cpp" +#line 2966 "parser.cpp" break; case 169: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 650 "parser.ypp" +#line 651 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 2967 "parser.cpp" +#line 2972 "parser.cpp" break; case 170: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 655 "parser.ypp" +#line 656 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 2973 "parser.cpp" +#line 2978 "parser.cpp" break; case 171: // expr_parameters: expr_parameters "," expr_identifier -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2979 "parser.cpp" +#line 2984 "parser.cpp" break; case 172: // expr_parameters: expr_identifier -#line 662 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2985 "parser.cpp" +#line 2990 "parser.cpp" break; case 173: // expr_parameters: %empty -#line 664 "parser.ypp" +#line 665 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 2991 "parser.cpp" +#line 2996 "parser.cpp" break; case 174: // expr_arguments: expr_arguments_no_empty -#line 669 "parser.ypp" +#line 670 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 2997 "parser.cpp" +#line 3002 "parser.cpp" break; case 175: // expr_arguments: %empty -#line 671 "parser.ypp" +#line 672 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3003 "parser.cpp" +#line 3008 "parser.cpp" break; case 176: // expr_arguments_no_empty: expr_arguments "," expr -#line 676 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3009 "parser.cpp" +#line 3014 "parser.cpp" break; case 177: // expr_arguments_no_empty: expr -#line 678 "parser.ypp" +#line 679 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3015 "parser.cpp" +#line 3020 "parser.cpp" break; case 178: // expr_reference: "::" expr_identifier -#line 683 "parser.ypp" +#line 684 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3021 "parser.cpp" +#line 3026 "parser.cpp" break; case 179: // expr_reference: expr_path "::" expr_identifier -#line 685 "parser.ypp" +#line 686 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3027 "parser.cpp" +#line 3032 "parser.cpp" break; case 180: // expr_array: expr_object "[" expr "]" -#line 690 "parser.ypp" +#line 691 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3033 "parser.cpp" +#line 3038 "parser.cpp" break; case 181: // expr_field: expr_object "." expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3039 "parser.cpp" +#line 3044 "parser.cpp" break; - case 182: // expr_size: expr_object ".size" -#line 700 "parser.ypp" + case 182: // expr_field: expr_object "field" +#line 698 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3050 "parser.cpp" + break; + + case 183: // expr_size: expr_object ".size" +#line 703 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3045 "parser.cpp" +#line 3056 "parser.cpp" break; - case 183: // expr_paren: "(" expr ")" -#line 705 "parser.ypp" + case 184: // expr_paren: "(" expr ")" +#line 708 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3051 "parser.cpp" +#line 3062 "parser.cpp" break; - case 184: // expr_object: expr_call -#line 709 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3057 "parser.cpp" - break; - - case 185: // expr_object: expr_method -#line 710 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3063 "parser.cpp" - break; - - case 186: // expr_object: expr_array -#line 711 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3069 "parser.cpp" - break; - - case 187: // expr_object: expr_field + case 185: // expr_object: expr_call #line 712 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3075 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3068 "parser.cpp" break; - case 188: // expr_object: expr_game + case 186: // expr_object: expr_method #line 713 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3081 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3074 "parser.cpp" break; - case 189: // expr_object: expr_self + case 187: // expr_object: expr_array #line 714 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3087 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3080 "parser.cpp" break; - case 190: // expr_object: expr_anim + case 188: // expr_object: expr_field #line 715 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3093 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3086 "parser.cpp" break; - case 191: // expr_object: expr_level + case 189: // expr_object: expr_game #line 716 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3099 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3092 "parser.cpp" break; - case 192: // expr_object: expr_identifier + case 190: // expr_object: expr_self #line 717 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3098 "parser.cpp" + break; + + case 191: // expr_object: expr_anim +#line 718 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3104 "parser.cpp" + break; + + case 192: // expr_object: expr_level +#line 719 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3110 "parser.cpp" + break; + + case 193: // expr_object: expr_identifier +#line 720 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3105 "parser.cpp" +#line 3116 "parser.cpp" break; - case 193: // expr_thisthread: "thisthread" -#line 722 "parser.ypp" + case 194: // expr_thisthread: "thisthread" +#line 725 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3111 "parser.cpp" +#line 3122 "parser.cpp" break; - case 194: // expr_empty_array: "[" "]" -#line 727 "parser.ypp" + case 195: // expr_empty_array: "[" "]" +#line 730 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3117 "parser.cpp" +#line 3128 "parser.cpp" break; - case 195: // expr_undefined: "undefined" -#line 732 "parser.ypp" + case 196: // expr_undefined: "undefined" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3123 "parser.cpp" +#line 3134 "parser.cpp" break; - case 196: // expr_game: "game" -#line 737 "parser.ypp" + case 197: // expr_game: "game" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3129 "parser.cpp" +#line 3140 "parser.cpp" break; - case 197: // expr_self: "self" -#line 742 "parser.ypp" + case 198: // expr_self: "self" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3135 "parser.cpp" +#line 3146 "parser.cpp" break; - case 198: // expr_anim: "anim" -#line 747 "parser.ypp" + case 199: // expr_anim: "anim" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3141 "parser.cpp" +#line 3152 "parser.cpp" break; - case 199: // expr_level: "level" -#line 752 "parser.ypp" + case 200: // expr_level: "level" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3147 "parser.cpp" +#line 3158 "parser.cpp" break; - case 200: // expr_animation: "%" "identifier" -#line 757 "parser.ypp" + case 201: // expr_animation: "%" "identifier" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3153 "parser.cpp" +#line 3164 "parser.cpp" break; - case 201: // expr_animtree: "#animtree" -#line 762 "parser.ypp" + case 202: // expr_animtree: "#animtree" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3159 "parser.cpp" +#line 3170 "parser.cpp" break; - case 202: // expr_identifier: "identifier" -#line 767 "parser.ypp" + case 203: // expr_identifier: "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3165 "parser.cpp" +#line 3176 "parser.cpp" break; - case 203: // expr_path: "path" -#line 772 "parser.ypp" + case 204: // expr_path: "path" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3171 "parser.cpp" +#line 3182 "parser.cpp" break; - case 204: // expr_path: expr_identifier -#line 774 "parser.ypp" + case 205: // expr_path: expr_identifier +#line 777 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3177 "parser.cpp" +#line 3188 "parser.cpp" break; - case 205: // expr_istring: "localized string" -#line 779 "parser.ypp" + case 206: // expr_istring: "localized string" +#line 782 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3183 "parser.cpp" +#line 3194 "parser.cpp" break; - case 206: // expr_string: "string literal" -#line 784 "parser.ypp" + case 207: // expr_string: "string literal" +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3189 "parser.cpp" +#line 3200 "parser.cpp" break; - case 207: // expr_color: "color" -#line 789 "parser.ypp" + case 208: // expr_color: "color" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3195 "parser.cpp" +#line 3206 "parser.cpp" break; - case 208: // expr_vector: "(" expr "," expr "," expr ")" -#line 794 "parser.ypp" + case 209: // expr_vector: "(" expr "," expr "," expr ")" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3201 "parser.cpp" +#line 3212 "parser.cpp" break; - case 209: // expr_float: "-" "float" -#line 799 "parser.ypp" + case 210: // expr_float: "-" "float" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3207 "parser.cpp" +#line 3218 "parser.cpp" break; - case 210: // expr_float: "float" -#line 801 "parser.ypp" + case 211: // expr_float: "float" +#line 804 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3213 "parser.cpp" +#line 3224 "parser.cpp" break; - case 211: // expr_integer: "-" "integer" -#line 806 "parser.ypp" + case 212: // expr_integer: "-" "integer" +#line 809 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3219 "parser.cpp" +#line 3230 "parser.cpp" break; - case 212: // expr_integer: "integer" -#line 808 "parser.ypp" + case 213: // expr_integer: "integer" +#line 811 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3225 "parser.cpp" +#line 3236 "parser.cpp" break; - case 213: // expr_false: "false" -#line 813 "parser.ypp" + case 214: // expr_false: "false" +#line 816 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3231 "parser.cpp" +#line 3242 "parser.cpp" break; - case 214: // expr_true: "true" -#line 818 "parser.ypp" + case 215: // expr_true: "true" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3237 "parser.cpp" +#line 3248 "parser.cpp" break; -#line 3241 "parser.cpp" +#line 3252 "parser.cpp" default: break; @@ -3431,13 +3442,13 @@ namespace xsk { namespace gsc { namespace iw6 { ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", - "path", "identifier", "string literal", "localized string", "color", - "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", - "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", - "inline", "include", "declaration", "decl_usingtree", "decl_constant", - "decl_thread", "stmt", "stmt_dev", "stmt_block", "stmt_list", - "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", - "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "field", "path", "identifier", "string literal", "localized string", + "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", + "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", + "program", "inline", "include", "declaration", "decl_usingtree", + "decl_constant", "decl_thread", "stmt", "stmt_dev", "stmt_block", + "stmt_list", "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", + "stmt_notify", "stmt_wait", "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", "stmt_dowhile", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", @@ -3717,130 +3728,130 @@ namespace xsk { namespace gsc { namespace iw6 { } - const short parser::yypact_ninf_ = -263; + const short parser::yypact_ninf_ = -260; - const short parser::yytable_ninf_ = -205; + const short parser::yytable_ninf_ = -206; const short parser::yypact_[] = { - 34, -263, -263, -22, -22, -28, -263, 19, 34, -263, - -263, -263, -263, -263, -263, -17, -263, -263, -4, 4, - -48, -263, -263, -263, -263, -38, 1180, -263, -263, -263, - 15, 33, -263, -263, -33, -24, -263, 6, -263, -263, - -263, -263, -263, -263, -263, 1180, 630, -38, 1180, 1180, - -15, -16, -263, -263, -263, -263, 2051, -263, -263, -263, - -263, -263, -14, 78, -263, -263, -263, -263, 532, 652, - -263, -263, 678, -263, -263, -263, 713, 727, 756, 866, - -263, -263, 57, 32, -263, -263, -263, -263, -263, -263, - -263, -263, 37, 54, -38, 56, 71, 62, 73, 88, - 90, 93, 1377, 630, -263, 2134, 98, 116, -263, -263, - -263, -263, -263, -263, -263, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, -263, 1244, -38, -263, -263, 94, - 110, 1180, -38, -263, 835, -263, -263, 1180, 1180, -38, - 1180, 1180, -38, 1180, -263, 1180, 1176, 1180, -263, 2016, - 115, 115, 2165, 1321, 948, 948, 271, 271, 271, 271, - 747, 2206, 2175, 84, 84, -263, -263, -263, 1821, -263, - -38, 48, -263, 122, 911, 1180, 119, 125, 1089, 131, - 132, 133, 134, 21, 135, 136, 137, 1116, 138, 143, - 151, -263, 149, 605, 605, -263, -263, -263, 962, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, 152, 153, 154, 156, 157, -263, -263, 1292, - -263, -263, -263, -263, 3, 1861, 49, 172, 1901, 52, - 173, 1941, 1980, 178, 2134, 1180, -263, 122, -263, 1180, - -263, 1038, 2086, -263, 1180, 202, 1180, 29, -38, 1180, - 127, 175, 176, -263, -263, -263, -263, 2121, -263, 1180, - 1180, 1180, -263, -263, -2, -2, -263, -263, -263, -263, - -263, -263, -263, 186, 188, 189, 193, -263, -263, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 187, -263, 1180, 190, -263, 1180, 194, 1180, 198, 2134, - 75, -263, -263, 1543, 200, 1577, 184, -263, -263, -263, - 1341, 1, 1611, -263, -263, -263, 83, 85, 1176, 1180, - 1180, 1180, 1180, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 201, 86, 204, 89, 206, 1645, - 1180, -263, 1089, 1180, 1089, 1180, 1180, -38, 54, 197, - 199, 1679, 1421, 1465, 1509, 1180, -263, 1180, -263, 1180, - -263, 106, 235, 1713, -263, 2134, 203, 1747, 232, -263, - -263, -263, 207, 209, 1180, 210, 1180, 212, 1180, 107, - 113, 114, -263, 1089, 213, 29, 1089, 1180, -263, -263, - 227, -263, 228, -263, 231, -263, -263, -263, -263, -263, - 237, -263, 1781, 226, 230, 233, 1089, 1089, -263, -263, - -263, -263, -263 + 16, -260, -260, -74, -74, -14, -260, 26, 16, -260, + -260, -260, -260, -260, -260, -33, -260, -260, -25, 4, + -43, -260, -260, -260, -260, -24, 1124, -260, -260, -260, + 21, -17, -260, -260, -40, -5, -260, 22, -260, -260, + -260, -260, -260, -260, -260, 1124, 994, -24, 1124, 1124, + -35, 11, -260, -260, -260, -260, 2038, -260, -260, -260, + -260, -260, 473, 541, -260, -260, -260, -260, 575, 624, + -260, -260, 653, -260, -260, -260, 677, 685, 1032, 1097, + -260, -260, 36, 24, -260, -260, -260, -260, -260, -260, + -260, -260, 23, 57, -24, 68, 69, 70, 84, 99, + 87, 93, 1324, 994, -260, 2121, 102, 107, -260, -260, + -260, -260, -260, -260, -260, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, -260, 1189, -24, -260, -260, -260, + 114, 108, 1124, -24, -260, 783, -260, -260, 1124, 1124, + -24, 1124, 1124, -24, 1124, -260, 1124, 1768, 1124, -260, + 2003, 116, 116, 2152, 1180, 158, 158, 77, 77, 77, + 77, 2162, 989, 1115, 43, 43, -260, -260, -260, 1808, + -260, -24, 7, -260, 115, 829, 1124, 113, 126, 967, + 128, 130, 132, 133, -13, 125, 131, 134, 1059, 135, + 140, 149, -260, 148, 392, 392, -260, -260, -260, 875, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, 144, 153, 154, 155, 157, -260, -260, + 1238, -260, -260, -260, -260, 2, 1848, 47, 169, 1888, + 48, 174, 1928, 1967, 178, 2121, 1124, -260, 115, -260, + 1124, -260, 921, 2073, -260, 1124, 160, 1124, -1, -24, + 1124, 141, 177, 186, -260, -260, -260, -260, 2108, -260, + 1124, 1124, 1124, -260, -260, 30, 30, -260, -260, -260, + -260, -260, -260, -260, 194, 196, 203, 204, -260, -260, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 200, -260, 1124, 202, -260, 1124, 205, 1124, 208, + 2121, 49, -260, -260, 1490, 209, 1524, 201, -260, -260, + -260, 1287, 3, 1558, -260, -260, -260, 51, 55, 1768, + 1124, 1124, 1124, 1124, 2121, 2121, 2121, 2121, 2121, 2121, + 2121, 2121, 2121, 2121, 2121, 214, 61, 215, 65, 216, + 1592, 1124, -260, 967, 1124, 967, 1124, 1124, -24, 57, + 207, 210, 1626, 1368, 1412, 1456, 1124, -260, 1124, -260, + 1124, -260, 67, 245, 1660, -260, 2121, 211, 1694, 246, + -260, -260, -260, 213, 217, 1124, 219, 1124, 221, 1124, + 95, 97, 121, -260, 967, 222, -1, 967, 1124, -260, + -260, 232, -260, 235, -260, 236, -260, -260, -260, -260, + -260, 238, -260, 1728, 231, 234, 237, 967, 967, -260, + -260, -260, -260, -260 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 202, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 203, 204, 0, 0, - 0, 1, 4, 5, 6, 173, 0, 10, 11, 206, - 0, 0, 172, 201, 0, 0, 193, 0, 214, 213, - 195, 196, 197, 198, 199, 0, 175, 0, 0, 0, - 0, 0, 205, 207, 210, 212, 0, 87, 88, 89, + 3, 12, 13, 0, 0, 0, 203, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 204, 205, 0, 0, + 0, 1, 4, 5, 6, 173, 0, 10, 11, 207, + 0, 0, 172, 202, 0, 0, 194, 0, 215, 214, + 196, 197, 198, 199, 200, 0, 175, 0, 0, 0, + 0, 0, 206, 208, 211, 213, 0, 87, 88, 89, 126, 127, 128, 129, 156, 157, 130, 131, 132, 133, 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 0, 146, 147, 148, 149, 150, 151, - 152, 153, 0, 0, 0, 0, 204, 0, 0, 204, - 0, 0, 0, 175, 194, 177, 0, 174, 178, 155, - 154, 209, 211, 200, 18, 0, 0, 0, 0, 0, + 152, 153, 0, 0, 0, 0, 205, 0, 0, 205, + 0, 0, 0, 175, 195, 177, 0, 174, 178, 155, + 154, 210, 212, 201, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 158, 159, 204, - 0, 175, 0, 17, 0, 19, 171, 0, 175, 0, - 0, 175, 0, 0, 183, 0, 177, 0, 170, 0, - 119, 120, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 121, 122, 123, 124, 125, 0, 181, - 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 183, 0, 0, 182, 158, 159, + 205, 0, 175, 0, 17, 0, 19, 171, 0, 175, + 0, 0, 175, 0, 0, 184, 0, 177, 0, 170, + 0, 119, 120, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 121, 122, 123, 124, 125, 0, + 181, 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 0, 0, 0, 50, 20, 21, 0, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 0, 0, 0, 184, 185, 186, 187, 0, - 188, 189, 190, 191, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 0, 180, 0, 160, 175, - 46, 0, 0, 68, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 79, 80, 81, 83, 0, 84, 175, - 175, 0, 184, 185, 103, 105, 47, 49, 57, 58, - 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, + 0, 0, 48, 0, 0, 0, 50, 20, 21, 0, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 0, 0, 0, 185, 186, 187, 188, + 0, 189, 190, 191, 192, 193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 176, 0, 180, 0, 160, + 175, 46, 0, 0, 68, 0, 0, 0, 54, 0, + 0, 0, 0, 0, 79, 80, 81, 83, 0, 84, + 175, 175, 0, 185, 186, 103, 105, 47, 49, 57, + 58, 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 175, 0, 164, 175, 0, 0, 0, 107, - 0, 45, 63, 0, 0, 0, 0, 51, 52, 53, - 0, 0, 0, 78, 77, 82, 0, 0, 0, 0, - 0, 0, 0, 92, 98, 99, 100, 101, 102, 93, - 94, 95, 97, 96, 0, 0, 0, 0, 0, 0, - 175, 161, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 163, 175, 165, 175, - 208, 0, 69, 0, 71, 90, 0, 0, 0, 76, - 85, 86, 0, 0, 175, 0, 175, 0, 175, 0, - 0, 0, 166, 0, 0, 54, 0, 0, 60, 62, - 174, 65, 174, 67, 174, 167, 168, 169, 70, 72, - 0, 74, 0, 0, 0, 0, 0, 0, 61, 64, - 66, 73, 75 + 0, 0, 162, 175, 0, 164, 175, 0, 0, 0, + 107, 0, 45, 63, 0, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 78, 77, 82, 0, 0, 0, + 0, 0, 0, 0, 92, 98, 99, 100, 101, 102, + 93, 94, 95, 97, 96, 0, 0, 0, 0, 0, + 0, 175, 161, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 175, 163, 175, 165, + 175, 209, 0, 69, 0, 71, 90, 0, 0, 0, + 76, 85, 86, 0, 0, 175, 0, 175, 0, 175, + 0, 0, 0, 166, 0, 0, 54, 0, 0, 60, + 62, 174, 65, 174, 67, 174, 167, 168, 169, 70, + 72, 0, 74, 0, 0, 0, 0, 0, 0, 61, + 64, 66, 73, 75 }; const short parser::yypgoto_[] = { - -263, -263, -263, 279, 281, 282, -263, -263, -263, -181, - -263, -91, 108, -114, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, 185, -263, -262, - -257, -251, -263, -263, -263, -263, -263, -82, 70, -66, - -61, -263, -263, -120, -45, -263, 181, 192, -263, -263, - 253, -263, -263, -263, 327, 365, 373, 421, -263, -263, - 0, 9, -263, -11, -263, -263, -263, 102, -263, -263 + -260, -260, -260, 281, 284, 288, -260, -260, -260, -172, + -260, -91, 112, -108, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, 185, -260, -259, + -257, -250, -260, -260, -260, -260, -260, -82, -72, -66, + -58, -260, -260, 321, -45, -260, -37, 192, -260, -260, + 240, -260, -260, -260, 253, 327, 355, 365, -260, -260, + 0, 9, -260, -15, -260, -260, -260, 105, -260, -260 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 205, - 206, 207, 208, 326, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 105, 386, 232, - 233, 234, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 31, 106, 182, 67, 68, 69, 70, 71, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, + 207, 208, 209, 327, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 105, 387, 233, + 234, 235, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 }; @@ -3848,547 +3859,537 @@ namespace xsk { namespace gsc { namespace iw6 { const short parser::yytable_[] = { - 15, 107, 145, 17, 17, 327, 137, 265, 15, 30, - 328, 138, 18, 19, 95, 20, 329, -184, -184, 21, - -184, 181, 366, 98, -184, 32, 25, 287, 246, 34, - 35, 249, 37, -184, 96, 99, -184, 1, 2, 3, - 4, 5, 29, 97, 100, 135, 141, 108, 136, 27, - 367, 6, 26, 101, -204, 16, 6, 28, 107, 92, - 34, 35, 235, 37, 16, 6, 16, 6, 41, 42, - 43, 44, 139, 113, -184, -184, 202, 93, 111, 112, - 287, 140, 94, 142, 203, 204, 16, 6, -192, -192, - 143, -192, 258, 311, 146, -192, 314, 157, 157, 144, - 141, 157, 235, 147, -192, 270, 235, -192, -204, -185, - -185, 29, -185, 149, 148, 55, -185, 16, 6, 361, - 150, 282, 282, 6, 157, -185, 235, 369, -185, 370, - 376, 151, 157, 378, 157, 157, 179, 141, 157, 320, - 153, 152, 183, 327, 244, -192, -192, 157, 328, 247, - 402, 415, 250, 140, 329, 157, 157, 416, 417, 336, - 337, 180, 157, 157, 158, 259, -185, -185, 264, 131, - 132, 133, 263, 137, 266, 267, 268, 269, 138, 235, - 257, 382, 271, 384, 244, 282, 279, 273, 244, 274, - 275, 278, 355, 140, 280, 357, 281, 140, 129, 130, - 131, 132, 133, 244, 244, 288, 289, 290, 244, 291, - 292, 56, 140, 140, 236, 312, 315, 140, 137, 137, - 324, 112, 418, 138, 138, 421, 318, 333, 334, 339, - 102, 340, 341, 109, 110, 354, 342, 365, 356, 139, - 381, 360, 358, 363, 375, 431, 432, 377, 140, 379, - 390, 403, 391, 407, 236, 399, 405, 400, 236, 401, - 408, 244, 409, 411, 137, 413, 419, 244, 331, 138, - 140, 423, 424, 283, 283, 425, 140, 389, 236, 428, - 235, 426, 235, 429, 139, 139, 430, 22, 156, 23, - 24, 420, 261, 140, 140, 272, 0, 0, 0, 0, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 235, 0, 282, 235, 237, 0, 0, 116, 117, - 139, 236, 245, 0, 0, 248, 238, 283, 251, 140, - 252, 0, 254, 0, 235, 235, 0, 0, 0, 410, - 0, 412, 0, 414, 129, 130, 131, 132, 133, 0, - 0, 0, 244, 0, 244, 237, 0, 388, 0, 237, - 262, 140, 0, 140, 0, 0, 238, 0, 0, 0, - 238, 0, 277, 0, 237, 237, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 238, 238, 239, 0, 0, - 238, 0, 0, 244, 0, 244, 244, 0, 0, 0, - 0, 0, 140, 0, 140, 140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 244, 0, 0, - 0, 0, 236, 0, 236, 140, 140, 239, 0, 0, - 319, 239, 237, 0, 0, 0, 0, 0, 237, 323, - 0, 325, 0, 238, 332, 0, 284, 285, 0, 238, - 0, 239, 0, 0, 0, 0, 338, 0, 0, 0, - 0, 240, 0, 236, 0, 283, 236, 0, 0, 0, - 0, 0, 0, 0, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 0, 236, 236, 0, 0, - 0, 0, 359, 0, 0, 0, 0, 0, 0, 241, - 0, 240, 0, 0, 239, 240, 0, 242, 0, 0, - 330, 0, 0, 0, 371, 372, 373, 374, 0, 0, - 240, 240, 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 237, 0, 0, 383, 241, - 385, 387, 0, 241, 238, 0, 238, 242, 0, 0, - 0, 242, 0, -186, -186, 243, -186, 0, 241, 241, - -186, 0, 0, 241, 0, 0, 242, 242, 0, -186, - 0, 242, -186, 0, 237, 0, 237, 237, 240, 0, - 0, 0, 422, 0, 240, 238, 0, 238, 238, 0, - 0, 0, 0, 0, 0, 243, 0, 237, 237, 243, - 0, 0, 0, 0, 0, 239, 0, 239, 238, 238, - -186, -186, 0, 0, 243, 243, 241, 0, 0, 243, - 0, 0, 241, 0, 242, 0, 34, 35, 33, 37, - 242, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 0, 0, 202, 0, 0, 0, 239, 0, 330, 239, - 0, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 103, 104, 239, - 239, 47, 243, -187, -187, 0, -187, 0, 243, 240, - -187, 240, 0, 16, 6, 0, 0, 48, 49, -187, - 0, 0, -187, 0, 0, 0, 0, 0, 0, 34, - 35, 0, 37, 0, 50, 0, 134, 51, 16, 6, - 29, 52, 53, 54, 55, 135, 0, 241, 136, 241, - 240, 0, 240, 240, 0, 242, 0, 242, 0, 0, - -187, -187, 0, 0, -188, -188, 0, -188, 0, 0, - 0, -188, 0, 240, 240, 0, 0, 0, -189, -189, - -188, -189, 0, -188, 0, -189, 16, 6, 241, 0, - 241, 241, 0, 0, -189, 0, 242, -189, 242, 242, - 0, 0, 0, 243, 0, 243, 0, -190, -190, 0, - -190, 241, 241, 0, -190, 0, 0, 0, 0, 242, - 242, -188, -188, -190, 116, 117, -190, 0, 120, 121, - 122, 123, 124, 125, 0, -189, -189, 0, 0, 0, - 0, 0, 0, 0, 243, 0, 243, 243, 127, 128, - 129, 130, 131, 132, 133, 0, 0, 0, 184, 0, - 0, 0, 0, 0, -190, -190, 185, 243, 243, 186, - 187, 0, 188, 189, 190, 191, 0, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 34, 35, 0, 37, - 0, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 144, 201, 202, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 0, 0, 0, 0, 0, -191, -191, 0, - -191, 0, 0, 0, -191, 0, 0, 0, 0, 0, - 0, 0, 0, -191, 184, 260, -191, 0, 0, 0, - 0, 0, 185, 16, 6, 186, 187, 0, 188, 189, - 190, 191, 0, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 34, 35, 0, 37, 0, 0, 0, 0, - 41, 42, 43, 44, -191, -191, 144, 0, 202, 0, - 0, 0, 0, 0, 0, 184, 203, 204, 0, 0, - 0, 0, 0, 185, 0, 0, 186, 187, 0, 188, - 189, 190, 191, 0, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 34, 35, 0, 37, 0, 0, 16, - 6, 41, 42, 43, 44, 116, 117, 144, 286, 202, - 0, 122, 123, 124, 125, 0, 0, 203, 204, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 130, 131, 132, 133, 0, 0, 0, 0, - 0, 184, 321, 0, 0, 0, 0, 0, 0, 185, - 16, 6, 186, 187, 0, 188, 189, 190, 191, 0, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 34, - 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, - 44, 0, 0, 144, 0, 202, 0, 0, 0, 0, - 0, 0, 184, 203, 204, 0, 0, 0, 0, 0, - 185, 0, 0, 186, 187, 0, 188, 189, 190, 191, - 0, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 34, 35, 0, 37, 33, 0, 16, 6, 41, 42, - 43, 44, 0, 0, 144, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 0, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 0, 0, 0, 46, 0, 0, 0, 47, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 16, 6, 0, - 0, 0, 0, 48, 49, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 253, 0, 0, 46, 0, 0, - 115, 47, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 48, 49, 0, - 0, 0, 33, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 50, 0, 0, 51, 16, 6, + 15, 107, 146, 17, 17, 30, 138, 95, 15, 328, + 25, 329, 18, 19, 139, 16, 6, 266, 330, 1, + 2, 3, 4, 5, 367, 32, 21, 93, 27, 20, + 34, 35, 94, 37, 96, 99, 26, 288, 41, 42, + 43, 44, 98, 97, 100, 142, 203, 108, 29, 16, + 6, 259, 368, -205, 204, 205, 158, 28, 107, 111, + 112, 34, 35, 236, 37, 92, 6, -193, -193, 101, + -193, 271, 140, 237, -193, 143, 144, 135, 29, 142, + 136, 141, 55, -193, 16, 6, -193, -205, 16, 6, + 288, 312, 315, 362, 147, 370, 158, 158, 158, 371, + 158, 113, 145, 236, 158, 377, 6, 236, 238, 379, + 158, 403, 149, 237, 158, 148, 158, 237, 137, 16, + 6, 150, 283, 283, -193, -193, -193, 236, 131, 132, + 133, 151, 284, 284, 116, 117, 180, 237, 153, 416, + 154, 417, 152, 184, 158, 245, 158, 328, 238, 329, + 248, 158, 238, 251, 141, 159, 330, 142, 260, 181, + 129, 130, 131, 132, 133, 418, 264, 238, 238, 265, + 158, 267, 238, 268, 138, 269, 270, 274, 325, 272, + 236, 258, 139, 280, 275, 245, 283, 276, 279, 245, + 237, 383, 281, 385, 141, 282, 284, 289, 141, 129, + 130, 131, 132, 133, 245, 245, 290, 291, 292, 245, + 293, 56, 313, 141, 141, 116, 117, 316, 141, 138, + 138, 122, 123, 124, 125, 238, 319, 139, 139, 334, + 102, 238, 419, 109, 110, 422, 112, 340, 335, 341, + 140, 129, 130, 131, 132, 133, 342, 343, 355, 141, + 357, 361, 364, 359, 366, 432, 433, 376, 378, 380, + 391, 404, 245, 392, 406, 138, 409, 408, 245, 332, + 410, 141, 412, 139, 414, 420, 424, 141, 390, 425, + 426, 236, 427, 236, 429, 140, 140, 430, 157, 22, + 431, 237, 23, 237, 141, 141, 24, 262, 421, 273, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 179, 0, 236, 0, 283, 236, 238, 0, 238, 0, + 0, 140, 237, 246, 284, 237, 249, 239, 0, 252, + 141, 253, 0, 255, 0, 236, 236, 0, 0, 0, + 411, 0, 413, 0, 415, 237, 237, 0, 0, 0, + 0, 0, 0, 245, 0, 245, 0, 238, 389, 238, + 238, 263, 141, 0, 141, 0, 0, 239, 0, 0, + 0, 239, 0, 278, 0, 240, 0, 0, 0, 0, + 238, 238, 0, 0, 0, 0, 239, 239, 241, 0, + 0, 239, 0, 0, 245, 0, 245, 245, 0, 0, + 0, 0, 0, 141, 0, 141, 141, 0, 0, 0, + 0, 0, 0, 34, 35, 240, 37, 245, 245, 240, + 0, 41, 42, 43, 44, 0, 141, 141, 241, 203, + 0, 320, 241, 0, 285, 286, 0, 0, 0, 240, + 324, 0, 326, 0, 239, 333, 0, 241, 241, 0, + 239, 0, 241, 182, 0, 0, 0, 339, 0, 0, + 247, 0, 242, 250, 0, 0, 0, 0, 0, 0, + 0, 16, 6, 0, 0, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 0, 0, 0, 0, + 243, 0, 240, 360, -185, -185, 0, -185, 331, 0, + 244, -185, 242, 0, 0, 241, 242, 0, 0, 0, + -185, 241, 0, -185, 0, 372, 373, 374, 375, 0, + 0, 242, 242, 0, 0, 0, 242, 0, 0, 0, + 243, 0, 0, 0, 243, 0, 0, 0, 0, 384, + 244, 386, 388, 0, 244, 239, 0, 239, 0, 243, + 243, -185, -185, -185, 243, 0, 0, 0, 0, 244, + 244, 0, -186, -186, 244, -186, 0, 0, 0, -186, + 0, 321, 0, 0, 0, 0, 0, 0, -186, 242, + 0, -186, 0, 423, 0, 242, 239, 0, 239, 239, + 0, 337, 338, 240, 0, 240, -187, -187, 0, -187, + 0, 0, 0, -187, 0, 0, 241, 243, 241, 239, + 239, 0, -187, 243, 0, -187, 0, 244, 0, -186, + -186, -186, 0, 244, 356, 0, 0, 358, 0, 0, + 0, 0, 0, 0, 240, 0, 331, 240, 0, 0, + 0, 0, 0, 0, 0, -188, -188, 241, -188, 241, + 241, 0, -188, -187, -187, -187, 0, 240, 240, 0, + 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, + 241, 241, 382, 0, 34, 35, 0, 37, 0, 0, + 242, 134, 242, 0, 0, 0, 0, 400, 0, 401, + 135, 402, 0, 136, 0, 0, 0, 0, -189, -189, + 0, -189, -188, -188, -188, -189, -190, -190, 243, -190, + 243, 0, 0, -190, -189, 0, 0, -189, 244, 0, + 244, 242, -190, 242, 242, -190, 0, 0, 0, 0, + 0, 137, 16, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 242, 242, 0, 0, 0, 243, + 0, 243, 243, 0, 0, -189, -189, -189, 0, 244, + 0, 244, 244, -190, -190, -190, 0, 0, 0, 0, + 0, 0, 243, 243, 0, 0, 185, 0, 0, 0, + 0, 0, 244, 244, 186, 0, 0, 187, 188, 0, + 189, 190, 191, 192, 0, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 34, 35, 0, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, 145, 202, + 203, 0, 185, 261, 0, 0, 0, 0, 204, 205, + 186, 0, 0, 187, 188, 0, 189, 190, 191, 192, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 34, 35, 0, 37, 0, 0, 0, 0, 41, 42, + 43, 44, 16, 6, 145, 0, 203, 0, 185, 0, + 0, 0, 0, 0, 204, 205, 186, 0, 0, 187, + 188, 0, 189, 190, 191, 192, 0, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 34, 35, 0, 37, + 0, 0, 0, 0, 41, 42, 43, 44, 16, 6, + 145, 287, 203, 0, 185, 322, 0, 0, 0, 0, + 204, 205, 186, 0, 0, 187, 188, 0, 189, 190, + 191, 192, 0, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 34, 35, 0, 37, 0, 0, 0, 0, + 41, 42, 43, 44, 16, 6, 145, 0, 203, 0, + 185, 0, 0, 0, 0, 0, 204, 205, 186, 0, + 0, 187, 188, 0, 189, 190, 191, 192, 0, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, + 0, 37, 33, 0, 0, 0, 41, 42, 43, 44, + 16, 6, 145, 0, 203, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 0, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, + 0, 103, 104, 0, 0, 47, 116, 117, 0, 0, + 120, 121, 122, 123, 124, 125, 16, 6, 0, 0, + 0, 48, 49, -191, -191, 0, -191, 33, 0, 0, + -191, 0, 129, 130, 131, 132, 133, 0, 50, -191, + 0, 51, -191, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 277, 0, 0, 0, 0, 0, 0, 0, + -191, -191, -191, 0, 0, 0, 48, 49, -192, -192, + 0, -192, 33, 0, 0, -192, 0, 0, 0, 0, + 0, 0, 0, 50, -192, 0, 51, -192, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 103, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 293, 294, 0, 295, 296, 0, 0, 0, 0, - 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 35, 0, 37, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 135, - 0, 0, 136, 0, 0, 0, 0, 297, 298, 0, + 0, 46, 116, 117, 0, 47, 120, 121, 122, 123, + 124, 125, 0, 0, 0, -192, -192, -192, 0, 0, + 0, 48, 49, 0, 0, 0, 127, 33, 129, 130, + 131, 132, 133, 0, 0, 0, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 103, 116, 117, 0, + 47, 120, 121, 122, 123, 124, 125, 294, 295, 0, + 296, 297, 0, 0, 0, 0, 48, 49, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 0, 34, + 35, 0, 37, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 135, 0, 0, 136, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 34, 35, + 0, 37, 0, 0, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 155, 0, + 0, 0, 0, 156, 0, 137, 16, 6, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 394, 0, 0, 0, 0, 395, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 396, 0, 0, 0, + 0, 397, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 34, 35, 0, 37, 0, 0, 116, 117, - 16, 6, 120, 121, 122, 123, 124, 125, 135, 0, - 0, 136, 0, 0, 0, 0, 297, 298, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 154, 0, 0, 0, 0, 155, 0, 0, 16, - 6, 115, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 369, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 381, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 393, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 405, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 428, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 254, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 257, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 311, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 314, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 317, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 393, 0, 0, 0, 0, - 394, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 395, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 397, 0, 0, 0, 0, 398, 0, - 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 362, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 129, 130, 131, 132, 133, 256, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 364, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 323, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 406, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 256, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 310, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 313, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 316, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 317, - 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 127, 128, 129, 130, 131, 132, 133, 255, 0, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 322, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 335, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, - 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, - 132, 133, 116, 117, 0, 119, 120, 121, 122, 123, - 124, 125, 116, 117, 0, 0, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, - 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, - 130, 131, 132, 133 + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 336, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, + 0, 126, 127, 128, 129, 130, 131, 132, 133, 116, + 117, 0, 119, 120, 121, 122, 123, 124, 125, 116, + 117, 0, 0, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 0, 0, 0, 127, 128, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 93, 3, 4, 267, 72, 188, 8, 20, - 267, 72, 3, 4, 47, 43, 267, 31, 32, 0, - 34, 141, 21, 47, 38, 25, 43, 208, 148, 31, - 32, 151, 34, 47, 34, 35, 50, 3, 4, 5, - 6, 7, 90, 34, 35, 47, 43, 47, 50, 53, - 49, 89, 69, 47, 51, 88, 89, 53, 103, 44, - 31, 32, 144, 34, 88, 89, 88, 89, 39, 40, - 41, 42, 72, 89, 88, 89, 47, 44, 93, 94, - 261, 72, 49, 51, 55, 56, 88, 89, 31, 32, - 53, 34, 44, 44, 94, 38, 44, 49, 49, 45, - 43, 49, 184, 47, 47, 84, 188, 50, 51, 31, - 32, 90, 34, 51, 43, 94, 38, 88, 89, 44, - 47, 203, 204, 89, 49, 47, 208, 44, 50, 44, - 44, 43, 49, 44, 49, 49, 136, 43, 49, 259, - 47, 51, 142, 405, 144, 88, 89, 49, 405, 149, - 44, 44, 152, 144, 405, 49, 49, 44, 44, 279, - 280, 51, 49, 49, 48, 43, 88, 89, 43, 85, - 86, 87, 53, 239, 43, 43, 43, 43, 239, 261, - 180, 362, 193, 364, 184, 267, 43, 52, 188, 53, - 53, 53, 312, 184, 43, 315, 47, 188, 83, 84, - 85, 86, 87, 203, 204, 53, 53, 53, 208, 53, - 53, 26, 203, 204, 144, 43, 43, 208, 284, 285, - 18, 94, 403, 284, 285, 406, 48, 52, 52, 43, - 45, 43, 43, 48, 49, 48, 43, 53, 48, 239, - 360, 43, 48, 43, 43, 426, 427, 43, 239, 43, - 53, 16, 53, 21, 184, 375, 53, 377, 188, 379, - 53, 261, 53, 53, 330, 53, 53, 267, 268, 330, - 261, 44, 44, 203, 204, 44, 267, 368, 208, 53, - 362, 44, 364, 53, 284, 285, 53, 8, 103, 8, - 8, 405, 184, 284, 285, 193, -1, -1, -1, -1, + 0, 46, 93, 3, 4, 20, 72, 47, 8, 268, + 43, 268, 3, 4, 72, 89, 90, 189, 268, 3, + 4, 5, 6, 7, 21, 25, 0, 44, 53, 43, + 31, 32, 49, 34, 34, 35, 69, 209, 39, 40, + 41, 42, 47, 34, 35, 43, 47, 47, 91, 89, + 90, 44, 49, 51, 55, 56, 49, 53, 103, 94, + 95, 31, 32, 145, 34, 44, 90, 31, 32, 47, + 34, 84, 72, 145, 38, 51, 53, 47, 91, 43, + 50, 72, 95, 47, 89, 90, 50, 51, 89, 90, + 262, 44, 44, 44, 94, 44, 49, 49, 49, 44, + 49, 90, 45, 185, 49, 44, 90, 189, 145, 44, + 49, 44, 43, 185, 49, 47, 49, 189, 88, 89, + 90, 51, 204, 205, 88, 89, 90, 209, 85, 86, + 87, 47, 204, 205, 57, 58, 136, 209, 51, 44, + 47, 44, 43, 143, 49, 145, 49, 406, 185, 406, + 150, 49, 189, 153, 145, 48, 406, 43, 43, 51, + 83, 84, 85, 86, 87, 44, 53, 204, 205, 43, + 49, 43, 209, 43, 240, 43, 43, 52, 18, 194, + 262, 181, 240, 43, 53, 185, 268, 53, 53, 189, + 262, 363, 43, 365, 185, 47, 268, 53, 189, 83, + 84, 85, 86, 87, 204, 205, 53, 53, 53, 209, + 53, 26, 43, 204, 205, 57, 58, 43, 209, 285, + 286, 63, 64, 65, 66, 262, 48, 285, 286, 52, + 45, 268, 404, 48, 49, 407, 95, 43, 52, 43, + 240, 83, 84, 85, 86, 87, 43, 43, 48, 240, + 48, 43, 43, 48, 53, 427, 428, 43, 43, 43, + 53, 16, 262, 53, 53, 331, 53, 21, 268, 269, + 53, 262, 53, 331, 53, 53, 44, 268, 369, 44, + 44, 363, 44, 365, 53, 285, 286, 53, 103, 8, + 53, 363, 8, 365, 285, 286, 8, 185, 406, 194, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 403, -1, 405, 406, 144, -1, -1, 57, 58, - 330, 261, 147, -1, -1, 150, 144, 267, 153, 330, - 155, -1, 157, -1, 426, 427, -1, -1, -1, 394, - -1, 396, -1, 398, 83, 84, 85, 86, 87, -1, - -1, -1, 362, -1, 364, 184, -1, 367, -1, 188, - 185, 362, -1, 364, -1, -1, 184, -1, -1, -1, - 188, -1, 197, -1, 203, 204, -1, -1, -1, 208, - -1, -1, -1, -1, -1, 203, 204, 144, -1, -1, - 208, -1, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, 403, -1, 405, 406, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 426, 427, -1, -1, - -1, -1, 362, -1, 364, 426, 427, 184, -1, -1, - 255, 188, 261, -1, -1, -1, -1, -1, 267, 264, - -1, 266, -1, 261, 269, -1, 203, 204, -1, 267, - -1, 208, -1, -1, -1, -1, 281, -1, -1, -1, - -1, 144, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, -1, -1, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 426, 427, -1, -1, - -1, -1, 317, -1, -1, -1, -1, -1, -1, 144, - -1, 184, -1, -1, 261, 188, -1, 144, -1, -1, - 267, -1, -1, -1, 339, 340, 341, 342, -1, -1, - 203, 204, -1, -1, -1, 208, -1, -1, -1, -1, - -1, -1, -1, 362, -1, 364, -1, -1, 363, 184, - 365, 366, -1, 188, 362, -1, 364, 184, -1, -1, - -1, 188, -1, 31, 32, 144, 34, -1, 203, 204, - 38, -1, -1, 208, -1, -1, 203, 204, -1, 47, - -1, 208, 50, -1, 403, -1, 405, 406, 261, -1, - -1, -1, 407, -1, 267, 403, -1, 405, 406, -1, - -1, -1, -1, -1, -1, 184, -1, 426, 427, 188, - -1, -1, -1, -1, -1, 362, -1, 364, 426, 427, - 88, 89, -1, -1, 203, 204, 261, -1, -1, 208, - -1, -1, 267, -1, 261, -1, 31, 32, 8, 34, - 267, -1, -1, -1, 39, 40, 41, 42, -1, -1, - -1, -1, 47, -1, -1, -1, 403, -1, 405, 406, - -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, -1, -1, -1, 47, 48, 426, - 427, 51, 261, 31, 32, -1, 34, -1, 267, 362, - 38, 364, -1, 88, 89, -1, -1, 67, 68, 47, - -1, -1, 50, -1, -1, -1, -1, -1, -1, 31, - 32, -1, 34, -1, 84, -1, 38, 87, 88, 89, - 90, 91, 92, 93, 94, 47, -1, 362, 50, 364, - 403, -1, 405, 406, -1, 362, -1, 364, -1, -1, - 88, 89, -1, -1, 31, 32, -1, 34, -1, -1, - -1, 38, -1, 426, 427, -1, -1, -1, 31, 32, - 47, 34, -1, 50, -1, 38, 88, 89, 403, -1, - 405, 406, -1, -1, 47, -1, 403, 50, 405, 406, - -1, -1, -1, 362, -1, 364, -1, 31, 32, -1, - 34, 426, 427, -1, 38, -1, -1, -1, -1, 426, - 427, 88, 89, 47, 57, 58, 50, -1, 61, 62, - 63, 64, 65, 66, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, 403, -1, 405, 406, 81, 82, - 83, 84, 85, 86, 87, -1, -1, -1, 3, -1, - -1, -1, -1, -1, 88, 89, 11, 426, 427, 14, - 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, - -1, -1, -1, -1, 39, 40, 41, 42, -1, -1, - 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, - 55, 56, -1, -1, -1, -1, -1, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, -1, -1, - -1, -1, -1, 47, 3, 4, 50, -1, -1, -1, - -1, -1, 11, 88, 89, 14, 15, -1, 17, 18, - 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, - 39, 40, 41, 42, 88, 89, 45, -1, 47, -1, - -1, -1, -1, -1, -1, 3, 55, 56, -1, -1, - -1, -1, -1, 11, -1, -1, 14, 15, -1, 17, - 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, 34, -1, -1, 88, - 89, 39, 40, 41, 42, 57, 58, 45, 46, 47, - -1, 63, 64, 65, 66, -1, -1, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 83, 84, 85, 86, 87, -1, -1, -1, -1, - -1, 3, 4, -1, -1, -1, -1, -1, -1, 11, - 88, 89, 14, 15, -1, 17, 18, 19, 20, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, 34, -1, -1, -1, -1, 39, 40, 41, - 42, -1, -1, 45, -1, 47, -1, -1, -1, -1, - -1, -1, 3, 55, 56, -1, -1, -1, -1, -1, + 135, -1, 404, -1, 406, 407, 363, -1, 365, -1, + -1, 331, 404, 148, 406, 407, 151, 145, -1, 154, + 331, 156, -1, 158, -1, 427, 428, -1, -1, -1, + 395, -1, 397, -1, 399, 427, 428, -1, -1, -1, + -1, -1, -1, 363, -1, 365, -1, 404, 368, 406, + 407, 186, 363, -1, 365, -1, -1, 185, -1, -1, + -1, 189, -1, 198, -1, 145, -1, -1, -1, -1, + 427, 428, -1, -1, -1, -1, 204, 205, 145, -1, + -1, 209, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, 404, -1, 406, 407, -1, -1, -1, + -1, -1, -1, 31, 32, 185, 34, 427, 428, 189, + -1, 39, 40, 41, 42, -1, 427, 428, 185, 47, + -1, 256, 189, -1, 204, 205, -1, -1, -1, 209, + 265, -1, 267, -1, 262, 270, -1, 204, 205, -1, + 268, -1, 209, 142, -1, -1, -1, 282, -1, -1, + 149, -1, 145, 152, -1, -1, -1, -1, -1, -1, + -1, 89, 90, -1, -1, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, -1, -1, -1, -1, + 145, -1, 262, 318, 31, 32, -1, 34, 268, -1, + 145, 38, 185, -1, -1, 262, 189, -1, -1, -1, + 47, 268, -1, 50, -1, 340, 341, 342, 343, -1, + -1, 204, 205, -1, -1, -1, 209, -1, -1, -1, + 185, -1, -1, -1, 189, -1, -1, -1, -1, 364, + 185, 366, 367, -1, 189, 363, -1, 365, -1, 204, + 205, 88, 89, 90, 209, -1, -1, -1, -1, 204, + 205, -1, 31, 32, 209, 34, -1, -1, -1, 38, + -1, 260, -1, -1, -1, -1, -1, -1, 47, 262, + -1, 50, -1, 408, -1, 268, 404, -1, 406, 407, + -1, 280, 281, 363, -1, 365, 31, 32, -1, 34, + -1, -1, -1, 38, -1, -1, 363, 262, 365, 427, + 428, -1, 47, 268, -1, 50, -1, 262, -1, 88, + 89, 90, -1, 268, 313, -1, -1, 316, -1, -1, + -1, -1, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, -1, -1, 31, 32, 404, 34, 406, + 407, -1, 38, 88, 89, 90, -1, 427, 428, -1, + -1, 47, -1, -1, 50, -1, -1, -1, -1, -1, + 427, 428, 361, -1, 31, 32, -1, 34, -1, -1, + 363, 38, 365, -1, -1, -1, -1, 376, -1, 378, + 47, 380, -1, 50, -1, -1, -1, -1, 31, 32, + -1, 34, 88, 89, 90, 38, 31, 32, 363, 34, + 365, -1, -1, 38, 47, -1, -1, 50, 363, -1, + 365, 404, 47, 406, 407, 50, -1, -1, -1, -1, + -1, 88, 89, 90, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 427, 428, -1, -1, -1, 404, + -1, 406, 407, -1, -1, 88, 89, 90, -1, 404, + -1, 406, 407, 88, 89, 90, -1, -1, -1, -1, + -1, -1, 427, 428, -1, -1, 3, -1, -1, -1, + -1, -1, 427, 428, 11, -1, -1, 14, 15, -1, + 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + -1, -1, 39, 40, 41, 42, -1, -1, 45, 46, + 47, -1, 3, 4, -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 8, -1, 88, 89, 39, 40, - 41, 42, -1, -1, 45, -1, 47, -1, -1, -1, - -1, -1, -1, -1, 55, 56, -1, 31, 32, 33, - 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, - -1, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, -1, -1, -1, -1, -1, 88, 89, -1, - -1, -1, -1, 67, 68, -1, -1, -1, 8, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 84, -1, -1, 87, 88, 89, 90, 91, 92, 93, - 94, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, 48, -1, -1, 47, -1, -1, - 54, 51, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, 67, 68, -1, - -1, -1, 8, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 84, -1, -1, 87, 88, 89, - 90, 91, 92, 93, 94, 31, 32, 33, 34, 35, + 31, 32, -1, 34, -1, -1, -1, -1, 39, 40, + 41, 42, 89, 90, 45, -1, 47, -1, 3, -1, + -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, + 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, -1, -1, 39, 40, 41, 42, 89, 90, + 45, 46, 47, -1, 3, 4, -1, -1, -1, -1, + 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, + 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, + 39, 40, 41, 42, 89, 90, 45, -1, 47, -1, + 3, -1, -1, -1, -1, -1, 55, 56, 11, -1, + -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, 34, 8, -1, -1, -1, 39, 40, 41, 42, + 89, 90, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, 55, 56, -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, - -1, 47, -1, -1, -1, 51, -1, -1, -1, -1, - -1, 9, 10, -1, 12, 13, -1, -1, -1, -1, - -1, 67, 68, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 31, 32, -1, 34, -1, 84, -1, - -1, 87, 88, 89, 90, 91, 92, 93, 94, 47, - -1, -1, 50, -1, -1, -1, -1, 55, 56, -1, + -1, 47, 48, -1, -1, 51, 57, 58, -1, -1, + 61, 62, 63, 64, 65, 66, 89, 90, -1, -1, + -1, 67, 68, 31, 32, -1, 34, 8, -1, -1, + 38, -1, 83, 84, 85, 86, 87, -1, 84, 47, + -1, 87, 50, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, -1, -1, -1, + 51, -1, 53, -1, -1, -1, -1, -1, -1, -1, + 88, 89, 90, -1, -1, -1, 67, 68, 31, 32, + -1, 34, 8, -1, -1, 38, -1, -1, -1, -1, + -1, -1, -1, 84, 47, -1, 87, 50, 89, 90, + 91, 92, 93, 94, 95, 31, 32, 33, 34, 35, + 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, + -1, 47, 57, 58, -1, 51, 61, 62, 63, 64, + 65, 66, -1, -1, -1, 88, 89, 90, -1, -1, + -1, 67, 68, -1, -1, -1, 81, 8, 83, 84, + 85, 86, 87, -1, -1, -1, -1, -1, 84, -1, + -1, 87, -1, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, 57, 58, -1, + 51, 61, 62, 63, 64, 65, 66, 9, 10, -1, + 12, 13, -1, -1, -1, -1, 67, 68, -1, -1, + 80, 81, 82, 83, 84, 85, 86, 87, -1, 31, + 32, -1, 34, 84, -1, -1, 87, -1, 89, 90, + 91, 92, 93, 94, 95, 47, -1, -1, 50, -1, + -1, -1, -1, 55, 56, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 31, 32, + -1, 34, -1, -1, -1, -1, 88, 89, 90, -1, + -1, -1, -1, -1, 47, -1, -1, 50, -1, -1, + -1, -1, 55, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, -1, 44, -1, + -1, -1, -1, 49, -1, 88, 89, 90, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 44, -1, -1, -1, -1, 49, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 44, -1, -1, -1, + -1, 49, -1, -1, -1, -1, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 31, 32, -1, 34, -1, -1, 57, 58, - 88, 89, 61, 62, 63, 64, 65, 66, 47, -1, - -1, 50, -1, -1, -1, -1, 55, 56, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, -1, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 44, -1, -1, -1, -1, 49, -1, -1, 88, - 89, 54, -1, -1, 57, 58, 59, 60, 61, 62, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 44, -1, -1, -1, -1, 49, -1, -1, -1, -1, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 49, -1, -1, -1, + -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 44, -1, -1, -1, -1, - 49, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 44, - -1, -1, -1, -1, 49, -1, -1, -1, -1, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 44, -1, -1, -1, -1, 49, -1, - -1, -1, -1, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + 83, 84, 85, 86, 87, 52, -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 49, - -1, -1, -1, -1, 54, -1, -1, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 80, 81, 82, 83, 84, 85, 86, 87, 52, -1, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 53, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 54, -1, - -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 80, 81, 82, 83, 84, 85, 86, 87, -1, - -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, - 86, 87, 57, 58, -1, 60, 61, 62, 63, 64, - 65, 66, 57, 58, -1, -1, 61, 62, 63, 64, - 65, 66, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, -1, -1, -1, 81, -1, 83, 84, - 85, 86, 87, 57, 58, -1, -1, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87 + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 54, -1, -1, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, + 82, 83, 84, 85, 86, 87, -1, -1, -1, -1, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 57, + 58, -1, -1, 61, 62, 63, 64, 65, 66, -1, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + -1, -1, -1, 81, 82, 83, 84, 85, 86, 87 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 89, 105, 106, 107, - 108, 109, 110, 111, 112, 174, 88, 174, 175, 175, - 43, 0, 107, 108, 109, 43, 69, 53, 53, 90, - 177, 156, 174, 8, 31, 32, 33, 34, 35, 36, + 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, + 109, 110, 111, 112, 113, 175, 89, 175, 176, 176, + 43, 0, 108, 109, 110, 43, 69, 53, 53, 91, + 178, 157, 175, 8, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 47, 51, 67, 68, - 84, 87, 91, 92, 93, 94, 141, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 44, 44, 49, 47, 174, 175, 47, 174, - 175, 47, 141, 47, 48, 141, 157, 158, 174, 141, - 141, 93, 94, 89, 53, 54, 57, 58, 59, 60, + 84, 87, 92, 93, 94, 95, 142, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 44, 44, 49, 47, 175, 176, 47, 175, + 176, 47, 142, 47, 48, 142, 158, 159, 175, 142, + 142, 94, 95, 90, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, 82, 83, - 84, 85, 86, 87, 38, 47, 50, 153, 154, 174, - 175, 43, 51, 53, 45, 115, 174, 47, 43, 51, - 47, 43, 51, 47, 44, 49, 141, 49, 48, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 174, - 51, 157, 158, 174, 3, 11, 14, 15, 17, 18, - 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 46, 47, 55, 56, 113, 114, 115, 116, 118, + 84, 85, 86, 87, 38, 47, 50, 88, 154, 155, + 175, 176, 43, 51, 53, 45, 116, 175, 47, 43, + 51, 47, 43, 51, 47, 44, 49, 142, 49, 48, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 175, 51, 158, 159, 175, 3, 11, 14, 15, 17, + 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 46, 47, 55, 56, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 143, 144, 145, 151, 152, 160, 161, 164, - 168, 169, 170, 171, 174, 141, 157, 174, 141, 157, - 174, 141, 141, 48, 141, 52, 48, 174, 44, 43, - 4, 116, 141, 53, 43, 113, 43, 43, 43, 43, - 84, 177, 181, 52, 53, 53, 53, 141, 53, 43, - 43, 47, 151, 152, 164, 164, 46, 113, 53, 53, - 53, 53, 53, 9, 10, 12, 13, 55, 56, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 48, 44, 43, 48, 44, 43, 48, 49, 48, 141, - 157, 4, 53, 141, 18, 141, 117, 143, 144, 145, - 164, 174, 141, 52, 52, 53, 157, 157, 141, 43, - 43, 43, 43, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 48, 157, 48, 157, 48, 141, - 43, 44, 44, 43, 44, 53, 21, 49, 44, 44, - 44, 141, 141, 141, 141, 43, 44, 43, 44, 43, - 44, 157, 113, 141, 113, 141, 142, 141, 174, 115, - 53, 53, 44, 44, 49, 44, 49, 44, 49, 157, - 157, 157, 44, 16, 44, 53, 44, 21, 53, 53, - 158, 53, 158, 53, 158, 44, 44, 44, 113, 53, - 117, 113, 141, 44, 44, 44, 44, 44, 53, 53, - 53, 113, 113 + 139, 140, 141, 144, 145, 146, 152, 153, 161, 162, + 165, 169, 170, 171, 172, 175, 142, 158, 175, 142, + 158, 175, 142, 142, 48, 142, 52, 48, 175, 44, + 43, 4, 117, 142, 53, 43, 114, 43, 43, 43, + 43, 84, 178, 182, 52, 53, 53, 53, 142, 53, + 43, 43, 47, 152, 153, 165, 165, 46, 114, 53, + 53, 53, 53, 53, 9, 10, 12, 13, 55, 56, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 48, 44, 43, 48, 44, 43, 48, 49, 48, + 142, 158, 4, 53, 142, 18, 142, 118, 144, 145, + 146, 165, 175, 142, 52, 52, 53, 158, 158, 142, + 43, 43, 43, 43, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 48, 158, 48, 158, 48, + 142, 43, 44, 44, 43, 44, 53, 21, 49, 44, + 44, 44, 142, 142, 142, 142, 43, 44, 43, 44, + 43, 44, 158, 114, 142, 114, 142, 143, 142, 175, + 116, 53, 53, 44, 44, 49, 44, 49, 44, 49, + 158, 158, 158, 44, 16, 44, 53, 44, 21, 53, + 53, 159, 53, 159, 53, 159, 44, 44, 44, 114, + 53, 118, 114, 142, 44, 44, 44, 44, 44, 53, + 53, 53, 114, 114 }; const unsigned char parser::yyr1_[] = { - 0, 104, 105, 105, 106, 106, 106, 106, 106, 106, - 107, 108, 109, 109, 109, 109, 109, 110, 111, 112, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 114, 114, 115, 115, 116, - 116, 117, 117, 117, 117, 118, 118, 119, 119, 119, - 120, 121, 121, 122, 123, 123, 124, 124, 125, 126, - 127, 128, 129, 130, 131, 131, 132, 133, 133, 134, - 135, 136, 137, 137, 138, 139, 140, 141, 141, 141, - 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 144, 144, 145, 145, 146, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, + 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, + 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 115, 115, 116, 116, 117, + 117, 118, 118, 118, 118, 119, 119, 120, 120, 120, + 121, 122, 122, 123, 124, 124, 125, 125, 126, 127, + 128, 129, 130, 131, 132, 132, 133, 134, 134, 135, + 136, 137, 138, 138, 139, 140, 141, 142, 142, 142, + 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 145, 145, 146, 146, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 149, 150, 151, 151, 152, 152, - 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, - 155, 156, 156, 156, 157, 157, 158, 158, 159, 159, - 160, 161, 162, 163, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 175, 176, 177, 178, 179, 180, - 180, 181, 181, 182, 183 + 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 150, 151, 152, 152, 153, 153, + 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, + 156, 157, 157, 157, 158, 158, 159, 159, 160, 160, + 161, 162, 162, 163, 164, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 176, 177, 178, 179, 180, + 181, 181, 182, 182, 183, 184 }; const signed char @@ -4412,10 +4413,10 @@ namespace xsk { namespace gsc { namespace iw6 { 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, 1, 2, 3, - 4, 3, 2, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 7, 2, - 1, 2, 1, 1, 1 + 4, 3, 2, 2, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 7, + 2, 1, 2, 1, 1, 1 }; @@ -4425,28 +4426,28 @@ namespace xsk { namespace gsc { namespace iw6 { const short parser::yyrline_[] = { - 0, 243, 243, 244, 248, 250, 252, 254, 256, 258, - 263, 267, 272, 273, 274, 275, 276, 280, 285, 290, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 323, 324, 328, 329, 333, - 335, 340, 342, 344, 347, 351, 353, 358, 360, 362, - 367, 372, 374, 379, 384, 386, 391, 393, 398, 403, - 408, 413, 418, 423, 428, 430, 435, 440, 442, 447, - 452, 457, 462, 464, 469, 474, 479, 484, 485, 486, - 490, 491, 495, 497, 499, 501, 503, 505, 507, 509, - 511, 513, 515, 520, 522, 527, 529, 534, 539, 541, - 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, - 563, 565, 567, 569, 571, 573, 578, 579, 580, 581, - 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 609, 614, 619, 620, 623, 624, - 628, 630, 632, 634, 636, 638, 643, 645, 647, 649, - 654, 659, 661, 664, 668, 671, 675, 677, 682, 684, - 689, 694, 699, 704, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 721, 726, 731, 736, 741, 746, 751, - 756, 761, 766, 771, 773, 778, 783, 788, 793, 798, - 800, 805, 807, 812, 817 + 0, 244, 244, 245, 249, 251, 253, 255, 257, 259, + 264, 268, 273, 274, 275, 276, 277, 281, 286, 291, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 324, 325, 329, 330, 334, + 336, 341, 343, 345, 348, 352, 354, 359, 361, 363, + 368, 373, 375, 380, 385, 387, 392, 394, 399, 404, + 409, 414, 419, 424, 429, 431, 436, 441, 443, 448, + 453, 458, 463, 465, 470, 475, 480, 485, 486, 487, + 491, 492, 496, 498, 500, 502, 504, 506, 508, 510, + 512, 514, 516, 521, 523, 528, 530, 535, 540, 542, + 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, + 564, 566, 568, 570, 572, 574, 579, 580, 581, 582, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 610, 615, 620, 621, 624, 625, + 629, 631, 633, 635, 637, 639, 644, 646, 648, 650, + 655, 660, 662, 665, 669, 672, 676, 678, 683, 685, + 690, 695, 697, 702, 707, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 724, 729, 734, 739, 744, 749, + 754, 759, 764, 769, 774, 776, 781, 786, 791, 796, + 801, 803, 808, 810, 815, 820 }; void @@ -4479,9 +4480,9 @@ namespace xsk { namespace gsc { namespace iw6 { #line 13 "parser.ypp" } } } // xsk::gsc::iw6 -#line 4483 "parser.cpp" +#line 4484 "parser.cpp" -#line 821 "parser.ypp" +#line 824 "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 719e1c89..2cc4e1bb 100644 --- a/src/iw6/xsk/parser.hpp +++ b/src/iw6/xsk/parser.hpp @@ -614,6 +614,7 @@ namespace xsk { namespace gsc { namespace iw6 { // stmt_while char dummy65[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -758,22 +759,23 @@ namespace xsk { namespace gsc { namespace iw6 { MUL = 85, // "*" DIV = 86, // "/" MOD = 87, // "%" - PATH = 88, // "path" - IDENTIFIER = 89, // "identifier" - STRING = 90, // "string literal" - ISTRING = 91, // "localized string" - COLOR = 92, // "color" - FLOAT = 93, // "float" - INTEGER = 94, // "integer" - ADD_ARRAY = 95, // ADD_ARRAY - THEN = 96, // THEN - TERN = 97, // TERN - NEG = 98, // NEG - ANIMREF = 99, // ANIMREF - PREINC = 100, // PREINC - PREDEC = 101, // PREDEC - POSTINC = 102, // POSTINC - POSTDEC = 103 // POSTDEC + FIELD = 88, // "field" + PATH = 89, // "path" + IDENTIFIER = 90, // "identifier" + STRING = 91, // "string literal" + ISTRING = 92, // "localized string" + COLOR = 93, // "color" + FLOAT = 94, // "float" + INTEGER = 95, // "integer" + ADD_ARRAY = 96, // ADD_ARRAY + THEN = 97, // THEN + TERN = 98, // TERN + NEG = 99, // NEG + ANIMREF = 100, // ANIMREF + PREINC = 101, // PREINC + PREDEC = 102, // PREDEC + POSTINC = 103, // POSTINC + POSTDEC = 104 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -790,7 +792,7 @@ namespace xsk { namespace gsc { namespace iw6 { { enum symbol_kind_type { - YYNTOKENS = 104, ///< Number of tokens. + YYNTOKENS = 105, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -880,102 +882,103 @@ namespace xsk { namespace gsc { namespace iw6 { S_MUL = 85, // "*" S_DIV = 86, // "/" S_MOD = 87, // "%" - S_PATH = 88, // "path" - S_IDENTIFIER = 89, // "identifier" - S_STRING = 90, // "string literal" - S_ISTRING = 91, // "localized string" - S_COLOR = 92, // "color" - S_FLOAT = 93, // "float" - S_INTEGER = 94, // "integer" - S_ADD_ARRAY = 95, // ADD_ARRAY - S_THEN = 96, // THEN - S_TERN = 97, // TERN - S_NEG = 98, // NEG - S_ANIMREF = 99, // ANIMREF - S_PREINC = 100, // PREINC - S_PREDEC = 101, // PREDEC - S_POSTINC = 102, // POSTINC - S_POSTDEC = 103, // POSTDEC - S_YYACCEPT = 104, // $accept - S_root = 105, // root - S_program = 106, // program - S_inline = 107, // inline - S_include = 108, // include - S_declaration = 109, // declaration - S_decl_usingtree = 110, // decl_usingtree - S_decl_constant = 111, // decl_constant - S_decl_thread = 112, // decl_thread - S_stmt = 113, // stmt - S_stmt_dev = 114, // stmt_dev - S_stmt_block = 115, // stmt_block - S_stmt_list = 116, // stmt_list - S_stmt_expr = 117, // stmt_expr - S_stmt_call = 118, // stmt_call - S_stmt_assign = 119, // stmt_assign - S_stmt_endon = 120, // stmt_endon - S_stmt_notify = 121, // stmt_notify - S_stmt_wait = 122, // stmt_wait - S_stmt_waittill = 123, // stmt_waittill - S_stmt_waittillmatch = 124, // stmt_waittillmatch - S_stmt_waittillframeend = 125, // stmt_waittillframeend - S_stmt_if = 126, // stmt_if - S_stmt_ifelse = 127, // stmt_ifelse - S_stmt_while = 128, // stmt_while - S_stmt_dowhile = 129, // stmt_dowhile - S_stmt_for = 130, // stmt_for - S_stmt_foreach = 131, // stmt_foreach - S_stmt_switch = 132, // stmt_switch - S_stmt_case = 133, // stmt_case - S_stmt_default = 134, // stmt_default - S_stmt_break = 135, // stmt_break - S_stmt_continue = 136, // stmt_continue - S_stmt_return = 137, // stmt_return - S_stmt_breakpoint = 138, // stmt_breakpoint - S_stmt_prof_begin = 139, // stmt_prof_begin - S_stmt_prof_end = 140, // stmt_prof_end - S_expr = 141, // expr - S_expr_or_empty = 142, // expr_or_empty - S_expr_assign = 143, // expr_assign - S_expr_increment = 144, // expr_increment - S_expr_decrement = 145, // expr_decrement - S_expr_ternary = 146, // expr_ternary - S_expr_binary = 147, // expr_binary - S_expr_primitive = 148, // expr_primitive - S_expr_complement = 149, // expr_complement - S_expr_not = 150, // expr_not - S_expr_call = 151, // expr_call - S_expr_method = 152, // expr_method - S_expr_function = 153, // expr_function - S_expr_pointer = 154, // expr_pointer - S_expr_add_array = 155, // expr_add_array - S_expr_parameters = 156, // expr_parameters - S_expr_arguments = 157, // expr_arguments - S_expr_arguments_no_empty = 158, // expr_arguments_no_empty - S_expr_reference = 159, // expr_reference - S_expr_array = 160, // expr_array - S_expr_field = 161, // expr_field - S_expr_size = 162, // expr_size - S_expr_paren = 163, // expr_paren - S_expr_object = 164, // expr_object - S_expr_thisthread = 165, // expr_thisthread - S_expr_empty_array = 166, // expr_empty_array - S_expr_undefined = 167, // expr_undefined - S_expr_game = 168, // expr_game - S_expr_self = 169, // expr_self - S_expr_anim = 170, // expr_anim - S_expr_level = 171, // expr_level - S_expr_animation = 172, // expr_animation - S_expr_animtree = 173, // expr_animtree - S_expr_identifier = 174, // expr_identifier - S_expr_path = 175, // expr_path - S_expr_istring = 176, // expr_istring - S_expr_string = 177, // expr_string - S_expr_color = 178, // expr_color - S_expr_vector = 179, // expr_vector - S_expr_float = 180, // expr_float - S_expr_integer = 181, // expr_integer - S_expr_false = 182, // expr_false - S_expr_true = 183 // expr_true + S_FIELD = 88, // "field" + S_PATH = 89, // "path" + S_IDENTIFIER = 90, // "identifier" + S_STRING = 91, // "string literal" + S_ISTRING = 92, // "localized string" + S_COLOR = 93, // "color" + S_FLOAT = 94, // "float" + S_INTEGER = 95, // "integer" + S_ADD_ARRAY = 96, // ADD_ARRAY + S_THEN = 97, // THEN + S_TERN = 98, // TERN + S_NEG = 99, // NEG + S_ANIMREF = 100, // ANIMREF + S_PREINC = 101, // PREINC + S_PREDEC = 102, // PREDEC + S_POSTINC = 103, // POSTINC + S_POSTDEC = 104, // POSTDEC + S_YYACCEPT = 105, // $accept + S_root = 106, // root + S_program = 107, // program + S_inline = 108, // inline + S_include = 109, // include + S_declaration = 110, // declaration + S_decl_usingtree = 111, // decl_usingtree + S_decl_constant = 112, // decl_constant + S_decl_thread = 113, // decl_thread + S_stmt = 114, // stmt + S_stmt_dev = 115, // stmt_dev + S_stmt_block = 116, // stmt_block + S_stmt_list = 117, // stmt_list + S_stmt_expr = 118, // stmt_expr + S_stmt_call = 119, // stmt_call + S_stmt_assign = 120, // stmt_assign + S_stmt_endon = 121, // stmt_endon + S_stmt_notify = 122, // stmt_notify + S_stmt_wait = 123, // stmt_wait + S_stmt_waittill = 124, // stmt_waittill + S_stmt_waittillmatch = 125, // stmt_waittillmatch + S_stmt_waittillframeend = 126, // stmt_waittillframeend + S_stmt_if = 127, // stmt_if + S_stmt_ifelse = 128, // stmt_ifelse + S_stmt_while = 129, // stmt_while + S_stmt_dowhile = 130, // stmt_dowhile + S_stmt_for = 131, // stmt_for + S_stmt_foreach = 132, // stmt_foreach + S_stmt_switch = 133, // stmt_switch + S_stmt_case = 134, // stmt_case + S_stmt_default = 135, // stmt_default + S_stmt_break = 136, // stmt_break + S_stmt_continue = 137, // stmt_continue + S_stmt_return = 138, // stmt_return + S_stmt_breakpoint = 139, // stmt_breakpoint + S_stmt_prof_begin = 140, // stmt_prof_begin + S_stmt_prof_end = 141, // stmt_prof_end + S_expr = 142, // expr + S_expr_or_empty = 143, // expr_or_empty + S_expr_assign = 144, // expr_assign + S_expr_increment = 145, // expr_increment + S_expr_decrement = 146, // expr_decrement + S_expr_ternary = 147, // expr_ternary + S_expr_binary = 148, // expr_binary + S_expr_primitive = 149, // expr_primitive + S_expr_complement = 150, // expr_complement + S_expr_not = 151, // expr_not + S_expr_call = 152, // expr_call + S_expr_method = 153, // expr_method + S_expr_function = 154, // expr_function + S_expr_pointer = 155, // expr_pointer + S_expr_add_array = 156, // expr_add_array + S_expr_parameters = 157, // expr_parameters + S_expr_arguments = 158, // expr_arguments + S_expr_arguments_no_empty = 159, // expr_arguments_no_empty + S_expr_reference = 160, // expr_reference + S_expr_array = 161, // expr_array + S_expr_field = 162, // expr_field + S_expr_size = 163, // expr_size + S_expr_paren = 164, // expr_paren + S_expr_object = 165, // expr_object + S_expr_thisthread = 166, // expr_thisthread + S_expr_empty_array = 167, // expr_empty_array + S_expr_undefined = 168, // expr_undefined + S_expr_game = 169, // expr_game + S_expr_self = 170, // expr_self + S_expr_anim = 171, // expr_anim + S_expr_level = 172, // expr_level + S_expr_animation = 173, // expr_animation + S_expr_animtree = 174, // expr_animtree + S_expr_identifier = 175, // expr_identifier + S_expr_path = 176, // expr_path + S_expr_istring = 177, // expr_istring + S_expr_string = 178, // expr_string + S_expr_color = 179, // expr_color + S_expr_vector = 180, // expr_vector + S_expr_float = 181, // expr_float + S_expr_integer = 182, // expr_integer + S_expr_false = 183, // expr_false + S_expr_true = 184 // expr_true }; }; @@ -1284,6 +1287,7 @@ namespace xsk { namespace gsc { namespace iw6 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2535,6 +2539,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2651,7 +2656,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - IW6_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + IW6_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4021,6 +4026,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4605,7 +4625,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2293, ///< Last index in yytable_. + yylast_ = 2249, ///< Last index in yytable_. yynnts_ = 80, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4905,6 +4925,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5216,6 +5237,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5289,7 +5311,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw6 -#line 5293 "parser.hpp" +#line 5315 "parser.hpp" diff --git a/src/iw7/xsk/lexer.cpp b/src/iw7/xsk/lexer.cpp index 07955e6b..dc7ec7a6 100644 --- a/src/iw7/xsk/lexer.cpp +++ b/src/iw7/xsk/lexer.cpp @@ -67,9 +67,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -79,18 +79,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -138,7 +129,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -184,24 +175,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw iw7::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return iw7::parser::make_IW7EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -215,7 +210,7 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return iw7::parser::make_DIV(loc_); reader_.advance(); @@ -225,29 +220,27 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw iw7::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return iw7::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw iw7::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -261,16 +254,15 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw iw7::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -283,7 +275,7 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -293,69 +285,43 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw iw7::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return iw7::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return iw7::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw iw7::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return iw7::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw iw7::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return iw7::parser::make_ASSIGN_MUL(loc_); - return iw7::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return iw7::parser::make_LPAREN(loc_); case ')': @@ -375,6 +341,7 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type case ':': if (curr != ':') return iw7::parser::make_COLON(loc_); + reader_.advance(); return iw7::parser::make_DOUBLECOLON(loc_); case '?': @@ -382,43 +349,70 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type case '=': if (curr != '=') return iw7::parser::make_ASSIGN(loc_); + reader_.advance(); return iw7::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return iw7::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? iw7::parser::make_INCREMENT(loc_) : iw7::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return iw7::parser::make_INCREMENT(loc_); + + return iw7::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return iw7::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? iw7::parser::make_DECREMENT(loc_) : iw7::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return iw7::parser::make_DECREMENT(loc_); + + return iw7::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return iw7::parser::make_MOD(loc_); + reader_.advance(); + return iw7::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return iw7::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? iw7::parser::make_OR(loc_) : iw7::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return iw7::parser::make_OR(loc_); + + return iw7::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return iw7::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? iw7::parser::make_AND(loc_) : iw7::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return iw7::parser::make_AND(loc_); + + if (last == '=') + return iw7::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return iw7::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return iw7::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return iw7::parser::make_NOT(loc_); + reader_.advance(); return iw7::parser::make_INEQUALITY(loc_); case '~': @@ -426,144 +420,222 @@ auto lexer::lex() -> xsk::gsc::iw7::parser::symbol_type case '<': if (curr != '<' && curr != '=') return iw7::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? iw7::parser::make_ASSIGN_LSHIFT(loc_) : iw7::parser::make_LSHIFT(loc_); - } - return iw7::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return iw7::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return iw7::parser::make_LSHIFT(loc_); + + reader_.advance(); + return iw7::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return iw7::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? iw7::parser::make_ASSIGN_RSHIFT(loc_) : iw7::parser::make_RSHIFT(loc_); - } - return iw7::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return iw7::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return iw7::parser::make_RSHIFT(loc_); + + reader_.advance(); + return iw7::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw iw7::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::iw7::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw iw7::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw iw7::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return iw7::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return iw7::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::iw7::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw iw7::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw iw7::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return iw7::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return iw7::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return iw7::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return iw7::parser::make_SIZE(loc_); + } + + return iw7::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return iw7::parser::make_PATH(xsk::gsc::iw7::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw7::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return iw7::parser::make_IDENTIFIER(xsk::gsc::iw7::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw7::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return iw7::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return iw7::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -580,30 +652,24 @@ auto lexer::read_number(char first) -> xsk::gsc::iw7::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return iw7::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return iw7::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -615,35 +681,29 @@ auto lexer::read_number(char first) -> xsk::gsc::iw7::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return iw7::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -660,163 +720,15 @@ auto lexer::read_number(char first) -> xsk::gsc::iw7::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return iw7::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw iw7::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw iw7::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw iw7::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return iw7::parser::make_FLOAT(std::string(data, len), loc_); - - return iw7::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::iw7::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw iw7::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw iw7::parser::syntax_error(loc_, "invalid path end '\\'"); - - return iw7::parser::make_PATH(xsk::gsc::iw7::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return iw7::parser::make_IDENTIFIER(xsk::gsc::iw7::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::iw7::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return iw7::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return iw7::parser::make_DOT(loc_); - - } - else return iw7::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::iw7::parser::symbol_type { switch (k) diff --git a/src/iw7/xsk/lexer.hpp b/src/iw7/xsk/lexer.hpp index f1aea198..215534c1 100644 --- a/src/iw7/xsk/lexer.hpp +++ b/src/iw7/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::iw7 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::iw7::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::iw7::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::iw7::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::iw7::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::iw7::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/iw7/xsk/parser.cpp b/src/iw7/xsk/parser.cpp index 892dd8d4..1b581ffa 100644 --- a/src/iw7/xsk/parser.cpp +++ b/src/iw7/xsk/parser.cpp @@ -487,6 +487,7 @@ namespace xsk { namespace gsc { namespace iw7 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -784,6 +785,7 @@ namespace xsk { namespace gsc { namespace iw7 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1081,6 +1083,7 @@ namespace xsk { namespace gsc { namespace iw7 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1377,6 +1380,7 @@ namespace xsk { namespace gsc { namespace iw7 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1928,6 +1932,7 @@ namespace xsk { namespace gsc { namespace iw7 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1959,1285 +1964,1291 @@ namespace xsk { namespace gsc { namespace iw7 { switch (yyn) { case 2: // root: program -#line 243 "parser.ypp" +#line 244 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1965 "parser.cpp" +#line 1970 "parser.cpp" break; case 3: // root: %empty -#line 244 "parser.ypp" +#line 245 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1971 "parser.cpp" +#line 1976 "parser.cpp" break; case 4: // program: program inline -#line 249 "parser.ypp" +#line 250 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1977 "parser.cpp" +#line 1982 "parser.cpp" break; case 5: // program: program include -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 1983 "parser.cpp" +#line 1988 "parser.cpp" break; case 6: // program: program declaration -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 1989 "parser.cpp" +#line 1994 "parser.cpp" break; case 7: // program: inline -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 1995 "parser.cpp" +#line 2000 "parser.cpp" break; case 8: // program: include -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2001 "parser.cpp" +#line 2006 "parser.cpp" break; case 9: // program: declaration -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2007 "parser.cpp" +#line 2012 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 263 "parser.ypp" +#line 264 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2013 "parser.cpp" +#line 2018 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 268 "parser.ypp" +#line 269 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2019 "parser.cpp" +#line 2024 "parser.cpp" break; case 12: // declaration: "/#" -#line 272 "parser.ypp" +#line 273 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 13: // declaration: "#/" -#line 273 "parser.ypp" +#line 274 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 15: // declaration: decl_constant -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 16: // declaration: decl_thread -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 281 "parser.ypp" +#line 282 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 286 "parser.ypp" +#line 287 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 291 "parser.ypp" +#line 292 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 295 "parser.ypp" +#line 296 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 21: // stmt: stmt_block -#line 296 "parser.ypp" +#line 297 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 22: // stmt: stmt_call -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 30: // stmt: stmt_if -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 31: // stmt: stmt_ifelse -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 32: // stmt: stmt_while -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 33: // stmt: stmt_dowhile -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 34: // stmt: stmt_for -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 35: // stmt: stmt_foreach -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 36: // stmt: stmt_switch -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 37: // stmt: stmt_case -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 38: // stmt: stmt_default -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 39: // stmt: stmt_break -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 40: // stmt: stmt_continue -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 41: // stmt: stmt_return -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 42: // stmt: stmt_breakpoint -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 43: // stmt: stmt_prof_begin -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 44: // stmt: stmt_prof_end -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 45: // stmt_dev: "/#" stmt_list "#/" -#line 323 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 46: // stmt_dev: "/#" "#/" -#line 324 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 47: // stmt_block: "{" stmt_list "}" -#line 328 "parser.ypp" +#line 329 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 48: // stmt_block: "{" "}" -#line 329 "parser.ypp" +#line 330 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 49: // stmt_list: stmt_list stmt -#line 334 "parser.ypp" +#line 335 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 50: // stmt_list: stmt -#line 336 "parser.ypp" +#line 337 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; case 51: // stmt_expr: expr_assign -#line 341 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; case 52: // stmt_expr: expr_increment -#line 343 "parser.ypp" +#line 344 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2265 "parser.cpp" +#line 2270 "parser.cpp" break; case 53: // stmt_expr: expr_decrement -#line 345 "parser.ypp" +#line 346 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2271 "parser.cpp" +#line 2276 "parser.cpp" break; case 54: // stmt_expr: %empty -#line 347 "parser.ypp" +#line 348 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2277 "parser.cpp" +#line 2282 "parser.cpp" break; case 55: // stmt_call: expr_call ";" -#line 352 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2283 "parser.cpp" +#line 2288 "parser.cpp" break; case 56: // stmt_call: expr_method ";" -#line 354 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2289 "parser.cpp" +#line 2294 "parser.cpp" break; case 57: // stmt_assign: expr_assign ";" -#line 359 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2295 "parser.cpp" +#line 2300 "parser.cpp" break; case 58: // stmt_assign: expr_increment ";" -#line 361 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2301 "parser.cpp" +#line 2306 "parser.cpp" break; case 59: // stmt_assign: expr_decrement ";" -#line 363 "parser.ypp" +#line 364 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2307 "parser.cpp" +#line 2312 "parser.cpp" break; case 60: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 368 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2313 "parser.cpp" +#line 2318 "parser.cpp" break; case 61: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 373 "parser.ypp" +#line 374 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2319 "parser.cpp" +#line 2324 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 375 "parser.ypp" +#line 376 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2325 "parser.cpp" +#line 2330 "parser.cpp" break; case 63: // stmt_wait: "wait" expr ";" -#line 380 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2331 "parser.cpp" +#line 2336 "parser.cpp" break; case 64: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 385 "parser.ypp" +#line 386 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2337 "parser.cpp" +#line 2342 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 387 "parser.ypp" +#line 388 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2343 "parser.cpp" +#line 2348 "parser.cpp" break; case 66: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 392 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2349 "parser.cpp" +#line 2354 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 394 "parser.ypp" +#line 395 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2355 "parser.cpp" +#line 2360 "parser.cpp" break; case 68: // stmt_waittillframeend: "waittillframeend" ";" -#line 399 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2361 "parser.cpp" +#line 2366 "parser.cpp" break; case 69: // stmt_if: "if" "(" expr ")" stmt -#line 404 "parser.ypp" +#line 405 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2367 "parser.cpp" +#line 2372 "parser.cpp" break; case 70: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2373 "parser.cpp" +#line 2378 "parser.cpp" break; case 71: // stmt_while: "while" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2379 "parser.cpp" +#line 2384 "parser.cpp" break; case 72: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2385 "parser.cpp" +#line 2390 "parser.cpp" break; case 73: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2391 "parser.cpp" +#line 2396 "parser.cpp" break; case 74: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2397 "parser.cpp" +#line 2402 "parser.cpp" break; case 75: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 431 "parser.ypp" +#line 432 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2403 "parser.cpp" +#line 2408 "parser.cpp" break; case 76: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 436 "parser.ypp" +#line 437 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2409 "parser.cpp" +#line 2414 "parser.cpp" break; case 77: // stmt_case: "case" expr_integer ":" -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2415 "parser.cpp" +#line 2420 "parser.cpp" break; case 78: // stmt_case: "case" expr_string ":" -#line 443 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2421 "parser.cpp" +#line 2426 "parser.cpp" break; case 79: // stmt_default: "default" ":" -#line 448 "parser.ypp" +#line 449 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2427 "parser.cpp" +#line 2432 "parser.cpp" break; case 80: // stmt_break: "break" ";" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2433 "parser.cpp" +#line 2438 "parser.cpp" break; case 81: // stmt_continue: "continue" ";" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2439 "parser.cpp" +#line 2444 "parser.cpp" break; case 82: // stmt_return: "return" expr ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2445 "parser.cpp" +#line 2450 "parser.cpp" break; case 83: // stmt_return: "return" ";" -#line 465 "parser.ypp" +#line 466 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2451 "parser.cpp" +#line 2456 "parser.cpp" break; case 84: // stmt_breakpoint: "breakpoint" ";" -#line 470 "parser.ypp" +#line 471 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2457 "parser.cpp" +#line 2462 "parser.cpp" break; case 85: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2463 "parser.cpp" +#line 2468 "parser.cpp" break; case 86: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2469 "parser.cpp" +#line 2474 "parser.cpp" break; case 87: // expr: expr_ternary -#line 484 "parser.ypp" +#line 485 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2475 "parser.cpp" +#line 2480 "parser.cpp" break; case 88: // expr: expr_binary -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2481 "parser.cpp" +#line 2486 "parser.cpp" break; case 89: // expr: expr_primitive -#line 486 "parser.ypp" +#line 487 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2487 "parser.cpp" +#line 2492 "parser.cpp" break; case 90: // expr_or_empty: expr -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2493 "parser.cpp" +#line 2498 "parser.cpp" break; case 91: // expr_or_empty: %empty -#line 491 "parser.ypp" +#line 492 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2499 "parser.cpp" +#line 2504 "parser.cpp" break; case 92: // expr_assign: expr_object "=" expr -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2505 "parser.cpp" +#line 2510 "parser.cpp" break; case 93: // expr_assign: expr_object "|=" expr -#line 498 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2511 "parser.cpp" +#line 2516 "parser.cpp" break; case 94: // expr_assign: expr_object "&=" expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2517 "parser.cpp" +#line 2522 "parser.cpp" break; case 95: // expr_assign: expr_object "^=" expr -#line 502 "parser.ypp" +#line 503 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2523 "parser.cpp" +#line 2528 "parser.cpp" break; case 96: // expr_assign: expr_object "<<=" expr -#line 504 "parser.ypp" +#line 505 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2529 "parser.cpp" +#line 2534 "parser.cpp" break; case 97: // expr_assign: expr_object ">>=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2535 "parser.cpp" +#line 2540 "parser.cpp" break; case 98: // expr_assign: expr_object "+=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2541 "parser.cpp" +#line 2546 "parser.cpp" break; case 99: // expr_assign: expr_object "-=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2547 "parser.cpp" +#line 2552 "parser.cpp" break; case 100: // expr_assign: expr_object "*=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2553 "parser.cpp" +#line 2558 "parser.cpp" break; case 101: // expr_assign: expr_object "/=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2559 "parser.cpp" +#line 2564 "parser.cpp" break; case 102: // expr_assign: expr_object "%=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2565 "parser.cpp" +#line 2570 "parser.cpp" break; case 103: // expr_increment: "++" expr_object -#line 521 "parser.ypp" +#line 522 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2571 "parser.cpp" +#line 2576 "parser.cpp" break; case 104: // expr_increment: expr_object "++" -#line 523 "parser.ypp" +#line 524 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2577 "parser.cpp" +#line 2582 "parser.cpp" break; case 105: // expr_decrement: "--" expr_object -#line 528 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2583 "parser.cpp" +#line 2588 "parser.cpp" break; case 106: // expr_decrement: expr_object "--" -#line 530 "parser.ypp" +#line 531 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2589 "parser.cpp" +#line 2594 "parser.cpp" break; case 107: // expr_ternary: expr "?" expr ":" expr -#line 535 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2595 "parser.cpp" +#line 2600 "parser.cpp" break; case 108: // expr_binary: expr "||" expr -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2601 "parser.cpp" +#line 2606 "parser.cpp" break; case 109: // expr_binary: expr "&&" expr -#line 542 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2607 "parser.cpp" +#line 2612 "parser.cpp" break; case 110: // expr_binary: expr "==" expr -#line 544 "parser.ypp" +#line 545 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2613 "parser.cpp" +#line 2618 "parser.cpp" break; case 111: // expr_binary: expr "!=" expr -#line 546 "parser.ypp" +#line 547 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2619 "parser.cpp" +#line 2624 "parser.cpp" break; case 112: // expr_binary: expr "<=" expr -#line 548 "parser.ypp" +#line 549 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2625 "parser.cpp" +#line 2630 "parser.cpp" break; case 113: // expr_binary: expr ">=" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2631 "parser.cpp" +#line 2636 "parser.cpp" break; case 114: // expr_binary: expr "<" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2637 "parser.cpp" +#line 2642 "parser.cpp" break; case 115: // expr_binary: expr ">" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2643 "parser.cpp" +#line 2648 "parser.cpp" break; case 116: // expr_binary: expr "|" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2649 "parser.cpp" +#line 2654 "parser.cpp" break; case 117: // expr_binary: expr "&" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2655 "parser.cpp" +#line 2660 "parser.cpp" break; case 118: // expr_binary: expr "^" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2661 "parser.cpp" +#line 2666 "parser.cpp" break; case 119: // expr_binary: expr "<<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2667 "parser.cpp" +#line 2672 "parser.cpp" break; case 120: // expr_binary: expr ">>" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2673 "parser.cpp" +#line 2678 "parser.cpp" break; case 121: // expr_binary: expr "+" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2679 "parser.cpp" +#line 2684 "parser.cpp" break; case 122: // expr_binary: expr "-" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2685 "parser.cpp" +#line 2690 "parser.cpp" break; case 123: // expr_binary: expr "*" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2691 "parser.cpp" +#line 2696 "parser.cpp" break; case 124: // expr_binary: expr "/" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2697 "parser.cpp" +#line 2702 "parser.cpp" break; case 125: // expr_binary: expr "%" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2703 "parser.cpp" +#line 2708 "parser.cpp" break; case 126: // expr_primitive: expr_complement -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2709 "parser.cpp" +#line 2714 "parser.cpp" break; case 127: // expr_primitive: expr_not -#line 579 "parser.ypp" +#line 580 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2715 "parser.cpp" +#line 2720 "parser.cpp" break; case 128: // expr_primitive: expr_call -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2721 "parser.cpp" +#line 2726 "parser.cpp" break; case 129: // expr_primitive: expr_method -#line 581 "parser.ypp" +#line 582 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2727 "parser.cpp" +#line 2732 "parser.cpp" break; case 130: // expr_primitive: expr_add_array -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2733 "parser.cpp" +#line 2738 "parser.cpp" break; case 131: // expr_primitive: expr_reference -#line 583 "parser.ypp" +#line 584 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2739 "parser.cpp" +#line 2744 "parser.cpp" break; case 132: // expr_primitive: expr_array -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2745 "parser.cpp" +#line 2750 "parser.cpp" break; case 133: // expr_primitive: expr_field -#line 585 "parser.ypp" +#line 586 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2751 "parser.cpp" +#line 2756 "parser.cpp" break; case 134: // expr_primitive: expr_size -#line 586 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2757 "parser.cpp" +#line 2762 "parser.cpp" break; case 135: // expr_primitive: expr_paren -#line 587 "parser.ypp" +#line 588 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2763 "parser.cpp" +#line 2768 "parser.cpp" break; case 136: // expr_primitive: expr_thisthread -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2769 "parser.cpp" +#line 2774 "parser.cpp" break; case 137: // expr_primitive: expr_empty_array -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2775 "parser.cpp" +#line 2780 "parser.cpp" break; case 138: // expr_primitive: expr_undefined -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2781 "parser.cpp" +#line 2786 "parser.cpp" break; case 139: // expr_primitive: expr_game -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2787 "parser.cpp" +#line 2792 "parser.cpp" break; case 140: // expr_primitive: expr_self -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2793 "parser.cpp" +#line 2798 "parser.cpp" break; case 141: // expr_primitive: expr_anim -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2799 "parser.cpp" +#line 2804 "parser.cpp" break; case 142: // expr_primitive: expr_level -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2805 "parser.cpp" +#line 2810 "parser.cpp" break; case 143: // expr_primitive: expr_animation -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2811 "parser.cpp" +#line 2816 "parser.cpp" break; case 144: // expr_primitive: expr_animtree -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2817 "parser.cpp" +#line 2822 "parser.cpp" break; case 145: // expr_primitive: expr_identifier -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2823 "parser.cpp" +#line 2828 "parser.cpp" break; case 146: // expr_primitive: expr_istring -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2829 "parser.cpp" +#line 2834 "parser.cpp" break; case 147: // expr_primitive: expr_string -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2835 "parser.cpp" +#line 2840 "parser.cpp" break; case 148: // expr_primitive: expr_color -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2841 "parser.cpp" +#line 2846 "parser.cpp" break; case 149: // expr_primitive: expr_vector -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2847 "parser.cpp" +#line 2852 "parser.cpp" break; case 150: // expr_primitive: expr_float -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2853 "parser.cpp" +#line 2858 "parser.cpp" break; case 151: // expr_primitive: expr_integer -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2859 "parser.cpp" +#line 2864 "parser.cpp" break; case 152: // expr_primitive: expr_false -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2865 "parser.cpp" +#line 2870 "parser.cpp" break; case 153: // expr_primitive: expr_true -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2871 "parser.cpp" +#line 2876 "parser.cpp" break; case 154: // expr_complement: "~" expr -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2877 "parser.cpp" +#line 2882 "parser.cpp" break; case 155: // expr_not: "!" expr -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2883 "parser.cpp" +#line 2888 "parser.cpp" break; case 156: // expr_call: expr_function -#line 619 "parser.ypp" +#line 620 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2889 "parser.cpp" +#line 2894 "parser.cpp" break; case 157: // expr_call: expr_pointer -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2895 "parser.cpp" +#line 2900 "parser.cpp" break; case 158: // expr_method: expr_object expr_function -#line 623 "parser.ypp" +#line 624 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2901 "parser.cpp" +#line 2906 "parser.cpp" break; case 159: // expr_method: expr_object expr_pointer -#line 624 "parser.ypp" +#line 625 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2907 "parser.cpp" +#line 2912 "parser.cpp" break; case 160: // expr_function: expr_identifier "(" expr_arguments ")" -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2913 "parser.cpp" +#line 2918 "parser.cpp" break; case 161: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 631 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2919 "parser.cpp" +#line 2924 "parser.cpp" break; case 162: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2925 "parser.cpp" +#line 2930 "parser.cpp" break; case 163: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 635 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2931 "parser.cpp" +#line 2936 "parser.cpp" break; case 164: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 637 "parser.ypp" +#line 638 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2937 "parser.cpp" +#line 2942 "parser.cpp" break; case 165: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2943 "parser.cpp" +#line 2948 "parser.cpp" break; case 166: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 644 "parser.ypp" +#line 645 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2949 "parser.cpp" +#line 2954 "parser.cpp" break; case 167: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 646 "parser.ypp" +#line 647 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2955 "parser.cpp" +#line 2960 "parser.cpp" break; case 168: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 648 "parser.ypp" +#line 649 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2961 "parser.cpp" +#line 2966 "parser.cpp" break; case 169: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 650 "parser.ypp" +#line 651 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 2967 "parser.cpp" +#line 2972 "parser.cpp" break; case 170: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 655 "parser.ypp" +#line 656 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 2973 "parser.cpp" +#line 2978 "parser.cpp" break; case 171: // expr_parameters: expr_parameters "," expr_identifier -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2979 "parser.cpp" +#line 2984 "parser.cpp" break; case 172: // expr_parameters: expr_identifier -#line 662 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 2985 "parser.cpp" +#line 2990 "parser.cpp" break; case 173: // expr_parameters: %empty -#line 664 "parser.ypp" +#line 665 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 2991 "parser.cpp" +#line 2996 "parser.cpp" break; case 174: // expr_arguments: expr_arguments_no_empty -#line 669 "parser.ypp" +#line 670 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 2997 "parser.cpp" +#line 3002 "parser.cpp" break; case 175: // expr_arguments: %empty -#line 671 "parser.ypp" +#line 672 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3003 "parser.cpp" +#line 3008 "parser.cpp" break; case 176: // expr_arguments_no_empty: expr_arguments "," expr -#line 676 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3009 "parser.cpp" +#line 3014 "parser.cpp" break; case 177: // expr_arguments_no_empty: expr -#line 678 "parser.ypp" +#line 679 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3015 "parser.cpp" +#line 3020 "parser.cpp" break; case 178: // expr_reference: "::" expr_identifier -#line 683 "parser.ypp" +#line 684 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3021 "parser.cpp" +#line 3026 "parser.cpp" break; case 179: // expr_reference: expr_path "::" expr_identifier -#line 685 "parser.ypp" +#line 686 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3027 "parser.cpp" +#line 3032 "parser.cpp" break; case 180: // expr_array: expr_object "[" expr "]" -#line 690 "parser.ypp" +#line 691 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3033 "parser.cpp" +#line 3038 "parser.cpp" break; case 181: // expr_field: expr_object "." expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3039 "parser.cpp" +#line 3044 "parser.cpp" break; - case 182: // expr_size: expr_object ".size" -#line 700 "parser.ypp" + case 182: // expr_field: expr_object "field" +#line 698 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3050 "parser.cpp" + break; + + case 183: // expr_size: expr_object ".size" +#line 703 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3045 "parser.cpp" +#line 3056 "parser.cpp" break; - case 183: // expr_paren: "(" expr ")" -#line 705 "parser.ypp" + case 184: // expr_paren: "(" expr ")" +#line 708 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3051 "parser.cpp" +#line 3062 "parser.cpp" break; - case 184: // expr_object: expr_call -#line 709 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3057 "parser.cpp" - break; - - case 185: // expr_object: expr_method -#line 710 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3063 "parser.cpp" - break; - - case 186: // expr_object: expr_array -#line 711 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3069 "parser.cpp" - break; - - case 187: // expr_object: expr_field + case 185: // expr_object: expr_call #line 712 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3075 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3068 "parser.cpp" break; - case 188: // expr_object: expr_game + case 186: // expr_object: expr_method #line 713 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3081 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3074 "parser.cpp" break; - case 189: // expr_object: expr_self + case 187: // expr_object: expr_array #line 714 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3087 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3080 "parser.cpp" break; - case 190: // expr_object: expr_anim + case 188: // expr_object: expr_field #line 715 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3093 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3086 "parser.cpp" break; - case 191: // expr_object: expr_level + case 189: // expr_object: expr_game #line 716 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3099 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3092 "parser.cpp" break; - case 192: // expr_object: expr_identifier + case 190: // expr_object: expr_self #line 717 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3098 "parser.cpp" + break; + + case 191: // expr_object: expr_anim +#line 718 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3104 "parser.cpp" + break; + + case 192: // expr_object: expr_level +#line 719 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3110 "parser.cpp" + break; + + case 193: // expr_object: expr_identifier +#line 720 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3105 "parser.cpp" +#line 3116 "parser.cpp" break; - case 193: // expr_thisthread: "thisthread" -#line 722 "parser.ypp" + case 194: // expr_thisthread: "thisthread" +#line 725 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3111 "parser.cpp" +#line 3122 "parser.cpp" break; - case 194: // expr_empty_array: "[" "]" -#line 727 "parser.ypp" + case 195: // expr_empty_array: "[" "]" +#line 730 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3117 "parser.cpp" +#line 3128 "parser.cpp" break; - case 195: // expr_undefined: "undefined" -#line 732 "parser.ypp" + case 196: // expr_undefined: "undefined" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3123 "parser.cpp" +#line 3134 "parser.cpp" break; - case 196: // expr_game: "game" -#line 737 "parser.ypp" + case 197: // expr_game: "game" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3129 "parser.cpp" +#line 3140 "parser.cpp" break; - case 197: // expr_self: "self" -#line 742 "parser.ypp" + case 198: // expr_self: "self" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3135 "parser.cpp" +#line 3146 "parser.cpp" break; - case 198: // expr_anim: "anim" -#line 747 "parser.ypp" + case 199: // expr_anim: "anim" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3141 "parser.cpp" +#line 3152 "parser.cpp" break; - case 199: // expr_level: "level" -#line 752 "parser.ypp" + case 200: // expr_level: "level" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3147 "parser.cpp" +#line 3158 "parser.cpp" break; - case 200: // expr_animation: "%" "identifier" -#line 757 "parser.ypp" + case 201: // expr_animation: "%" "identifier" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3153 "parser.cpp" +#line 3164 "parser.cpp" break; - case 201: // expr_animtree: "#animtree" -#line 762 "parser.ypp" + case 202: // expr_animtree: "#animtree" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3159 "parser.cpp" +#line 3170 "parser.cpp" break; - case 202: // expr_identifier: "identifier" -#line 767 "parser.ypp" + case 203: // expr_identifier: "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3165 "parser.cpp" +#line 3176 "parser.cpp" break; - case 203: // expr_path: "path" -#line 772 "parser.ypp" + case 204: // expr_path: "path" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3171 "parser.cpp" +#line 3182 "parser.cpp" break; - case 204: // expr_path: expr_identifier -#line 774 "parser.ypp" + case 205: // expr_path: expr_identifier +#line 777 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3177 "parser.cpp" +#line 3188 "parser.cpp" break; - case 205: // expr_istring: "localized string" -#line 779 "parser.ypp" + case 206: // expr_istring: "localized string" +#line 782 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3183 "parser.cpp" +#line 3194 "parser.cpp" break; - case 206: // expr_string: "string literal" -#line 784 "parser.ypp" + case 207: // expr_string: "string literal" +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3189 "parser.cpp" +#line 3200 "parser.cpp" break; - case 207: // expr_color: "color" -#line 789 "parser.ypp" + case 208: // expr_color: "color" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3195 "parser.cpp" +#line 3206 "parser.cpp" break; - case 208: // expr_vector: "(" expr "," expr "," expr ")" -#line 794 "parser.ypp" + case 209: // expr_vector: "(" expr "," expr "," expr ")" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3201 "parser.cpp" +#line 3212 "parser.cpp" break; - case 209: // expr_float: "-" "float" -#line 799 "parser.ypp" + case 210: // expr_float: "-" "float" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3207 "parser.cpp" +#line 3218 "parser.cpp" break; - case 210: // expr_float: "float" -#line 801 "parser.ypp" + case 211: // expr_float: "float" +#line 804 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3213 "parser.cpp" +#line 3224 "parser.cpp" break; - case 211: // expr_integer: "-" "integer" -#line 806 "parser.ypp" + case 212: // expr_integer: "-" "integer" +#line 809 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3219 "parser.cpp" +#line 3230 "parser.cpp" break; - case 212: // expr_integer: "integer" -#line 808 "parser.ypp" + case 213: // expr_integer: "integer" +#line 811 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3225 "parser.cpp" +#line 3236 "parser.cpp" break; - case 213: // expr_false: "false" -#line 813 "parser.ypp" + case 214: // expr_false: "false" +#line 816 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3231 "parser.cpp" +#line 3242 "parser.cpp" break; - case 214: // expr_true: "true" -#line 818 "parser.ypp" + case 215: // expr_true: "true" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3237 "parser.cpp" +#line 3248 "parser.cpp" break; -#line 3241 "parser.cpp" +#line 3252 "parser.cpp" default: break; @@ -3431,13 +3442,13 @@ namespace xsk { namespace gsc { namespace iw7 { ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", - "path", "identifier", "string literal", "localized string", "color", - "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", - "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", - "inline", "include", "declaration", "decl_usingtree", "decl_constant", - "decl_thread", "stmt", "stmt_dev", "stmt_block", "stmt_list", - "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", "stmt_notify", - "stmt_wait", "stmt_waittill", "stmt_waittillmatch", + "field", "path", "identifier", "string literal", "localized string", + "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", + "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", + "program", "inline", "include", "declaration", "decl_usingtree", + "decl_constant", "decl_thread", "stmt", "stmt_dev", "stmt_block", + "stmt_list", "stmt_expr", "stmt_call", "stmt_assign", "stmt_endon", + "stmt_notify", "stmt_wait", "stmt_waittill", "stmt_waittillmatch", "stmt_waittillframeend", "stmt_if", "stmt_ifelse", "stmt_while", "stmt_dowhile", "stmt_for", "stmt_foreach", "stmt_switch", "stmt_case", "stmt_default", "stmt_break", "stmt_continue", "stmt_return", @@ -3717,130 +3728,130 @@ namespace xsk { namespace gsc { namespace iw7 { } - const short parser::yypact_ninf_ = -263; + const short parser::yypact_ninf_ = -260; - const short parser::yytable_ninf_ = -205; + const short parser::yytable_ninf_ = -206; const short parser::yypact_[] = { - 34, -263, -263, -22, -22, -28, -263, 19, 34, -263, - -263, -263, -263, -263, -263, -17, -263, -263, -4, 4, - -48, -263, -263, -263, -263, -38, 1180, -263, -263, -263, - 15, 33, -263, -263, -33, -24, -263, 6, -263, -263, - -263, -263, -263, -263, -263, 1180, 630, -38, 1180, 1180, - -15, -16, -263, -263, -263, -263, 2051, -263, -263, -263, - -263, -263, -14, 78, -263, -263, -263, -263, 532, 652, - -263, -263, 678, -263, -263, -263, 713, 727, 756, 866, - -263, -263, 57, 32, -263, -263, -263, -263, -263, -263, - -263, -263, 37, 54, -38, 56, 71, 62, 73, 88, - 90, 93, 1377, 630, -263, 2134, 98, 116, -263, -263, - -263, -263, -263, -263, -263, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 1180, 1180, 1180, 1180, -263, 1244, -38, -263, -263, 94, - 110, 1180, -38, -263, 835, -263, -263, 1180, 1180, -38, - 1180, 1180, -38, 1180, -263, 1180, 1176, 1180, -263, 2016, - 115, 115, 2165, 1321, 948, 948, 271, 271, 271, 271, - 747, 2206, 2175, 84, 84, -263, -263, -263, 1821, -263, - -38, 48, -263, 122, 911, 1180, 119, 125, 1089, 131, - 132, 133, 134, 21, 135, 136, 137, 1116, 138, 143, - 151, -263, 149, 605, 605, -263, -263, -263, 962, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, 152, 153, 154, 156, 157, -263, -263, 1292, - -263, -263, -263, -263, 3, 1861, 49, 172, 1901, 52, - 173, 1941, 1980, 178, 2134, 1180, -263, 122, -263, 1180, - -263, 1038, 2086, -263, 1180, 202, 1180, 29, -38, 1180, - 127, 175, 176, -263, -263, -263, -263, 2121, -263, 1180, - 1180, 1180, -263, -263, -2, -2, -263, -263, -263, -263, - -263, -263, -263, 186, 188, 189, 193, -263, -263, 1180, - 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, - 187, -263, 1180, 190, -263, 1180, 194, 1180, 198, 2134, - 75, -263, -263, 1543, 200, 1577, 184, -263, -263, -263, - 1341, 1, 1611, -263, -263, -263, 83, 85, 1176, 1180, - 1180, 1180, 1180, 2134, 2134, 2134, 2134, 2134, 2134, 2134, - 2134, 2134, 2134, 2134, 201, 86, 204, 89, 206, 1645, - 1180, -263, 1089, 1180, 1089, 1180, 1180, -38, 54, 197, - 199, 1679, 1421, 1465, 1509, 1180, -263, 1180, -263, 1180, - -263, 106, 235, 1713, -263, 2134, 203, 1747, 232, -263, - -263, -263, 207, 209, 1180, 210, 1180, 212, 1180, 107, - 113, 114, -263, 1089, 213, 29, 1089, 1180, -263, -263, - 227, -263, 228, -263, 231, -263, -263, -263, -263, -263, - 237, -263, 1781, 226, 230, 233, 1089, 1089, -263, -263, - -263, -263, -263 + 16, -260, -260, -74, -74, -14, -260, 26, 16, -260, + -260, -260, -260, -260, -260, -33, -260, -260, -25, 4, + -43, -260, -260, -260, -260, -24, 1124, -260, -260, -260, + 21, -17, -260, -260, -40, -5, -260, 22, -260, -260, + -260, -260, -260, -260, -260, 1124, 994, -24, 1124, 1124, + -35, 11, -260, -260, -260, -260, 2038, -260, -260, -260, + -260, -260, 473, 541, -260, -260, -260, -260, 575, 624, + -260, -260, 653, -260, -260, -260, 677, 685, 1032, 1097, + -260, -260, 36, 24, -260, -260, -260, -260, -260, -260, + -260, -260, 23, 57, -24, 68, 69, 70, 84, 99, + 87, 93, 1324, 994, -260, 2121, 102, 107, -260, -260, + -260, -260, -260, -260, -260, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, -260, 1189, -24, -260, -260, -260, + 114, 108, 1124, -24, -260, 783, -260, -260, 1124, 1124, + -24, 1124, 1124, -24, 1124, -260, 1124, 1768, 1124, -260, + 2003, 116, 116, 2152, 1180, 158, 158, 77, 77, 77, + 77, 2162, 989, 1115, 43, 43, -260, -260, -260, 1808, + -260, -24, 7, -260, 115, 829, 1124, 113, 126, 967, + 128, 130, 132, 133, -13, 125, 131, 134, 1059, 135, + 140, 149, -260, 148, 392, 392, -260, -260, -260, 875, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, 144, 153, 154, 155, 157, -260, -260, + 1238, -260, -260, -260, -260, 2, 1848, 47, 169, 1888, + 48, 174, 1928, 1967, 178, 2121, 1124, -260, 115, -260, + 1124, -260, 921, 2073, -260, 1124, 160, 1124, -1, -24, + 1124, 141, 177, 186, -260, -260, -260, -260, 2108, -260, + 1124, 1124, 1124, -260, -260, 30, 30, -260, -260, -260, + -260, -260, -260, -260, 194, 196, 203, 204, -260, -260, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 200, -260, 1124, 202, -260, 1124, 205, 1124, 208, + 2121, 49, -260, -260, 1490, 209, 1524, 201, -260, -260, + -260, 1287, 3, 1558, -260, -260, -260, 51, 55, 1768, + 1124, 1124, 1124, 1124, 2121, 2121, 2121, 2121, 2121, 2121, + 2121, 2121, 2121, 2121, 2121, 214, 61, 215, 65, 216, + 1592, 1124, -260, 967, 1124, 967, 1124, 1124, -24, 57, + 207, 210, 1626, 1368, 1412, 1456, 1124, -260, 1124, -260, + 1124, -260, 67, 245, 1660, -260, 2121, 211, 1694, 246, + -260, -260, -260, 213, 217, 1124, 219, 1124, 221, 1124, + 95, 97, 121, -260, 967, 222, -1, 967, 1124, -260, + -260, 232, -260, 235, -260, 236, -260, -260, -260, -260, + -260, 238, -260, 1728, 231, 234, 237, 967, 967, -260, + -260, -260, -260, -260 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 202, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 203, 204, 0, 0, - 0, 1, 4, 5, 6, 173, 0, 10, 11, 206, - 0, 0, 172, 201, 0, 0, 193, 0, 214, 213, - 195, 196, 197, 198, 199, 0, 175, 0, 0, 0, - 0, 0, 205, 207, 210, 212, 0, 87, 88, 89, + 3, 12, 13, 0, 0, 0, 203, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 204, 205, 0, 0, + 0, 1, 4, 5, 6, 173, 0, 10, 11, 207, + 0, 0, 172, 202, 0, 0, 194, 0, 215, 214, + 196, 197, 198, 199, 200, 0, 175, 0, 0, 0, + 0, 0, 206, 208, 211, 213, 0, 87, 88, 89, 126, 127, 128, 129, 156, 157, 130, 131, 132, 133, 134, 135, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 0, 146, 147, 148, 149, 150, 151, - 152, 153, 0, 0, 0, 0, 204, 0, 0, 204, - 0, 0, 0, 175, 194, 177, 0, 174, 178, 155, - 154, 209, 211, 200, 18, 0, 0, 0, 0, 0, + 152, 153, 0, 0, 0, 0, 205, 0, 0, 205, + 0, 0, 0, 175, 195, 177, 0, 174, 178, 155, + 154, 210, 212, 201, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 158, 159, 204, - 0, 175, 0, 17, 0, 19, 171, 0, 175, 0, - 0, 175, 0, 0, 183, 0, 177, 0, 170, 0, - 119, 120, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 121, 122, 123, 124, 125, 0, 181, - 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 183, 0, 0, 182, 158, 159, + 205, 0, 175, 0, 17, 0, 19, 171, 0, 175, + 0, 0, 175, 0, 0, 184, 0, 177, 0, 170, + 0, 119, 120, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 121, 122, 123, 124, 125, 0, + 181, 0, 0, 174, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 0, 0, 0, 50, 20, 21, 0, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 0, 0, 0, 184, 185, 186, 187, 0, - 188, 189, 190, 191, 192, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 176, 0, 180, 0, 160, 175, - 46, 0, 0, 68, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 79, 80, 81, 83, 0, 84, 175, - 175, 0, 184, 185, 103, 105, 47, 49, 57, 58, - 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, + 0, 0, 48, 0, 0, 0, 50, 20, 21, 0, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 0, 0, 0, 185, 186, 187, 188, + 0, 189, 190, 191, 192, 193, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 176, 0, 180, 0, 160, + 175, 46, 0, 0, 68, 0, 0, 0, 54, 0, + 0, 0, 0, 0, 79, 80, 81, 83, 0, 84, + 175, 175, 0, 185, 186, 103, 105, 47, 49, 57, + 58, 59, 55, 56, 0, 0, 0, 0, 104, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 162, 175, 0, 164, 175, 0, 0, 0, 107, - 0, 45, 63, 0, 0, 0, 0, 51, 52, 53, - 0, 0, 0, 78, 77, 82, 0, 0, 0, 0, - 0, 0, 0, 92, 98, 99, 100, 101, 102, 93, - 94, 95, 97, 96, 0, 0, 0, 0, 0, 0, - 175, 161, 0, 0, 0, 91, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 163, 175, 165, 175, - 208, 0, 69, 0, 71, 90, 0, 0, 0, 76, - 85, 86, 0, 0, 175, 0, 175, 0, 175, 0, - 0, 0, 166, 0, 0, 54, 0, 0, 60, 62, - 174, 65, 174, 67, 174, 167, 168, 169, 70, 72, - 0, 74, 0, 0, 0, 0, 0, 0, 61, 64, - 66, 73, 75 + 0, 0, 162, 175, 0, 164, 175, 0, 0, 0, + 107, 0, 45, 63, 0, 0, 0, 0, 51, 52, + 53, 0, 0, 0, 78, 77, 82, 0, 0, 0, + 0, 0, 0, 0, 92, 98, 99, 100, 101, 102, + 93, 94, 95, 97, 96, 0, 0, 0, 0, 0, + 0, 175, 161, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 175, 163, 175, 165, + 175, 209, 0, 69, 0, 71, 90, 0, 0, 0, + 76, 85, 86, 0, 0, 175, 0, 175, 0, 175, + 0, 0, 0, 166, 0, 0, 54, 0, 0, 60, + 62, 174, 65, 174, 67, 174, 167, 168, 169, 70, + 72, 0, 74, 0, 0, 0, 0, 0, 0, 61, + 64, 66, 73, 75 }; const short parser::yypgoto_[] = { - -263, -263, -263, 279, 281, 282, -263, -263, -263, -181, - -263, -91, 108, -114, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, - -263, -263, -263, -263, -263, -263, -263, 185, -263, -262, - -257, -251, -263, -263, -263, -263, -263, -82, 70, -66, - -61, -263, -263, -120, -45, -263, 181, 192, -263, -263, - 253, -263, -263, -263, 327, 365, 373, 421, -263, -263, - 0, 9, -263, -11, -263, -263, -263, 102, -263, -263 + -260, -260, -260, 281, 284, 288, -260, -260, -260, -172, + -260, -91, 112, -108, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, 185, -260, -259, + -257, -250, -260, -260, -260, -260, -260, -82, -72, -66, + -58, -260, -260, 321, -45, -260, -37, 192, -260, -260, + 240, -260, -260, -260, 253, 327, 355, 365, -260, -260, + 0, 9, -260, -15, -260, -260, -260, 105, -260, -260 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 205, - 206, 207, 208, 326, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 105, 386, 232, - 233, 234, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 31, 106, 182, 67, 68, 69, 70, 71, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, + 207, 208, 209, 327, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 105, 387, 233, + 234, 235, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 }; @@ -3848,547 +3859,537 @@ namespace xsk { namespace gsc { namespace iw7 { const short parser::yytable_[] = { - 15, 107, 145, 17, 17, 327, 137, 265, 15, 30, - 328, 138, 18, 19, 95, 20, 329, -184, -184, 21, - -184, 181, 366, 98, -184, 32, 25, 287, 246, 34, - 35, 249, 37, -184, 96, 99, -184, 1, 2, 3, - 4, 5, 29, 97, 100, 135, 141, 108, 136, 27, - 367, 6, 26, 101, -204, 16, 6, 28, 107, 92, - 34, 35, 235, 37, 16, 6, 16, 6, 41, 42, - 43, 44, 139, 113, -184, -184, 202, 93, 111, 112, - 287, 140, 94, 142, 203, 204, 16, 6, -192, -192, - 143, -192, 258, 311, 146, -192, 314, 157, 157, 144, - 141, 157, 235, 147, -192, 270, 235, -192, -204, -185, - -185, 29, -185, 149, 148, 55, -185, 16, 6, 361, - 150, 282, 282, 6, 157, -185, 235, 369, -185, 370, - 376, 151, 157, 378, 157, 157, 179, 141, 157, 320, - 153, 152, 183, 327, 244, -192, -192, 157, 328, 247, - 402, 415, 250, 140, 329, 157, 157, 416, 417, 336, - 337, 180, 157, 157, 158, 259, -185, -185, 264, 131, - 132, 133, 263, 137, 266, 267, 268, 269, 138, 235, - 257, 382, 271, 384, 244, 282, 279, 273, 244, 274, - 275, 278, 355, 140, 280, 357, 281, 140, 129, 130, - 131, 132, 133, 244, 244, 288, 289, 290, 244, 291, - 292, 56, 140, 140, 236, 312, 315, 140, 137, 137, - 324, 112, 418, 138, 138, 421, 318, 333, 334, 339, - 102, 340, 341, 109, 110, 354, 342, 365, 356, 139, - 381, 360, 358, 363, 375, 431, 432, 377, 140, 379, - 390, 403, 391, 407, 236, 399, 405, 400, 236, 401, - 408, 244, 409, 411, 137, 413, 419, 244, 331, 138, - 140, 423, 424, 283, 283, 425, 140, 389, 236, 428, - 235, 426, 235, 429, 139, 139, 430, 22, 156, 23, - 24, 420, 261, 140, 140, 272, 0, 0, 0, 0, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 0, - 178, 235, 0, 282, 235, 237, 0, 0, 116, 117, - 139, 236, 245, 0, 0, 248, 238, 283, 251, 140, - 252, 0, 254, 0, 235, 235, 0, 0, 0, 410, - 0, 412, 0, 414, 129, 130, 131, 132, 133, 0, - 0, 0, 244, 0, 244, 237, 0, 388, 0, 237, - 262, 140, 0, 140, 0, 0, 238, 0, 0, 0, - 238, 0, 277, 0, 237, 237, 0, 0, 0, 237, - 0, 0, 0, 0, 0, 238, 238, 239, 0, 0, - 238, 0, 0, 244, 0, 244, 244, 0, 0, 0, - 0, 0, 140, 0, 140, 140, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 244, 244, 0, 0, - 0, 0, 236, 0, 236, 140, 140, 239, 0, 0, - 319, 239, 237, 0, 0, 0, 0, 0, 237, 323, - 0, 325, 0, 238, 332, 0, 284, 285, 0, 238, - 0, 239, 0, 0, 0, 0, 338, 0, 0, 0, - 0, 240, 0, 236, 0, 283, 236, 0, 0, 0, - 0, 0, 0, 0, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 0, 236, 236, 0, 0, - 0, 0, 359, 0, 0, 0, 0, 0, 0, 241, - 0, 240, 0, 0, 239, 240, 0, 242, 0, 0, - 330, 0, 0, 0, 371, 372, 373, 374, 0, 0, - 240, 240, 0, 0, 0, 240, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 237, 0, 0, 383, 241, - 385, 387, 0, 241, 238, 0, 238, 242, 0, 0, - 0, 242, 0, -186, -186, 243, -186, 0, 241, 241, - -186, 0, 0, 241, 0, 0, 242, 242, 0, -186, - 0, 242, -186, 0, 237, 0, 237, 237, 240, 0, - 0, 0, 422, 0, 240, 238, 0, 238, 238, 0, - 0, 0, 0, 0, 0, 243, 0, 237, 237, 243, - 0, 0, 0, 0, 0, 239, 0, 239, 238, 238, - -186, -186, 0, 0, 243, 243, 241, 0, 0, 243, - 0, 0, 241, 0, 242, 0, 34, 35, 33, 37, - 242, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 0, 0, 202, 0, 0, 0, 239, 0, 330, 239, - 0, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 103, 104, 239, - 239, 47, 243, -187, -187, 0, -187, 0, 243, 240, - -187, 240, 0, 16, 6, 0, 0, 48, 49, -187, - 0, 0, -187, 0, 0, 0, 0, 0, 0, 34, - 35, 0, 37, 0, 50, 0, 134, 51, 16, 6, - 29, 52, 53, 54, 55, 135, 0, 241, 136, 241, - 240, 0, 240, 240, 0, 242, 0, 242, 0, 0, - -187, -187, 0, 0, -188, -188, 0, -188, 0, 0, - 0, -188, 0, 240, 240, 0, 0, 0, -189, -189, - -188, -189, 0, -188, 0, -189, 16, 6, 241, 0, - 241, 241, 0, 0, -189, 0, 242, -189, 242, 242, - 0, 0, 0, 243, 0, 243, 0, -190, -190, 0, - -190, 241, 241, 0, -190, 0, 0, 0, 0, 242, - 242, -188, -188, -190, 116, 117, -190, 0, 120, 121, - 122, 123, 124, 125, 0, -189, -189, 0, 0, 0, - 0, 0, 0, 0, 243, 0, 243, 243, 127, 128, - 129, 130, 131, 132, 133, 0, 0, 0, 184, 0, - 0, 0, 0, 0, -190, -190, 185, 243, 243, 186, - 187, 0, 188, 189, 190, 191, 0, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 34, 35, 0, 37, - 0, 0, 0, 0, 41, 42, 43, 44, 0, 0, - 144, 201, 202, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 0, 0, 0, 0, 0, -191, -191, 0, - -191, 0, 0, 0, -191, 0, 0, 0, 0, 0, - 0, 0, 0, -191, 184, 260, -191, 0, 0, 0, - 0, 0, 185, 16, 6, 186, 187, 0, 188, 189, - 190, 191, 0, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 34, 35, 0, 37, 0, 0, 0, 0, - 41, 42, 43, 44, -191, -191, 144, 0, 202, 0, - 0, 0, 0, 0, 0, 184, 203, 204, 0, 0, - 0, 0, 0, 185, 0, 0, 186, 187, 0, 188, - 189, 190, 191, 0, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 34, 35, 0, 37, 0, 0, 16, - 6, 41, 42, 43, 44, 116, 117, 144, 286, 202, - 0, 122, 123, 124, 125, 0, 0, 203, 204, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 130, 131, 132, 133, 0, 0, 0, 0, - 0, 184, 321, 0, 0, 0, 0, 0, 0, 185, - 16, 6, 186, 187, 0, 188, 189, 190, 191, 0, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 34, - 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, - 44, 0, 0, 144, 0, 202, 0, 0, 0, 0, - 0, 0, 184, 203, 204, 0, 0, 0, 0, 0, - 185, 0, 0, 186, 187, 0, 188, 189, 190, 191, - 0, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 34, 35, 0, 37, 33, 0, 16, 6, 41, 42, - 43, 44, 0, 0, 144, 0, 202, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 0, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 0, 0, 0, 46, 0, 0, 0, 47, 0, 276, - 0, 0, 0, 0, 0, 0, 0, 16, 6, 0, - 0, 0, 0, 48, 49, 0, 0, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 253, 0, 0, 46, 0, 0, - 115, 47, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 48, 49, 0, - 0, 0, 33, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 50, 0, 0, 51, 16, 6, + 15, 107, 146, 17, 17, 30, 138, 95, 15, 328, + 25, 329, 18, 19, 139, 16, 6, 266, 330, 1, + 2, 3, 4, 5, 367, 32, 21, 93, 27, 20, + 34, 35, 94, 37, 96, 99, 26, 288, 41, 42, + 43, 44, 98, 97, 100, 142, 203, 108, 29, 16, + 6, 259, 368, -205, 204, 205, 158, 28, 107, 111, + 112, 34, 35, 236, 37, 92, 6, -193, -193, 101, + -193, 271, 140, 237, -193, 143, 144, 135, 29, 142, + 136, 141, 55, -193, 16, 6, -193, -205, 16, 6, + 288, 312, 315, 362, 147, 370, 158, 158, 158, 371, + 158, 113, 145, 236, 158, 377, 6, 236, 238, 379, + 158, 403, 149, 237, 158, 148, 158, 237, 137, 16, + 6, 150, 283, 283, -193, -193, -193, 236, 131, 132, + 133, 151, 284, 284, 116, 117, 180, 237, 153, 416, + 154, 417, 152, 184, 158, 245, 158, 328, 238, 329, + 248, 158, 238, 251, 141, 159, 330, 142, 260, 181, + 129, 130, 131, 132, 133, 418, 264, 238, 238, 265, + 158, 267, 238, 268, 138, 269, 270, 274, 325, 272, + 236, 258, 139, 280, 275, 245, 283, 276, 279, 245, + 237, 383, 281, 385, 141, 282, 284, 289, 141, 129, + 130, 131, 132, 133, 245, 245, 290, 291, 292, 245, + 293, 56, 313, 141, 141, 116, 117, 316, 141, 138, + 138, 122, 123, 124, 125, 238, 319, 139, 139, 334, + 102, 238, 419, 109, 110, 422, 112, 340, 335, 341, + 140, 129, 130, 131, 132, 133, 342, 343, 355, 141, + 357, 361, 364, 359, 366, 432, 433, 376, 378, 380, + 391, 404, 245, 392, 406, 138, 409, 408, 245, 332, + 410, 141, 412, 139, 414, 420, 424, 141, 390, 425, + 426, 236, 427, 236, 429, 140, 140, 430, 157, 22, + 431, 237, 23, 237, 141, 141, 24, 262, 421, 273, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 0, + 179, 0, 236, 0, 283, 236, 238, 0, 238, 0, + 0, 140, 237, 246, 284, 237, 249, 239, 0, 252, + 141, 253, 0, 255, 0, 236, 236, 0, 0, 0, + 411, 0, 413, 0, 415, 237, 237, 0, 0, 0, + 0, 0, 0, 245, 0, 245, 0, 238, 389, 238, + 238, 263, 141, 0, 141, 0, 0, 239, 0, 0, + 0, 239, 0, 278, 0, 240, 0, 0, 0, 0, + 238, 238, 0, 0, 0, 0, 239, 239, 241, 0, + 0, 239, 0, 0, 245, 0, 245, 245, 0, 0, + 0, 0, 0, 141, 0, 141, 141, 0, 0, 0, + 0, 0, 0, 34, 35, 240, 37, 245, 245, 240, + 0, 41, 42, 43, 44, 0, 141, 141, 241, 203, + 0, 320, 241, 0, 285, 286, 0, 0, 0, 240, + 324, 0, 326, 0, 239, 333, 0, 241, 241, 0, + 239, 0, 241, 182, 0, 0, 0, 339, 0, 0, + 247, 0, 242, 250, 0, 0, 0, 0, 0, 0, + 0, 16, 6, 0, 0, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 0, 0, 0, 0, + 243, 0, 240, 360, -185, -185, 0, -185, 331, 0, + 244, -185, 242, 0, 0, 241, 242, 0, 0, 0, + -185, 241, 0, -185, 0, 372, 373, 374, 375, 0, + 0, 242, 242, 0, 0, 0, 242, 0, 0, 0, + 243, 0, 0, 0, 243, 0, 0, 0, 0, 384, + 244, 386, 388, 0, 244, 239, 0, 239, 0, 243, + 243, -185, -185, -185, 243, 0, 0, 0, 0, 244, + 244, 0, -186, -186, 244, -186, 0, 0, 0, -186, + 0, 321, 0, 0, 0, 0, 0, 0, -186, 242, + 0, -186, 0, 423, 0, 242, 239, 0, 239, 239, + 0, 337, 338, 240, 0, 240, -187, -187, 0, -187, + 0, 0, 0, -187, 0, 0, 241, 243, 241, 239, + 239, 0, -187, 243, 0, -187, 0, 244, 0, -186, + -186, -186, 0, 244, 356, 0, 0, 358, 0, 0, + 0, 0, 0, 0, 240, 0, 331, 240, 0, 0, + 0, 0, 0, 0, 0, -188, -188, 241, -188, 241, + 241, 0, -188, -187, -187, -187, 0, 240, 240, 0, + 0, -188, 0, 0, -188, 0, 0, 0, 0, 0, + 241, 241, 382, 0, 34, 35, 0, 37, 0, 0, + 242, 134, 242, 0, 0, 0, 0, 400, 0, 401, + 135, 402, 0, 136, 0, 0, 0, 0, -189, -189, + 0, -189, -188, -188, -188, -189, -190, -190, 243, -190, + 243, 0, 0, -190, -189, 0, 0, -189, 244, 0, + 244, 242, -190, 242, 242, -190, 0, 0, 0, 0, + 0, 137, 16, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 242, 242, 0, 0, 0, 243, + 0, 243, 243, 0, 0, -189, -189, -189, 0, 244, + 0, 244, 244, -190, -190, -190, 0, 0, 0, 0, + 0, 0, 243, 243, 0, 0, 185, 0, 0, 0, + 0, 0, 244, 244, 186, 0, 0, 187, 188, 0, + 189, 190, 191, 192, 0, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 34, 35, 0, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, 145, 202, + 203, 0, 185, 261, 0, 0, 0, 0, 204, 205, + 186, 0, 0, 187, 188, 0, 189, 190, 191, 192, + 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 34, 35, 0, 37, 0, 0, 0, 0, 41, 42, + 43, 44, 16, 6, 145, 0, 203, 0, 185, 0, + 0, 0, 0, 0, 204, 205, 186, 0, 0, 187, + 188, 0, 189, 190, 191, 192, 0, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 34, 35, 0, 37, + 0, 0, 0, 0, 41, 42, 43, 44, 16, 6, + 145, 287, 203, 0, 185, 322, 0, 0, 0, 0, + 204, 205, 186, 0, 0, 187, 188, 0, 189, 190, + 191, 192, 0, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 34, 35, 0, 37, 0, 0, 0, 0, + 41, 42, 43, 44, 16, 6, 145, 0, 203, 0, + 185, 0, 0, 0, 0, 0, 204, 205, 186, 0, + 0, 187, 188, 0, 189, 190, 191, 192, 0, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, + 0, 37, 33, 0, 0, 0, 41, 42, 43, 44, + 16, 6, 145, 0, 203, 0, 0, 0, 0, 0, + 0, 0, 204, 205, 0, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, + 0, 103, 104, 0, 0, 47, 116, 117, 0, 0, + 120, 121, 122, 123, 124, 125, 16, 6, 0, 0, + 0, 48, 49, -191, -191, 0, -191, 33, 0, 0, + -191, 0, 129, 130, 131, 132, 133, 0, 50, -191, + 0, 51, -191, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 277, 0, 0, 0, 0, 0, 0, 0, + -191, -191, -191, 0, 0, 0, 48, 49, -192, -192, + 0, -192, 33, 0, 0, -192, 0, 0, 0, 0, + 0, 0, 0, 50, -192, 0, 51, -192, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 103, 0, 0, 0, 47, 0, 0, 0, 0, - 0, 293, 294, 0, 295, 296, 0, 0, 0, 0, - 0, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 34, 35, 0, 37, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 135, - 0, 0, 136, 0, 0, 0, 0, 297, 298, 0, + 0, 46, 116, 117, 0, 47, 120, 121, 122, 123, + 124, 125, 0, 0, 0, -192, -192, -192, 0, 0, + 0, 48, 49, 0, 0, 0, 127, 33, 129, 130, + 131, 132, 133, 0, 0, 0, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 103, 116, 117, 0, + 47, 120, 121, 122, 123, 124, 125, 294, 295, 0, + 296, 297, 0, 0, 0, 0, 48, 49, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 0, 34, + 35, 0, 37, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 135, 0, 0, 136, 0, + 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 34, 35, + 0, 37, 0, 0, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 135, 0, 0, 136, 0, 0, + 0, 0, 298, 299, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 0, 155, 0, + 0, 0, 0, 156, 0, 137, 16, 6, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 394, 0, 0, 0, 0, 395, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 396, 0, 0, 0, + 0, 397, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 34, 35, 0, 37, 0, 0, 116, 117, - 16, 6, 120, 121, 122, 123, 124, 125, 135, 0, - 0, 136, 0, 0, 0, 0, 297, 298, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 154, 0, 0, 0, 0, 155, 0, 0, 16, - 6, 115, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 398, 0, 0, 0, 0, 399, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 363, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 369, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 381, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 393, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 405, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 407, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 428, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 254, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 257, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 311, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 314, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 317, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 393, 0, 0, 0, 0, - 394, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 395, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 397, 0, 0, 0, 0, 398, 0, - 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 362, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 129, 130, 131, 132, 133, 256, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 364, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 380, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 404, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 323, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 406, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 256, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 310, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 313, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 316, - 0, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 317, - 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 127, 128, 129, 130, 131, 132, 133, 255, 0, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 322, - 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, - 130, 131, 132, 133, 335, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, - 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, - 132, 133, 116, 117, 0, 119, 120, 121, 122, 123, - 124, 125, 116, 117, 0, 0, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, - 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, - 130, 131, 132, 133 + 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, + 133, 336, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, + 0, 126, 127, 128, 129, 130, 131, 132, 133, 116, + 117, 0, 119, 120, 121, 122, 123, 124, 125, 116, + 117, 0, 0, 120, 121, 122, 123, 124, 125, 0, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 0, 0, 0, 127, 128, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 93, 3, 4, 267, 72, 188, 8, 20, - 267, 72, 3, 4, 47, 43, 267, 31, 32, 0, - 34, 141, 21, 47, 38, 25, 43, 208, 148, 31, - 32, 151, 34, 47, 34, 35, 50, 3, 4, 5, - 6, 7, 90, 34, 35, 47, 43, 47, 50, 53, - 49, 89, 69, 47, 51, 88, 89, 53, 103, 44, - 31, 32, 144, 34, 88, 89, 88, 89, 39, 40, - 41, 42, 72, 89, 88, 89, 47, 44, 93, 94, - 261, 72, 49, 51, 55, 56, 88, 89, 31, 32, - 53, 34, 44, 44, 94, 38, 44, 49, 49, 45, - 43, 49, 184, 47, 47, 84, 188, 50, 51, 31, - 32, 90, 34, 51, 43, 94, 38, 88, 89, 44, - 47, 203, 204, 89, 49, 47, 208, 44, 50, 44, - 44, 43, 49, 44, 49, 49, 136, 43, 49, 259, - 47, 51, 142, 405, 144, 88, 89, 49, 405, 149, - 44, 44, 152, 144, 405, 49, 49, 44, 44, 279, - 280, 51, 49, 49, 48, 43, 88, 89, 43, 85, - 86, 87, 53, 239, 43, 43, 43, 43, 239, 261, - 180, 362, 193, 364, 184, 267, 43, 52, 188, 53, - 53, 53, 312, 184, 43, 315, 47, 188, 83, 84, - 85, 86, 87, 203, 204, 53, 53, 53, 208, 53, - 53, 26, 203, 204, 144, 43, 43, 208, 284, 285, - 18, 94, 403, 284, 285, 406, 48, 52, 52, 43, - 45, 43, 43, 48, 49, 48, 43, 53, 48, 239, - 360, 43, 48, 43, 43, 426, 427, 43, 239, 43, - 53, 16, 53, 21, 184, 375, 53, 377, 188, 379, - 53, 261, 53, 53, 330, 53, 53, 267, 268, 330, - 261, 44, 44, 203, 204, 44, 267, 368, 208, 53, - 362, 44, 364, 53, 284, 285, 53, 8, 103, 8, - 8, 405, 184, 284, 285, 193, -1, -1, -1, -1, + 0, 46, 93, 3, 4, 20, 72, 47, 8, 268, + 43, 268, 3, 4, 72, 89, 90, 189, 268, 3, + 4, 5, 6, 7, 21, 25, 0, 44, 53, 43, + 31, 32, 49, 34, 34, 35, 69, 209, 39, 40, + 41, 42, 47, 34, 35, 43, 47, 47, 91, 89, + 90, 44, 49, 51, 55, 56, 49, 53, 103, 94, + 95, 31, 32, 145, 34, 44, 90, 31, 32, 47, + 34, 84, 72, 145, 38, 51, 53, 47, 91, 43, + 50, 72, 95, 47, 89, 90, 50, 51, 89, 90, + 262, 44, 44, 44, 94, 44, 49, 49, 49, 44, + 49, 90, 45, 185, 49, 44, 90, 189, 145, 44, + 49, 44, 43, 185, 49, 47, 49, 189, 88, 89, + 90, 51, 204, 205, 88, 89, 90, 209, 85, 86, + 87, 47, 204, 205, 57, 58, 136, 209, 51, 44, + 47, 44, 43, 143, 49, 145, 49, 406, 185, 406, + 150, 49, 189, 153, 145, 48, 406, 43, 43, 51, + 83, 84, 85, 86, 87, 44, 53, 204, 205, 43, + 49, 43, 209, 43, 240, 43, 43, 52, 18, 194, + 262, 181, 240, 43, 53, 185, 268, 53, 53, 189, + 262, 363, 43, 365, 185, 47, 268, 53, 189, 83, + 84, 85, 86, 87, 204, 205, 53, 53, 53, 209, + 53, 26, 43, 204, 205, 57, 58, 43, 209, 285, + 286, 63, 64, 65, 66, 262, 48, 285, 286, 52, + 45, 268, 404, 48, 49, 407, 95, 43, 52, 43, + 240, 83, 84, 85, 86, 87, 43, 43, 48, 240, + 48, 43, 43, 48, 53, 427, 428, 43, 43, 43, + 53, 16, 262, 53, 53, 331, 53, 21, 268, 269, + 53, 262, 53, 331, 53, 53, 44, 268, 369, 44, + 44, 363, 44, 365, 53, 285, 286, 53, 103, 8, + 53, 363, 8, 365, 285, 286, 8, 185, 406, 194, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 403, -1, 405, 406, 144, -1, -1, 57, 58, - 330, 261, 147, -1, -1, 150, 144, 267, 153, 330, - 155, -1, 157, -1, 426, 427, -1, -1, -1, 394, - -1, 396, -1, 398, 83, 84, 85, 86, 87, -1, - -1, -1, 362, -1, 364, 184, -1, 367, -1, 188, - 185, 362, -1, 364, -1, -1, 184, -1, -1, -1, - 188, -1, 197, -1, 203, 204, -1, -1, -1, 208, - -1, -1, -1, -1, -1, 203, 204, 144, -1, -1, - 208, -1, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, 403, -1, 405, 406, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 426, 427, -1, -1, - -1, -1, 362, -1, 364, 426, 427, 184, -1, -1, - 255, 188, 261, -1, -1, -1, -1, -1, 267, 264, - -1, 266, -1, 261, 269, -1, 203, 204, -1, 267, - -1, 208, -1, -1, -1, -1, 281, -1, -1, -1, - -1, 144, -1, 403, -1, 405, 406, -1, -1, -1, - -1, -1, -1, -1, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, -1, 426, 427, -1, -1, - -1, -1, 317, -1, -1, -1, -1, -1, -1, 144, - -1, 184, -1, -1, 261, 188, -1, 144, -1, -1, - 267, -1, -1, -1, 339, 340, 341, 342, -1, -1, - 203, 204, -1, -1, -1, 208, -1, -1, -1, -1, - -1, -1, -1, 362, -1, 364, -1, -1, 363, 184, - 365, 366, -1, 188, 362, -1, 364, 184, -1, -1, - -1, 188, -1, 31, 32, 144, 34, -1, 203, 204, - 38, -1, -1, 208, -1, -1, 203, 204, -1, 47, - -1, 208, 50, -1, 403, -1, 405, 406, 261, -1, - -1, -1, 407, -1, 267, 403, -1, 405, 406, -1, - -1, -1, -1, -1, -1, 184, -1, 426, 427, 188, - -1, -1, -1, -1, -1, 362, -1, 364, 426, 427, - 88, 89, -1, -1, 203, 204, 261, -1, -1, 208, - -1, -1, 267, -1, 261, -1, 31, 32, 8, 34, - 267, -1, -1, -1, 39, 40, 41, 42, -1, -1, - -1, -1, 47, -1, -1, -1, 403, -1, 405, 406, - -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, -1, -1, -1, 47, 48, 426, - 427, 51, 261, 31, 32, -1, 34, -1, 267, 362, - 38, 364, -1, 88, 89, -1, -1, 67, 68, 47, - -1, -1, 50, -1, -1, -1, -1, -1, -1, 31, - 32, -1, 34, -1, 84, -1, 38, 87, 88, 89, - 90, 91, 92, 93, 94, 47, -1, 362, 50, 364, - 403, -1, 405, 406, -1, 362, -1, 364, -1, -1, - 88, 89, -1, -1, 31, 32, -1, 34, -1, -1, - -1, 38, -1, 426, 427, -1, -1, -1, 31, 32, - 47, 34, -1, 50, -1, 38, 88, 89, 403, -1, - 405, 406, -1, -1, 47, -1, 403, 50, 405, 406, - -1, -1, -1, 362, -1, 364, -1, 31, 32, -1, - 34, 426, 427, -1, 38, -1, -1, -1, -1, 426, - 427, 88, 89, 47, 57, 58, 50, -1, 61, 62, - 63, 64, 65, 66, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, 403, -1, 405, 406, 81, 82, - 83, 84, 85, 86, 87, -1, -1, -1, 3, -1, - -1, -1, -1, -1, 88, 89, 11, 426, 427, 14, - 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, - -1, -1, -1, -1, 39, 40, 41, 42, -1, -1, - 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, - 55, 56, -1, -1, -1, -1, -1, 31, 32, -1, - 34, -1, -1, -1, 38, -1, -1, -1, -1, -1, - -1, -1, -1, 47, 3, 4, 50, -1, -1, -1, - -1, -1, 11, 88, 89, 14, 15, -1, 17, 18, - 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, - 39, 40, 41, 42, 88, 89, 45, -1, 47, -1, - -1, -1, -1, -1, -1, 3, 55, 56, -1, -1, - -1, -1, -1, 11, -1, -1, 14, 15, -1, 17, - 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, -1, 34, -1, -1, 88, - 89, 39, 40, 41, 42, 57, 58, 45, 46, 47, - -1, 63, 64, 65, 66, -1, -1, 55, 56, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 83, 84, 85, 86, 87, -1, -1, -1, -1, - -1, 3, 4, -1, -1, -1, -1, -1, -1, 11, - 88, 89, 14, 15, -1, 17, 18, 19, 20, -1, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, 34, -1, -1, -1, -1, 39, 40, 41, - 42, -1, -1, 45, -1, 47, -1, -1, -1, -1, - -1, -1, 3, 55, 56, -1, -1, -1, -1, -1, + 135, -1, 404, -1, 406, 407, 363, -1, 365, -1, + -1, 331, 404, 148, 406, 407, 151, 145, -1, 154, + 331, 156, -1, 158, -1, 427, 428, -1, -1, -1, + 395, -1, 397, -1, 399, 427, 428, -1, -1, -1, + -1, -1, -1, 363, -1, 365, -1, 404, 368, 406, + 407, 186, 363, -1, 365, -1, -1, 185, -1, -1, + -1, 189, -1, 198, -1, 145, -1, -1, -1, -1, + 427, 428, -1, -1, -1, -1, 204, 205, 145, -1, + -1, 209, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, 404, -1, 406, 407, -1, -1, -1, + -1, -1, -1, 31, 32, 185, 34, 427, 428, 189, + -1, 39, 40, 41, 42, -1, 427, 428, 185, 47, + -1, 256, 189, -1, 204, 205, -1, -1, -1, 209, + 265, -1, 267, -1, 262, 270, -1, 204, 205, -1, + 268, -1, 209, 142, -1, -1, -1, 282, -1, -1, + 149, -1, 145, 152, -1, -1, -1, -1, -1, -1, + -1, 89, 90, -1, -1, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, -1, -1, -1, -1, + 145, -1, 262, 318, 31, 32, -1, 34, 268, -1, + 145, 38, 185, -1, -1, 262, 189, -1, -1, -1, + 47, 268, -1, 50, -1, 340, 341, 342, 343, -1, + -1, 204, 205, -1, -1, -1, 209, -1, -1, -1, + 185, -1, -1, -1, 189, -1, -1, -1, -1, 364, + 185, 366, 367, -1, 189, 363, -1, 365, -1, 204, + 205, 88, 89, 90, 209, -1, -1, -1, -1, 204, + 205, -1, 31, 32, 209, 34, -1, -1, -1, 38, + -1, 260, -1, -1, -1, -1, -1, -1, 47, 262, + -1, 50, -1, 408, -1, 268, 404, -1, 406, 407, + -1, 280, 281, 363, -1, 365, 31, 32, -1, 34, + -1, -1, -1, 38, -1, -1, 363, 262, 365, 427, + 428, -1, 47, 268, -1, 50, -1, 262, -1, 88, + 89, 90, -1, 268, 313, -1, -1, 316, -1, -1, + -1, -1, -1, -1, 404, -1, 406, 407, -1, -1, + -1, -1, -1, -1, -1, 31, 32, 404, 34, 406, + 407, -1, 38, 88, 89, 90, -1, 427, 428, -1, + -1, 47, -1, -1, 50, -1, -1, -1, -1, -1, + 427, 428, 361, -1, 31, 32, -1, 34, -1, -1, + 363, 38, 365, -1, -1, -1, -1, 376, -1, 378, + 47, 380, -1, 50, -1, -1, -1, -1, 31, 32, + -1, 34, 88, 89, 90, 38, 31, 32, 363, 34, + 365, -1, -1, 38, 47, -1, -1, 50, 363, -1, + 365, 404, 47, 406, 407, 50, -1, -1, -1, -1, + -1, 88, 89, 90, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 427, 428, -1, -1, -1, 404, + -1, 406, 407, -1, -1, 88, 89, 90, -1, 404, + -1, 406, 407, 88, 89, 90, -1, -1, -1, -1, + -1, -1, 427, 428, -1, -1, 3, -1, -1, -1, + -1, -1, 427, 428, 11, -1, -1, 14, 15, -1, + 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, -1, 34, -1, -1, + -1, -1, 39, 40, 41, 42, -1, -1, 45, 46, + 47, -1, 3, 4, -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 8, -1, 88, 89, 39, 40, - 41, 42, -1, -1, 45, -1, 47, -1, -1, -1, - -1, -1, -1, -1, 55, 56, -1, 31, 32, 33, - 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, - -1, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, -1, -1, -1, -1, -1, 88, 89, -1, - -1, -1, -1, 67, 68, -1, -1, -1, 8, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 84, -1, -1, 87, 88, 89, 90, 91, 92, 93, - 94, 31, 32, 33, 34, 35, 36, 37, -1, 39, - 40, 41, 42, 43, 48, -1, -1, 47, -1, -1, - 54, 51, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, 67, 68, -1, - -1, -1, 8, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 84, -1, -1, 87, 88, 89, - 90, 91, 92, 93, 94, 31, 32, 33, 34, 35, + 31, 32, -1, 34, -1, -1, -1, -1, 39, 40, + 41, 42, 89, 90, 45, -1, 47, -1, 3, -1, + -1, -1, -1, -1, 55, 56, 11, -1, -1, 14, + 15, -1, 17, 18, 19, 20, -1, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, -1, 34, + -1, -1, -1, -1, 39, 40, 41, 42, 89, 90, + 45, 46, 47, -1, 3, 4, -1, -1, -1, -1, + 55, 56, 11, -1, -1, 14, 15, -1, 17, 18, + 19, 20, -1, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, -1, 34, -1, -1, -1, -1, + 39, 40, 41, 42, 89, 90, 45, -1, 47, -1, + 3, -1, -1, -1, -1, -1, 55, 56, 11, -1, + -1, 14, 15, -1, 17, 18, 19, 20, -1, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + -1, 34, 8, -1, -1, -1, 39, 40, 41, 42, + 89, 90, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, 55, 56, -1, 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, - -1, 47, -1, -1, -1, 51, -1, -1, -1, -1, - -1, 9, 10, -1, 12, 13, -1, -1, -1, -1, - -1, 67, 68, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 31, 32, -1, 34, -1, 84, -1, - -1, 87, 88, 89, 90, 91, 92, 93, 94, 47, - -1, -1, 50, -1, -1, -1, -1, 55, 56, -1, + -1, 47, 48, -1, -1, 51, 57, 58, -1, -1, + 61, 62, 63, 64, 65, 66, 89, 90, -1, -1, + -1, 67, 68, 31, 32, -1, 34, 8, -1, -1, + 38, -1, 83, 84, 85, 86, 87, -1, 84, 47, + -1, 87, 50, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, -1, -1, -1, + 51, -1, 53, -1, -1, -1, -1, -1, -1, -1, + 88, 89, 90, -1, -1, -1, 67, 68, 31, 32, + -1, 34, 8, -1, -1, 38, -1, -1, -1, -1, + -1, -1, -1, 84, 47, -1, 87, 50, 89, 90, + 91, 92, 93, 94, 95, 31, 32, 33, 34, 35, + 36, 37, -1, 39, 40, 41, 42, 43, -1, -1, + -1, 47, 57, 58, -1, 51, 61, 62, 63, 64, + 65, 66, -1, -1, -1, 88, 89, 90, -1, -1, + -1, 67, 68, -1, -1, -1, 81, 8, 83, 84, + 85, 86, 87, -1, -1, -1, -1, -1, 84, -1, + -1, 87, -1, 89, 90, 91, 92, 93, 94, 95, + 31, 32, 33, 34, 35, 36, 37, -1, 39, 40, + 41, 42, 43, -1, -1, -1, 47, 57, 58, -1, + 51, 61, 62, 63, 64, 65, 66, 9, 10, -1, + 12, 13, -1, -1, -1, -1, 67, 68, -1, -1, + 80, 81, 82, 83, 84, 85, 86, 87, -1, 31, + 32, -1, 34, 84, -1, -1, 87, -1, 89, 90, + 91, 92, 93, 94, 95, 47, -1, -1, 50, -1, + -1, -1, -1, 55, 56, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 31, 32, + -1, 34, -1, -1, -1, -1, 88, 89, 90, -1, + -1, -1, -1, -1, 47, -1, -1, 50, -1, -1, + -1, -1, 55, 56, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, -1, 44, -1, + -1, -1, -1, 49, -1, 88, 89, 90, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 44, -1, -1, -1, -1, 49, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 44, -1, -1, -1, + -1, 49, -1, -1, -1, -1, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 31, 32, -1, 34, -1, -1, 57, 58, - 88, 89, 61, 62, 63, 64, 65, 66, 47, -1, - -1, 50, -1, -1, -1, -1, 55, 56, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, -1, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 44, -1, -1, -1, -1, 49, -1, -1, 88, - 89, 54, -1, -1, 57, 58, 59, 60, 61, 62, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 44, -1, -1, -1, -1, 49, -1, -1, -1, -1, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 54, -1, -1, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 44, -1, 80, 81, 82, 83, 84, 85, 86, 87, + 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 44, -1, 80, 81, 82, 83, + 84, 85, 86, 87, 54, -1, -1, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 44, -1, + 80, 81, 82, 83, 84, 85, 86, 87, 54, -1, + -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 44, -1, 80, 81, 82, 83, 84, 85, + 86, 87, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 48, -1, -1, -1, + -1, -1, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 49, -1, -1, -1, + -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 44, -1, -1, -1, -1, - 49, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 44, - -1, -1, -1, -1, 49, -1, -1, -1, -1, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 44, -1, -1, -1, -1, 49, -1, - -1, -1, -1, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + 83, 84, 85, 86, 87, 52, -1, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 44, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 54, - -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 44, -1, 80, 81, 82, 83, 84, - 85, 86, 87, 54, -1, -1, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 44, -1, 80, - 81, 82, 83, 84, 85, 86, 87, 54, -1, -1, + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, 83, 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 44, -1, 80, 81, 82, 83, 84, 85, 86, - 87, 54, -1, -1, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, 80, 81, 82, - 83, 84, 85, 86, 87, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 48, - -1, -1, -1, -1, -1, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 49, - -1, -1, -1, -1, 54, -1, -1, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 80, 81, 82, 83, 84, 85, 86, 87, 52, -1, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 80, 81, 82, 83, 84, 85, 86, 87, 53, - 54, -1, -1, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, 83, - 84, 85, 86, 87, 53, 54, -1, -1, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 54, -1, - -1, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 80, 81, 82, 83, 84, 85, 86, 87, -1, - -1, -1, -1, -1, 80, 81, 82, 83, 84, 85, - 86, 87, 57, 58, -1, 60, 61, 62, 63, 64, - 65, 66, 57, 58, -1, -1, 61, 62, 63, 64, - 65, 66, -1, -1, -1, 80, 81, 82, 83, 84, - 85, 86, 87, -1, -1, -1, 81, -1, 83, 84, - 85, 86, 87, 57, 58, -1, -1, 61, 62, 63, - 64, 65, 66, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87 + -1, -1, -1, 80, 81, 82, 83, 84, 85, 86, + 87, 53, 54, -1, -1, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 54, -1, -1, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, + 82, 83, 84, 85, 86, 87, -1, -1, -1, -1, + -1, 80, 81, 82, 83, 84, 85, 86, 87, 57, + 58, -1, 60, 61, 62, 63, 64, 65, 66, 57, + 58, -1, -1, 61, 62, 63, 64, 65, 66, -1, + -1, -1, 80, 81, 82, 83, 84, 85, 86, 87, + -1, -1, -1, 81, 82, 83, 84, 85, 86, 87 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 89, 105, 106, 107, - 108, 109, 110, 111, 112, 174, 88, 174, 175, 175, - 43, 0, 107, 108, 109, 43, 69, 53, 53, 90, - 177, 156, 174, 8, 31, 32, 33, 34, 35, 36, + 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, + 109, 110, 111, 112, 113, 175, 89, 175, 176, 176, + 43, 0, 108, 109, 110, 43, 69, 53, 53, 91, + 178, 157, 175, 8, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 47, 51, 67, 68, - 84, 87, 91, 92, 93, 94, 141, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 44, 44, 49, 47, 174, 175, 47, 174, - 175, 47, 141, 47, 48, 141, 157, 158, 174, 141, - 141, 93, 94, 89, 53, 54, 57, 58, 59, 60, + 84, 87, 92, 93, 94, 95, 142, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 44, 44, 49, 47, 175, 176, 47, 175, + 176, 47, 142, 47, 48, 142, 158, 159, 175, 142, + 142, 94, 95, 90, 53, 54, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 80, 81, 82, 83, - 84, 85, 86, 87, 38, 47, 50, 153, 154, 174, - 175, 43, 51, 53, 45, 115, 174, 47, 43, 51, - 47, 43, 51, 47, 44, 49, 141, 49, 48, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 174, - 51, 157, 158, 174, 3, 11, 14, 15, 17, 18, - 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 46, 47, 55, 56, 113, 114, 115, 116, 118, + 84, 85, 86, 87, 38, 47, 50, 88, 154, 155, + 175, 176, 43, 51, 53, 45, 116, 175, 47, 43, + 51, 47, 43, 51, 47, 44, 49, 142, 49, 48, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 175, 51, 158, 159, 175, 3, 11, 14, 15, 17, + 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 46, 47, 55, 56, 114, 115, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 143, 144, 145, 151, 152, 160, 161, 164, - 168, 169, 170, 171, 174, 141, 157, 174, 141, 157, - 174, 141, 141, 48, 141, 52, 48, 174, 44, 43, - 4, 116, 141, 53, 43, 113, 43, 43, 43, 43, - 84, 177, 181, 52, 53, 53, 53, 141, 53, 43, - 43, 47, 151, 152, 164, 164, 46, 113, 53, 53, - 53, 53, 53, 9, 10, 12, 13, 55, 56, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 48, 44, 43, 48, 44, 43, 48, 49, 48, 141, - 157, 4, 53, 141, 18, 141, 117, 143, 144, 145, - 164, 174, 141, 52, 52, 53, 157, 157, 141, 43, - 43, 43, 43, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 48, 157, 48, 157, 48, 141, - 43, 44, 44, 43, 44, 53, 21, 49, 44, 44, - 44, 141, 141, 141, 141, 43, 44, 43, 44, 43, - 44, 157, 113, 141, 113, 141, 142, 141, 174, 115, - 53, 53, 44, 44, 49, 44, 49, 44, 49, 157, - 157, 157, 44, 16, 44, 53, 44, 21, 53, 53, - 158, 53, 158, 53, 158, 44, 44, 44, 113, 53, - 117, 113, 141, 44, 44, 44, 44, 44, 53, 53, - 53, 113, 113 + 139, 140, 141, 144, 145, 146, 152, 153, 161, 162, + 165, 169, 170, 171, 172, 175, 142, 158, 175, 142, + 158, 175, 142, 142, 48, 142, 52, 48, 175, 44, + 43, 4, 117, 142, 53, 43, 114, 43, 43, 43, + 43, 84, 178, 182, 52, 53, 53, 53, 142, 53, + 43, 43, 47, 152, 153, 165, 165, 46, 114, 53, + 53, 53, 53, 53, 9, 10, 12, 13, 55, 56, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 48, 44, 43, 48, 44, 43, 48, 49, 48, + 142, 158, 4, 53, 142, 18, 142, 118, 144, 145, + 146, 165, 175, 142, 52, 52, 53, 158, 158, 142, + 43, 43, 43, 43, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 48, 158, 48, 158, 48, + 142, 43, 44, 44, 43, 44, 53, 21, 49, 44, + 44, 44, 142, 142, 142, 142, 43, 44, 43, 44, + 43, 44, 158, 114, 142, 114, 142, 143, 142, 175, + 116, 53, 53, 44, 44, 49, 44, 49, 44, 49, + 158, 158, 158, 44, 16, 44, 53, 44, 21, 53, + 53, 159, 53, 159, 53, 159, 44, 44, 44, 114, + 53, 118, 114, 142, 44, 44, 44, 44, 44, 53, + 53, 53, 114, 114 }; const unsigned char parser::yyr1_[] = { - 0, 104, 105, 105, 106, 106, 106, 106, 106, 106, - 107, 108, 109, 109, 109, 109, 109, 110, 111, 112, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 114, 114, 115, 115, 116, - 116, 117, 117, 117, 117, 118, 118, 119, 119, 119, - 120, 121, 121, 122, 123, 123, 124, 124, 125, 126, - 127, 128, 129, 130, 131, 131, 132, 133, 133, 134, - 135, 136, 137, 137, 138, 139, 140, 141, 141, 141, - 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 144, 144, 145, 145, 146, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, + 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, + 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 115, 115, 116, 116, 117, + 117, 118, 118, 118, 118, 119, 119, 120, 120, 120, + 121, 122, 122, 123, 124, 124, 125, 125, 126, 127, + 128, 129, 130, 131, 132, 132, 133, 134, 134, 135, + 136, 137, 138, 138, 139, 140, 141, 142, 142, 142, + 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 145, 145, 146, 146, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 149, 150, 151, 151, 152, 152, - 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, - 155, 156, 156, 156, 157, 157, 158, 158, 159, 159, - 160, 161, 162, 163, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 175, 176, 177, 178, 179, 180, - 180, 181, 181, 182, 183 + 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 150, 151, 152, 152, 153, 153, + 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, + 156, 157, 157, 157, 158, 158, 159, 159, 160, 160, + 161, 162, 162, 163, 164, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 176, 177, 178, 179, 180, + 181, 181, 182, 182, 183, 184 }; const signed char @@ -4412,10 +4413,10 @@ namespace xsk { namespace gsc { namespace iw7 { 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, 1, 2, 3, - 4, 3, 2, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 7, 2, - 1, 2, 1, 1, 1 + 4, 3, 2, 2, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 7, + 2, 1, 2, 1, 1, 1 }; @@ -4425,28 +4426,28 @@ namespace xsk { namespace gsc { namespace iw7 { const short parser::yyrline_[] = { - 0, 243, 243, 244, 248, 250, 252, 254, 256, 258, - 263, 267, 272, 273, 274, 275, 276, 280, 285, 290, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 323, 324, 328, 329, 333, - 335, 340, 342, 344, 347, 351, 353, 358, 360, 362, - 367, 372, 374, 379, 384, 386, 391, 393, 398, 403, - 408, 413, 418, 423, 428, 430, 435, 440, 442, 447, - 452, 457, 462, 464, 469, 474, 479, 484, 485, 486, - 490, 491, 495, 497, 499, 501, 503, 505, 507, 509, - 511, 513, 515, 520, 522, 527, 529, 534, 539, 541, - 543, 545, 547, 549, 551, 553, 555, 557, 559, 561, - 563, 565, 567, 569, 571, 573, 578, 579, 580, 581, - 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 609, 614, 619, 620, 623, 624, - 628, 630, 632, 634, 636, 638, 643, 645, 647, 649, - 654, 659, 661, 664, 668, 671, 675, 677, 682, 684, - 689, 694, 699, 704, 709, 710, 711, 712, 713, 714, - 715, 716, 717, 721, 726, 731, 736, 741, 746, 751, - 756, 761, 766, 771, 773, 778, 783, 788, 793, 798, - 800, 805, 807, 812, 817 + 0, 244, 244, 245, 249, 251, 253, 255, 257, 259, + 264, 268, 273, 274, 275, 276, 277, 281, 286, 291, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 324, 325, 329, 330, 334, + 336, 341, 343, 345, 348, 352, 354, 359, 361, 363, + 368, 373, 375, 380, 385, 387, 392, 394, 399, 404, + 409, 414, 419, 424, 429, 431, 436, 441, 443, 448, + 453, 458, 463, 465, 470, 475, 480, 485, 486, 487, + 491, 492, 496, 498, 500, 502, 504, 506, 508, 510, + 512, 514, 516, 521, 523, 528, 530, 535, 540, 542, + 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, + 564, 566, 568, 570, 572, 574, 579, 580, 581, 582, + 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 610, 615, 620, 621, 624, 625, + 629, 631, 633, 635, 637, 639, 644, 646, 648, 650, + 655, 660, 662, 665, 669, 672, 676, 678, 683, 685, + 690, 695, 697, 702, 707, 712, 713, 714, 715, 716, + 717, 718, 719, 720, 724, 729, 734, 739, 744, 749, + 754, 759, 764, 769, 774, 776, 781, 786, 791, 796, + 801, 803, 808, 810, 815, 820 }; void @@ -4479,9 +4480,9 @@ namespace xsk { namespace gsc { namespace iw7 { #line 13 "parser.ypp" } } } // xsk::gsc::iw7 -#line 4483 "parser.cpp" +#line 4484 "parser.cpp" -#line 821 "parser.ypp" +#line 824 "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 79fbc5e3..9dc3e1b0 100644 --- a/src/iw7/xsk/parser.hpp +++ b/src/iw7/xsk/parser.hpp @@ -614,6 +614,7 @@ namespace xsk { namespace gsc { namespace iw7 { // stmt_while char dummy65[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -758,22 +759,23 @@ namespace xsk { namespace gsc { namespace iw7 { MUL = 85, // "*" DIV = 86, // "/" MOD = 87, // "%" - PATH = 88, // "path" - IDENTIFIER = 89, // "identifier" - STRING = 90, // "string literal" - ISTRING = 91, // "localized string" - COLOR = 92, // "color" - FLOAT = 93, // "float" - INTEGER = 94, // "integer" - ADD_ARRAY = 95, // ADD_ARRAY - THEN = 96, // THEN - TERN = 97, // TERN - NEG = 98, // NEG - ANIMREF = 99, // ANIMREF - PREINC = 100, // PREINC - PREDEC = 101, // PREDEC - POSTINC = 102, // POSTINC - POSTDEC = 103 // POSTDEC + FIELD = 88, // "field" + PATH = 89, // "path" + IDENTIFIER = 90, // "identifier" + STRING = 91, // "string literal" + ISTRING = 92, // "localized string" + COLOR = 93, // "color" + FLOAT = 94, // "float" + INTEGER = 95, // "integer" + ADD_ARRAY = 96, // ADD_ARRAY + THEN = 97, // THEN + TERN = 98, // TERN + NEG = 99, // NEG + ANIMREF = 100, // ANIMREF + PREINC = 101, // PREINC + PREDEC = 102, // PREDEC + POSTINC = 103, // POSTINC + POSTDEC = 104 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -790,7 +792,7 @@ namespace xsk { namespace gsc { namespace iw7 { { enum symbol_kind_type { - YYNTOKENS = 104, ///< Number of tokens. + YYNTOKENS = 105, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -880,102 +882,103 @@ namespace xsk { namespace gsc { namespace iw7 { S_MUL = 85, // "*" S_DIV = 86, // "/" S_MOD = 87, // "%" - S_PATH = 88, // "path" - S_IDENTIFIER = 89, // "identifier" - S_STRING = 90, // "string literal" - S_ISTRING = 91, // "localized string" - S_COLOR = 92, // "color" - S_FLOAT = 93, // "float" - S_INTEGER = 94, // "integer" - S_ADD_ARRAY = 95, // ADD_ARRAY - S_THEN = 96, // THEN - S_TERN = 97, // TERN - S_NEG = 98, // NEG - S_ANIMREF = 99, // ANIMREF - S_PREINC = 100, // PREINC - S_PREDEC = 101, // PREDEC - S_POSTINC = 102, // POSTINC - S_POSTDEC = 103, // POSTDEC - S_YYACCEPT = 104, // $accept - S_root = 105, // root - S_program = 106, // program - S_inline = 107, // inline - S_include = 108, // include - S_declaration = 109, // declaration - S_decl_usingtree = 110, // decl_usingtree - S_decl_constant = 111, // decl_constant - S_decl_thread = 112, // decl_thread - S_stmt = 113, // stmt - S_stmt_dev = 114, // stmt_dev - S_stmt_block = 115, // stmt_block - S_stmt_list = 116, // stmt_list - S_stmt_expr = 117, // stmt_expr - S_stmt_call = 118, // stmt_call - S_stmt_assign = 119, // stmt_assign - S_stmt_endon = 120, // stmt_endon - S_stmt_notify = 121, // stmt_notify - S_stmt_wait = 122, // stmt_wait - S_stmt_waittill = 123, // stmt_waittill - S_stmt_waittillmatch = 124, // stmt_waittillmatch - S_stmt_waittillframeend = 125, // stmt_waittillframeend - S_stmt_if = 126, // stmt_if - S_stmt_ifelse = 127, // stmt_ifelse - S_stmt_while = 128, // stmt_while - S_stmt_dowhile = 129, // stmt_dowhile - S_stmt_for = 130, // stmt_for - S_stmt_foreach = 131, // stmt_foreach - S_stmt_switch = 132, // stmt_switch - S_stmt_case = 133, // stmt_case - S_stmt_default = 134, // stmt_default - S_stmt_break = 135, // stmt_break - S_stmt_continue = 136, // stmt_continue - S_stmt_return = 137, // stmt_return - S_stmt_breakpoint = 138, // stmt_breakpoint - S_stmt_prof_begin = 139, // stmt_prof_begin - S_stmt_prof_end = 140, // stmt_prof_end - S_expr = 141, // expr - S_expr_or_empty = 142, // expr_or_empty - S_expr_assign = 143, // expr_assign - S_expr_increment = 144, // expr_increment - S_expr_decrement = 145, // expr_decrement - S_expr_ternary = 146, // expr_ternary - S_expr_binary = 147, // expr_binary - S_expr_primitive = 148, // expr_primitive - S_expr_complement = 149, // expr_complement - S_expr_not = 150, // expr_not - S_expr_call = 151, // expr_call - S_expr_method = 152, // expr_method - S_expr_function = 153, // expr_function - S_expr_pointer = 154, // expr_pointer - S_expr_add_array = 155, // expr_add_array - S_expr_parameters = 156, // expr_parameters - S_expr_arguments = 157, // expr_arguments - S_expr_arguments_no_empty = 158, // expr_arguments_no_empty - S_expr_reference = 159, // expr_reference - S_expr_array = 160, // expr_array - S_expr_field = 161, // expr_field - S_expr_size = 162, // expr_size - S_expr_paren = 163, // expr_paren - S_expr_object = 164, // expr_object - S_expr_thisthread = 165, // expr_thisthread - S_expr_empty_array = 166, // expr_empty_array - S_expr_undefined = 167, // expr_undefined - S_expr_game = 168, // expr_game - S_expr_self = 169, // expr_self - S_expr_anim = 170, // expr_anim - S_expr_level = 171, // expr_level - S_expr_animation = 172, // expr_animation - S_expr_animtree = 173, // expr_animtree - S_expr_identifier = 174, // expr_identifier - S_expr_path = 175, // expr_path - S_expr_istring = 176, // expr_istring - S_expr_string = 177, // expr_string - S_expr_color = 178, // expr_color - S_expr_vector = 179, // expr_vector - S_expr_float = 180, // expr_float - S_expr_integer = 181, // expr_integer - S_expr_false = 182, // expr_false - S_expr_true = 183 // expr_true + S_FIELD = 88, // "field" + S_PATH = 89, // "path" + S_IDENTIFIER = 90, // "identifier" + S_STRING = 91, // "string literal" + S_ISTRING = 92, // "localized string" + S_COLOR = 93, // "color" + S_FLOAT = 94, // "float" + S_INTEGER = 95, // "integer" + S_ADD_ARRAY = 96, // ADD_ARRAY + S_THEN = 97, // THEN + S_TERN = 98, // TERN + S_NEG = 99, // NEG + S_ANIMREF = 100, // ANIMREF + S_PREINC = 101, // PREINC + S_PREDEC = 102, // PREDEC + S_POSTINC = 103, // POSTINC + S_POSTDEC = 104, // POSTDEC + S_YYACCEPT = 105, // $accept + S_root = 106, // root + S_program = 107, // program + S_inline = 108, // inline + S_include = 109, // include + S_declaration = 110, // declaration + S_decl_usingtree = 111, // decl_usingtree + S_decl_constant = 112, // decl_constant + S_decl_thread = 113, // decl_thread + S_stmt = 114, // stmt + S_stmt_dev = 115, // stmt_dev + S_stmt_block = 116, // stmt_block + S_stmt_list = 117, // stmt_list + S_stmt_expr = 118, // stmt_expr + S_stmt_call = 119, // stmt_call + S_stmt_assign = 120, // stmt_assign + S_stmt_endon = 121, // stmt_endon + S_stmt_notify = 122, // stmt_notify + S_stmt_wait = 123, // stmt_wait + S_stmt_waittill = 124, // stmt_waittill + S_stmt_waittillmatch = 125, // stmt_waittillmatch + S_stmt_waittillframeend = 126, // stmt_waittillframeend + S_stmt_if = 127, // stmt_if + S_stmt_ifelse = 128, // stmt_ifelse + S_stmt_while = 129, // stmt_while + S_stmt_dowhile = 130, // stmt_dowhile + S_stmt_for = 131, // stmt_for + S_stmt_foreach = 132, // stmt_foreach + S_stmt_switch = 133, // stmt_switch + S_stmt_case = 134, // stmt_case + S_stmt_default = 135, // stmt_default + S_stmt_break = 136, // stmt_break + S_stmt_continue = 137, // stmt_continue + S_stmt_return = 138, // stmt_return + S_stmt_breakpoint = 139, // stmt_breakpoint + S_stmt_prof_begin = 140, // stmt_prof_begin + S_stmt_prof_end = 141, // stmt_prof_end + S_expr = 142, // expr + S_expr_or_empty = 143, // expr_or_empty + S_expr_assign = 144, // expr_assign + S_expr_increment = 145, // expr_increment + S_expr_decrement = 146, // expr_decrement + S_expr_ternary = 147, // expr_ternary + S_expr_binary = 148, // expr_binary + S_expr_primitive = 149, // expr_primitive + S_expr_complement = 150, // expr_complement + S_expr_not = 151, // expr_not + S_expr_call = 152, // expr_call + S_expr_method = 153, // expr_method + S_expr_function = 154, // expr_function + S_expr_pointer = 155, // expr_pointer + S_expr_add_array = 156, // expr_add_array + S_expr_parameters = 157, // expr_parameters + S_expr_arguments = 158, // expr_arguments + S_expr_arguments_no_empty = 159, // expr_arguments_no_empty + S_expr_reference = 160, // expr_reference + S_expr_array = 161, // expr_array + S_expr_field = 162, // expr_field + S_expr_size = 163, // expr_size + S_expr_paren = 164, // expr_paren + S_expr_object = 165, // expr_object + S_expr_thisthread = 166, // expr_thisthread + S_expr_empty_array = 167, // expr_empty_array + S_expr_undefined = 168, // expr_undefined + S_expr_game = 169, // expr_game + S_expr_self = 170, // expr_self + S_expr_anim = 171, // expr_anim + S_expr_level = 172, // expr_level + S_expr_animation = 173, // expr_animation + S_expr_animtree = 174, // expr_animtree + S_expr_identifier = 175, // expr_identifier + S_expr_path = 176, // expr_path + S_expr_istring = 177, // expr_istring + S_expr_string = 178, // expr_string + S_expr_color = 179, // expr_color + S_expr_vector = 180, // expr_vector + S_expr_float = 181, // expr_float + S_expr_integer = 182, // expr_integer + S_expr_false = 183, // expr_false + S_expr_true = 184 // expr_true }; }; @@ -1284,6 +1287,7 @@ namespace xsk { namespace gsc { namespace iw7 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2535,6 +2539,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2651,7 +2656,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - IW7_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + IW7_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4021,6 +4026,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4605,7 +4625,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2293, ///< Last index in yytable_. + yylast_ = 2249, ///< Last index in yytable_. yynnts_ = 80, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4905,6 +4925,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5216,6 +5237,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5289,7 +5311,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw7 -#line 5293 "parser.hpp" +#line 5315 "parser.hpp" diff --git a/src/iw8/xsk/lexer.cpp b/src/iw8/xsk/lexer.cpp index 43379431..ee2262af 100644 --- a/src/iw8/xsk/lexer.cpp +++ b/src/iw8/xsk/lexer.cpp @@ -70,9 +70,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -82,18 +82,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -141,7 +132,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -187,24 +178,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw iw8::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return iw8::parser::make_IW8EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -218,7 +213,7 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return iw8::parser::make_DIV(loc_); reader_.advance(); @@ -228,29 +223,27 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw iw8::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return iw8::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw iw8::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -264,16 +257,15 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw iw8::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -286,7 +278,7 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -296,69 +288,43 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw iw8::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return iw8::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return iw8::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw iw8::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return iw8::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw iw8::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return iw8::parser::make_ASSIGN_MUL(loc_); - return iw8::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return iw8::parser::make_LPAREN(loc_); case ')': @@ -378,6 +344,7 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type case ':': if (curr != ':') return iw8::parser::make_COLON(loc_); + reader_.advance(); return iw8::parser::make_DOUBLECOLON(loc_); case '?': @@ -385,43 +352,70 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type case '=': if (curr != '=') return iw8::parser::make_ASSIGN(loc_); + reader_.advance(); return iw8::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return iw8::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? iw8::parser::make_INCREMENT(loc_) : iw8::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return iw8::parser::make_INCREMENT(loc_); + + return iw8::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return iw8::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? iw8::parser::make_DECREMENT(loc_) : iw8::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return iw8::parser::make_DECREMENT(loc_); + + return iw8::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return iw8::parser::make_MOD(loc_); + reader_.advance(); + return iw8::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return iw8::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? iw8::parser::make_OR(loc_) : iw8::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return iw8::parser::make_OR(loc_); + + return iw8::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return iw8::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? iw8::parser::make_AND(loc_) : iw8::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return iw8::parser::make_AND(loc_); + + if (last == '=') + return iw8::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return iw8::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return iw8::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return iw8::parser::make_NOT(loc_); + reader_.advance(); return iw8::parser::make_INEQUALITY(loc_); case '~': @@ -429,144 +423,233 @@ auto lexer::lex() -> xsk::gsc::iw8::parser::symbol_type case '<': if (curr != '<' && curr != '=') return iw8::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? iw8::parser::make_ASSIGN_LSHIFT(loc_) : iw8::parser::make_LSHIFT(loc_); - } - return iw8::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return iw8::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return iw8::parser::make_LSHIFT(loc_); + + reader_.advance(); + return iw8::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return iw8::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? iw8::parser::make_ASSIGN_RSHIFT(loc_) : iw8::parser::make_RSHIFT(loc_); - } - return iw8::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return iw8::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return iw8::parser::make_RSHIFT(loc_); + + reader_.advance(); + return iw8::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw iw8::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::iw8::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw iw8::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw iw8::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return iw8::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return iw8::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::iw8::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw iw8::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw iw8::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return iw8::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return iw8::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return iw8::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return iw8::parser::make_SIZE(loc_); + } + + return iw8::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + if (buffer_.data[0] != '_') + { + for (auto i = 0; i < buffer_.length; i++) + { + auto c = buffer_.data[i]; + + if (c > 64 && c < 91) + buffer_.data[i] = c + 32; + } + } + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return iw8::parser::make_PATH(xsk::gsc::iw8::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw8::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return iw8::parser::make_IDENTIFIER(xsk::gsc::iw8::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return iw8::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return iw8::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return iw8::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -583,30 +666,24 @@ auto lexer::read_number(char first) -> xsk::gsc::iw8::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return iw8::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return iw8::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -618,35 +695,29 @@ auto lexer::read_number(char first) -> xsk::gsc::iw8::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return iw8::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -663,174 +734,15 @@ auto lexer::read_number(char first) -> xsk::gsc::iw8::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return iw8::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw iw8::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw iw8::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw iw8::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return iw8::parser::make_FLOAT(std::string(data, len), loc_); - - return iw8::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::iw8::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw iw8::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if(buffer_.data[0] != '_') - { - for(auto i = 0; i < buffer_.length; i++) - { - auto c = buffer_.data[i]; - - if (c > 64 && c < 91) - buffer_.data[i] = c + 32; - } - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw iw8::parser::syntax_error(loc_, "invalid path end '\\'"); - - return iw8::parser::make_PATH(xsk::gsc::iw8::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return iw8::parser::make_IDENTIFIER(xsk::gsc::iw8::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::iw8::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return iw8::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return iw8::parser::make_DOT(loc_); - - } - else return iw8::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::iw8::parser::symbol_type { switch (k) diff --git a/src/iw8/xsk/lexer.hpp b/src/iw8/xsk/lexer.hpp index 19d2fe8b..5f93437d 100644 --- a/src/iw8/xsk/lexer.hpp +++ b/src/iw8/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::iw8 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::iw8::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::iw8::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::iw8::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::iw8::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::iw8::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/iw8/xsk/parser.cpp b/src/iw8/xsk/parser.cpp index 559db0b7..49c97e0f 100644 --- a/src/iw8/xsk/parser.cpp +++ b/src/iw8/xsk/parser.cpp @@ -499,6 +499,7 @@ namespace xsk { namespace gsc { namespace iw8 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -808,6 +809,7 @@ namespace xsk { namespace gsc { namespace iw8 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1117,6 +1119,7 @@ namespace xsk { namespace gsc { namespace iw8 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1425,6 +1428,7 @@ namespace xsk { namespace gsc { namespace iw8 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1988,6 +1992,7 @@ namespace xsk { namespace gsc { namespace iw8 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2019,1327 +2024,1333 @@ namespace xsk { namespace gsc { namespace iw8 { switch (yyn) { case 2: // root: program -#line 249 "parser.ypp" +#line 250 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 3: // root: %empty -#line 250 "parser.ypp" +#line 251 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 4: // program: program inline -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 5: // program: program include -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 6: // program: program declaration -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 7: // program: inline -#line 261 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 8: // program: include -#line 263 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 9: // program: declaration -#line 265 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 269 "parser.ypp" +#line 270 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 12: // declaration: "/#" -#line 278 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 13: // declaration: "#/" -#line 279 "parser.ypp" +#line 280 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 280 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 15: // declaration: decl_constant -#line 281 "parser.ypp" +#line 282 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 16: // declaration: decl_thread -#line 282 "parser.ypp" +#line 283 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 287 "parser.ypp" +#line 288 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 292 "parser.ypp" +#line 293 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 297 "parser.ypp" +#line 298 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 21: // stmt: stmt_block -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 22: // stmt: stmt_call -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 31: // stmt: stmt_if -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 33: // stmt: stmt_while -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 35: // stmt: stmt_for -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 38: // stmt: stmt_case -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 39: // stmt: stmt_default -#line 320 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 40: // stmt: stmt_break -#line 321 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 322 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; case 42: // stmt: stmt_return -#line 323 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2265 "parser.cpp" +#line 2270 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 324 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2271 "parser.cpp" +#line 2276 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 325 "parser.ypp" +#line 326 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2277 "parser.cpp" +#line 2282 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 326 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2283 "parser.cpp" +#line 2288 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 330 "parser.ypp" +#line 331 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2289 "parser.cpp" +#line 2294 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 331 "parser.ypp" +#line 332 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2295 "parser.cpp" +#line 2300 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 335 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2301 "parser.cpp" +#line 2306 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 336 "parser.ypp" +#line 337 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2307 "parser.cpp" +#line 2312 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 341 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2313 "parser.cpp" +#line 2318 "parser.cpp" break; case 51: // stmt_list: stmt -#line 343 "parser.ypp" +#line 344 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2319 "parser.cpp" +#line 2324 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 348 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2325 "parser.cpp" +#line 2330 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 350 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2331 "parser.cpp" +#line 2336 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 352 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2337 "parser.cpp" +#line 2342 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 354 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2343 "parser.cpp" +#line 2348 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 359 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2349 "parser.cpp" +#line 2354 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 361 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2355 "parser.cpp" +#line 2360 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 366 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2361 "parser.cpp" +#line 2366 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 368 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2367 "parser.cpp" +#line 2372 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 370 "parser.ypp" +#line 371 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2373 "parser.cpp" +#line 2378 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 375 "parser.ypp" +#line 376 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2379 "parser.cpp" +#line 2384 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 380 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2385 "parser.cpp" +#line 2390 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 382 "parser.ypp" +#line 383 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2391 "parser.cpp" +#line 2396 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 387 "parser.ypp" +#line 388 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2397 "parser.cpp" +#line 2402 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 392 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2403 "parser.cpp" +#line 2408 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 394 "parser.ypp" +#line 395 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2409 "parser.cpp" +#line 2414 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 399 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2415 "parser.cpp" +#line 2420 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 401 "parser.ypp" +#line 402 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2421 "parser.cpp" +#line 2426 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 406 "parser.ypp" +#line 407 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2427 "parser.cpp" +#line 2432 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 411 "parser.ypp" +#line 412 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2433 "parser.cpp" +#line 2438 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 413 "parser.ypp" +#line 414 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2439 "parser.cpp" +#line 2444 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 418 "parser.ypp" +#line 419 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2445 "parser.cpp" +#line 2450 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 423 "parser.ypp" +#line 424 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2451 "parser.cpp" +#line 2456 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 428 "parser.ypp" +#line 429 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2457 "parser.cpp" +#line 2462 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 433 "parser.ypp" +#line 434 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2463 "parser.cpp" +#line 2468 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 438 "parser.ypp" +#line 439 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2469 "parser.cpp" +#line 2474 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 443 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2475 "parser.cpp" +#line 2480 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 445 "parser.ypp" +#line 446 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2481 "parser.cpp" +#line 2486 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 450 "parser.ypp" +#line 451 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2487 "parser.cpp" +#line 2492 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 455 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2493 "parser.cpp" +#line 2498 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 457 "parser.ypp" +#line 458 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2499 "parser.cpp" +#line 2504 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 462 "parser.ypp" +#line 463 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2505 "parser.cpp" +#line 2510 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 467 "parser.ypp" +#line 468 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2511 "parser.cpp" +#line 2516 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 472 "parser.ypp" +#line 473 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2517 "parser.cpp" +#line 2522 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 477 "parser.ypp" +#line 478 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2523 "parser.cpp" +#line 2528 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 479 "parser.ypp" +#line 480 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2529 "parser.cpp" +#line 2534 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 484 "parser.ypp" +#line 485 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2535 "parser.cpp" +#line 2540 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 489 "parser.ypp" +#line 490 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2541 "parser.cpp" +#line 2546 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 494 "parser.ypp" +#line 495 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2547 "parser.cpp" +#line 2552 "parser.cpp" break; case 90: // expr: expr_ternary -#line 498 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2553 "parser.cpp" +#line 2558 "parser.cpp" break; case 91: // expr: expr_binary -#line 499 "parser.ypp" +#line 500 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2559 "parser.cpp" +#line 2564 "parser.cpp" break; case 92: // expr: expr_primitive -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2565 "parser.cpp" +#line 2570 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 504 "parser.ypp" +#line 505 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2571 "parser.cpp" +#line 2576 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 505 "parser.ypp" +#line 506 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2577 "parser.cpp" +#line 2582 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2583 "parser.cpp" +#line 2588 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2589 "parser.cpp" +#line 2594 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2595 "parser.cpp" +#line 2600 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2601 "parser.cpp" +#line 2606 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 518 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2607 "parser.cpp" +#line 2612 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 520 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2613 "parser.cpp" +#line 2618 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 522 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2619 "parser.cpp" +#line 2624 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 524 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2625 "parser.cpp" +#line 2630 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 526 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2631 "parser.cpp" +#line 2636 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 528 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2637 "parser.cpp" +#line 2642 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 530 "parser.ypp" +#line 531 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2643 "parser.cpp" +#line 2648 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 535 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2649 "parser.cpp" +#line 2654 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 537 "parser.ypp" +#line 538 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2655 "parser.cpp" +#line 2660 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 542 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2661 "parser.cpp" +#line 2666 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 544 "parser.ypp" +#line 545 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2667 "parser.cpp" +#line 2672 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 549 "parser.ypp" +#line 550 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2673 "parser.cpp" +#line 2678 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2679 "parser.cpp" +#line 2684 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2685 "parser.cpp" +#line 2690 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2691 "parser.cpp" +#line 2696 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2697 "parser.cpp" +#line 2702 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2703 "parser.cpp" +#line 2708 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2709 "parser.cpp" +#line 2714 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2715 "parser.cpp" +#line 2720 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2721 "parser.cpp" +#line 2726 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2727 "parser.cpp" +#line 2732 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2733 "parser.cpp" +#line 2738 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2739 "parser.cpp" +#line 2744 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 576 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2745 "parser.cpp" +#line 2750 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2751 "parser.cpp" +#line 2756 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2757 "parser.cpp" +#line 2762 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2763 "parser.cpp" +#line 2768 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2769 "parser.cpp" +#line 2774 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 586 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2775 "parser.cpp" +#line 2780 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2781 "parser.cpp" +#line 2786 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2787 "parser.cpp" +#line 2792 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2793 "parser.cpp" +#line 2798 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2799 "parser.cpp" +#line 2804 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2805 "parser.cpp" +#line 2810 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2811 "parser.cpp" +#line 2816 "parser.cpp" break; case 134: // expr_primitive: expr_isdefined -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_isdefined::ptr > ()); } -#line 2817 "parser.cpp" +#line 2822 "parser.cpp" break; case 135: // expr_primitive: expr_istrue -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istrue::ptr > ()); } -#line 2823 "parser.cpp" +#line 2828 "parser.cpp" break; case 136: // expr_primitive: expr_reference -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2829 "parser.cpp" +#line 2834 "parser.cpp" break; case 137: // expr_primitive: expr_array -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2835 "parser.cpp" +#line 2840 "parser.cpp" break; case 138: // expr_primitive: expr_field -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2841 "parser.cpp" +#line 2846 "parser.cpp" break; case 139: // expr_primitive: expr_size -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2847 "parser.cpp" +#line 2852 "parser.cpp" break; case 140: // expr_primitive: expr_paren -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2853 "parser.cpp" +#line 2858 "parser.cpp" break; case 141: // expr_primitive: expr_thisthread -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2859 "parser.cpp" +#line 2864 "parser.cpp" break; case 142: // expr_primitive: expr_empty_array -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2865 "parser.cpp" +#line 2870 "parser.cpp" break; case 143: // expr_primitive: expr_undefined -#line 606 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2871 "parser.cpp" +#line 2876 "parser.cpp" break; case 144: // expr_primitive: expr_game -#line 607 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2877 "parser.cpp" +#line 2882 "parser.cpp" break; case 145: // expr_primitive: expr_self -#line 608 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2883 "parser.cpp" +#line 2888 "parser.cpp" break; case 146: // expr_primitive: expr_anim -#line 609 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2889 "parser.cpp" +#line 2894 "parser.cpp" break; case 147: // expr_primitive: expr_level -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2895 "parser.cpp" +#line 2900 "parser.cpp" break; case 148: // expr_primitive: expr_animation -#line 611 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2901 "parser.cpp" +#line 2906 "parser.cpp" break; case 149: // expr_primitive: expr_animtree -#line 612 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2907 "parser.cpp" +#line 2912 "parser.cpp" break; case 150: // expr_primitive: expr_identifier -#line 613 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2913 "parser.cpp" +#line 2918 "parser.cpp" break; case 151: // expr_primitive: expr_istring -#line 614 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2919 "parser.cpp" +#line 2924 "parser.cpp" break; case 152: // expr_primitive: expr_string -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2925 "parser.cpp" +#line 2930 "parser.cpp" break; case 153: // expr_primitive: expr_color -#line 616 "parser.ypp" +#line 617 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2931 "parser.cpp" +#line 2936 "parser.cpp" break; case 154: // expr_primitive: expr_vector -#line 617 "parser.ypp" +#line 618 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2937 "parser.cpp" +#line 2942 "parser.cpp" break; case 155: // expr_primitive: expr_float -#line 618 "parser.ypp" +#line 619 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2943 "parser.cpp" +#line 2948 "parser.cpp" break; case 156: // expr_primitive: expr_integer -#line 619 "parser.ypp" +#line 620 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2949 "parser.cpp" +#line 2954 "parser.cpp" break; case 157: // expr_primitive: expr_false -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2955 "parser.cpp" +#line 2960 "parser.cpp" break; case 158: // expr_primitive: expr_true -#line 621 "parser.ypp" +#line 622 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2961 "parser.cpp" +#line 2966 "parser.cpp" break; case 159: // expr_complement: "~" expr -#line 626 "parser.ypp" +#line 627 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2967 "parser.cpp" +#line 2972 "parser.cpp" break; case 160: // expr_not: "!" expr -#line 631 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2973 "parser.cpp" +#line 2978 "parser.cpp" break; case 161: // expr_call: expr_function -#line 635 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2979 "parser.cpp" +#line 2984 "parser.cpp" break; case 162: // expr_call: expr_pointer -#line 636 "parser.ypp" +#line 637 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2985 "parser.cpp" +#line 2990 "parser.cpp" break; case 163: // expr_method: expr_object expr_function -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2991 "parser.cpp" +#line 2996 "parser.cpp" break; case 164: // expr_method: expr_object expr_pointer -#line 640 "parser.ypp" +#line 641 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2997 "parser.cpp" +#line 3002 "parser.cpp" break; case 165: // expr_function: expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3003 "parser.cpp" +#line 3008 "parser.cpp" break; case 166: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3009 "parser.cpp" +#line 3014 "parser.cpp" break; case 167: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3015 "parser.cpp" +#line 3020 "parser.cpp" break; case 168: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 651 "parser.ypp" +#line 652 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3021 "parser.cpp" +#line 3026 "parser.cpp" break; case 169: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 653 "parser.ypp" +#line 654 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3027 "parser.cpp" +#line 3032 "parser.cpp" break; case 170: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 655 "parser.ypp" +#line 656 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3033 "parser.cpp" +#line 3038 "parser.cpp" break; case 171: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3039 "parser.cpp" +#line 3044 "parser.cpp" break; case 172: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 662 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3045 "parser.cpp" +#line 3050 "parser.cpp" break; case 173: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 664 "parser.ypp" +#line 665 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3051 "parser.cpp" +#line 3056 "parser.cpp" break; case 174: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 666 "parser.ypp" +#line 667 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3057 "parser.cpp" +#line 3062 "parser.cpp" break; case 175: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 671 "parser.ypp" +#line 672 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3063 "parser.cpp" +#line 3068 "parser.cpp" break; case 176: // expr_parameters: expr_parameters "," expr_identifier -#line 676 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3069 "parser.cpp" +#line 3074 "parser.cpp" break; case 177: // expr_parameters: expr_identifier -#line 678 "parser.ypp" +#line 679 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3075 "parser.cpp" +#line 3080 "parser.cpp" break; case 178: // expr_parameters: %empty -#line 680 "parser.ypp" +#line 681 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3081 "parser.cpp" +#line 3086 "parser.cpp" break; case 179: // expr_arguments: expr_arguments_no_empty -#line 685 "parser.ypp" +#line 686 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3087 "parser.cpp" +#line 3092 "parser.cpp" break; case 180: // expr_arguments: %empty -#line 687 "parser.ypp" +#line 688 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3093 "parser.cpp" +#line 3098 "parser.cpp" break; case 181: // expr_arguments_no_empty: expr_arguments "," expr -#line 692 "parser.ypp" +#line 693 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3099 "parser.cpp" +#line 3104 "parser.cpp" break; case 182: // expr_arguments_no_empty: expr -#line 694 "parser.ypp" +#line 695 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3105 "parser.cpp" +#line 3110 "parser.cpp" break; case 183: // expr_isdefined: "isdefined" "(" expr ")" -#line 699 "parser.ypp" +#line 700 "parser.ypp" { yylhs.value.as < ast::expr_isdefined::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3111 "parser.cpp" +#line 3116 "parser.cpp" break; case 184: // expr_istrue: "istrue" "(" expr ")" -#line 704 "parser.ypp" +#line 705 "parser.ypp" { yylhs.value.as < ast::expr_istrue::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3117 "parser.cpp" +#line 3122 "parser.cpp" break; case 185: // expr_reference: "::" expr_identifier -#line 709 "parser.ypp" +#line 710 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3123 "parser.cpp" +#line 3128 "parser.cpp" break; case 186: // expr_reference: expr_path "::" expr_identifier -#line 711 "parser.ypp" +#line 712 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3129 "parser.cpp" +#line 3134 "parser.cpp" break; case 187: // expr_array: expr_object "[" expr "]" -#line 716 "parser.ypp" +#line 717 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3135 "parser.cpp" +#line 3140 "parser.cpp" break; case 188: // expr_field: expr_object "." expr_identifier -#line 721 "parser.ypp" +#line 722 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3141 "parser.cpp" +#line 3146 "parser.cpp" break; - case 189: // expr_size: expr_object ".size" -#line 726 "parser.ypp" + case 189: // expr_field: expr_object "field" +#line 724 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3152 "parser.cpp" + break; + + case 190: // expr_size: expr_object ".size" +#line 729 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3147 "parser.cpp" +#line 3158 "parser.cpp" break; - case 190: // expr_paren: "(" expr ")" -#line 731 "parser.ypp" + case 191: // expr_paren: "(" expr ")" +#line 734 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3153 "parser.cpp" +#line 3164 "parser.cpp" break; - case 191: // expr_object: expr_call -#line 735 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3159 "parser.cpp" - break; - - case 192: // expr_object: expr_method -#line 736 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3165 "parser.cpp" - break; - - case 193: // expr_object: expr_array -#line 737 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3171 "parser.cpp" - break; - - case 194: // expr_object: expr_field + case 192: // expr_object: expr_call #line 738 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3177 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3170 "parser.cpp" break; - case 195: // expr_object: expr_game + case 193: // expr_object: expr_method #line 739 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3183 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3176 "parser.cpp" break; - case 196: // expr_object: expr_self + case 194: // expr_object: expr_array #line 740 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3189 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3182 "parser.cpp" break; - case 197: // expr_object: expr_anim + case 195: // expr_object: expr_field #line 741 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3195 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3188 "parser.cpp" break; - case 198: // expr_object: expr_level + case 196: // expr_object: expr_game #line 742 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3201 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3194 "parser.cpp" break; - case 199: // expr_object: expr_identifier + case 197: // expr_object: expr_self #line 743 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3200 "parser.cpp" + break; + + case 198: // expr_object: expr_anim +#line 744 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3206 "parser.cpp" + break; + + case 199: // expr_object: expr_level +#line 745 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3212 "parser.cpp" + break; + + case 200: // expr_object: expr_identifier +#line 746 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3207 "parser.cpp" +#line 3218 "parser.cpp" break; - case 200: // expr_thisthread: "thisthread" -#line 748 "parser.ypp" + case 201: // expr_thisthread: "thisthread" +#line 751 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3213 "parser.cpp" +#line 3224 "parser.cpp" break; - case 201: // expr_empty_array: "[" "]" -#line 753 "parser.ypp" + case 202: // expr_empty_array: "[" "]" +#line 756 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3219 "parser.cpp" +#line 3230 "parser.cpp" break; - case 202: // expr_undefined: "undefined" -#line 758 "parser.ypp" + case 203: // expr_undefined: "undefined" +#line 761 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3225 "parser.cpp" +#line 3236 "parser.cpp" break; - case 203: // expr_game: "game" -#line 763 "parser.ypp" + case 204: // expr_game: "game" +#line 766 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3231 "parser.cpp" +#line 3242 "parser.cpp" break; - case 204: // expr_self: "self" -#line 768 "parser.ypp" + case 205: // expr_self: "self" +#line 771 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3237 "parser.cpp" +#line 3248 "parser.cpp" break; - case 205: // expr_anim: "anim" -#line 773 "parser.ypp" + case 206: // expr_anim: "anim" +#line 776 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3243 "parser.cpp" +#line 3254 "parser.cpp" break; - case 206: // expr_level: "level" -#line 778 "parser.ypp" + case 207: // expr_level: "level" +#line 781 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3249 "parser.cpp" +#line 3260 "parser.cpp" break; - case 207: // expr_animation: "%" "identifier" -#line 783 "parser.ypp" + case 208: // expr_animation: "%" "identifier" +#line 786 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3255 "parser.cpp" +#line 3266 "parser.cpp" break; - case 208: // expr_animtree: "#animtree" -#line 788 "parser.ypp" + case 209: // expr_animtree: "#animtree" +#line 791 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3261 "parser.cpp" +#line 3272 "parser.cpp" break; - case 209: // expr_identifier: "identifier" -#line 793 "parser.ypp" + case 210: // expr_identifier: "identifier" +#line 796 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3267 "parser.cpp" +#line 3278 "parser.cpp" break; - case 210: // expr_path: "path" -#line 798 "parser.ypp" + case 211: // expr_path: "path" +#line 801 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3273 "parser.cpp" +#line 3284 "parser.cpp" break; - case 211: // expr_path: expr_identifier -#line 800 "parser.ypp" + case 212: // expr_path: expr_identifier +#line 803 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" break; - case 212: // expr_istring: "localized string" -#line 805 "parser.ypp" + case 213: // expr_istring: "localized string" +#line 808 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3285 "parser.cpp" +#line 3296 "parser.cpp" break; - case 213: // expr_string: "string literal" -#line 810 "parser.ypp" + case 214: // expr_string: "string literal" +#line 813 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3291 "parser.cpp" +#line 3302 "parser.cpp" break; - case 214: // expr_color: "color" -#line 815 "parser.ypp" + case 215: // expr_color: "color" +#line 818 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3297 "parser.cpp" +#line 3308 "parser.cpp" break; - case 215: // expr_vector: "(" expr "," expr "," expr ")" -#line 820 "parser.ypp" + case 216: // expr_vector: "(" expr "," expr "," expr ")" +#line 823 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3303 "parser.cpp" +#line 3314 "parser.cpp" break; - case 216: // expr_float: "-" "float" -#line 825 "parser.ypp" + case 217: // expr_float: "-" "float" +#line 828 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3309 "parser.cpp" +#line 3320 "parser.cpp" break; - case 217: // expr_float: "float" -#line 827 "parser.ypp" + case 218: // expr_float: "float" +#line 830 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3315 "parser.cpp" +#line 3326 "parser.cpp" break; - case 218: // expr_integer: "-" "integer" -#line 832 "parser.ypp" + case 219: // expr_integer: "-" "integer" +#line 835 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3321 "parser.cpp" +#line 3332 "parser.cpp" break; - case 219: // expr_integer: "integer" -#line 834 "parser.ypp" + case 220: // expr_integer: "integer" +#line 837 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3327 "parser.cpp" +#line 3338 "parser.cpp" break; - case 220: // expr_false: "false" -#line 839 "parser.ypp" + case 221: // expr_false: "false" +#line 842 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3333 "parser.cpp" +#line 3344 "parser.cpp" break; - case 221: // expr_true: "true" -#line 844 "parser.ypp" + case 222: // expr_true: "true" +#line 847 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3339 "parser.cpp" +#line 3350 "parser.cpp" break; -#line 3343 "parser.cpp" +#line 3354 "parser.cpp" default: break; @@ -3533,7 +3544,7 @@ namespace xsk { namespace gsc { namespace iw8 { "isdefined", "istrue", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", - ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "path", + ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", @@ -3820,133 +3831,133 @@ namespace xsk { namespace gsc { namespace iw8 { } - const short parser::yypact_ninf_ = -276; + const short parser::yypact_ninf_ = -277; - const short parser::yytable_ninf_ = -212; + const short parser::yytable_ninf_ = -213; const short parser::yypact_[] = { - 23, -276, -276, -40, -40, -30, -276, 54, 23, -276, - -276, -276, -276, -276, -276, -8, -276, -276, -1, 16, - -57, -276, -276, -276, -276, -17, 1128, -276, -276, -276, - 44, -15, -276, -276, -35, -33, -276, 43, -276, -276, - -276, -276, -276, -276, -276, 48, 57, 1128, 996, -17, - 1128, 1128, -31, 25, -276, -276, -276, -276, 2050, -276, - -276, -276, -276, -276, 305, 699, -276, -276, -276, -276, - -276, -276, 722, 1019, -276, -276, 1029, -276, -276, -276, - 1092, 1154, 1224, 1271, -276, -276, 588, 64, -276, -276, - -276, -276, -276, -276, -276, -276, 69, 78, -17, 87, - 82, 91, 93, 101, 95, 103, 1128, 1128, 1266, 996, - -276, 2133, 99, 128, -276, -276, -276, -276, -276, -276, - -276, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - -276, 1194, -17, -276, -276, 119, 121, 1128, -17, -276, - 81, -276, -276, 1128, 1128, -17, 1128, 1128, -17, 1128, - 1434, 1468, -276, 1128, 1780, 1128, -276, 2015, 164, 164, - 2164, 2174, 2246, 2246, -42, -42, -42, -42, 2205, 717, - 2215, 45, 45, -276, -276, -276, 1820, -276, -17, 27, - -276, 135, 823, 1128, 127, -3, 141, 968, 144, 147, - 149, 153, -20, 154, 146, 148, 1062, 152, 168, 169, - -276, 160, 503, 503, -276, -276, -276, 869, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, 165, 166, 170, 174, 175, -276, -276, 635, - -276, -276, -276, -276, -23, 1860, 36, 178, 1900, 38, - 179, 1940, -276, -276, 1979, 181, 2133, 1128, -276, 135, - -276, 1128, -276, 922, 2085, -276, 189, -276, 1128, 197, - 1128, 28, -17, 1128, 140, 184, 185, -276, -276, -276, - -276, 2120, -276, 1128, 1128, 1128, -276, -276, -11, -11, - -276, -276, -276, -276, -276, -276, -276, 196, 200, 201, - 202, -276, -276, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 192, -276, 1128, 205, -276, 1128, - 206, 1128, 214, 2133, 80, -276, -276, 207, 1502, 216, - 1536, 208, -276, -276, -276, 1220, -2, 1570, -276, -276, - -276, 89, 110, 1780, 1128, 1128, 1128, 1128, 2133, 2133, - 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 219, - 112, 220, 114, 222, 1604, 1128, -276, -276, 968, 1128, - 968, 1128, 1128, -17, 78, 221, 227, 1638, 1312, 1356, - 1400, 1128, -276, 1128, -276, 1128, -276, 116, 255, 1672, - -276, 2133, 229, 1706, 248, -276, -276, -276, 230, 232, - 1128, 234, 1128, 237, 1128, 122, 124, 130, -276, 968, - 238, 28, 968, 1128, -276, -276, 231, -276, 250, -276, - 261, -276, -276, -276, -276, -276, 262, -276, 1740, 239, - 246, 254, 968, 968, -276, -276, -276, -276, -276 + 40, -277, -277, -40, -40, -22, -277, 30, 40, -277, + -277, -277, -277, -277, -277, -39, -277, -277, -24, -20, + -52, -277, -277, -277, -277, -54, 1143, -277, -277, -277, + 3, -30, -277, -277, -38, -35, -277, 60, -277, -277, + -277, -277, -277, -277, -277, 68, 82, 1143, 1009, -54, + 1143, 1143, 63, -13, -277, -277, -277, -277, 2139, -277, + -277, -277, -277, -277, 570, 712, -277, -277, -277, -277, + -277, -277, 1032, 1103, -277, -277, 1166, -277, -277, -277, + 1288, 1300, 1310, 1319, -277, -277, 457, 17, -277, -277, + -277, -277, -277, -277, -277, -277, 73, 89, -54, 91, + 97, 96, 105, 112, 108, 114, 1143, 1143, 1357, 1009, + -277, 2222, 113, 115, -277, -277, -277, -277, -277, -277, + -277, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + -277, 1210, -54, -277, -277, -277, 121, 117, 1143, -54, + -277, 76, -277, -277, 1143, 1143, -54, 1143, 1143, -54, + 1143, 1523, 1557, -277, 1143, 1869, 1143, -277, 2104, 88, + 88, 2253, 2263, 2335, 2335, -23, -23, -23, -23, 2294, + 720, 2304, -29, -29, -277, -277, -277, 1909, -277, -54, + -21, -277, 135, 809, 1143, 127, -27, 138, 981, 141, + 144, 146, 148, -71, 154, 140, 145, 1076, 159, 156, + 157, -277, 171, 228, 228, -277, -277, -277, 855, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, 166, 167, 172, 173, 175, -277, -277, + 657, -277, -277, -277, -277, -26, 1949, 4, 190, 1989, + 21, 195, 2029, -277, -277, 2068, 191, 2222, 1143, -277, + 135, -277, 1143, -277, 935, 2174, -277, 199, -277, 1143, + 224, 1143, 80, -54, 1143, 149, 194, 198, -277, -277, + -277, -277, 2209, -277, 1143, 1143, 1143, -277, -277, 147, + 147, -277, -277, -277, -277, -277, -277, -277, 208, 209, + 211, 212, -277, -277, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1143, 213, -277, 1143, 214, -277, + 1143, 215, 1143, 216, 2222, 22, -277, -277, 203, 1591, + 226, 1625, 217, -277, -277, -277, 1237, -4, 1659, -277, + -277, -277, 23, 25, 1869, 1143, 1143, 1143, 1143, 2222, + 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, + 230, 31, 231, 34, 233, 1693, 1143, -277, -277, 981, + 1143, 981, 1143, 1143, -54, 89, 229, 236, 1727, 1401, + 1445, 1489, 1143, -277, 1143, -277, 1143, -277, 37, 267, + 1761, -277, 2222, 239, 1795, 265, -277, -277, -277, 240, + 241, 1143, 242, 1143, 246, 1143, 41, 84, 93, -277, + 981, 247, 80, 981, 1143, -277, -277, 257, -277, 262, + -277, 264, -277, -277, -277, -277, -277, 269, -277, 1829, + 256, 258, 261, 981, 981, -277, -277, -277, -277, -277 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 209, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 210, 211, 0, 0, - 0, 1, 4, 5, 6, 178, 0, 10, 11, 213, - 0, 0, 177, 208, 0, 0, 200, 0, 221, 220, - 202, 203, 204, 205, 206, 0, 0, 0, 180, 0, - 0, 0, 0, 0, 212, 214, 217, 219, 0, 90, + 3, 12, 13, 0, 0, 0, 210, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 211, 212, 0, 0, + 0, 1, 4, 5, 6, 178, 0, 10, 11, 214, + 0, 0, 177, 209, 0, 0, 201, 0, 222, 221, + 203, 204, 205, 206, 207, 0, 0, 0, 180, 0, + 0, 0, 0, 0, 213, 215, 218, 220, 0, 90, 91, 92, 129, 130, 131, 132, 161, 162, 133, 134, 135, 136, 137, 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 156, 157, 158, 0, 0, 0, 0, - 211, 0, 0, 211, 0, 0, 0, 0, 0, 180, - 201, 182, 0, 179, 185, 160, 159, 216, 218, 207, + 212, 0, 0, 212, 0, 0, 0, 0, 0, 180, + 202, 182, 0, 179, 185, 160, 159, 217, 219, 208, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 163, 164, 211, 0, 180, 0, 17, - 0, 19, 176, 0, 180, 0, 0, 180, 0, 0, - 0, 0, 190, 0, 182, 0, 175, 0, 122, 123, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 124, 125, 126, 127, 128, 0, 188, 0, 0, - 179, 186, 0, 0, 0, 0, 0, 0, 0, 0, + 190, 0, 0, 189, 163, 164, 212, 0, 180, 0, + 17, 0, 19, 176, 0, 180, 0, 0, 180, 0, + 0, 0, 0, 191, 0, 182, 0, 175, 0, 122, + 123, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 124, 125, 126, 127, 128, 0, 188, 0, + 0, 179, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 51, 20, 21, 0, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 0, 0, 0, 191, 192, 193, 194, 0, - 195, 196, 197, 198, 199, 0, 0, 0, 0, 0, - 0, 0, 183, 184, 0, 0, 181, 0, 187, 0, - 165, 180, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 180, 180, 0, 191, 192, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 167, 180, 0, 169, 180, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 180, 166, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 180, 168, 180, 170, 180, 215, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 180, 0, 180, 0, 180, 0, 0, 0, 171, 0, - 0, 55, 0, 0, 61, 63, 179, 66, 179, 68, - 179, 172, 173, 174, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 49, 0, 0, 0, 51, 20, 21, 0, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 0, 0, 0, 192, 193, 194, 195, + 0, 196, 197, 198, 199, 200, 0, 0, 0, 0, + 0, 0, 0, 183, 184, 0, 0, 181, 0, 187, + 0, 165, 180, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 180, 180, 0, 192, 193, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 167, 180, 0, 169, + 180, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 180, 166, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 168, 180, 170, 180, 216, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 180, 0, 180, 0, 180, 0, 0, 0, 171, + 0, 0, 55, 0, 0, 61, 63, 179, 66, 179, + 68, 179, 172, 173, 174, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -276, -276, -276, 303, 304, 306, -276, -276, -276, -184, - -276, -95, 142, -108, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, 194, -276, - -275, -269, -267, -276, -276, -276, -276, -276, -12, -6, - -71, -65, -276, -276, 13, -47, -276, -276, -276, 79, - 253, -276, -276, 279, -276, -276, -276, 345, 373, 380, - 390, -276, -276, 0, 6, -276, -13, -276, -276, -276, - 134, -276, -276 + -277, -277, -277, 281, 310, 311, -277, -277, -277, 207, + -277, -95, 150, -81, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 201, -277, + -276, -269, -268, -277, -277, -277, -277, -277, -66, -7, + -65, -55, -277, -277, 306, -47, -277, -277, -277, 12, + 19, -277, -277, 196, -277, -277, -277, 253, 333, 347, + 378, -277, -277, 0, 6, -277, -15, -277, -277, -277, + 142, -277, -277 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 214, - 215, 216, 217, 341, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 111, 402, - 242, 243, 244, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 31, 112, 190, 69, 70, 71, 72, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 215, + 216, 217, 218, 342, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 111, 403, + 243, 244, 245, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 31, 112, 191, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 @@ -3955,557 +3966,575 @@ namespace xsk { namespace gsc { namespace iw8 { const short parser::yytable_[] = { - 15, 113, 151, 17, 17, 143, 342, 30, 15, 18, - 19, 144, 343, 279, 344, 99, 20, 102, 122, 123, - 382, 34, 35, 147, 37, 32, 1, 2, 3, 4, - 5, -211, 97, 301, 100, 103, 29, 98, 25, 141, - 101, 104, 142, 276, 135, 136, 137, 138, 139, 114, - 383, 16, 6, 277, 21, 27, 16, 6, 16, 6, - 34, 35, 113, 37, 26, 117, 118, 284, 41, 42, - 43, 44, 28, 29, 270, 6, 145, 57, 211, 165, - 16, 6, 146, 325, 192, 328, 212, 213, 165, 301, - 165, 96, 193, 105, 106, 194, 195, 196, 152, 197, - 198, 199, 200, 107, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 34, 35, 6, 37, 119, 148, 16, - 6, 41, 42, 43, 44, 149, 150, 376, 154, 150, - 210, 211, 165, 137, 138, 139, 385, 153, 245, 212, - 213, 165, 187, 156, 246, 155, 342, 157, 191, 158, - 254, 165, 343, 159, 344, 257, 146, 386, 260, 392, - 189, 394, 165, 418, 165, 147, 165, 256, 165, 431, - 259, 432, 16, 6, 165, 188, 165, 433, 143, 166, - 245, 271, 165, 275, 144, 245, 246, 278, 269, 285, - 280, 246, 254, 281, 398, 282, 400, 254, 146, 283, - 296, 296, 288, 146, 289, 245, 297, 297, 292, 287, - 295, 246, 254, 254, 293, 294, 339, 254, 146, 146, - 58, 302, 303, 146, 326, 329, 304, 143, 143, 247, - 305, 306, 332, 144, 144, 434, 337, 118, 437, 348, - 349, 108, 354, 369, 115, 116, 355, 356, 357, 145, - 135, 136, 137, 138, 139, 146, 371, 373, 447, 448, - 375, 245, 379, 377, 381, 391, 393, 246, 395, 296, - 423, 247, 419, 254, 143, 297, 247, 406, 439, 146, - 144, 254, 346, 407, 334, 421, 424, 146, 425, 405, - 427, 247, 247, 429, 435, 444, 247, 440, 145, 145, - 160, 161, 445, 164, 146, 146, 351, 352, 441, 442, - 446, 22, 23, 436, 24, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 273, 186, 286, -191, -191, 370, - -191, 0, 372, 0, -191, 145, 0, 255, 0, 0, - 258, 146, 247, 261, 0, -191, 0, 264, -191, 266, - 247, 0, 0, 426, 0, 428, 245, 430, 245, 0, - 0, 0, 246, 0, 246, 0, 0, 0, 254, 0, - 254, 0, 0, 404, 146, 0, 146, 274, 397, 0, - 0, 0, 0, 0, 0, 0, -191, -191, 0, 0, - 291, 0, 0, 248, 415, 0, 416, 245, 417, 296, - 245, 0, 0, 246, 0, 297, 246, 0, 0, 254, - 0, 254, 254, 0, 0, 146, 0, 146, 146, 249, - 245, 245, 0, 0, 0, 0, 246, 246, 0, 0, - 0, 0, 254, 254, 0, 248, 0, 0, 146, 146, - 248, 0, 0, 0, 0, 0, 0, 247, 0, 247, - 0, 333, 0, 0, 0, 248, 248, 0, 0, 0, - 248, 249, 338, 0, 340, 0, 249, 347, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, - 0, 298, 299, 0, 0, 250, 249, 0, 247, 0, - 247, 247, 0, 0, 0, 0, 0, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 0, 0, - 0, 247, 247, 251, 0, 374, 248, 0, 0, 0, - 252, 0, 0, 0, 248, 34, 35, 250, 37, 0, - 253, 0, 250, 41, 42, 43, 44, 0, 387, 388, - 389, 390, 249, 211, 0, 0, 0, 250, 250, 0, - 345, 0, 250, 0, 0, 251, 0, 0, 0, 0, - 251, 0, 252, 399, 0, 401, 403, 252, 0, 0, - 0, 0, 253, 0, 0, 251, 251, 253, 0, 0, - 251, 0, 252, 252, 16, 6, 0, 252, 0, 0, - 0, 0, 253, 253, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 250, 0, - -199, -199, 0, -199, 0, 0, 250, -199, 0, 0, - 0, 248, 0, 248, 147, 0, 0, 0, -199, 0, - 0, -199, -211, 0, 307, 308, 251, 309, 310, 0, - 0, 0, 0, 252, 251, 0, 0, 249, 0, 249, - 0, 252, 0, 253, 0, 0, 0, 34, 35, 0, - 37, 253, 248, 0, 248, 248, 0, 0, 0, -199, - -199, 0, 0, 0, 0, 141, 0, 0, 142, 0, - 0, 0, 0, 311, 312, 248, 248, 0, 249, 0, - 345, 249, 0, 0, 0, 0, 0, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 0, 0, - 0, 249, 249, 250, 0, 250, 16, 6, 0, 0, - 0, -192, -192, 0, -192, 0, 0, 0, -192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, - 0, 251, -192, 251, -193, -193, 0, -193, 252, 0, - 252, -193, 0, 0, 250, 0, 250, 250, 253, 0, - 253, 0, -193, 0, 0, -193, 0, 122, 123, 0, - 0, 126, 127, 128, 129, 130, 131, 250, 250, 0, - -192, -192, 251, 0, 251, 251, 0, 0, 0, 252, - 0, 252, 252, 135, 136, 137, 138, 139, 0, 253, - 0, 253, 253, -193, -193, 251, 251, 0, 0, 0, - 0, 0, 252, 252, 0, 0, 192, 272, 0, 0, - 0, 0, 253, 253, 193, 0, 0, 194, 195, 196, - 0, 197, 198, 199, 200, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 34, 35, 0, 37, 0, - 0, 0, 0, 41, 42, 43, 44, 0, 0, 0, - 0, 150, 192, 211, 0, 0, 0, 0, 0, 0, - 193, 212, 213, 194, 195, 196, 0, 197, 198, 199, - 200, 0, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 34, 35, 0, 37, 0, 0, 0, 0, 41, - 42, 43, 44, 0, 16, 6, 0, 150, 300, 211, - 0, 0, 0, 0, 0, 192, 335, 212, 213, 0, - 0, 0, 0, 193, 0, 0, 194, 195, 196, 0, - 197, 198, 199, 200, 0, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 34, 35, 0, 37, 0, 0, - 16, 6, 41, 42, 43, 44, 0, 0, 0, 0, - 150, 192, 211, 0, 0, 0, 0, 0, 0, 193, - 212, 213, 194, 195, 196, 0, 197, 198, 199, 200, - 0, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 34, 35, 0, 37, 33, 0, 0, 0, 41, 42, - 43, 44, 0, 16, 6, 0, 150, 0, 211, 0, - 0, 0, 0, 0, 0, 0, 212, 213, 34, 35, + 15, 113, 152, 17, 17, 30, 343, 25, 15, 18, + 19, 144, 99, 344, 345, 102, 285, 97, 383, 277, + 148, 145, 98, 29, 20, 32, 271, 57, -212, 278, + 21, 166, 27, 26, 100, 103, 28, 122, 123, 6, + 101, 104, 29, 1, 2, 3, 4, 5, 384, 114, + 96, 326, 16, 6, 16, 6, 166, 16, 6, 137, + 138, 139, 113, 135, 136, 137, 138, 139, 329, 377, + 386, 149, 387, 166, 166, 166, 146, 166, 393, 193, + 119, 395, 147, 166, 419, 246, 166, 194, 432, 166, + 195, 196, 197, 166, 198, 199, 200, 201, 153, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 34, 35, + 105, 37, 34, 35, 106, 37, 41, 42, 43, 44, + 41, 42, 43, 44, 151, 211, 212, 246, 107, 150, + 212, 433, 246, 6, 213, 214, 166, 151, 213, 214, + 434, 154, 188, 155, 247, 166, 343, 297, 297, 192, + 156, 255, 246, 344, 345, 157, 258, 147, 158, 261, + 117, 118, 159, 248, 160, 166, 167, 148, 16, 6, + 249, 189, 16, 6, 135, 136, 137, 138, 139, 34, + 35, 272, 37, 276, 279, 144, 247, 281, 286, 270, + 282, 247, 283, 255, 284, 145, 289, 141, 255, 147, + 142, 290, 294, 295, 147, 248, 298, 298, 246, 288, + 248, 247, 249, 255, 255, 293, 297, 249, 255, 147, + 147, 296, 303, 304, 147, 248, 248, 58, 305, 306, + 248, 307, 249, 249, 144, 144, 327, 249, 143, 16, + 6, 330, 333, 340, 145, 145, 338, 118, 108, 349, + 146, 115, 116, 350, 355, 356, 147, 357, 358, 378, + 34, 35, 376, 37, 370, 372, 374, 247, 41, 42, + 43, 44, 380, 382, 255, 298, 392, 394, 212, 396, + 147, 144, 255, 347, 420, 407, 248, 424, 147, 22, + 406, 145, 408, 249, 248, 422, 425, 426, 428, 146, + 146, 249, 430, 436, 440, 147, 147, 161, 162, 441, + 165, 442, 445, 246, 446, 246, 443, 447, 23, 24, + 16, 6, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 437, 187, 274, 0, 287, 146, 250, 0, 0, + 0, 0, 147, 0, 246, 256, 297, 246, 259, 0, + 0, 262, 0, 0, 427, 265, 429, 267, 431, 0, + 0, 0, 247, 0, 247, 0, 0, 246, 246, 255, + 0, 255, 0, 0, 405, 147, 0, 147, 0, 250, + 0, 248, 0, 248, 250, 275, 0, 0, 249, 0, + 249, 0, 0, 0, 251, 280, 0, 0, 292, 299, + 300, 0, 0, 247, 250, 298, 247, 0, 0, 0, + 255, 0, 255, 255, 0, 302, 147, 0, 147, 147, + 0, 0, 248, 0, 248, 248, 247, 247, 0, 249, + 0, 249, 249, 255, 255, 0, 251, 0, 0, 147, + 147, 251, 0, 0, 190, 248, 248, 0, 0, 0, + 0, 257, 249, 249, 260, 0, 251, 251, 0, 334, + 250, 251, 0, 0, 0, 0, 0, 0, 346, 0, + 339, 302, 341, 0, 252, 348, 0, 0, 0, -200, + -200, 0, -200, 0, 0, 0, -200, 354, 253, 0, + 0, 0, 0, 148, 0, 0, 0, -200, 0, 0, + -200, -212, 0, 0, 0, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 252, 251, 0, 254, + 0, 252, 0, 375, 0, 251, 0, 0, 0, 0, + 253, 0, 0, 0, 0, 253, 252, 252, -200, -200, + -200, 252, 0, 0, 0, 0, 388, 389, 390, 391, + 253, 253, 0, 0, 0, 253, 0, 0, 0, 0, + 0, 254, 0, 0, 0, 250, 254, 250, 335, 0, + 0, 400, 0, 402, 404, 0, 399, 0, 401, 0, + 0, 254, 254, 0, 0, 0, 254, 0, 0, 0, + 352, 353, -192, -192, 0, -192, 0, 252, 0, -192, + 0, 0, 0, 0, 0, 252, 250, 0, 346, 250, + -192, 253, 0, -192, 0, 439, 0, 435, 0, 253, + 438, 0, 251, 371, 251, 0, 373, 0, 0, 250, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 448, 449, 254, 0, 0, 0, 0, 0, 0, 0, + 254, -192, -192, -192, 0, 0, 308, 309, 0, 310, + 311, 0, 0, 251, 0, 251, 251, 0, 0, 0, + 0, 0, 398, 0, 0, 0, 0, 0, 0, 34, + 35, 0, 37, 0, 0, 0, 251, 251, 416, 0, + 417, 0, 418, 0, 0, 0, 0, 141, 0, 0, + 142, 0, 252, 0, 252, 312, 313, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 253, 0, 253, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 0, 0, 0, 0, -193, -193, 0, -193, 143, 16, + 6, -193, 0, 252, 0, 252, 252, 254, 0, 254, + 0, 0, -193, 0, 0, -193, 0, 253, 0, 253, + 253, 0, 0, 0, 0, 0, 252, 252, 0, 0, + 122, 123, 0, 0, 126, 127, 128, 129, 130, 131, + 253, 253, 0, 0, 0, 0, 0, 0, 254, 0, + 254, 254, 0, -193, -193, -193, 135, 136, 137, 138, + 139, 0, 193, 273, 0, 0, 0, 0, 0, 0, + 194, 254, 254, 195, 196, 197, 0, 198, 199, 200, + 201, 0, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 34, 35, 0, 37, 0, 0, 0, 0, 41, + 42, 43, 44, 0, 0, 0, 0, 151, 193, 212, + 0, 0, 0, 0, 0, 0, 194, 213, 214, 195, + 196, 197, 0, 198, 199, 200, 201, 0, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 34, 35, 0, + 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, + 0, 16, 6, 151, 301, 212, 0, 0, 0, 0, + 0, 0, 0, 213, 214, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 193, 336, + 0, 0, 0, 0, 0, 0, 194, 16, 6, 195, + 196, 197, 0, 198, 199, 200, 201, 0, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 34, 35, 0, + 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, + 0, 0, 0, 151, 193, 212, 0, 0, 0, 0, + 0, 0, 194, 213, 214, 195, 196, 197, 0, 198, + 199, 200, 201, 0, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 34, 35, 0, 37, 33, 0, 0, + 0, 41, 42, 43, 44, 0, 0, 16, 6, 151, + 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, + 214, 34, 35, 36, 37, 38, 39, 40, 0, 41, + 42, 43, 44, 45, 46, 47, 0, 0, 0, 109, + 110, 0, 0, 49, -194, -194, 0, -194, 0, 0, + 0, -194, 0, 16, 6, 0, 0, 0, 0, 50, + 51, 0, -194, 0, 33, -194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, + 0, 16, 6, 29, 54, 55, 56, 57, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, - 45, 46, 47, 0, 0, 0, 109, 110, 0, 0, - 49, -194, -194, 0, -194, 0, 0, 0, -194, 16, - 6, 34, 35, 0, 37, 0, 50, 51, 140, -194, - 33, 0, -194, 0, 0, 0, 0, 0, 0, 141, - 0, 0, 142, 52, 0, 0, 53, 16, 6, 29, - 54, 55, 56, 57, 34, 35, 36, 37, 38, 39, - 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, - -194, -194, 48, 0, 0, 0, 49, 0, 290, 0, - 16, 6, 0, 0, -195, -195, 0, -195, 0, 0, - 0, -195, 50, 51, 0, 0, 33, 0, 0, 0, - 0, 0, -195, 0, 0, -195, 0, 0, 0, 52, - 0, 0, 53, 16, 6, 29, 54, 55, 56, 57, - 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, - 43, 44, 45, 46, 47, 0, 0, 0, 48, 0, - 0, 0, 49, -195, -195, 0, -196, -196, 0, -196, - 0, 0, 0, -196, 0, 0, 0, 0, 50, 51, - 0, 0, 33, 0, -196, 0, 0, -196, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 53, 16, - 6, 29, 54, 55, 56, 57, 34, 35, 36, 37, - 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 109, -196, -196, 0, 49, 0, - 0, 0, 34, 35, 0, 37, -197, -197, 0, -197, - 0, 0, 0, -197, 50, 51, 0, 0, 0, 0, - 141, 0, 0, 142, -197, 0, 0, -197, 311, 312, - 0, 52, 0, 0, 53, 16, 6, 29, 54, 55, - 56, 57, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, -198, -198, 0, -198, 0, 0, 0, - -198, 16, 6, 162, 0, -197, -197, 0, 163, 0, - 0, -198, 0, 121, -198, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 0, 0, 409, - 0, 0, -198, -198, 410, 0, 0, 0, 0, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 411, 0, 0, 0, 0, 412, 0, - 0, 0, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 413, 0, 0, - 0, 0, 414, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 45, 46, 47, -194, -194, -194, 48, 0, 0, 0, + 49, 0, 291, 0, 0, -195, -195, 0, -195, 0, + 0, 0, -195, 0, 0, 0, 50, 51, 0, 0, + 0, 33, 0, -195, 0, 0, -195, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 53, 0, 16, 6, + 29, 54, 55, 56, 57, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 48, -195, -195, -195, 49, 34, 35, + 0, 37, 0, 0, 0, 140, 0, 0, 0, 0, + 0, 0, 0, 50, 51, 0, 141, 0, 33, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 263, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, - 0, 132, 133, 134, 135, 136, 137, 138, 139, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 380, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 384, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 52, 0, 0, 53, 0, 16, 6, 29, 54, 55, + 56, 57, 34, 35, 36, 37, 38, 39, 40, 0, + 41, 42, 43, 44, 45, 46, 47, 143, 16, 6, + 109, 0, 0, 0, 49, 0, 0, 0, 0, 34, + 35, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 50, 51, 0, 0, 0, 0, 0, 141, 0, 0, + 142, 0, 0, 0, 0, 312, 313, 52, 0, 0, + 53, 0, 16, 6, 29, 54, 55, 56, 57, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + -196, -196, 0, -196, 0, 0, 0, -196, 143, 16, + 6, 0, -197, -197, 0, -197, 0, 0, -196, -197, + 0, -196, -198, -198, 0, -198, 0, 0, 0, -198, + -197, -199, -199, -197, -199, 0, 0, 0, -199, 0, + -198, 0, 0, -198, 0, 0, 0, 0, 0, -199, + 0, 0, -199, 0, 0, 0, 0, 0, 0, -196, + -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -197, -197, -197, 0, 0, 0, 0, 0, 0, + 0, -198, -198, -198, 163, 0, 0, 0, 0, 164, + -199, -199, -199, 0, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 396, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 408, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, - 0, 132, 133, 134, 135, 136, 137, 138, 139, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 422, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 443, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 410, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 412, 0, 0, 0, 0, 413, 0, 0, + 0, 0, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 414, 0, 0, 0, + 0, 415, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 265, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 263, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 264, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, + 132, 133, 134, 135, 136, 137, 138, 139, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 381, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 385, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 268, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 324, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 327, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 330, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 331, 0, 0, 0, 0, 121, 0, 0, 122, + 397, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 132, 133, 134, 135, 136, 137, 138, 139, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 423, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 444, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, - 267, 0, 121, 0, 0, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 134, 135, 136, 137, 138, 139, 120, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 266, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 336, 121, 0, 0, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 134, 135, 136, 137, 138, 139, 350, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 0, 0, 0, 0, 0, 132, 133, 134, 135, - 136, 137, 138, 139, 122, 123, 0, 125, 126, 127, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 269, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 325, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 328, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 331, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 332, 0, 0, 0, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 132, 133, 134, 135, 136, 137, 138, 139, 268, + 0, 121, 0, 0, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, + 135, 136, 137, 138, 139, 120, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 337, 121, 0, 0, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, + 135, 136, 137, 138, 139, 351, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 121, + 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, + 137, 138, 139, 122, 123, 0, 125, 126, 127, 128, + 129, 130, 131, 122, 123, 0, 0, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 0, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 122, 123, 0, 0, 126, 127, 128, 129, 130, 131, 122, 123, 0, 0, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 0, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 122, 123, 0, 0, 126, - 127, 128, 129, 130, 131, 122, 123, 0, 0, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 133, - 134, 135, 136, 137, 138, 139, 0, 0, 0, 133, - 0, 135, 136, 137, 138, 139, 122, 123, 0, 0, - 0, 0, 128, 129, 130, 131, 0, 0, 0, 0, + 128, 129, 130, 131, 0, 0, 0, 0, 133, 134, + 135, 136, 137, 138, 139, 0, 0, 0, 133, 0, + 135, 136, 137, 138, 139, 122, 123, 0, 0, 0, + 0, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 136, 137, 138, 139 + 0, 135, 136, 137, 138, 139 }; const short parser::yycheck_[] = { - 0, 48, 97, 3, 4, 76, 281, 20, 8, 3, - 4, 76, 281, 197, 281, 50, 46, 50, 60, 61, - 22, 32, 33, 46, 35, 25, 3, 4, 5, 6, - 7, 54, 47, 217, 34, 35, 93, 52, 46, 50, - 34, 35, 53, 46, 86, 87, 88, 89, 90, 49, - 52, 91, 92, 56, 0, 56, 91, 92, 91, 92, - 32, 33, 109, 35, 72, 96, 97, 87, 40, 41, - 42, 43, 56, 93, 47, 92, 76, 97, 50, 52, - 91, 92, 76, 47, 3, 47, 58, 59, 52, 273, - 52, 47, 11, 50, 46, 14, 15, 16, 98, 18, - 19, 20, 21, 46, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 92, 35, 92, 54, 91, - 92, 40, 41, 42, 43, 56, 48, 47, 46, 48, - 49, 50, 52, 88, 89, 90, 47, 50, 150, 58, - 59, 52, 142, 50, 150, 54, 421, 46, 148, 54, - 150, 52, 421, 50, 421, 155, 150, 47, 158, 47, - 147, 47, 52, 47, 52, 46, 52, 154, 52, 47, - 157, 47, 91, 92, 52, 54, 52, 47, 249, 51, - 192, 46, 52, 56, 249, 197, 192, 46, 188, 202, - 46, 197, 192, 46, 378, 46, 380, 197, 192, 46, - 212, 213, 56, 197, 56, 217, 212, 213, 56, 55, - 50, 217, 212, 213, 46, 46, 19, 217, 212, 213, - 26, 56, 56, 217, 46, 46, 56, 298, 299, 150, - 56, 56, 51, 298, 299, 419, 47, 97, 422, 55, - 55, 47, 46, 51, 50, 51, 46, 46, 46, 249, - 86, 87, 88, 89, 90, 249, 51, 51, 442, 443, - 46, 273, 46, 56, 56, 46, 46, 273, 46, 281, - 22, 192, 17, 273, 345, 281, 197, 56, 47, 273, - 345, 281, 282, 56, 271, 56, 56, 281, 56, 384, - 56, 212, 213, 56, 56, 56, 217, 47, 298, 299, - 106, 107, 56, 109, 298, 299, 293, 294, 47, 47, - 56, 8, 8, 421, 8, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 192, 141, 202, 32, 33, 326, - 35, -1, 329, -1, 39, 345, -1, 153, -1, -1, - 156, 345, 273, 159, -1, 50, -1, 163, 53, 165, - 281, -1, -1, 410, -1, 412, 378, 414, 380, -1, - -1, -1, 378, -1, 380, -1, -1, -1, 378, -1, - 380, -1, -1, 383, 378, -1, 380, 193, 375, -1, - -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, - 206, -1, -1, 150, 391, -1, 393, 419, 395, 421, - 422, -1, -1, 419, -1, 421, 422, -1, -1, 419, - -1, 421, 422, -1, -1, 419, -1, 421, 422, 150, - 442, 443, -1, -1, -1, -1, 442, 443, -1, -1, - -1, -1, 442, 443, -1, 192, -1, -1, 442, 443, - 197, -1, -1, -1, -1, -1, -1, 378, -1, 380, - -1, 267, -1, -1, -1, 212, 213, -1, -1, -1, - 217, 192, 278, -1, 280, -1, 197, 283, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 295, - -1, 212, 213, -1, -1, 150, 217, -1, 419, -1, - 421, 422, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, -1, -1, - -1, 442, 443, 150, -1, 331, 273, -1, -1, -1, - 150, -1, -1, -1, 281, 32, 33, 192, 35, -1, - 150, -1, 197, 40, 41, 42, 43, -1, 354, 355, - 356, 357, 273, 50, -1, -1, -1, 212, 213, -1, - 281, -1, 217, -1, -1, 192, -1, -1, -1, -1, - 197, -1, 192, 379, -1, 381, 382, 197, -1, -1, - -1, -1, 192, -1, -1, 212, 213, 197, -1, -1, - 217, -1, 212, 213, 91, 92, -1, 217, -1, -1, - -1, -1, 212, 213, -1, -1, -1, 217, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 423, 273, -1, - 32, 33, -1, 35, -1, -1, 281, 39, -1, -1, - -1, 378, -1, 380, 46, -1, -1, -1, 50, -1, - -1, 53, 54, -1, 9, 10, 273, 12, 13, -1, - -1, -1, -1, 273, 281, -1, -1, 378, -1, 380, - -1, 281, -1, 273, -1, -1, -1, 32, 33, -1, - 35, 281, 419, -1, 421, 422, -1, -1, -1, 91, - 92, -1, -1, -1, -1, 50, -1, -1, 53, -1, - -1, -1, -1, 58, 59, 442, 443, -1, 419, -1, - 421, 422, -1, -1, -1, -1, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, -1, -1, - -1, 442, 443, 378, -1, 380, 91, 92, -1, -1, - -1, 32, 33, -1, 35, -1, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, - -1, 378, 53, 380, 32, 33, -1, 35, 378, -1, - 380, 39, -1, -1, 419, -1, 421, 422, 378, -1, - 380, -1, 50, -1, -1, 53, -1, 60, 61, -1, - -1, 64, 65, 66, 67, 68, 69, 442, 443, -1, - 91, 92, 419, -1, 421, 422, -1, -1, -1, 419, - -1, 421, 422, 86, 87, 88, 89, 90, -1, 419, - -1, 421, 422, 91, 92, 442, 443, -1, -1, -1, - -1, -1, 442, 443, -1, -1, 3, 4, -1, -1, - -1, -1, 442, 443, 11, -1, -1, 14, 15, 16, - -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, - -1, -1, -1, 40, 41, 42, 43, -1, -1, -1, - -1, 48, 3, 50, -1, -1, -1, -1, -1, -1, - 11, 58, 59, 14, 15, 16, -1, 18, 19, 20, + 0, 48, 97, 3, 4, 20, 282, 46, 8, 3, + 4, 76, 50, 282, 282, 50, 87, 47, 22, 46, + 46, 76, 52, 94, 46, 25, 47, 98, 54, 56, + 0, 52, 56, 72, 34, 35, 56, 60, 61, 93, + 34, 35, 94, 3, 4, 5, 6, 7, 52, 49, + 47, 47, 92, 93, 92, 93, 52, 92, 93, 88, + 89, 90, 109, 86, 87, 88, 89, 90, 47, 47, + 47, 54, 47, 52, 52, 52, 76, 52, 47, 3, + 93, 47, 76, 52, 47, 151, 52, 11, 47, 52, + 14, 15, 16, 52, 18, 19, 20, 21, 98, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 50, 35, 32, 33, 46, 35, 40, 41, 42, 43, + 40, 41, 42, 43, 48, 49, 50, 193, 46, 56, + 50, 47, 198, 93, 58, 59, 52, 48, 58, 59, + 47, 50, 142, 46, 151, 52, 422, 213, 214, 149, + 54, 151, 218, 422, 422, 50, 156, 151, 46, 159, + 97, 98, 54, 151, 50, 52, 51, 46, 92, 93, + 151, 54, 92, 93, 86, 87, 88, 89, 90, 32, + 33, 46, 35, 56, 46, 250, 193, 46, 203, 189, + 46, 198, 46, 193, 46, 250, 56, 50, 198, 193, + 53, 56, 46, 46, 198, 193, 213, 214, 274, 55, + 198, 218, 193, 213, 214, 56, 282, 198, 218, 213, + 214, 50, 56, 56, 218, 213, 214, 26, 56, 56, + 218, 56, 213, 214, 299, 300, 46, 218, 91, 92, + 93, 46, 51, 19, 299, 300, 47, 98, 47, 55, + 250, 50, 51, 55, 46, 46, 250, 46, 46, 56, + 32, 33, 46, 35, 51, 51, 51, 274, 40, 41, + 42, 43, 46, 56, 274, 282, 46, 46, 50, 46, + 274, 346, 282, 283, 17, 56, 274, 22, 282, 8, + 385, 346, 56, 274, 282, 56, 56, 56, 56, 299, + 300, 282, 56, 56, 47, 299, 300, 106, 107, 47, + 109, 47, 56, 379, 56, 381, 47, 56, 8, 8, + 92, 93, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 422, 141, 193, -1, 203, 346, 151, -1, -1, + -1, -1, 346, -1, 420, 154, 422, 423, 157, -1, + -1, 160, -1, -1, 411, 164, 413, 166, 415, -1, + -1, -1, 379, -1, 381, -1, -1, 443, 444, 379, + -1, 381, -1, -1, 384, 379, -1, 381, -1, 193, + -1, 379, -1, 381, 198, 194, -1, -1, 379, -1, + 381, -1, -1, -1, 151, 198, -1, -1, 207, 213, + 214, -1, -1, 420, 218, 422, 423, -1, -1, -1, + 420, -1, 422, 423, -1, 218, 420, -1, 422, 423, + -1, -1, 420, -1, 422, 423, 443, 444, -1, 420, + -1, 422, 423, 443, 444, -1, 193, -1, -1, 443, + 444, 198, -1, -1, 148, 443, 444, -1, -1, -1, + -1, 155, 443, 444, 158, -1, 213, 214, -1, 268, + 274, 218, -1, -1, -1, -1, -1, -1, 282, -1, + 279, 274, 281, -1, 151, 284, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, 39, 296, 151, -1, + -1, -1, -1, 46, -1, -1, -1, 50, -1, -1, + 53, 54, -1, -1, -1, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 193, 274, -1, 151, + -1, 198, -1, 332, -1, 282, -1, -1, -1, -1, + 193, -1, -1, -1, -1, 198, 213, 214, 91, 92, + 93, 218, -1, -1, -1, -1, 355, 356, 357, 358, + 213, 214, -1, -1, -1, 218, -1, -1, -1, -1, + -1, 193, -1, -1, -1, 379, 198, 381, 272, -1, + -1, 380, -1, 382, 383, -1, 379, -1, 381, -1, + -1, 213, 214, -1, -1, -1, 218, -1, -1, -1, + 294, 295, 32, 33, -1, 35, -1, 274, -1, 39, + -1, -1, -1, -1, -1, 282, 420, -1, 422, 423, + 50, 274, -1, 53, -1, 424, -1, 420, -1, 282, + 423, -1, 379, 327, 381, -1, 330, -1, -1, 443, + 444, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 443, 444, 274, -1, -1, -1, -1, -1, -1, -1, + 282, 91, 92, 93, -1, -1, 9, 10, -1, 12, + 13, -1, -1, 420, -1, 422, 423, -1, -1, -1, + -1, -1, 376, -1, -1, -1, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, 443, 444, 392, -1, + 394, -1, 396, -1, -1, -1, -1, 50, -1, -1, + 53, -1, 379, -1, 381, 58, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 379, -1, 381, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + -1, -1, -1, -1, 32, 33, -1, 35, 91, 92, + 93, 39, -1, 420, -1, 422, 423, 379, -1, 381, + -1, -1, 50, -1, -1, 53, -1, 420, -1, 422, + 423, -1, -1, -1, -1, -1, 443, 444, -1, -1, + 60, 61, -1, -1, 64, 65, 66, 67, 68, 69, + 443, 444, -1, -1, -1, -1, -1, -1, 420, -1, + 422, 423, -1, 91, 92, 93, 86, 87, 88, 89, + 90, -1, 3, 4, -1, -1, -1, -1, -1, -1, + 11, 443, 444, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, -1, 40, - 41, 42, 43, -1, 91, 92, -1, 48, 49, 50, - -1, -1, -1, -1, -1, 3, 4, 58, 59, -1, - -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, - 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, - 91, 92, 40, 41, 42, 43, -1, -1, -1, -1, - 48, 3, 50, -1, -1, -1, -1, -1, -1, 11, - 58, 59, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, 8, -1, -1, -1, 40, 41, - 42, 43, -1, 91, 92, -1, 48, -1, 50, -1, - -1, -1, -1, -1, -1, -1, 58, 59, 32, 33, + 41, 42, 43, -1, -1, -1, -1, 48, 3, 50, + -1, -1, -1, -1, -1, -1, 11, 58, 59, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, + -1, 92, 93, 48, 49, 50, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -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, + -1, -1, -1, -1, -1, -1, 11, 92, 93, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, + -1, -1, -1, 48, 3, 50, -1, -1, -1, -1, + -1, -1, 11, 58, 59, 14, 15, 16, -1, 18, + 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 8, -1, -1, + -1, 40, 41, 42, 43, -1, -1, 92, 93, 48, + -1, 50, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, 45, 46, -1, -1, -1, 50, + 51, -1, -1, 54, 32, 33, -1, 35, -1, -1, + -1, 39, -1, 92, 93, -1, -1, -1, -1, 70, + 71, -1, 50, -1, 8, 53, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 87, -1, -1, 90, + -1, 92, 93, 94, 95, 96, 97, 98, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, - 44, 45, 46, -1, -1, -1, 50, 51, -1, -1, - 54, 32, 33, -1, 35, -1, -1, -1, 39, 91, - 92, 32, 33, -1, 35, -1, 70, 71, 39, 50, - 8, -1, 53, -1, -1, -1, -1, -1, -1, 50, - -1, -1, 53, 87, -1, -1, 90, 91, 92, 93, - 94, 95, 96, 97, 32, 33, 34, 35, 36, 37, - 38, -1, 40, 41, 42, 43, 44, 45, 46, -1, - 91, 92, 50, -1, -1, -1, 54, -1, 56, -1, - 91, 92, -1, -1, 32, 33, -1, 35, -1, -1, - -1, 39, 70, 71, -1, -1, 8, -1, -1, -1, - -1, -1, 50, -1, -1, 53, -1, -1, -1, 87, - -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, - 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, - 42, 43, 44, 45, 46, -1, -1, -1, 50, -1, - -1, -1, 54, 91, 92, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, -1, 70, 71, - -1, -1, 8, -1, 50, -1, -1, 53, -1, -1, - -1, -1, -1, -1, -1, 87, -1, -1, 90, 91, - 92, 93, 94, 95, 96, 97, 32, 33, 34, 35, - 36, 37, 38, -1, 40, 41, 42, 43, 44, 45, - 46, -1, -1, -1, 50, 91, 92, -1, 54, -1, - -1, -1, 32, 33, -1, 35, 32, 33, -1, 35, - -1, -1, -1, 39, 70, 71, -1, -1, -1, -1, - 50, -1, -1, 53, 50, -1, -1, 53, 58, 59, - -1, 87, -1, -1, 90, 91, 92, 93, 94, 95, - 96, 97, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 32, 33, -1, 35, -1, -1, -1, - 39, 91, 92, 47, -1, 91, 92, -1, 52, -1, - -1, 50, -1, 57, 53, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 90, -1, -1, 47, - -1, -1, 91, 92, 52, -1, -1, -1, -1, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 47, -1, -1, -1, -1, 52, -1, - -1, -1, -1, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 47, -1, -1, - -1, -1, 52, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 44, 45, 46, 91, 92, 93, 50, -1, -1, -1, + 54, -1, 56, -1, -1, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, 70, 71, -1, -1, + -1, 8, -1, 50, -1, -1, 53, -1, -1, -1, + -1, -1, -1, 87, -1, -1, 90, -1, 92, 93, + 94, 95, 96, 97, 98, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 45, 46, + -1, -1, -1, 50, 91, 92, 93, 54, 32, 33, + -1, 35, -1, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, 70, 71, -1, 50, -1, 8, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 47, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 47, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 47, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 47, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 87, -1, -1, 90, -1, 92, 93, 94, 95, 96, + 97, 98, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, 45, 46, 91, 92, 93, + 50, -1, -1, -1, 54, -1, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, + 70, 71, -1, -1, -1, -1, -1, 50, -1, -1, + 53, -1, -1, -1, -1, 58, 59, 87, -1, -1, + 90, -1, 92, 93, 94, 95, 96, 97, 98, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 32, 33, -1, 35, -1, -1, -1, 39, 91, 92, + 93, -1, 32, 33, -1, 35, -1, -1, 50, 39, + -1, 53, 32, 33, -1, 35, -1, -1, -1, 39, + 50, 32, 33, 53, 35, -1, -1, -1, 39, -1, + 50, -1, -1, 53, -1, -1, -1, -1, -1, 50, + -1, -1, 53, -1, -1, -1, -1, -1, -1, 91, + 92, 93, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 91, 92, 93, -1, -1, -1, -1, -1, -1, + -1, 91, 92, 93, 47, -1, -1, -1, -1, 52, + 91, 92, 93, -1, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 47, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 47, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 47, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 47, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 83, 84, 85, 86, 87, 88, 89, 90, 47, -1, + -1, -1, -1, 52, -1, -1, -1, -1, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 47, -1, -1, -1, -1, 52, -1, -1, + -1, -1, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 47, -1, -1, -1, + -1, 52, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 47, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 47, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 52, -1, -1, -1, -1, 57, -1, -1, 60, + 47, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 47, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, - 55, -1, 57, -1, -1, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 56, 57, -1, -1, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 83, 84, 85, 86, 87, 88, 89, - 90, -1, -1, -1, -1, -1, 83, 84, 85, 86, - 87, 88, 89, 90, 60, 61, -1, 63, 64, 65, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 52, -1, -1, -1, -1, 57, -1, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 55, + -1, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 57, + -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 83, 84, 85, 86, 87, 88, 89, 90, + -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 60, 61, -1, 63, 64, 65, 66, + 67, 68, 69, 60, 61, -1, -1, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 83, 84, 85, 86, + 87, 88, 89, 90, -1, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 60, 61, -1, -1, 64, 65, 66, 67, 68, 69, 60, 61, -1, -1, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 90, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 60, 61, -1, -1, 64, - 65, 66, 67, 68, 69, 60, 61, -1, -1, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, 84, - 85, 86, 87, 88, 89, 90, -1, -1, -1, 84, - -1, 86, 87, 88, 89, 90, 60, 61, -1, -1, - -1, -1, 66, 67, 68, 69, -1, -1, -1, -1, + 66, 67, 68, 69, -1, -1, -1, -1, 84, 85, + 86, 87, 88, 89, 90, -1, -1, -1, 84, -1, + 86, 87, 88, 89, 90, 60, 61, -1, -1, -1, + -1, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 86, 87, 88, 89, 90 + -1, 86, 87, 88, 89, 90 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 92, 108, 109, 110, - 111, 112, 113, 114, 115, 180, 91, 180, 181, 181, - 46, 0, 110, 111, 112, 46, 72, 56, 56, 93, - 183, 160, 180, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 93, 109, 110, 111, + 112, 113, 114, 115, 116, 181, 92, 181, 182, 182, + 46, 0, 111, 112, 113, 46, 72, 56, 56, 94, + 184, 161, 181, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 50, 54, - 70, 71, 87, 90, 94, 95, 96, 97, 145, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 47, 47, 52, 50, - 180, 181, 50, 180, 181, 50, 46, 46, 145, 50, - 51, 145, 161, 162, 180, 145, 145, 96, 97, 92, + 70, 71, 87, 90, 95, 96, 97, 98, 146, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 47, 47, 52, 50, + 181, 182, 50, 181, 182, 50, 46, 46, 146, 50, + 51, 146, 162, 163, 181, 146, 146, 97, 98, 93, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 83, 84, 85, 86, 87, 88, 89, 90, - 39, 50, 53, 157, 158, 180, 181, 46, 54, 56, - 48, 118, 180, 50, 46, 54, 50, 46, 54, 50, - 145, 145, 47, 52, 145, 52, 51, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 180, 54, 161, - 162, 180, 3, 11, 14, 15, 16, 18, 19, 20, - 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 49, 50, 58, 59, 116, 117, 118, 119, 121, 122, + 39, 50, 53, 91, 158, 159, 181, 182, 46, 54, + 56, 48, 119, 181, 50, 46, 54, 50, 46, 54, + 50, 146, 146, 47, 52, 146, 52, 51, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 181, 54, + 162, 163, 181, 3, 11, 14, 15, 16, 18, 19, + 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 49, 50, 58, 59, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 147, 148, 149, 155, 156, 166, 167, 170, - 174, 175, 176, 177, 180, 145, 161, 180, 145, 161, - 180, 145, 47, 47, 145, 51, 145, 55, 51, 180, - 47, 46, 4, 119, 145, 56, 46, 56, 46, 116, - 46, 46, 46, 46, 87, 183, 187, 55, 56, 56, - 56, 145, 56, 46, 46, 50, 155, 156, 170, 170, - 49, 116, 56, 56, 56, 56, 56, 9, 10, 12, - 13, 58, 59, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 51, 47, 46, 51, 47, 46, - 51, 52, 51, 145, 161, 4, 56, 47, 145, 19, - 145, 120, 147, 148, 149, 170, 180, 145, 55, 55, - 56, 161, 161, 145, 46, 46, 46, 46, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 51, - 161, 51, 161, 51, 145, 46, 47, 56, 47, 46, - 47, 56, 22, 52, 47, 47, 47, 145, 145, 145, - 145, 46, 47, 46, 47, 46, 47, 161, 116, 145, - 116, 145, 146, 145, 180, 118, 56, 56, 47, 47, - 52, 47, 52, 47, 52, 161, 161, 161, 47, 17, - 47, 56, 47, 22, 56, 56, 162, 56, 162, 56, - 162, 47, 47, 47, 116, 56, 120, 116, 145, 47, - 47, 47, 47, 47, 56, 56, 56, 116, 116 + 143, 144, 145, 148, 149, 150, 156, 157, 167, 168, + 171, 175, 176, 177, 178, 181, 146, 162, 181, 146, + 162, 181, 146, 47, 47, 146, 51, 146, 55, 51, + 181, 47, 46, 4, 120, 146, 56, 46, 56, 46, + 117, 46, 46, 46, 46, 87, 184, 188, 55, 56, + 56, 56, 146, 56, 46, 46, 50, 156, 157, 171, + 171, 49, 117, 56, 56, 56, 56, 56, 9, 10, + 12, 13, 58, 59, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 51, 47, 46, 51, 47, + 46, 51, 52, 51, 146, 162, 4, 56, 47, 146, + 19, 146, 121, 148, 149, 150, 171, 181, 146, 55, + 55, 56, 162, 162, 146, 46, 46, 46, 46, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 51, 162, 51, 162, 51, 146, 46, 47, 56, 47, + 46, 47, 56, 22, 52, 47, 47, 47, 146, 146, + 146, 146, 46, 47, 46, 47, 46, 47, 162, 117, + 146, 117, 146, 147, 146, 181, 119, 56, 56, 47, + 47, 52, 47, 52, 47, 52, 162, 162, 162, 47, + 17, 47, 56, 47, 22, 56, 56, 163, 56, 163, + 56, 163, 47, 47, 47, 117, 56, 121, 117, 146, + 47, 47, 47, 47, 47, 56, 56, 56, 117, 117 }; const unsigned char parser::yyr1_[] = { - 0, 107, 108, 108, 109, 109, 109, 109, 109, 109, - 110, 111, 112, 112, 112, 112, 112, 113, 114, 115, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 117, 117, 118, 118, - 119, 119, 120, 120, 120, 120, 121, 121, 122, 122, - 122, 123, 124, 124, 125, 126, 126, 127, 127, 128, - 129, 129, 130, 131, 132, 133, 134, 135, 135, 136, - 137, 137, 138, 139, 140, 141, 141, 142, 143, 144, - 145, 145, 145, 146, 146, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 149, 149, - 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 0, 108, 109, 109, 110, 110, 110, 110, 110, 110, + 111, 112, 113, 113, 113, 113, 113, 114, 115, 116, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 118, 118, 119, 119, + 120, 120, 121, 121, 121, 121, 122, 122, 123, 123, + 123, 124, 125, 125, 126, 127, 127, 128, 128, 129, + 130, 130, 131, 132, 133, 134, 135, 136, 136, 137, + 138, 138, 139, 140, 141, 142, 142, 143, 144, 145, + 146, 146, 146, 147, 147, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 149, 149, 150, 150, + 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, - 154, 155, 155, 156, 156, 157, 157, 157, 157, 157, - 157, 158, 158, 158, 158, 159, 160, 160, 160, 161, - 161, 162, 162, 163, 164, 165, 165, 166, 167, 168, - 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 155, 156, 156, 157, 157, 158, 158, 158, 158, 158, + 158, 159, 159, 159, 159, 160, 161, 161, 161, 162, + 162, 163, 163, 164, 165, 166, 166, 167, 168, 168, + 169, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 181, 182, 183, 184, 185, 186, 186, 187, 187, - 188, 189 + 181, 182, 182, 183, 184, 185, 186, 187, 187, 188, + 188, 189, 190 }; const signed char @@ -4530,10 +4559,10 @@ namespace xsk { namespace gsc { namespace iw8 { 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, 1, 4, 4, 2, 3, 4, 3, 2, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 7, 2, 1, 2, 1, - 1, 1 + 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 7, 2, 1, 2, + 1, 1, 1 }; @@ -4543,29 +4572,29 @@ namespace xsk { namespace gsc { namespace iw8 { const short parser::yyrline_[] = { - 0, 249, 249, 250, 254, 256, 258, 260, 262, 264, - 269, 273, 278, 279, 280, 281, 282, 286, 291, 296, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 330, 331, 335, 336, - 340, 342, 347, 349, 351, 354, 358, 360, 365, 367, - 369, 374, 379, 381, 386, 391, 393, 398, 400, 405, - 410, 412, 417, 422, 427, 432, 437, 442, 444, 449, - 454, 456, 461, 466, 471, 476, 478, 483, 488, 493, - 498, 499, 500, 504, 505, 509, 511, 513, 515, 517, - 519, 521, 523, 525, 527, 529, 534, 536, 541, 543, - 548, 553, 555, 557, 559, 561, 563, 565, 567, 569, - 571, 573, 575, 577, 579, 581, 583, 585, 587, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 625, - 630, 635, 636, 639, 640, 644, 646, 648, 650, 652, - 654, 659, 661, 663, 665, 670, 675, 677, 680, 684, - 687, 691, 693, 698, 703, 708, 710, 715, 720, 725, - 730, 735, 736, 737, 738, 739, 740, 741, 742, 743, - 747, 752, 757, 762, 767, 772, 777, 782, 787, 792, - 797, 799, 804, 809, 814, 819, 824, 826, 831, 833, - 838, 843 + 0, 250, 250, 251, 255, 257, 259, 261, 263, 265, + 270, 274, 279, 280, 281, 282, 283, 287, 292, 297, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 331, 332, 336, 337, + 341, 343, 348, 350, 352, 355, 359, 361, 366, 368, + 370, 375, 380, 382, 387, 392, 394, 399, 401, 406, + 411, 413, 418, 423, 428, 433, 438, 443, 445, 450, + 455, 457, 462, 467, 472, 477, 479, 484, 489, 494, + 499, 500, 501, 505, 506, 510, 512, 514, 516, 518, + 520, 522, 524, 526, 528, 530, 535, 537, 542, 544, + 549, 554, 556, 558, 560, 562, 564, 566, 568, 570, + 572, 574, 576, 578, 580, 582, 584, 586, 588, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 626, + 631, 636, 637, 640, 641, 645, 647, 649, 651, 653, + 655, 660, 662, 664, 666, 671, 676, 678, 681, 685, + 688, 692, 694, 699, 704, 709, 711, 716, 721, 723, + 728, 733, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 750, 755, 760, 765, 770, 775, 780, 785, 790, + 795, 800, 802, 807, 812, 817, 822, 827, 829, 834, + 836, 841, 846 }; void @@ -4598,9 +4627,9 @@ namespace xsk { namespace gsc { namespace iw8 { #line 13 "parser.ypp" } } } // xsk::gsc::iw8 -#line 4602 "parser.cpp" +#line 4631 "parser.cpp" -#line 847 "parser.ypp" +#line 850 "parser.ypp" void xsk::gsc::iw8::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/iw8/xsk/parser.hpp b/src/iw8/xsk/parser.hpp index 43ba5ecf..4581cca8 100644 --- a/src/iw8/xsk/parser.hpp +++ b/src/iw8/xsk/parser.hpp @@ -623,6 +623,7 @@ namespace xsk { namespace gsc { namespace iw8 { // stmt_while char dummy68[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -770,22 +771,23 @@ namespace xsk { namespace gsc { namespace iw8 { MUL = 88, // "*" DIV = 89, // "/" MOD = 90, // "%" - PATH = 91, // "path" - IDENTIFIER = 92, // "identifier" - STRING = 93, // "string literal" - ISTRING = 94, // "localized string" - COLOR = 95, // "color" - FLOAT = 96, // "float" - INTEGER = 97, // "integer" - ADD_ARRAY = 98, // ADD_ARRAY - THEN = 99, // THEN - TERN = 100, // TERN - NEG = 101, // NEG - ANIMREF = 102, // ANIMREF - PREINC = 103, // PREINC - PREDEC = 104, // PREDEC - POSTINC = 105, // POSTINC - POSTDEC = 106 // POSTDEC + FIELD = 91, // "field" + PATH = 92, // "path" + IDENTIFIER = 93, // "identifier" + STRING = 94, // "string literal" + ISTRING = 95, // "localized string" + COLOR = 96, // "color" + FLOAT = 97, // "float" + INTEGER = 98, // "integer" + ADD_ARRAY = 99, // ADD_ARRAY + THEN = 100, // THEN + TERN = 101, // TERN + NEG = 102, // NEG + ANIMREF = 103, // ANIMREF + PREINC = 104, // PREINC + PREDEC = 105, // PREDEC + POSTINC = 106, // POSTINC + POSTDEC = 107 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -802,7 +804,7 @@ namespace xsk { namespace gsc { namespace iw8 { { enum symbol_kind_type { - YYNTOKENS = 107, ///< Number of tokens. + YYNTOKENS = 108, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -895,105 +897,106 @@ namespace xsk { namespace gsc { namespace iw8 { S_MUL = 88, // "*" S_DIV = 89, // "/" S_MOD = 90, // "%" - S_PATH = 91, // "path" - S_IDENTIFIER = 92, // "identifier" - S_STRING = 93, // "string literal" - S_ISTRING = 94, // "localized string" - S_COLOR = 95, // "color" - S_FLOAT = 96, // "float" - S_INTEGER = 97, // "integer" - S_ADD_ARRAY = 98, // ADD_ARRAY - S_THEN = 99, // THEN - S_TERN = 100, // TERN - S_NEG = 101, // NEG - S_ANIMREF = 102, // ANIMREF - S_PREINC = 103, // PREINC - S_PREDEC = 104, // PREDEC - S_POSTINC = 105, // POSTINC - S_POSTDEC = 106, // POSTDEC - S_YYACCEPT = 107, // $accept - S_root = 108, // root - S_program = 109, // program - S_inline = 110, // inline - S_include = 111, // include - S_declaration = 112, // declaration - S_decl_usingtree = 113, // decl_usingtree - S_decl_constant = 114, // decl_constant - S_decl_thread = 115, // decl_thread - S_stmt = 116, // stmt - S_stmt_dev = 117, // stmt_dev - S_stmt_block = 118, // stmt_block - S_stmt_list = 119, // stmt_list - S_stmt_expr = 120, // stmt_expr - S_stmt_call = 121, // stmt_call - S_stmt_assign = 122, // stmt_assign - S_stmt_endon = 123, // stmt_endon - S_stmt_notify = 124, // stmt_notify - S_stmt_wait = 125, // stmt_wait - S_stmt_waittill = 126, // stmt_waittill - S_stmt_waittillmatch = 127, // stmt_waittillmatch - S_stmt_waittillframeend = 128, // stmt_waittillframeend - S_stmt_waitframe = 129, // stmt_waitframe - S_stmt_if = 130, // stmt_if - S_stmt_ifelse = 131, // stmt_ifelse - S_stmt_while = 132, // stmt_while - S_stmt_dowhile = 133, // stmt_dowhile - S_stmt_for = 134, // stmt_for - S_stmt_foreach = 135, // stmt_foreach - S_stmt_switch = 136, // stmt_switch - S_stmt_case = 137, // stmt_case - S_stmt_default = 138, // stmt_default - S_stmt_break = 139, // stmt_break - S_stmt_continue = 140, // stmt_continue - S_stmt_return = 141, // stmt_return - S_stmt_breakpoint = 142, // stmt_breakpoint - S_stmt_prof_begin = 143, // stmt_prof_begin - S_stmt_prof_end = 144, // stmt_prof_end - S_expr = 145, // expr - S_expr_or_empty = 146, // expr_or_empty - S_expr_assign = 147, // expr_assign - S_expr_increment = 148, // expr_increment - S_expr_decrement = 149, // expr_decrement - S_expr_ternary = 150, // expr_ternary - S_expr_binary = 151, // expr_binary - S_expr_primitive = 152, // expr_primitive - S_expr_complement = 153, // expr_complement - S_expr_not = 154, // expr_not - S_expr_call = 155, // expr_call - S_expr_method = 156, // expr_method - S_expr_function = 157, // expr_function - S_expr_pointer = 158, // expr_pointer - S_expr_add_array = 159, // expr_add_array - S_expr_parameters = 160, // expr_parameters - S_expr_arguments = 161, // expr_arguments - S_expr_arguments_no_empty = 162, // expr_arguments_no_empty - S_expr_isdefined = 163, // expr_isdefined - S_expr_istrue = 164, // expr_istrue - S_expr_reference = 165, // expr_reference - S_expr_array = 166, // expr_array - S_expr_field = 167, // expr_field - S_expr_size = 168, // expr_size - S_expr_paren = 169, // expr_paren - S_expr_object = 170, // expr_object - S_expr_thisthread = 171, // expr_thisthread - S_expr_empty_array = 172, // expr_empty_array - S_expr_undefined = 173, // expr_undefined - S_expr_game = 174, // expr_game - S_expr_self = 175, // expr_self - S_expr_anim = 176, // expr_anim - S_expr_level = 177, // expr_level - S_expr_animation = 178, // expr_animation - S_expr_animtree = 179, // expr_animtree - S_expr_identifier = 180, // expr_identifier - S_expr_path = 181, // expr_path - S_expr_istring = 182, // expr_istring - S_expr_string = 183, // expr_string - S_expr_color = 184, // expr_color - S_expr_vector = 185, // expr_vector - S_expr_float = 186, // expr_float - S_expr_integer = 187, // expr_integer - S_expr_false = 188, // expr_false - S_expr_true = 189 // expr_true + S_FIELD = 91, // "field" + S_PATH = 92, // "path" + S_IDENTIFIER = 93, // "identifier" + S_STRING = 94, // "string literal" + S_ISTRING = 95, // "localized string" + S_COLOR = 96, // "color" + S_FLOAT = 97, // "float" + S_INTEGER = 98, // "integer" + S_ADD_ARRAY = 99, // ADD_ARRAY + S_THEN = 100, // THEN + S_TERN = 101, // TERN + S_NEG = 102, // NEG + S_ANIMREF = 103, // ANIMREF + S_PREINC = 104, // PREINC + S_PREDEC = 105, // PREDEC + S_POSTINC = 106, // POSTINC + S_POSTDEC = 107, // POSTDEC + S_YYACCEPT = 108, // $accept + S_root = 109, // root + S_program = 110, // program + S_inline = 111, // inline + S_include = 112, // include + S_declaration = 113, // declaration + S_decl_usingtree = 114, // decl_usingtree + S_decl_constant = 115, // decl_constant + S_decl_thread = 116, // decl_thread + S_stmt = 117, // stmt + S_stmt_dev = 118, // stmt_dev + S_stmt_block = 119, // stmt_block + S_stmt_list = 120, // stmt_list + S_stmt_expr = 121, // stmt_expr + S_stmt_call = 122, // stmt_call + S_stmt_assign = 123, // stmt_assign + S_stmt_endon = 124, // stmt_endon + S_stmt_notify = 125, // stmt_notify + S_stmt_wait = 126, // stmt_wait + S_stmt_waittill = 127, // stmt_waittill + S_stmt_waittillmatch = 128, // stmt_waittillmatch + S_stmt_waittillframeend = 129, // stmt_waittillframeend + S_stmt_waitframe = 130, // stmt_waitframe + S_stmt_if = 131, // stmt_if + S_stmt_ifelse = 132, // stmt_ifelse + S_stmt_while = 133, // stmt_while + S_stmt_dowhile = 134, // stmt_dowhile + S_stmt_for = 135, // stmt_for + S_stmt_foreach = 136, // stmt_foreach + S_stmt_switch = 137, // stmt_switch + S_stmt_case = 138, // stmt_case + S_stmt_default = 139, // stmt_default + S_stmt_break = 140, // stmt_break + S_stmt_continue = 141, // stmt_continue + S_stmt_return = 142, // stmt_return + S_stmt_breakpoint = 143, // stmt_breakpoint + S_stmt_prof_begin = 144, // stmt_prof_begin + S_stmt_prof_end = 145, // stmt_prof_end + S_expr = 146, // expr + S_expr_or_empty = 147, // expr_or_empty + S_expr_assign = 148, // expr_assign + S_expr_increment = 149, // expr_increment + S_expr_decrement = 150, // expr_decrement + S_expr_ternary = 151, // expr_ternary + S_expr_binary = 152, // expr_binary + S_expr_primitive = 153, // expr_primitive + S_expr_complement = 154, // expr_complement + S_expr_not = 155, // expr_not + S_expr_call = 156, // expr_call + S_expr_method = 157, // expr_method + S_expr_function = 158, // expr_function + S_expr_pointer = 159, // expr_pointer + S_expr_add_array = 160, // expr_add_array + S_expr_parameters = 161, // expr_parameters + S_expr_arguments = 162, // expr_arguments + S_expr_arguments_no_empty = 163, // expr_arguments_no_empty + S_expr_isdefined = 164, // expr_isdefined + S_expr_istrue = 165, // expr_istrue + S_expr_reference = 166, // expr_reference + S_expr_array = 167, // expr_array + S_expr_field = 168, // expr_field + S_expr_size = 169, // expr_size + S_expr_paren = 170, // expr_paren + S_expr_object = 171, // expr_object + S_expr_thisthread = 172, // expr_thisthread + S_expr_empty_array = 173, // expr_empty_array + S_expr_undefined = 174, // expr_undefined + S_expr_game = 175, // expr_game + S_expr_self = 176, // expr_self + S_expr_anim = 177, // expr_anim + S_expr_level = 178, // expr_level + S_expr_animation = 179, // expr_animation + S_expr_animtree = 180, // expr_animtree + S_expr_identifier = 181, // expr_identifier + S_expr_path = 182, // expr_path + S_expr_istring = 183, // expr_istring + S_expr_string = 184, // expr_string + S_expr_color = 185, // expr_color + S_expr_vector = 186, // expr_vector + S_expr_float = 187, // expr_float + S_expr_integer = 188, // expr_integer + S_expr_false = 189, // expr_false + S_expr_true = 190 // expr_true }; }; @@ -1314,6 +1317,7 @@ namespace xsk { namespace gsc { namespace iw8 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2619,6 +2623,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2735,7 +2740,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - IW8_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + IW8_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4150,6 +4155,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4734,7 +4754,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2336, ///< Last index in yytable_. + yylast_ = 2425, ///< Last index in yytable_. yynnts_ = 83, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -5046,6 +5066,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5369,6 +5390,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5442,7 +5464,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::iw8 -#line 5446 "parser.hpp" +#line 5468 "parser.hpp" diff --git a/src/s1/xsk/lexer.cpp b/src/s1/xsk/lexer.cpp index 41555fe1..0947105a 100644 --- a/src/s1/xsk/lexer.cpp +++ b/src/s1/xsk/lexer.cpp @@ -68,9 +68,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -80,18 +80,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -139,7 +130,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -185,24 +176,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw s1::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return s1::parser::make_S1EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -216,7 +211,7 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return s1::parser::make_DIV(loc_); reader_.advance(); @@ -226,29 +221,27 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw s1::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return s1::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw s1::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -262,16 +255,15 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw s1::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -284,7 +276,7 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -294,69 +286,43 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw s1::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return s1::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return s1::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw s1::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return s1::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw s1::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return s1::parser::make_ASSIGN_MUL(loc_); - return s1::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return s1::parser::make_LPAREN(loc_); case ')': @@ -376,6 +342,7 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type case ':': if (curr != ':') return s1::parser::make_COLON(loc_); + reader_.advance(); return s1::parser::make_DOUBLECOLON(loc_); case '?': @@ -383,43 +350,70 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type case '=': if (curr != '=') return s1::parser::make_ASSIGN(loc_); + reader_.advance(); return s1::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return s1::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? s1::parser::make_INCREMENT(loc_) : s1::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return s1::parser::make_INCREMENT(loc_); + + return s1::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return s1::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? s1::parser::make_DECREMENT(loc_) : s1::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return s1::parser::make_DECREMENT(loc_); + + return s1::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return s1::parser::make_MOD(loc_); + reader_.advance(); + return s1::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return s1::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? s1::parser::make_OR(loc_) : s1::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return s1::parser::make_OR(loc_); + + return s1::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return s1::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? s1::parser::make_AND(loc_) : s1::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return s1::parser::make_AND(loc_); + + if (last == '=') + return s1::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return s1::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return s1::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return s1::parser::make_NOT(loc_); + reader_.advance(); return s1::parser::make_INEQUALITY(loc_); case '~': @@ -427,144 +421,222 @@ auto lexer::lex() -> xsk::gsc::s1::parser::symbol_type case '<': if (curr != '<' && curr != '=') return s1::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? s1::parser::make_ASSIGN_LSHIFT(loc_) : s1::parser::make_LSHIFT(loc_); - } - return s1::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return s1::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return s1::parser::make_LSHIFT(loc_); + + reader_.advance(); + return s1::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return s1::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? s1::parser::make_ASSIGN_RSHIFT(loc_) : s1::parser::make_RSHIFT(loc_); - } - return s1::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return s1::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return s1::parser::make_RSHIFT(loc_); + + reader_.advance(); + return s1::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw s1::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::s1::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw s1::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw s1::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return s1::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return s1::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::s1::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw s1::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw s1::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return s1::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return s1::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return s1::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return s1::parser::make_SIZE(loc_); + } + + return s1::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return s1::parser::make_PATH(xsk::gsc::s1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s1::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return s1::parser::make_IDENTIFIER(xsk::gsc::s1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s1::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return s1::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return s1::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -581,30 +653,24 @@ auto lexer::read_number(char first) -> xsk::gsc::s1::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return s1::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return s1::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -616,35 +682,29 @@ auto lexer::read_number(char first) -> xsk::gsc::s1::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return s1::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -661,163 +721,15 @@ auto lexer::read_number(char first) -> xsk::gsc::s1::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return s1::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw s1::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw s1::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw s1::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return s1::parser::make_FLOAT(std::string(data, len), loc_); - - return s1::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::s1::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw s1::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw s1::parser::syntax_error(loc_, "invalid path end '\\'"); - - return s1::parser::make_PATH(xsk::gsc::s1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return s1::parser::make_IDENTIFIER(xsk::gsc::s1::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::s1::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return s1::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return s1::parser::make_DOT(loc_); - - } - else return s1::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::s1::parser::symbol_type { switch (k) diff --git a/src/s1/xsk/lexer.hpp b/src/s1/xsk/lexer.hpp index 01d09e1e..53d4957c 100644 --- a/src/s1/xsk/lexer.hpp +++ b/src/s1/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::s1 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::s1::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::s1::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::s1::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::s1::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::s1::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/s1/xsk/parser.cpp b/src/s1/xsk/parser.cpp index 05bc791e..ba78ccef 100644 --- a/src/s1/xsk/parser.cpp +++ b/src/s1/xsk/parser.cpp @@ -491,6 +491,7 @@ namespace xsk { namespace gsc { namespace s1 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -792,6 +793,7 @@ namespace xsk { namespace gsc { namespace s1 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1093,6 +1095,7 @@ namespace xsk { namespace gsc { namespace s1 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1393,6 +1396,7 @@ namespace xsk { namespace gsc { namespace s1 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1948,6 +1952,7 @@ namespace xsk { namespace gsc { namespace s1 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1979,1303 +1984,1309 @@ namespace xsk { namespace gsc { namespace s1 { switch (yyn) { case 2: // root: program -#line 245 "parser.ypp" +#line 246 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 3: // root: %empty -#line 246 "parser.ypp" +#line 247 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 4: // program: program inline -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 5: // program: program include -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 6: // program: program declaration -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 7: // program: inline -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 8: // program: include -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 9: // program: declaration -#line 261 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 265 "parser.ypp" +#line 266 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 270 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 12: // declaration: "/#" -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 13: // declaration: "#/" -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 15: // declaration: decl_constant -#line 277 "parser.ypp" +#line 278 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 16: // declaration: decl_thread -#line 278 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 283 "parser.ypp" +#line 284 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 288 "parser.ypp" +#line 289 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 293 "parser.ypp" +#line 294 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 21: // stmt: stmt_block -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 22: // stmt: stmt_call -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 31: // stmt: stmt_if -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 33: // stmt: stmt_while -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 35: // stmt: stmt_for -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 38: // stmt: stmt_case -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 39: // stmt: stmt_default -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 40: // stmt: stmt_break -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 42: // stmt: stmt_return -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 320 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 321 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 322 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 326 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 327 "parser.ypp" +#line 328 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 331 "parser.ypp" +#line 332 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 332 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 337 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 51: // stmt_list: stmt -#line 339 "parser.ypp" +#line 340 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 344 "parser.ypp" +#line 345 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 346 "parser.ypp" +#line 347 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 348 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 350 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2303 "parser.cpp" +#line 2308 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 355 "parser.ypp" +#line 356 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2309 "parser.cpp" +#line 2314 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 357 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2315 "parser.cpp" +#line 2320 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 362 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2321 "parser.cpp" +#line 2326 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 364 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2327 "parser.cpp" +#line 2332 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 366 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2333 "parser.cpp" +#line 2338 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 371 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2339 "parser.cpp" +#line 2344 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 376 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2345 "parser.cpp" +#line 2350 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 378 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2351 "parser.cpp" +#line 2356 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 383 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2357 "parser.cpp" +#line 2362 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 388 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2363 "parser.cpp" +#line 2368 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 390 "parser.ypp" +#line 391 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2369 "parser.cpp" +#line 2374 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 395 "parser.ypp" +#line 396 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2375 "parser.cpp" +#line 2380 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 397 "parser.ypp" +#line 398 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2381 "parser.cpp" +#line 2386 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 402 "parser.ypp" +#line 403 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2387 "parser.cpp" +#line 2392 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 407 "parser.ypp" +#line 408 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2393 "parser.cpp" +#line 2398 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2399 "parser.cpp" +#line 2404 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2405 "parser.cpp" +#line 2410 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2411 "parser.cpp" +#line 2416 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2417 "parser.cpp" +#line 2422 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2423 "parser.cpp" +#line 2428 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 434 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2429 "parser.cpp" +#line 2434 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 439 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2435 "parser.cpp" +#line 2440 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2441 "parser.cpp" +#line 2446 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 446 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2447 "parser.cpp" +#line 2452 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 451 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2453 "parser.cpp" +#line 2458 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2459 "parser.cpp" +#line 2464 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2465 "parser.cpp" +#line 2470 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2471 "parser.cpp" +#line 2476 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 468 "parser.ypp" +#line 469 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2477 "parser.cpp" +#line 2482 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 473 "parser.ypp" +#line 474 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2483 "parser.cpp" +#line 2488 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2489 "parser.cpp" +#line 2494 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2495 "parser.cpp" +#line 2500 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2501 "parser.cpp" +#line 2506 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2507 "parser.cpp" +#line 2512 "parser.cpp" break; case 90: // expr: expr_ternary -#line 494 "parser.ypp" +#line 495 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2513 "parser.cpp" +#line 2518 "parser.cpp" break; case 91: // expr: expr_binary -#line 495 "parser.ypp" +#line 496 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2519 "parser.cpp" +#line 2524 "parser.cpp" break; case 92: // expr: expr_primitive -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2525 "parser.cpp" +#line 2530 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2531 "parser.cpp" +#line 2536 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 501 "parser.ypp" +#line 502 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2537 "parser.cpp" +#line 2542 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2543 "parser.cpp" +#line 2548 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2549 "parser.cpp" +#line 2554 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2555 "parser.cpp" +#line 2560 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2561 "parser.cpp" +#line 2566 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2567 "parser.cpp" +#line 2572 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2573 "parser.cpp" +#line 2578 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 518 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2579 "parser.cpp" +#line 2584 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 520 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2585 "parser.cpp" +#line 2590 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 522 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2591 "parser.cpp" +#line 2596 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 524 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2597 "parser.cpp" +#line 2602 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 526 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2603 "parser.cpp" +#line 2608 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 531 "parser.ypp" +#line 532 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2609 "parser.cpp" +#line 2614 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 533 "parser.ypp" +#line 534 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2615 "parser.cpp" +#line 2620 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 538 "parser.ypp" +#line 539 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2621 "parser.cpp" +#line 2626 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2627 "parser.cpp" +#line 2632 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 545 "parser.ypp" +#line 546 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2633 "parser.cpp" +#line 2638 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2639 "parser.cpp" +#line 2644 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2645 "parser.cpp" +#line 2650 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2651 "parser.cpp" +#line 2656 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2657 "parser.cpp" +#line 2662 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2663 "parser.cpp" +#line 2668 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2669 "parser.cpp" +#line 2674 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2675 "parser.cpp" +#line 2680 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2681 "parser.cpp" +#line 2686 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2687 "parser.cpp" +#line 2692 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2693 "parser.cpp" +#line 2698 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2699 "parser.cpp" +#line 2704 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2705 "parser.cpp" +#line 2710 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2711 "parser.cpp" +#line 2716 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 576 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2717 "parser.cpp" +#line 2722 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2723 "parser.cpp" +#line 2728 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2729 "parser.cpp" +#line 2734 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2735 "parser.cpp" +#line 2740 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2741 "parser.cpp" +#line 2746 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2747 "parser.cpp" +#line 2752 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2753 "parser.cpp" +#line 2758 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2759 "parser.cpp" +#line 2764 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2765 "parser.cpp" +#line 2770 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2771 "parser.cpp" +#line 2776 "parser.cpp" break; case 134: // expr_primitive: expr_reference -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2777 "parser.cpp" +#line 2782 "parser.cpp" break; case 135: // expr_primitive: expr_array -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2783 "parser.cpp" +#line 2788 "parser.cpp" break; case 136: // expr_primitive: expr_field -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2789 "parser.cpp" +#line 2794 "parser.cpp" break; case 137: // expr_primitive: expr_size -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2795 "parser.cpp" +#line 2800 "parser.cpp" break; case 138: // expr_primitive: expr_paren -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2801 "parser.cpp" +#line 2806 "parser.cpp" break; case 139: // expr_primitive: expr_thisthread -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2807 "parser.cpp" +#line 2812 "parser.cpp" break; case 140: // expr_primitive: expr_empty_array -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2813 "parser.cpp" +#line 2818 "parser.cpp" break; case 141: // expr_primitive: expr_undefined -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2819 "parser.cpp" +#line 2824 "parser.cpp" break; case 142: // expr_primitive: expr_game -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2825 "parser.cpp" +#line 2830 "parser.cpp" break; case 143: // expr_primitive: expr_self -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2831 "parser.cpp" +#line 2836 "parser.cpp" break; case 144: // expr_primitive: expr_anim -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2837 "parser.cpp" +#line 2842 "parser.cpp" break; case 145: // expr_primitive: expr_level -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2843 "parser.cpp" +#line 2848 "parser.cpp" break; case 146: // expr_primitive: expr_animation -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2849 "parser.cpp" +#line 2854 "parser.cpp" break; case 147: // expr_primitive: expr_animtree -#line 606 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2855 "parser.cpp" +#line 2860 "parser.cpp" break; case 148: // expr_primitive: expr_identifier -#line 607 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2861 "parser.cpp" +#line 2866 "parser.cpp" break; case 149: // expr_primitive: expr_istring -#line 608 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2867 "parser.cpp" +#line 2872 "parser.cpp" break; case 150: // expr_primitive: expr_string -#line 609 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2873 "parser.cpp" +#line 2878 "parser.cpp" break; case 151: // expr_primitive: expr_color -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2879 "parser.cpp" +#line 2884 "parser.cpp" break; case 152: // expr_primitive: expr_vector -#line 611 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2885 "parser.cpp" +#line 2890 "parser.cpp" break; case 153: // expr_primitive: expr_float -#line 612 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2891 "parser.cpp" +#line 2896 "parser.cpp" break; case 154: // expr_primitive: expr_integer -#line 613 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2897 "parser.cpp" +#line 2902 "parser.cpp" break; case 155: // expr_primitive: expr_false -#line 614 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2903 "parser.cpp" +#line 2908 "parser.cpp" break; case 156: // expr_primitive: expr_true -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2909 "parser.cpp" +#line 2914 "parser.cpp" break; case 157: // expr_complement: "~" expr -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2915 "parser.cpp" +#line 2920 "parser.cpp" break; case 158: // expr_not: "!" expr -#line 625 "parser.ypp" +#line 626 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2921 "parser.cpp" +#line 2926 "parser.cpp" break; case 159: // expr_call: expr_function -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2927 "parser.cpp" +#line 2932 "parser.cpp" break; case 160: // expr_call: expr_pointer -#line 630 "parser.ypp" +#line 631 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2933 "parser.cpp" +#line 2938 "parser.cpp" break; case 161: // expr_method: expr_object expr_function -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2939 "parser.cpp" +#line 2944 "parser.cpp" break; case 162: // expr_method: expr_object expr_pointer -#line 634 "parser.ypp" +#line 635 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2945 "parser.cpp" +#line 2950 "parser.cpp" break; case 163: // expr_function: expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2951 "parser.cpp" +#line 2956 "parser.cpp" break; case 164: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 641 "parser.ypp" +#line 642 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2957 "parser.cpp" +#line 2962 "parser.cpp" break; case 165: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 643 "parser.ypp" +#line 644 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2963 "parser.cpp" +#line 2968 "parser.cpp" break; case 166: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2969 "parser.cpp" +#line 2974 "parser.cpp" break; case 167: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2975 "parser.cpp" +#line 2980 "parser.cpp" break; case 168: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2981 "parser.cpp" +#line 2986 "parser.cpp" break; case 169: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 654 "parser.ypp" +#line 655 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2987 "parser.cpp" +#line 2992 "parser.cpp" break; case 170: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 656 "parser.ypp" +#line 657 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2993 "parser.cpp" +#line 2998 "parser.cpp" break; case 171: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 658 "parser.ypp" +#line 659 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2999 "parser.cpp" +#line 3004 "parser.cpp" break; case 172: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3005 "parser.cpp" +#line 3010 "parser.cpp" break; case 173: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 665 "parser.ypp" +#line 666 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3011 "parser.cpp" +#line 3016 "parser.cpp" break; case 174: // expr_parameters: expr_parameters "," expr_identifier -#line 670 "parser.ypp" +#line 671 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3017 "parser.cpp" +#line 3022 "parser.cpp" break; case 175: // expr_parameters: expr_identifier -#line 672 "parser.ypp" +#line 673 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3023 "parser.cpp" +#line 3028 "parser.cpp" break; case 176: // expr_parameters: %empty -#line 674 "parser.ypp" +#line 675 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3029 "parser.cpp" +#line 3034 "parser.cpp" break; case 177: // expr_arguments: expr_arguments_no_empty -#line 679 "parser.ypp" +#line 680 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3035 "parser.cpp" +#line 3040 "parser.cpp" break; case 178: // expr_arguments: %empty -#line 681 "parser.ypp" +#line 682 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3041 "parser.cpp" +#line 3046 "parser.cpp" break; case 179: // expr_arguments_no_empty: expr_arguments "," expr -#line 686 "parser.ypp" +#line 687 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3047 "parser.cpp" +#line 3052 "parser.cpp" break; case 180: // expr_arguments_no_empty: expr -#line 688 "parser.ypp" +#line 689 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3053 "parser.cpp" +#line 3058 "parser.cpp" break; case 181: // expr_reference: "::" expr_identifier -#line 693 "parser.ypp" +#line 694 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3059 "parser.cpp" +#line 3064 "parser.cpp" break; case 182: // expr_reference: expr_path "::" expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3065 "parser.cpp" +#line 3070 "parser.cpp" break; case 183: // expr_array: expr_object "[" expr "]" -#line 700 "parser.ypp" +#line 701 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3071 "parser.cpp" +#line 3076 "parser.cpp" break; case 184: // expr_field: expr_object "." expr_identifier -#line 705 "parser.ypp" +#line 706 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3077 "parser.cpp" +#line 3082 "parser.cpp" break; - case 185: // expr_size: expr_object ".size" -#line 710 "parser.ypp" + case 185: // expr_field: expr_object "field" +#line 708 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3088 "parser.cpp" + break; + + case 186: // expr_size: expr_object ".size" +#line 713 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3083 "parser.cpp" +#line 3094 "parser.cpp" break; - case 186: // expr_paren: "(" expr ")" -#line 715 "parser.ypp" + case 187: // expr_paren: "(" expr ")" +#line 718 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3089 "parser.cpp" +#line 3100 "parser.cpp" break; - case 187: // expr_object: expr_call -#line 719 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3095 "parser.cpp" - break; - - case 188: // expr_object: expr_method -#line 720 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3101 "parser.cpp" - break; - - case 189: // expr_object: expr_array -#line 721 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3107 "parser.cpp" - break; - - case 190: // expr_object: expr_field + case 188: // expr_object: expr_call #line 722 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3113 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3106 "parser.cpp" break; - case 191: // expr_object: expr_game + case 189: // expr_object: expr_method #line 723 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3119 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3112 "parser.cpp" break; - case 192: // expr_object: expr_self + case 190: // expr_object: expr_array #line 724 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3125 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3118 "parser.cpp" break; - case 193: // expr_object: expr_anim + case 191: // expr_object: expr_field #line 725 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3131 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3124 "parser.cpp" break; - case 194: // expr_object: expr_level + case 192: // expr_object: expr_game #line 726 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3137 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3130 "parser.cpp" break; - case 195: // expr_object: expr_identifier + case 193: // expr_object: expr_self #line 727 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3136 "parser.cpp" + break; + + case 194: // expr_object: expr_anim +#line 728 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3142 "parser.cpp" + break; + + case 195: // expr_object: expr_level +#line 729 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3148 "parser.cpp" + break; + + case 196: // expr_object: expr_identifier +#line 730 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3143 "parser.cpp" +#line 3154 "parser.cpp" break; - case 196: // expr_thisthread: "thisthread" -#line 732 "parser.ypp" + case 197: // expr_thisthread: "thisthread" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3149 "parser.cpp" +#line 3160 "parser.cpp" break; - case 197: // expr_empty_array: "[" "]" -#line 737 "parser.ypp" + case 198: // expr_empty_array: "[" "]" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3155 "parser.cpp" +#line 3166 "parser.cpp" break; - case 198: // expr_undefined: "undefined" -#line 742 "parser.ypp" + case 199: // expr_undefined: "undefined" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3161 "parser.cpp" +#line 3172 "parser.cpp" break; - case 199: // expr_game: "game" -#line 747 "parser.ypp" + case 200: // expr_game: "game" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3167 "parser.cpp" +#line 3178 "parser.cpp" break; - case 200: // expr_self: "self" -#line 752 "parser.ypp" + case 201: // expr_self: "self" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3173 "parser.cpp" +#line 3184 "parser.cpp" break; - case 201: // expr_anim: "anim" -#line 757 "parser.ypp" + case 202: // expr_anim: "anim" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3179 "parser.cpp" +#line 3190 "parser.cpp" break; - case 202: // expr_level: "level" -#line 762 "parser.ypp" + case 203: // expr_level: "level" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3185 "parser.cpp" +#line 3196 "parser.cpp" break; - case 203: // expr_animation: "%" "identifier" -#line 767 "parser.ypp" + case 204: // expr_animation: "%" "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3191 "parser.cpp" +#line 3202 "parser.cpp" break; - case 204: // expr_animtree: "#animtree" -#line 772 "parser.ypp" + case 205: // expr_animtree: "#animtree" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3197 "parser.cpp" +#line 3208 "parser.cpp" break; - case 205: // expr_identifier: "identifier" -#line 777 "parser.ypp" + case 206: // expr_identifier: "identifier" +#line 780 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3203 "parser.cpp" +#line 3214 "parser.cpp" break; - case 206: // expr_path: "path" -#line 782 "parser.ypp" + case 207: // expr_path: "path" +#line 785 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3209 "parser.cpp" +#line 3220 "parser.cpp" break; - case 207: // expr_path: expr_identifier -#line 784 "parser.ypp" + case 208: // expr_path: expr_identifier +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3215 "parser.cpp" +#line 3226 "parser.cpp" break; - case 208: // expr_istring: "localized string" -#line 789 "parser.ypp" + case 209: // expr_istring: "localized string" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3221 "parser.cpp" +#line 3232 "parser.cpp" break; - case 209: // expr_string: "string literal" -#line 794 "parser.ypp" + case 210: // expr_string: "string literal" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3227 "parser.cpp" +#line 3238 "parser.cpp" break; - case 210: // expr_color: "color" -#line 799 "parser.ypp" + case 211: // expr_color: "color" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3233 "parser.cpp" +#line 3244 "parser.cpp" break; - case 211: // expr_vector: "(" expr "," expr "," expr ")" -#line 804 "parser.ypp" + case 212: // expr_vector: "(" expr "," expr "," expr ")" +#line 807 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3239 "parser.cpp" +#line 3250 "parser.cpp" break; - case 212: // expr_float: "-" "float" -#line 809 "parser.ypp" + case 213: // expr_float: "-" "float" +#line 812 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3245 "parser.cpp" +#line 3256 "parser.cpp" break; - case 213: // expr_float: "float" -#line 811 "parser.ypp" + case 214: // expr_float: "float" +#line 814 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3251 "parser.cpp" +#line 3262 "parser.cpp" break; - case 214: // expr_integer: "-" "integer" -#line 816 "parser.ypp" + case 215: // expr_integer: "-" "integer" +#line 819 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3257 "parser.cpp" +#line 3268 "parser.cpp" break; - case 215: // expr_integer: "integer" -#line 818 "parser.ypp" + case 216: // expr_integer: "integer" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3263 "parser.cpp" +#line 3274 "parser.cpp" break; - case 216: // expr_false: "false" -#line 823 "parser.ypp" + case 217: // expr_false: "false" +#line 826 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3269 "parser.cpp" +#line 3280 "parser.cpp" break; - case 217: // expr_true: "true" -#line 828 "parser.ypp" + case 218: // expr_true: "true" +#line 831 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3275 "parser.cpp" +#line 3286 "parser.cpp" break; -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" default: break; @@ -3469,7 +3480,7 @@ namespace xsk { namespace gsc { namespace s1 { "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", - "+", "-", "*", "/", "%", "path", "identifier", "string literal", + "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", "include", "declaration", @@ -3755,131 +3766,131 @@ namespace xsk { namespace gsc { namespace s1 { } - const short parser::yypact_ninf_ = -261; + const short parser::yypact_ninf_ = -267; - const short parser::yytable_ninf_ = -208; + const short parser::yytable_ninf_ = -209; const short parser::yypact_[] = { - 24, -261, -261, -71, -71, -23, -261, 39, 24, -261, - -261, -261, -261, -261, -261, -20, -261, -261, -5, -3, - -26, -261, -261, -261, -261, -35, 1143, -261, -261, -261, - 28, 17, -261, -261, -36, -33, -261, 27, -261, -261, - -261, -261, -261, -261, -261, 1143, 1015, -35, 1143, 1143, - -58, 7, -261, -261, -261, -261, 1897, -261, -261, -261, - -261, -261, 345, 435, -261, -261, -261, -261, 581, 609, - -261, -261, 614, -261, -261, -261, 848, 950, 1104, 1168, - -261, -261, 74, 46, -261, -261, -261, -261, -261, -261, - -261, -261, 54, 69, -35, 79, 73, 91, 83, 104, - 101, 110, 1222, 1015, -261, 1980, 111, 116, -261, -261, - -261, -261, -261, -261, -261, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, -261, 1207, -35, -261, -261, 122, - 121, 1143, -35, -261, 785, -261, -261, 1143, 1143, -35, - 1143, 1143, -35, 1143, -261, 1143, 1666, 1143, -261, 1862, - 114, 114, 2011, 2021, 2103, 2103, 53, 53, 53, 53, - 2052, 2093, 2062, 59, 59, -261, -261, -261, 1706, -261, - -35, 18, -261, 130, 836, 1143, 125, -11, 137, 989, - 138, 139, 150, 159, -53, 153, 154, 158, 1079, 160, - 163, 176, -261, 173, 127, 127, -261, -261, -261, 887, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, 168, 171, 174, 179, 180, -261, - -261, 683, -261, -261, -261, -261, 8, 1746, 21, 183, - 1786, 29, 186, 1826, 1010, 182, 1980, 1143, -261, 130, - -261, 1143, -261, 938, 1932, -261, 193, -261, 1143, 220, - 1143, 550, -35, 1143, 145, 191, 195, -261, -261, -261, - -261, 1967, -261, 1143, 1143, 1143, -261, -261, 210, 210, - -261, -261, -261, -261, -261, -261, -261, 202, 208, 212, - 216, -261, -261, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 205, -261, 1143, 213, -261, 1143, - 215, 1143, 222, 1980, 31, -261, -261, 214, 1388, 223, - 1422, 219, -261, -261, -261, 13, -6, 1456, -261, -261, - -261, 32, 50, 1666, 1143, 1143, 1143, 1143, 1980, 1980, - 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 230, - 51, 231, 60, 232, 1490, 1143, -261, -261, 989, 1143, - 989, 1143, 1143, -35, 69, 224, 225, 1524, 1266, 1310, - 1354, 1143, -261, 1143, -261, 1143, -261, 71, 263, 1558, - -261, 1980, 227, 1592, 260, -261, -261, -261, 233, 237, - 1143, 238, 1143, 239, 1143, 78, 84, 85, -261, 989, - 242, 550, 989, 1143, -261, -261, 252, -261, 253, -261, - 256, -261, -261, -261, -261, -261, 278, -261, 1626, 271, - 274, 276, 989, 989, -261, -261, -261, -261, -261 + 13, -267, -267, 8, 8, -11, -267, 27, 13, -267, + -267, -267, -267, -267, -267, -31, -267, -267, -16, -10, + -42, -267, -267, -267, -267, -38, 1203, -267, -267, -267, + 20, -21, -267, -267, -17, -5, -267, 29, -267, -267, + -267, -267, -267, -267, -267, 1203, 1073, -38, 1203, 1203, + 52, -2, -267, -267, -267, -267, 2007, -267, -267, -267, + -267, -267, 31, 354, -267, -267, -267, -267, 440, 813, + -267, -267, 943, -267, -267, -267, 1169, 1234, 1282, 1296, + -267, -267, 556, 49, -267, -267, -267, -267, -267, -267, + -267, -267, 43, 35, -38, 69, 79, 85, 93, 113, + 110, 119, 1333, 1073, -267, 2090, 118, 120, -267, -267, + -267, -267, -267, -267, -267, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, -267, 1268, -38, -267, -267, -267, + 126, 122, 1203, -38, -267, 787, -267, -267, 1203, 1203, + -38, 1203, 1203, -38, 1203, -267, 1203, 1069, 1203, -267, + 1972, 142, 142, 2121, 2131, 617, 617, 44, 44, 44, + 44, 2162, 2203, 2172, 73, 73, -267, -267, -267, 1777, + -267, -38, -8, -267, 128, 865, 1203, 129, -18, 132, + 1047, 136, 138, 143, 144, -64, 148, 135, 141, 1138, + 149, 153, 158, -267, 159, 123, 123, -267, -267, -267, + 917, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, 154, 155, 161, 165, 177, + -267, -267, 36, -267, -267, -267, -267, -22, 1817, 7, + 188, 1857, 9, 190, 1897, 1936, 186, 2090, 1203, -267, + 128, -267, 1203, -267, 995, 2042, -267, 192, -267, 1203, + 219, 1203, 542, -38, 1203, 150, 194, 196, -267, -267, + -267, -267, 2077, -267, 1203, 1203, 1203, -267, -267, 185, + 185, -267, -267, -267, -267, -267, -267, -267, 201, 206, + 207, 209, -267, -267, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 205, -267, 1203, 208, -267, + 1203, 210, 1203, 211, 2090, 11, -267, -267, 202, 1499, + 217, 1533, 213, -267, -267, -267, 677, 1, 1567, -267, + -267, -267, 17, 38, 1069, 1203, 1203, 1203, 1203, 2090, + 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, + 218, 45, 221, 46, 224, 1601, 1203, -267, -267, 1047, + 1203, 1047, 1203, 1203, -38, 35, 223, 225, 1635, 1377, + 1421, 1465, 1203, -267, 1203, -267, 1203, -267, 55, 264, + 1669, -267, 2090, 231, 1703, 241, -267, -267, -267, 232, + 233, 1203, 234, 1203, 237, 1203, 74, 90, 99, -267, + 1047, 238, 542, 1047, 1203, -267, -267, 248, -267, 249, + -267, 255, -267, -267, -267, -267, -267, 256, -267, 1737, + 251, 253, 254, 1047, 1047, -267, -267, -267, -267, -267 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 205, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 206, 207, 0, 0, - 0, 1, 4, 5, 6, 176, 0, 10, 11, 209, - 0, 0, 175, 204, 0, 0, 196, 0, 217, 216, - 198, 199, 200, 201, 202, 0, 178, 0, 0, 0, - 0, 0, 208, 210, 213, 215, 0, 90, 91, 92, + 3, 12, 13, 0, 0, 0, 206, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 207, 208, 0, 0, + 0, 1, 4, 5, 6, 176, 0, 10, 11, 210, + 0, 0, 175, 205, 0, 0, 197, 0, 218, 217, + 199, 200, 201, 202, 203, 0, 178, 0, 0, 0, + 0, 0, 209, 211, 214, 216, 0, 90, 91, 92, 129, 130, 131, 132, 159, 160, 133, 134, 135, 136, 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, 149, 150, 151, 152, 153, 154, - 155, 156, 0, 0, 0, 0, 207, 0, 0, 207, - 0, 0, 0, 178, 197, 180, 0, 177, 181, 158, - 157, 212, 214, 203, 18, 0, 0, 0, 0, 0, + 155, 156, 0, 0, 0, 0, 208, 0, 0, 208, + 0, 0, 0, 178, 198, 180, 0, 177, 181, 158, + 157, 213, 215, 204, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 161, 162, 207, - 0, 178, 0, 17, 0, 19, 174, 0, 178, 0, - 0, 178, 0, 0, 186, 0, 180, 0, 173, 0, - 122, 123, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 124, 125, 126, 127, 128, 0, 184, - 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 0, 185, 161, 162, + 208, 0, 178, 0, 17, 0, 19, 174, 0, 178, + 0, 0, 178, 0, 0, 187, 0, 180, 0, 173, + 0, 122, 123, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 0, + 184, 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 51, 20, 21, 0, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 0, 0, 0, 187, 188, 189, - 190, 0, 191, 192, 193, 194, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 183, 0, - 163, 178, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 178, 178, 0, 187, 188, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 165, 178, 0, 167, 178, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 178, 164, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 178, 166, 178, 168, 178, 211, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 178, 0, 178, 0, 178, 0, 0, 0, 169, 0, - 0, 55, 0, 0, 61, 63, 177, 66, 177, 68, - 177, 170, 171, 172, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 0, 0, 49, 0, 0, 0, 51, 20, 21, + 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 0, 0, 0, 188, 189, + 190, 191, 0, 192, 193, 194, 195, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 183, + 0, 163, 178, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 178, 178, 0, 188, 189, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 178, 0, 167, + 178, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 178, 164, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 166, 178, 168, 178, 212, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 178, 0, 178, 0, 178, 0, 0, 0, 169, + 0, 0, 55, 0, 0, 61, 63, 177, 66, 177, + 68, 177, 170, 171, 172, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -261, -261, -261, 321, 323, 324, -261, -261, -261, -183, - -261, -88, 100, -78, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, 187, -261, - -260, -257, -254, -261, -261, -261, -261, -261, -85, -12, - -70, -65, -261, -261, -128, -45, -261, 177, 247, -261, - -261, 257, -261, -261, -261, 275, 332, 359, 365, -261, - -261, 0, 6, -261, 2, -261, -261, -261, 142, -261, - -261 + -267, -267, -267, 294, 298, 301, -267, -267, -267, -72, + -267, -91, 146, -83, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 195, -267, + -266, -260, -258, -267, -267, -267, -267, -267, -130, -12, + -67, -65, -267, -267, 340, -45, -267, -6, 246, -267, + -267, 252, -267, -267, -267, 280, 329, 348, 366, -267, + -267, 0, 6, -267, -9, -267, -267, -267, 137, -267, + -267 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, - 207, 208, 209, 331, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 105, 392, - 234, 235, 236, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 31, 106, 182, 67, 68, 69, 70, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 207, + 208, 209, 210, 332, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 105, 393, + 235, 236, 237, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 @@ -3888,209 +3899,220 @@ namespace xsk { namespace gsc { namespace s1 { const short parser::yytable_[] = { - 15, 107, 137, 17, 17, 145, 269, 138, 15, 18, - 19, 332, 95, 181, 333, 98, 372, 334, 16, 6, - 248, 20, 30, 251, 25, 32, 291, 1, 2, 3, - 4, 5, 274, 266, 96, 99, 111, 112, 29, 21, - 97, 100, 55, 267, 373, 34, 35, 108, 37, 27, - 26, 28, 141, 16, 6, 6, 16, 6, 107, 237, - -207, 135, 93, 260, 136, 29, 315, 94, 157, 301, - 302, 157, 139, 92, 318, 101, 366, 375, 140, 157, - 291, 157, 157, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 146, 376, 382, 113, 142, 237, - 157, 157, 16, 6, 237, 384, -195, -195, 143, -195, - 157, 116, 117, -195, 6, 144, 408, 148, 141, 286, - 286, 157, -195, 421, 237, -195, -207, 147, 157, 422, - 423, 150, 238, 324, 157, 157, 179, 129, 130, 131, - 132, 133, 183, 149, 246, 131, 132, 133, 151, 249, - 140, 332, 252, 152, 333, 341, 342, 334, 153, 34, - 35, 157, 37, -195, -195, 158, 141, 41, 42, 43, - 44, 137, 238, 180, 261, 203, 138, 238, 237, 265, - 259, 268, 270, 271, 246, 388, 286, 390, 360, 246, - 140, 362, 287, 287, 272, 140, 275, 238, 129, 130, - 131, 132, 133, 273, 246, 246, 277, 283, 278, 246, - 140, 140, 279, 56, 282, 140, 16, 6, 137, 137, - 284, 285, 292, 138, 138, 293, 424, 316, 294, 427, - 319, 322, 102, 295, 296, 109, 110, 387, 327, 329, - 112, 139, 34, 35, 338, 37, 344, 140, 339, 437, - 438, 238, 345, 405, 359, 406, 346, 407, 135, 287, - 347, 136, 361, 246, 363, 137, 365, 369, 367, 140, - 138, 246, 336, 371, 381, 383, 385, 140, 396, 397, - 409, 411, 413, 237, 263, 237, 395, 414, 139, 139, - 156, 415, 417, 419, 140, 140, 425, 429, 430, 16, - 6, 431, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 239, 178, 432, 237, 434, 286, 237, 435, 22, - 436, 23, 24, 426, 247, 139, 276, 250, 0, 0, - 253, 140, 254, 0, 256, 0, 0, 237, 237, 0, - 0, 0, 0, 0, 0, 416, 238, 418, 238, 420, - 0, 239, 0, 0, 0, 0, 239, 0, 246, 0, - 246, 0, 264, 394, 140, 0, 140, -187, -187, 0, - -187, 239, 239, 0, -187, 281, 239, 0, 0, 0, - 0, 240, 0, -187, 0, 0, -187, 238, 0, 287, - 238, 241, 0, 0, 0, 0, 0, 0, 0, 246, - 0, 246, 246, 0, 0, 140, 0, 140, 140, 242, - 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 246, 246, -187, -187, 240, 0, 140, 140, - 239, 241, 0, 0, 323, 0, 241, 0, 239, 0, - 0, 240, 240, 0, 0, 328, 240, 330, 0, 242, - 337, 288, 289, 0, 242, 0, 241, -188, -188, 0, - -188, 0, 343, 0, -188, 0, 243, 0, 0, 242, - 242, 0, 0, -188, 242, 0, -188, 0, 0, 0, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 0, 0, 244, 0, 0, 0, 0, 364, 245, - 240, 0, 0, 0, 0, 0, 243, 0, 240, 0, - 241, 243, 0, 0, -188, -188, 0, 0, 335, 0, - 0, 377, 378, 379, 380, 0, 243, 243, 242, 0, - 0, 243, 0, 244, 0, 239, 242, 239, 244, 245, - 0, 0, 0, 0, 245, 0, 389, 0, 391, 393, - 0, 0, 0, 244, 244, 0, 0, 0, 244, 245, - 245, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 0, 34, 35, 0, 37, 239, 0, 239, 239, - 41, 42, 43, 44, 0, 243, 0, 0, 203, 0, - 428, 0, 0, 243, 0, 0, 204, 205, 0, 239, - 239, 0, 0, -189, -189, 240, -189, 240, 0, 0, - -189, 0, 244, 0, 0, 241, 0, 241, 245, -189, - 244, 0, -189, 0, 0, 0, 245, 0, 0, 16, - 6, -190, -190, 242, -190, 242, 34, 35, -190, 37, - 0, 0, 0, 134, 0, 0, 240, -190, 240, 240, - -190, 0, 135, 0, 0, 136, 241, 0, 335, 241, - -189, -189, 0, 0, 0, 0, 0, 0, 0, 240, - 240, 0, 0, 0, 242, 0, 242, 242, 0, 241, - 241, 0, 297, 298, 0, 299, 300, 0, -190, -190, - 243, 0, 243, 16, 6, 0, 0, 242, 242, 0, - 0, 0, 0, 0, 0, 34, 35, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 244, - 0, 135, 0, 245, 136, 245, 0, 0, 0, 301, - 302, 243, 0, 243, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 243, 243, 0, 0, 244, 0, - 244, 244, 16, 6, 245, 0, 245, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 244, 244, 0, 0, 0, 185, 245, 245, 186, - 187, 188, 0, 189, 190, 191, 192, 0, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 34, 35, 0, - 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, - 0, 144, 202, 203, 0, 0, 0, 0, 0, 184, - 262, 204, 205, 0, 0, 0, 0, 185, 0, 0, - 186, 187, 188, 0, 189, 190, 191, 192, 0, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, - 0, 37, 0, 0, 16, 6, 41, 42, 43, 44, - -191, -191, 144, -191, 203, 0, 0, -191, 0, 0, - 184, 0, 204, 205, 0, 0, -191, 0, 185, -191, - 0, 186, 187, 188, 0, 189, 190, 191, 192, 0, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 34, + 15, 107, 146, 17, 17, 138, 333, 139, 15, 18, + 19, 30, 334, 25, 335, 238, 1, 2, 3, 4, + 5, 275, 142, 373, 93, 32, 267, 21, 29, 94, + -208, 95, 55, 20, 96, 99, 268, 261, 27, 26, + 97, 100, 158, 98, 28, 298, 299, 108, 300, 301, + 29, 374, 316, 6, 319, 238, 367, 158, 107, 158, + 238, 158, 376, -188, -188, 92, -188, 158, 34, 35, + -188, 37, 140, 16, 6, 287, 287, 101, 141, -188, + 238, 145, -188, 377, 135, 16, 6, 136, 158, 113, + 383, 385, 302, 303, 147, 158, 158, 144, 16, 6, + 409, 143, 116, 117, 6, 158, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 148, 270, 422, + -188, -188, -188, 149, 158, 137, 16, 6, 129, 130, + 131, 132, 133, 239, 238, 423, 180, 150, 292, 240, + 158, 151, 287, 184, 424, 247, 333, 111, 112, 158, + 250, 141, 334, 253, 335, 34, 35, 152, 37, 131, + 132, 133, 153, 41, 42, 43, 44, 154, 158, 159, + 142, 204, 262, 239, 181, 138, 269, 139, 239, 240, + 271, 260, 272, 266, 240, 247, 276, 273, 274, 279, + 247, 141, 292, 288, 288, 280, 141, 284, 239, 240, + 240, 278, 285, 283, 240, 247, 247, 286, 293, 294, + 247, 141, 141, 16, 6, 295, 141, 34, 35, 296, + 37, 56, 138, 138, 139, 139, 129, 130, 131, 132, + 133, 297, 317, 135, 320, 323, 136, 328, 330, 238, + 102, 238, 140, 109, 110, 345, 112, 339, 141, 340, + 346, 347, 239, 348, 360, 366, 368, 362, 240, 364, + 288, 370, 382, 414, 247, 384, 240, 372, 386, 138, + 141, 139, 247, 337, 137, 16, 6, 397, 141, 398, + 238, 410, 287, 238, 396, 412, 415, 416, 418, 140, + 140, 420, 426, 430, 431, 141, 141, 389, 157, 391, + 432, 433, 22, 238, 238, 435, 23, 436, 437, 24, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 427, + 179, 264, 277, 0, 0, 0, 140, 0, 425, 0, + 0, 428, 141, 248, 0, 0, 251, 0, 0, 254, + 0, 255, 0, 257, 0, 0, 417, 239, 419, 239, + 421, 438, 439, 240, 0, 240, 0, 0, 0, 247, + 0, 247, 0, 0, 395, 141, 0, 141, 0, 0, + 0, 265, 0, 0, 0, 0, -189, -189, 0, -189, + 0, 241, 0, -189, 282, 0, 0, 242, 239, 0, + 288, 239, -189, 0, 240, -189, 240, 240, 0, 0, + 247, 0, 247, 247, 0, 0, 141, 0, 141, 141, + 0, 239, 239, 0, 0, 243, 0, 240, 240, 0, + 0, 241, 0, 247, 247, 0, 241, 242, 0, 141, + 141, 0, 242, -189, -189, -189, 0, 0, 0, 0, + 0, 241, 241, 324, 0, 0, 241, 289, 290, 0, + 0, 0, 242, 0, 329, 243, 331, 0, 0, 338, + 243, 0, -190, -190, 244, -190, 0, 0, 0, -190, + 0, 344, 182, 0, 0, 243, 243, 0, -190, 249, + 243, -190, 252, 245, 0, 0, 0, 0, 0, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 241, 246, 0, 0, 244, 0, 242, 365, 241, 244, + 0, 0, 0, 0, 336, 0, 0, 0, 0, -190, + -190, -190, 0, 245, 244, 244, 0, 0, 245, 244, + 378, 379, 380, 381, 243, 0, 0, 0, 0, 0, + 0, 246, 243, 245, 245, 0, 246, 0, 245, 0, + 0, 0, 0, 0, 0, 390, 0, 392, 394, 0, + 0, 246, 246, 0, 34, 35, 246, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, -196, -196, + 204, -196, 0, 244, 0, -196, 0, 0, 205, 206, + 142, 244, 325, 0, -196, 0, 0, -196, -208, 429, + 0, 0, 245, 0, 0, 241, 0, 241, 0, 0, + 245, 242, 0, 242, 342, 343, 0, 0, 0, 0, + 246, 0, 16, 6, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, -196, -196, -196, 0, 243, + 0, 243, 0, 0, 0, 0, 241, 361, 241, 241, + 363, 0, 242, 0, 336, 242, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 117, 0, 0, 241, + 241, 122, 123, 124, 125, 242, 242, 0, 0, 0, + 243, 0, 243, 243, 0, 0, 0, 0, 244, 0, + 244, 129, 130, 131, 132, 133, 388, 0, 0, 34, + 35, 0, 37, 243, 243, 0, 0, 245, 0, 245, + 0, 0, 406, 0, 407, 135, 408, 0, 136, 0, + 0, 0, 0, 302, 303, 246, 0, 246, 0, 244, + 0, 244, 244, 0, 0, 0, 0, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 245, 0, + 245, 245, 244, 244, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 246, 246, + 0, 245, 245, 0, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 186, 246, + 246, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, + 44, 0, 0, 145, 203, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, -191, -191, 0, -191, 0, + 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, + 0, -191, 0, 0, -191, 0, 0, 0, 185, 263, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, -191, -191, -191, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, 43, - 44, 0, 0, 144, 290, 203, 0, -191, -191, 0, - 0, 184, 325, 204, 205, 0, 0, 0, 0, 185, - 0, 0, 186, 187, 188, 0, 189, 190, 191, 192, - 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, - 43, 44, -192, -192, 144, -192, 203, 0, 0, -192, - 0, 0, 184, 0, 204, 205, 0, 0, -192, 0, - 185, -192, 0, 186, 187, 188, 0, 189, 190, 191, - 192, 0, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 34, 35, 33, 37, 0, 0, 16, 6, 41, - 42, 43, 44, 0, 0, 144, 0, 203, 0, -192, - -192, 0, 0, 0, 0, 204, 205, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 321, 0, 0, 103, 104, 115, 0, 47, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 16, 6, - 0, 0, 0, 48, 49, 0, 0, 33, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, - 0, 47, 0, 280, 0, 0, -193, -193, 0, -193, - 0, 0, 0, -193, 0, 0, 0, 48, 49, 0, - 0, 33, -193, 0, 0, -193, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 51, 16, 6, + 44, 0, 0, 145, 291, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 0, 37, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 136, 0, 0, 0, 185, 326, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, 137, 16, 6, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 33, 37, 0, 0, 16, 6, 41, 42, 43, + 44, 0, 0, 145, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 256, 0, + 0, 103, 104, 0, 115, 47, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 16, 6, 0, + 0, 48, 49, 0, 0, 0, 33, 0, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 281, 0, 0, 0, 0, 0, 0, 0, + 0, -192, -192, 0, -192, 0, 48, 49, -192, 0, + 0, 33, 0, 0, 0, 0, 0, -192, 0, 0, + -192, 0, 0, 50, 0, 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 46, 0, -193, -193, 47, 0, 0, 0, 0, - -194, -194, 0, -194, 0, 0, 0, -194, 0, 0, - 0, 48, 49, 0, 0, 33, -194, 0, 0, -194, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 0, 0, 0, 103, 0, -194, -194, 47, - 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 155, 0, 0, 48, 49, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 50, 0, 0, 51, 16, 6, 29, 52, - 53, 54, 55, 126, 127, 128, 129, 130, 131, 132, - 133, 399, 0, 0, 0, 0, 400, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 401, 0, 0, 0, 0, - 402, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, + 0, 46, 0, 0, 0, 47, 0, 0, -192, -192, + -192, 0, 0, 0, 0, 0, -193, -193, 0, -193, + 0, 48, 49, -193, 0, 0, 33, 0, 0, 0, + 0, 0, -193, 0, 0, -193, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, -194, -194, 103, -194, 0, 0, + 47, -194, 0, -193, -193, -193, 0, 0, -195, -195, + -194, -195, 0, -194, 0, -195, 48, 49, 0, 0, + 0, 0, 0, 0, -195, 0, 0, -195, 0, 0, + 0, 0, 0, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 0, 0, 0, 0, 0, + 0, -194, -194, -194, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 156, 0, -195, -195, -195, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 400, 0, 0, 0, 0, 401, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 402, 0, 0, 0, + 0, 403, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 403, - 0, 0, 0, 0, 404, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 369, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 375, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 387, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 386, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 410, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 433, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 255, 0, 0, 0, 0, + 399, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 434, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 259, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 315, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 321, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 322, 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 258, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 314, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 317, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 320, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 257, 0, 115, 0, 0, + 129, 130, 131, 132, 133, 258, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, - 128, 129, 130, 131, 132, 133, 326, 115, 0, 0, + 128, 129, 130, 131, 132, 133, 327, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 340, 115, 0, 0, 116, 117, 118, 119, 120, + 133, 341, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, @@ -4104,203 +4126,213 @@ namespace xsk { namespace gsc { namespace s1 { 0, 0, 0, 0, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, 123, 124, - 125, 116, 117, 0, 0, 0, 0, 122, 123, 124, - 125, 0, 0, 0, 0, 0, 0, 129, 130, 131, - 132, 133, 0, 0, 0, 0, 0, 129, 130, 131, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 72, 3, 4, 93, 189, 72, 8, 3, - 4, 271, 48, 141, 271, 48, 22, 271, 89, 90, - 148, 44, 20, 151, 44, 25, 209, 3, 4, 5, - 6, 7, 85, 44, 34, 35, 94, 95, 91, 0, - 34, 35, 95, 54, 50, 32, 33, 47, 35, 54, - 70, 54, 44, 89, 90, 90, 89, 90, 103, 144, - 52, 48, 45, 45, 51, 91, 45, 50, 50, 56, - 57, 50, 72, 45, 45, 48, 45, 45, 72, 50, - 263, 50, 50, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 94, 45, 45, 90, 52, 184, - 50, 50, 89, 90, 189, 45, 32, 33, 54, 35, - 50, 58, 59, 39, 90, 46, 45, 44, 44, 204, - 205, 50, 48, 45, 209, 51, 52, 48, 50, 45, - 45, 48, 144, 261, 50, 50, 136, 84, 85, 86, - 87, 88, 142, 52, 144, 86, 87, 88, 44, 149, - 144, 411, 152, 52, 411, 283, 284, 411, 48, 32, - 33, 50, 35, 89, 90, 49, 44, 40, 41, 42, - 43, 241, 184, 52, 44, 48, 241, 189, 263, 54, - 180, 44, 44, 44, 184, 368, 271, 370, 316, 189, - 184, 319, 204, 205, 44, 189, 194, 209, 84, 85, - 86, 87, 88, 44, 204, 205, 53, 44, 54, 209, - 204, 205, 54, 26, 54, 209, 89, 90, 288, 289, - 44, 48, 54, 288, 289, 54, 409, 44, 54, 412, - 44, 49, 45, 54, 54, 48, 49, 365, 45, 19, - 95, 241, 32, 33, 53, 35, 44, 241, 53, 432, - 433, 263, 44, 381, 49, 383, 44, 385, 48, 271, - 44, 51, 49, 263, 49, 335, 44, 44, 54, 263, - 335, 271, 272, 54, 44, 44, 44, 271, 54, 54, - 17, 54, 22, 368, 184, 370, 374, 54, 288, 289, - 103, 54, 54, 54, 288, 289, 54, 45, 45, 89, - 90, 45, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 144, 135, 45, 409, 54, 411, 412, 54, 8, - 54, 8, 8, 411, 147, 335, 194, 150, -1, -1, - 153, 335, 155, -1, 157, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 400, 368, 402, 370, 404, - -1, 184, -1, -1, -1, -1, 189, -1, 368, -1, - 370, -1, 185, 373, 368, -1, 370, 32, 33, -1, - 35, 204, 205, -1, 39, 198, 209, -1, -1, -1, - -1, 144, -1, 48, -1, -1, 51, 409, -1, 411, - 412, 144, -1, -1, -1, -1, -1, -1, -1, 409, - -1, 411, 412, -1, -1, 409, -1, 411, 412, 144, - 432, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 184, 432, 433, 89, 90, 189, -1, 432, 433, - 263, 184, -1, -1, 257, -1, 189, -1, 271, -1, - -1, 204, 205, -1, -1, 268, 209, 270, -1, 184, - 273, 204, 205, -1, 189, -1, 209, 32, 33, -1, - 35, -1, 285, -1, 39, -1, 144, -1, -1, 204, - 205, -1, -1, 48, 209, -1, 51, -1, -1, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, 144, -1, -1, -1, -1, 321, 144, - 263, -1, -1, -1, -1, -1, 184, -1, 271, -1, - 263, 189, -1, -1, 89, 90, -1, -1, 271, -1, - -1, 344, 345, 346, 347, -1, 204, 205, 263, -1, - -1, 209, -1, 184, -1, 368, 271, 370, 189, 184, - -1, -1, -1, -1, 189, -1, 369, -1, 371, 372, - -1, -1, -1, 204, 205, -1, -1, -1, 209, 204, - 205, -1, -1, -1, 209, -1, -1, -1, -1, -1, - -1, -1, 32, 33, -1, 35, 409, -1, 411, 412, - 40, 41, 42, 43, -1, 263, -1, -1, 48, -1, - 413, -1, -1, 271, -1, -1, 56, 57, -1, 432, - 433, -1, -1, 32, 33, 368, 35, 370, -1, -1, - 39, -1, 263, -1, -1, 368, -1, 370, 263, 48, - 271, -1, 51, -1, -1, -1, 271, -1, -1, 89, - 90, 32, 33, 368, 35, 370, 32, 33, 39, 35, - -1, -1, -1, 39, -1, -1, 409, 48, 411, 412, - 51, -1, 48, -1, -1, 51, 409, -1, 411, 412, - 89, 90, -1, -1, -1, -1, -1, -1, -1, 432, - 433, -1, -1, -1, 409, -1, 411, 412, -1, 432, - 433, -1, 9, 10, -1, 12, 13, -1, 89, 90, - 368, -1, 370, 89, 90, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 32, 33, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 48, -1, 368, 51, 370, -1, -1, -1, 56, - 57, 409, -1, 411, 412, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 432, 433, -1, -1, 409, -1, - 411, 412, 89, 90, 409, -1, 411, 412, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, - -1, 432, 433, -1, -1, -1, 11, 432, 433, 14, + 0, 46, 93, 3, 4, 72, 272, 72, 8, 3, + 4, 20, 272, 44, 272, 145, 3, 4, 5, 6, + 7, 85, 44, 22, 45, 25, 44, 0, 92, 50, + 52, 48, 96, 44, 34, 35, 54, 45, 54, 70, + 34, 35, 50, 48, 54, 9, 10, 47, 12, 13, + 92, 50, 45, 91, 45, 185, 45, 50, 103, 50, + 190, 50, 45, 32, 33, 45, 35, 50, 32, 33, + 39, 35, 72, 90, 91, 205, 206, 48, 72, 48, + 210, 46, 51, 45, 48, 90, 91, 51, 50, 91, + 45, 45, 56, 57, 94, 50, 50, 54, 90, 91, + 45, 52, 58, 59, 91, 50, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 48, 190, 45, + 89, 90, 91, 44, 50, 89, 90, 91, 84, 85, + 86, 87, 88, 145, 264, 45, 136, 52, 210, 145, + 50, 48, 272, 143, 45, 145, 412, 95, 96, 50, + 150, 145, 412, 153, 412, 32, 33, 44, 35, 86, + 87, 88, 52, 40, 41, 42, 43, 48, 50, 49, + 44, 48, 44, 185, 52, 242, 44, 242, 190, 185, + 44, 181, 44, 54, 190, 185, 195, 44, 44, 54, + 190, 185, 264, 205, 206, 54, 190, 44, 210, 205, + 206, 53, 44, 54, 210, 205, 206, 48, 54, 54, + 210, 205, 206, 90, 91, 54, 210, 32, 33, 54, + 35, 26, 289, 290, 289, 290, 84, 85, 86, 87, + 88, 54, 44, 48, 44, 49, 51, 45, 19, 369, + 45, 371, 242, 48, 49, 44, 96, 53, 242, 53, + 44, 44, 264, 44, 49, 44, 54, 49, 264, 49, + 272, 44, 44, 22, 264, 44, 272, 54, 44, 336, + 264, 336, 272, 273, 89, 90, 91, 54, 272, 54, + 410, 17, 412, 413, 375, 54, 54, 54, 54, 289, + 290, 54, 54, 45, 45, 289, 290, 369, 103, 371, + 45, 45, 8, 433, 434, 54, 8, 54, 54, 8, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 412, + 135, 185, 195, -1, -1, -1, 336, -1, 410, -1, + -1, 413, 336, 148, -1, -1, 151, -1, -1, 154, + -1, 156, -1, 158, -1, -1, 401, 369, 403, 371, + 405, 433, 434, 369, -1, 371, -1, -1, -1, 369, + -1, 371, -1, -1, 374, 369, -1, 371, -1, -1, + -1, 186, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 145, -1, 39, 199, -1, -1, 145, 410, -1, + 412, 413, 48, -1, 410, 51, 412, 413, -1, -1, + 410, -1, 412, 413, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, 145, -1, 433, 434, -1, + -1, 185, -1, 433, 434, -1, 190, 185, -1, 433, + 434, -1, 190, 89, 90, 91, -1, -1, -1, -1, + -1, 205, 206, 258, -1, -1, 210, 205, 206, -1, + -1, -1, 210, -1, 269, 185, 271, -1, -1, 274, + 190, -1, 32, 33, 145, 35, -1, -1, -1, 39, + -1, 286, 142, -1, -1, 205, 206, -1, 48, 149, + 210, 51, 152, 145, -1, -1, -1, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 264, 145, -1, -1, 185, -1, 264, 322, 272, 190, + -1, -1, -1, -1, 272, -1, -1, -1, -1, 89, + 90, 91, -1, 185, 205, 206, -1, -1, 190, 210, + 345, 346, 347, 348, 264, -1, -1, -1, -1, -1, + -1, 185, 272, 205, 206, -1, 190, -1, 210, -1, + -1, -1, -1, -1, -1, 370, -1, 372, 373, -1, + -1, 205, 206, -1, 32, 33, 210, 35, -1, -1, + -1, -1, 40, 41, 42, 43, -1, -1, 32, 33, + 48, 35, -1, 264, -1, 39, -1, -1, 56, 57, + 44, 272, 262, -1, 48, -1, -1, 51, 52, 414, + -1, -1, 264, -1, -1, 369, -1, 371, -1, -1, + 272, 369, -1, 371, 284, 285, -1, -1, -1, -1, + 264, -1, 90, 91, -1, -1, -1, -1, 272, -1, + -1, -1, -1, -1, -1, 89, 90, 91, -1, 369, + -1, 371, -1, -1, -1, -1, 410, 317, 412, 413, + 320, -1, 410, -1, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, 433, + 434, 64, 65, 66, 67, 433, 434, -1, -1, -1, + 410, -1, 412, 413, -1, -1, -1, -1, 369, -1, + 371, 84, 85, 86, 87, 88, 366, -1, -1, 32, + 33, -1, 35, 433, 434, -1, -1, 369, -1, 371, + -1, -1, 382, -1, 384, 48, 386, -1, 51, -1, + -1, -1, -1, 56, 57, 369, -1, 371, -1, 410, + -1, 412, 413, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 410, -1, + 412, 413, 433, 434, -1, -1, 89, 90, 91, -1, + -1, -1, -1, -1, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, -1, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, 11, 433, + 434, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, -1, -1, -1, -1, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, 3, - 4, 56, 57, -1, -1, -1, -1, 11, -1, -1, - 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, 35, -1, -1, 89, 90, 40, 41, 42, 43, - 32, 33, 46, 35, 48, -1, -1, 39, -1, -1, - 3, -1, 56, 57, -1, -1, 48, -1, 11, 51, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, 35, -1, -1, 89, 90, 40, 41, 42, - 43, -1, -1, 46, 47, 48, -1, 89, 90, -1, - -1, 3, 4, 56, 57, -1, -1, -1, -1, 11, - -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, -1, -1, 89, 90, 40, 41, - 42, 43, 32, 33, 46, 35, 48, -1, -1, 39, - -1, -1, 3, -1, 56, 57, -1, -1, 48, -1, - 11, 51, -1, 14, 15, 16, -1, 18, 19, 20, - 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 8, 35, -1, -1, 89, 90, 40, - 41, 42, 43, -1, -1, 46, -1, 48, -1, 89, - 90, -1, -1, -1, -1, 56, 57, 32, 33, 34, - 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 50, -1, -1, 48, 49, 55, -1, 52, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 89, 90, - -1, -1, -1, 68, 69, -1, -1, 8, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, -1, - 85, -1, -1, 88, 89, 90, 91, 92, 93, 94, - 95, 32, 33, 34, 35, 36, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, 48, -1, -1, - -1, 52, -1, 54, -1, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, 68, 69, -1, - -1, 8, 48, -1, -1, 51, -1, -1, -1, -1, - -1, -1, -1, -1, 85, -1, -1, 88, 89, 90, - 91, 92, 93, 94, 95, 32, 33, 34, 35, 36, + 33, -1, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, + -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 8, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, -1, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 49, -1, + -1, 48, 49, -1, 55, 52, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 90, 91, -1, + -1, 68, 69, -1, -1, -1, 8, -1, -1, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, -1, -1, -1, + 52, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 32, 33, -1, 35, -1, 68, 69, 39, -1, + -1, 8, -1, -1, -1, -1, -1, 48, -1, -1, + 51, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, - -1, 48, -1, 89, 90, 52, -1, -1, -1, -1, - 32, 33, -1, 35, -1, -1, -1, 39, -1, -1, - -1, 68, 69, -1, -1, 8, 48, -1, -1, 51, - -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, - -1, 88, 89, 90, 91, 92, 93, 94, 95, 32, - 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, 48, -1, 89, 90, 52, - -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, - -1, -1, 50, -1, -1, 68, 69, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, 85, -1, -1, 88, 89, 90, 91, 92, - 93, 94, 95, 81, 82, 83, 84, 85, 86, 87, - 88, 45, -1, -1, -1, -1, 50, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 45, -1, -1, -1, -1, - 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, + -1, 48, -1, -1, -1, 52, -1, -1, 89, 90, + 91, -1, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 68, 69, 39, -1, -1, 8, -1, -1, -1, + -1, -1, 48, -1, -1, 51, -1, -1, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, 32, 33, 48, 35, -1, -1, + 52, 39, -1, 89, 90, 91, -1, -1, 32, 33, + 48, 35, -1, 51, -1, 39, 68, 69, -1, -1, + -1, -1, -1, -1, 48, -1, -1, 51, -1, -1, + -1, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, -1, -1, -1, -1, -1, + -1, 89, 90, 91, -1, -1, -1, -1, 45, -1, + -1, -1, -1, 50, -1, 89, 90, 91, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 45, -1, -1, -1, -1, 50, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 45, -1, -1, -1, + -1, 50, -1, -1, -1, -1, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 45, - -1, -1, -1, -1, 50, -1, -1, -1, -1, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 45, -1, -1, -1, -1, 50, -1, -1, -1, -1, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 45, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 45, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, + 45, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, @@ -4329,86 +4361,85 @@ namespace xsk { namespace gsc { namespace s1 { -1, -1, -1, -1, 82, 83, 84, 85, 86, 87, 88, -1, -1, -1, 82, -1, 84, 85, 86, 87, 88, 58, 59, -1, -1, 62, 63, 64, 65, 66, - 67, 58, 59, -1, -1, -1, -1, 64, 65, 66, - 67, -1, -1, -1, -1, -1, -1, 84, 85, 86, - 87, 88, -1, -1, -1, -1, -1, 84, 85, 86, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 84, 85, 86, 87, 88 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, - 109, 110, 111, 112, 113, 176, 89, 176, 177, 177, - 44, 0, 108, 109, 110, 44, 70, 54, 54, 91, - 179, 158, 176, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 91, 107, 108, 109, + 110, 111, 112, 113, 114, 177, 90, 177, 178, 178, + 44, 0, 109, 110, 111, 44, 70, 54, 54, 92, + 180, 159, 177, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 52, 68, 69, - 85, 88, 92, 93, 94, 95, 143, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 45, 45, 50, 48, 176, 177, 48, 176, - 177, 48, 143, 48, 49, 143, 159, 160, 176, 143, - 143, 94, 95, 90, 54, 55, 58, 59, 60, 61, + 85, 88, 93, 94, 95, 96, 144, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 45, 45, 50, 48, 177, 178, 48, 177, + 178, 48, 144, 48, 49, 144, 160, 161, 177, 144, + 144, 95, 96, 91, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 81, 82, 83, 84, - 85, 86, 87, 88, 39, 48, 51, 155, 156, 176, - 177, 44, 52, 54, 46, 116, 176, 48, 44, 52, - 48, 44, 52, 48, 45, 50, 143, 50, 49, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 176, - 52, 159, 160, 176, 3, 11, 14, 15, 16, 18, - 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 47, 48, 56, 57, 114, 115, 116, 117, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 85, 86, 87, 88, 39, 48, 51, 89, 156, 157, + 177, 178, 44, 52, 54, 46, 117, 177, 48, 44, + 52, 48, 44, 52, 48, 45, 50, 144, 50, 49, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 177, 52, 160, 161, 177, 3, 11, 14, 15, 16, + 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 47, 48, 56, 57, 115, 116, 117, + 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 145, 146, 147, 153, 154, 162, - 163, 166, 170, 171, 172, 173, 176, 143, 159, 176, - 143, 159, 176, 143, 143, 49, 143, 53, 49, 176, - 45, 44, 4, 117, 143, 54, 44, 54, 44, 114, - 44, 44, 44, 44, 85, 179, 183, 53, 54, 54, - 54, 143, 54, 44, 44, 48, 153, 154, 166, 166, - 47, 114, 54, 54, 54, 54, 54, 9, 10, 12, - 13, 56, 57, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 49, 45, 44, 49, 45, 44, - 49, 50, 49, 143, 159, 4, 54, 45, 143, 19, - 143, 118, 145, 146, 147, 166, 176, 143, 53, 53, - 54, 159, 159, 143, 44, 44, 44, 44, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 49, - 159, 49, 159, 49, 143, 44, 45, 54, 45, 44, - 45, 54, 22, 50, 45, 45, 45, 143, 143, 143, - 143, 44, 45, 44, 45, 44, 45, 159, 114, 143, - 114, 143, 144, 143, 176, 116, 54, 54, 45, 45, - 50, 45, 50, 45, 50, 159, 159, 159, 45, 17, - 45, 54, 45, 22, 54, 54, 160, 54, 160, 54, - 160, 45, 45, 45, 114, 54, 118, 114, 143, 45, - 45, 45, 45, 45, 54, 54, 54, 114, 114 + 139, 140, 141, 142, 143, 146, 147, 148, 154, 155, + 163, 164, 167, 171, 172, 173, 174, 177, 144, 160, + 177, 144, 160, 177, 144, 144, 49, 144, 53, 49, + 177, 45, 44, 4, 118, 144, 54, 44, 54, 44, + 115, 44, 44, 44, 44, 85, 180, 184, 53, 54, + 54, 54, 144, 54, 44, 44, 48, 154, 155, 167, + 167, 47, 115, 54, 54, 54, 54, 54, 9, 10, + 12, 13, 56, 57, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 49, 45, 44, 49, 45, + 44, 49, 50, 49, 144, 160, 4, 54, 45, 144, + 19, 144, 119, 146, 147, 148, 167, 177, 144, 53, + 53, 54, 160, 160, 144, 44, 44, 44, 44, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 49, 160, 49, 160, 49, 144, 44, 45, 54, 45, + 44, 45, 54, 22, 50, 45, 45, 45, 144, 144, + 144, 144, 44, 45, 44, 45, 44, 45, 160, 115, + 144, 115, 144, 145, 144, 177, 117, 54, 54, 45, + 45, 50, 45, 50, 45, 50, 160, 160, 160, 45, + 17, 45, 54, 45, 22, 54, 54, 161, 54, 161, + 54, 161, 45, 45, 45, 115, 54, 119, 115, 144, + 45, 45, 45, 45, 45, 54, 54, 54, 115, 115 }; const unsigned char parser::yyr1_[] = { - 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, - 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 115, 115, 116, 116, - 117, 117, 118, 118, 118, 118, 119, 119, 120, 120, - 120, 121, 122, 122, 123, 124, 124, 125, 125, 126, - 127, 127, 128, 129, 130, 131, 132, 133, 133, 134, - 135, 135, 136, 137, 138, 139, 139, 140, 141, 142, - 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 146, 146, 147, 147, - 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 151, 152, 153, - 153, 154, 154, 155, 155, 155, 155, 155, 155, 156, - 156, 156, 156, 157, 158, 158, 158, 159, 159, 160, - 160, 161, 161, 162, 163, 164, 165, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 177, 178, 179, - 180, 181, 182, 182, 183, 183, 184, 185 + 0, 106, 107, 107, 108, 108, 108, 108, 108, 108, + 109, 110, 111, 111, 111, 111, 111, 112, 113, 114, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 116, 116, 117, 117, + 118, 118, 119, 119, 119, 119, 120, 120, 121, 121, + 121, 122, 123, 123, 124, 125, 125, 126, 126, 127, + 128, 128, 129, 130, 131, 132, 133, 134, 134, 135, + 136, 136, 137, 138, 139, 140, 140, 141, 142, 143, + 144, 144, 144, 145, 145, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 147, 147, 148, 148, + 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 152, 153, 154, + 154, 155, 155, 156, 156, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 159, 159, 159, 160, 160, 161, + 161, 162, 162, 163, 164, 164, 165, 166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 178, 179, + 180, 181, 182, 183, 183, 184, 184, 185, 186 }; const signed char @@ -4432,10 +4463,10 @@ namespace xsk { namespace gsc { namespace s1 { 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, - 1, 2, 3, 4, 3, 2, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 7, 2, 1, 2, 1, 1, 1 + 1, 2, 3, 4, 3, 2, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 7, 2, 1, 2, 1, 1, 1 }; @@ -4445,28 +4476,28 @@ namespace xsk { namespace gsc { namespace s1 { const short parser::yyrline_[] = { - 0, 245, 245, 246, 250, 252, 254, 256, 258, 260, - 265, 269, 274, 275, 276, 277, 278, 282, 287, 292, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 326, 327, 331, 332, - 336, 338, 343, 345, 347, 350, 354, 356, 361, 363, - 365, 370, 375, 377, 382, 387, 389, 394, 396, 401, - 406, 408, 413, 418, 423, 428, 433, 438, 440, 445, - 450, 452, 457, 462, 467, 472, 474, 479, 484, 489, - 494, 495, 496, 500, 501, 505, 507, 509, 511, 513, - 515, 517, 519, 521, 523, 525, 530, 532, 537, 539, - 544, 549, 551, 553, 555, 557, 559, 561, 563, 565, - 567, 569, 571, 573, 575, 577, 579, 581, 583, 588, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 619, 624, 629, - 630, 633, 634, 638, 640, 642, 644, 646, 648, 653, - 655, 657, 659, 664, 669, 671, 674, 678, 681, 685, - 687, 692, 694, 699, 704, 709, 714, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 731, 736, 741, 746, - 751, 756, 761, 766, 771, 776, 781, 783, 788, 793, - 798, 803, 808, 810, 815, 817, 822, 827 + 0, 246, 246, 247, 251, 253, 255, 257, 259, 261, + 266, 270, 275, 276, 277, 278, 279, 283, 288, 293, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 327, 328, 332, 333, + 337, 339, 344, 346, 348, 351, 355, 357, 362, 364, + 366, 371, 376, 378, 383, 388, 390, 395, 397, 402, + 407, 409, 414, 419, 424, 429, 434, 439, 441, 446, + 451, 453, 458, 463, 468, 473, 475, 480, 485, 490, + 495, 496, 497, 501, 502, 506, 508, 510, 512, 514, + 516, 518, 520, 522, 524, 526, 531, 533, 538, 540, + 545, 550, 552, 554, 556, 558, 560, 562, 564, 566, + 568, 570, 572, 574, 576, 578, 580, 582, 584, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 620, 625, 630, + 631, 634, 635, 639, 641, 643, 645, 647, 649, 654, + 656, 658, 660, 665, 670, 672, 675, 679, 682, 686, + 688, 693, 695, 700, 705, 707, 712, 717, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 734, 739, 744, + 749, 754, 759, 764, 769, 774, 779, 784, 786, 791, + 796, 801, 806, 811, 813, 818, 820, 825, 830 }; void @@ -4499,9 +4530,9 @@ namespace xsk { namespace gsc { namespace s1 { #line 13 "parser.ypp" } } } // xsk::gsc::s1 -#line 4503 "parser.cpp" +#line 4534 "parser.cpp" -#line 831 "parser.ypp" +#line 834 "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 1355f71b..488486c4 100644 --- a/src/s1/xsk/parser.hpp +++ b/src/s1/xsk/parser.hpp @@ -617,6 +617,7 @@ namespace xsk { namespace gsc { namespace s1 { // stmt_while char dummy66[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -762,22 +763,23 @@ namespace xsk { namespace gsc { namespace s1 { MUL = 86, // "*" DIV = 87, // "/" MOD = 88, // "%" - PATH = 89, // "path" - IDENTIFIER = 90, // "identifier" - STRING = 91, // "string literal" - ISTRING = 92, // "localized string" - COLOR = 93, // "color" - FLOAT = 94, // "float" - INTEGER = 95, // "integer" - ADD_ARRAY = 96, // ADD_ARRAY - THEN = 97, // THEN - TERN = 98, // TERN - NEG = 99, // NEG - ANIMREF = 100, // ANIMREF - PREINC = 101, // PREINC - PREDEC = 102, // PREDEC - POSTINC = 103, // POSTINC - POSTDEC = 104 // POSTDEC + FIELD = 89, // "field" + PATH = 90, // "path" + IDENTIFIER = 91, // "identifier" + STRING = 92, // "string literal" + ISTRING = 93, // "localized string" + COLOR = 94, // "color" + FLOAT = 95, // "float" + INTEGER = 96, // "integer" + ADD_ARRAY = 97, // ADD_ARRAY + THEN = 98, // THEN + TERN = 99, // TERN + NEG = 100, // NEG + ANIMREF = 101, // ANIMREF + PREINC = 102, // PREINC + PREDEC = 103, // PREDEC + POSTINC = 104, // POSTINC + POSTDEC = 105 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -794,7 +796,7 @@ namespace xsk { namespace gsc { namespace s1 { { enum symbol_kind_type { - YYNTOKENS = 105, ///< Number of tokens. + YYNTOKENS = 106, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -885,103 +887,104 @@ namespace xsk { namespace gsc { namespace s1 { S_MUL = 86, // "*" S_DIV = 87, // "/" S_MOD = 88, // "%" - S_PATH = 89, // "path" - S_IDENTIFIER = 90, // "identifier" - S_STRING = 91, // "string literal" - S_ISTRING = 92, // "localized string" - S_COLOR = 93, // "color" - S_FLOAT = 94, // "float" - S_INTEGER = 95, // "integer" - S_ADD_ARRAY = 96, // ADD_ARRAY - S_THEN = 97, // THEN - S_TERN = 98, // TERN - S_NEG = 99, // NEG - S_ANIMREF = 100, // ANIMREF - S_PREINC = 101, // PREINC - S_PREDEC = 102, // PREDEC - S_POSTINC = 103, // POSTINC - S_POSTDEC = 104, // POSTDEC - S_YYACCEPT = 105, // $accept - S_root = 106, // root - S_program = 107, // program - S_inline = 108, // inline - S_include = 109, // include - S_declaration = 110, // declaration - S_decl_usingtree = 111, // decl_usingtree - S_decl_constant = 112, // decl_constant - S_decl_thread = 113, // decl_thread - S_stmt = 114, // stmt - S_stmt_dev = 115, // stmt_dev - S_stmt_block = 116, // stmt_block - S_stmt_list = 117, // stmt_list - S_stmt_expr = 118, // stmt_expr - S_stmt_call = 119, // stmt_call - S_stmt_assign = 120, // stmt_assign - S_stmt_endon = 121, // stmt_endon - S_stmt_notify = 122, // stmt_notify - S_stmt_wait = 123, // stmt_wait - S_stmt_waittill = 124, // stmt_waittill - S_stmt_waittillmatch = 125, // stmt_waittillmatch - S_stmt_waittillframeend = 126, // stmt_waittillframeend - S_stmt_waitframe = 127, // stmt_waitframe - S_stmt_if = 128, // stmt_if - S_stmt_ifelse = 129, // stmt_ifelse - S_stmt_while = 130, // stmt_while - S_stmt_dowhile = 131, // stmt_dowhile - S_stmt_for = 132, // stmt_for - S_stmt_foreach = 133, // stmt_foreach - S_stmt_switch = 134, // stmt_switch - S_stmt_case = 135, // stmt_case - S_stmt_default = 136, // stmt_default - S_stmt_break = 137, // stmt_break - S_stmt_continue = 138, // stmt_continue - S_stmt_return = 139, // stmt_return - S_stmt_breakpoint = 140, // stmt_breakpoint - S_stmt_prof_begin = 141, // stmt_prof_begin - S_stmt_prof_end = 142, // stmt_prof_end - S_expr = 143, // expr - S_expr_or_empty = 144, // expr_or_empty - S_expr_assign = 145, // expr_assign - S_expr_increment = 146, // expr_increment - S_expr_decrement = 147, // expr_decrement - S_expr_ternary = 148, // expr_ternary - S_expr_binary = 149, // expr_binary - S_expr_primitive = 150, // expr_primitive - S_expr_complement = 151, // expr_complement - S_expr_not = 152, // expr_not - S_expr_call = 153, // expr_call - S_expr_method = 154, // expr_method - S_expr_function = 155, // expr_function - S_expr_pointer = 156, // expr_pointer - S_expr_add_array = 157, // expr_add_array - S_expr_parameters = 158, // expr_parameters - S_expr_arguments = 159, // expr_arguments - S_expr_arguments_no_empty = 160, // expr_arguments_no_empty - S_expr_reference = 161, // expr_reference - S_expr_array = 162, // expr_array - S_expr_field = 163, // expr_field - S_expr_size = 164, // expr_size - S_expr_paren = 165, // expr_paren - S_expr_object = 166, // expr_object - S_expr_thisthread = 167, // expr_thisthread - S_expr_empty_array = 168, // expr_empty_array - S_expr_undefined = 169, // expr_undefined - S_expr_game = 170, // expr_game - S_expr_self = 171, // expr_self - S_expr_anim = 172, // expr_anim - S_expr_level = 173, // expr_level - S_expr_animation = 174, // expr_animation - S_expr_animtree = 175, // expr_animtree - S_expr_identifier = 176, // expr_identifier - S_expr_path = 177, // expr_path - S_expr_istring = 178, // expr_istring - S_expr_string = 179, // expr_string - S_expr_color = 180, // expr_color - S_expr_vector = 181, // expr_vector - S_expr_float = 182, // expr_float - S_expr_integer = 183, // expr_integer - S_expr_false = 184, // expr_false - S_expr_true = 185 // expr_true + S_FIELD = 89, // "field" + S_PATH = 90, // "path" + S_IDENTIFIER = 91, // "identifier" + S_STRING = 92, // "string literal" + S_ISTRING = 93, // "localized string" + S_COLOR = 94, // "color" + S_FLOAT = 95, // "float" + S_INTEGER = 96, // "integer" + S_ADD_ARRAY = 97, // ADD_ARRAY + S_THEN = 98, // THEN + S_TERN = 99, // TERN + S_NEG = 100, // NEG + S_ANIMREF = 101, // ANIMREF + S_PREINC = 102, // PREINC + S_PREDEC = 103, // PREDEC + S_POSTINC = 104, // POSTINC + S_POSTDEC = 105, // POSTDEC + S_YYACCEPT = 106, // $accept + S_root = 107, // root + S_program = 108, // program + S_inline = 109, // inline + S_include = 110, // include + S_declaration = 111, // declaration + S_decl_usingtree = 112, // decl_usingtree + S_decl_constant = 113, // decl_constant + S_decl_thread = 114, // decl_thread + S_stmt = 115, // stmt + S_stmt_dev = 116, // stmt_dev + S_stmt_block = 117, // stmt_block + S_stmt_list = 118, // stmt_list + S_stmt_expr = 119, // stmt_expr + S_stmt_call = 120, // stmt_call + S_stmt_assign = 121, // stmt_assign + S_stmt_endon = 122, // stmt_endon + S_stmt_notify = 123, // stmt_notify + S_stmt_wait = 124, // stmt_wait + S_stmt_waittill = 125, // stmt_waittill + S_stmt_waittillmatch = 126, // stmt_waittillmatch + S_stmt_waittillframeend = 127, // stmt_waittillframeend + S_stmt_waitframe = 128, // stmt_waitframe + S_stmt_if = 129, // stmt_if + S_stmt_ifelse = 130, // stmt_ifelse + S_stmt_while = 131, // stmt_while + S_stmt_dowhile = 132, // stmt_dowhile + S_stmt_for = 133, // stmt_for + S_stmt_foreach = 134, // stmt_foreach + S_stmt_switch = 135, // stmt_switch + S_stmt_case = 136, // stmt_case + S_stmt_default = 137, // stmt_default + S_stmt_break = 138, // stmt_break + S_stmt_continue = 139, // stmt_continue + S_stmt_return = 140, // stmt_return + S_stmt_breakpoint = 141, // stmt_breakpoint + S_stmt_prof_begin = 142, // stmt_prof_begin + S_stmt_prof_end = 143, // stmt_prof_end + S_expr = 144, // expr + S_expr_or_empty = 145, // expr_or_empty + S_expr_assign = 146, // expr_assign + S_expr_increment = 147, // expr_increment + S_expr_decrement = 148, // expr_decrement + S_expr_ternary = 149, // expr_ternary + S_expr_binary = 150, // expr_binary + S_expr_primitive = 151, // expr_primitive + S_expr_complement = 152, // expr_complement + S_expr_not = 153, // expr_not + S_expr_call = 154, // expr_call + S_expr_method = 155, // expr_method + S_expr_function = 156, // expr_function + S_expr_pointer = 157, // expr_pointer + S_expr_add_array = 158, // expr_add_array + S_expr_parameters = 159, // expr_parameters + S_expr_arguments = 160, // expr_arguments + S_expr_arguments_no_empty = 161, // expr_arguments_no_empty + S_expr_reference = 162, // expr_reference + S_expr_array = 163, // expr_array + S_expr_field = 164, // expr_field + S_expr_size = 165, // expr_size + S_expr_paren = 166, // expr_paren + S_expr_object = 167, // expr_object + S_expr_thisthread = 168, // expr_thisthread + S_expr_empty_array = 169, // expr_empty_array + S_expr_undefined = 170, // expr_undefined + S_expr_game = 171, // expr_game + S_expr_self = 172, // expr_self + S_expr_anim = 173, // expr_anim + S_expr_level = 174, // expr_level + S_expr_animation = 175, // expr_animation + S_expr_animtree = 176, // expr_animtree + S_expr_identifier = 177, // expr_identifier + S_expr_path = 178, // expr_path + S_expr_istring = 179, // expr_istring + S_expr_string = 180, // expr_string + S_expr_color = 181, // expr_color + S_expr_vector = 182, // expr_vector + S_expr_float = 183, // expr_float + S_expr_integer = 184, // expr_integer + S_expr_false = 185, // expr_false + S_expr_true = 186 // expr_true }; }; @@ -1294,6 +1297,7 @@ namespace xsk { namespace gsc { namespace s1 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2563,6 +2567,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2679,7 +2684,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - S1_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + S1_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4064,6 +4069,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4648,7 +4668,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2191, ///< Last index in yytable_. + yylast_ = 2291, ///< Last index in yytable_. yynnts_ = 81, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4952,6 +4972,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5267,6 +5288,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5340,7 +5362,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::s1 -#line 5344 "parser.hpp" +#line 5366 "parser.hpp" diff --git a/src/s2/xsk/lexer.cpp b/src/s2/xsk/lexer.cpp index 879686a5..2cf6ee57 100644 --- a/src/s2/xsk/lexer.cpp +++ b/src/s2/xsk/lexer.cpp @@ -68,9 +68,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -80,18 +80,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -139,7 +130,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -185,24 +176,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw s2::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return s2::parser::make_S2EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -216,7 +211,7 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return s2::parser::make_DIV(loc_); reader_.advance(); @@ -226,29 +221,27 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw s2::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return s2::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw s2::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -262,16 +255,15 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw s2::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -284,7 +276,7 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -294,69 +286,43 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw s2::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return s2::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return s2::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw s2::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return s2::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw s2::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return s2::parser::make_ASSIGN_MUL(loc_); - return s2::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return s2::parser::make_LPAREN(loc_); case ')': @@ -376,6 +342,7 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type case ':': if (curr != ':') return s2::parser::make_COLON(loc_); + reader_.advance(); return s2::parser::make_DOUBLECOLON(loc_); case '?': @@ -383,43 +350,70 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type case '=': if (curr != '=') return s2::parser::make_ASSIGN(loc_); + reader_.advance(); return s2::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return s2::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? s2::parser::make_INCREMENT(loc_) : s2::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return s2::parser::make_INCREMENT(loc_); + + return s2::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return s2::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? s2::parser::make_DECREMENT(loc_) : s2::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return s2::parser::make_DECREMENT(loc_); + + return s2::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return s2::parser::make_MOD(loc_); + reader_.advance(); + return s2::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return s2::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? s2::parser::make_OR(loc_) : s2::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return s2::parser::make_OR(loc_); + + return s2::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return s2::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? s2::parser::make_AND(loc_) : s2::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return s2::parser::make_AND(loc_); + + if (last == '=') + return s2::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return s2::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return s2::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return s2::parser::make_NOT(loc_); + reader_.advance(); return s2::parser::make_INEQUALITY(loc_); case '~': @@ -427,144 +421,222 @@ auto lexer::lex() -> xsk::gsc::s2::parser::symbol_type case '<': if (curr != '<' && curr != '=') return s2::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? s2::parser::make_ASSIGN_LSHIFT(loc_) : s2::parser::make_LSHIFT(loc_); - } - return s2::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return s2::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return s2::parser::make_LSHIFT(loc_); + + reader_.advance(); + return s2::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return s2::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? s2::parser::make_ASSIGN_RSHIFT(loc_) : s2::parser::make_RSHIFT(loc_); - } - return s2::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return s2::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return s2::parser::make_RSHIFT(loc_); + + reader_.advance(); + return s2::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw s2::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::s2::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw s2::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw s2::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return s2::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return s2::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::s2::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw s2::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw s2::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return s2::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return s2::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return s2::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return s2::parser::make_SIZE(loc_); + } + + return s2::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return s2::parser::make_PATH(xsk::gsc::s2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s2::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return s2::parser::make_IDENTIFIER(xsk::gsc::s2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s2::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return s2::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return s2::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -581,30 +653,24 @@ auto lexer::read_number(char first) -> xsk::gsc::s2::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return s2::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return s2::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -616,35 +682,29 @@ auto lexer::read_number(char first) -> xsk::gsc::s2::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return s2::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -661,163 +721,15 @@ auto lexer::read_number(char first) -> xsk::gsc::s2::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return s2::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw s2::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw s2::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw s2::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return s2::parser::make_FLOAT(std::string(data, len), loc_); - - return s2::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::s2::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw s2::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw s2::parser::syntax_error(loc_, "invalid path end '\\'"); - - return s2::parser::make_PATH(xsk::gsc::s2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return s2::parser::make_IDENTIFIER(xsk::gsc::s2::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::s2::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return s2::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return s2::parser::make_DOT(loc_); - - } - else return s2::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::s2::parser::symbol_type { switch (k) diff --git a/src/s2/xsk/lexer.hpp b/src/s2/xsk/lexer.hpp index 833ad470..96a38684 100644 --- a/src/s2/xsk/lexer.hpp +++ b/src/s2/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::s2 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::s2::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::s2::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::s2::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::s2::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::s2::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/s2/xsk/parser.cpp b/src/s2/xsk/parser.cpp index 8cb7a131..05d6ffc1 100644 --- a/src/s2/xsk/parser.cpp +++ b/src/s2/xsk/parser.cpp @@ -491,6 +491,7 @@ namespace xsk { namespace gsc { namespace s2 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -792,6 +793,7 @@ namespace xsk { namespace gsc { namespace s2 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1093,6 +1095,7 @@ namespace xsk { namespace gsc { namespace s2 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1393,6 +1396,7 @@ namespace xsk { namespace gsc { namespace s2 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1948,6 +1952,7 @@ namespace xsk { namespace gsc { namespace s2 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1979,1303 +1984,1309 @@ namespace xsk { namespace gsc { namespace s2 { switch (yyn) { case 2: // root: program -#line 245 "parser.ypp" +#line 246 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 1985 "parser.cpp" +#line 1990 "parser.cpp" break; case 3: // root: %empty -#line 246 "parser.ypp" +#line 247 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 1991 "parser.cpp" +#line 1996 "parser.cpp" break; case 4: // program: program inline -#line 251 "parser.ypp" +#line 252 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 1997 "parser.cpp" +#line 2002 "parser.cpp" break; case 5: // program: program include -#line 253 "parser.ypp" +#line 254 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2003 "parser.cpp" +#line 2008 "parser.cpp" break; case 6: // program: program declaration -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2009 "parser.cpp" +#line 2014 "parser.cpp" break; case 7: // program: inline -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2015 "parser.cpp" +#line 2020 "parser.cpp" break; case 8: // program: include -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2021 "parser.cpp" +#line 2026 "parser.cpp" break; case 9: // program: declaration -#line 261 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2027 "parser.cpp" +#line 2032 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 265 "parser.ypp" +#line 266 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2033 "parser.cpp" +#line 2038 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 270 "parser.ypp" +#line 271 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2039 "parser.cpp" +#line 2044 "parser.cpp" break; case 12: // declaration: "/#" -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2045 "parser.cpp" +#line 2050 "parser.cpp" break; case 13: // declaration: "#/" -#line 275 "parser.ypp" +#line 276 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2051 "parser.cpp" +#line 2056 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 276 "parser.ypp" +#line 277 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2057 "parser.cpp" +#line 2062 "parser.cpp" break; case 15: // declaration: decl_constant -#line 277 "parser.ypp" +#line 278 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2063 "parser.cpp" +#line 2068 "parser.cpp" break; case 16: // declaration: decl_thread -#line 278 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2069 "parser.cpp" +#line 2074 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 283 "parser.ypp" +#line 284 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2075 "parser.cpp" +#line 2080 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 288 "parser.ypp" +#line 289 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2081 "parser.cpp" +#line 2086 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 293 "parser.ypp" +#line 294 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2087 "parser.cpp" +#line 2092 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 297 "parser.ypp" +#line 298 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2093 "parser.cpp" +#line 2098 "parser.cpp" break; case 21: // stmt: stmt_block -#line 298 "parser.ypp" +#line 299 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2099 "parser.cpp" +#line 2104 "parser.cpp" break; case 22: // stmt: stmt_call -#line 299 "parser.ypp" +#line 300 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2105 "parser.cpp" +#line 2110 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 300 "parser.ypp" +#line 301 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2111 "parser.cpp" +#line 2116 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2117 "parser.cpp" +#line 2122 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2123 "parser.cpp" +#line 2128 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2129 "parser.cpp" +#line 2134 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2135 "parser.cpp" +#line 2140 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2141 "parser.cpp" +#line 2146 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2147 "parser.cpp" +#line 2152 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2153 "parser.cpp" +#line 2158 "parser.cpp" break; case 31: // stmt: stmt_if -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2159 "parser.cpp" +#line 2164 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2165 "parser.cpp" +#line 2170 "parser.cpp" break; case 33: // stmt: stmt_while -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2171 "parser.cpp" +#line 2176 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2177 "parser.cpp" +#line 2182 "parser.cpp" break; case 35: // stmt: stmt_for -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2183 "parser.cpp" +#line 2188 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2189 "parser.cpp" +#line 2194 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2195 "parser.cpp" +#line 2200 "parser.cpp" break; case 38: // stmt: stmt_case -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2201 "parser.cpp" +#line 2206 "parser.cpp" break; case 39: // stmt: stmt_default -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2207 "parser.cpp" +#line 2212 "parser.cpp" break; case 40: // stmt: stmt_break -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2213 "parser.cpp" +#line 2218 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2219 "parser.cpp" +#line 2224 "parser.cpp" break; case 42: // stmt: stmt_return -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2225 "parser.cpp" +#line 2230 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 320 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2231 "parser.cpp" +#line 2236 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 321 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2237 "parser.cpp" +#line 2242 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 322 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2243 "parser.cpp" +#line 2248 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 326 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2249 "parser.cpp" +#line 2254 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 327 "parser.ypp" +#line 328 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2255 "parser.cpp" +#line 2260 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 331 "parser.ypp" +#line 332 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2261 "parser.cpp" +#line 2266 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 332 "parser.ypp" +#line 333 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2267 "parser.cpp" +#line 2272 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 337 "parser.ypp" +#line 338 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2273 "parser.cpp" +#line 2278 "parser.cpp" break; case 51: // stmt_list: stmt -#line 339 "parser.ypp" +#line 340 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2279 "parser.cpp" +#line 2284 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 344 "parser.ypp" +#line 345 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2285 "parser.cpp" +#line 2290 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 346 "parser.ypp" +#line 347 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2291 "parser.cpp" +#line 2296 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 348 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2297 "parser.cpp" +#line 2302 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 350 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2303 "parser.cpp" +#line 2308 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 355 "parser.ypp" +#line 356 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2309 "parser.cpp" +#line 2314 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 357 "parser.ypp" +#line 358 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2315 "parser.cpp" +#line 2320 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 362 "parser.ypp" +#line 363 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2321 "parser.cpp" +#line 2326 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 364 "parser.ypp" +#line 365 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2327 "parser.cpp" +#line 2332 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 366 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2333 "parser.cpp" +#line 2338 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 371 "parser.ypp" +#line 372 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2339 "parser.cpp" +#line 2344 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 376 "parser.ypp" +#line 377 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2345 "parser.cpp" +#line 2350 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 378 "parser.ypp" +#line 379 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2351 "parser.cpp" +#line 2356 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 383 "parser.ypp" +#line 384 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2357 "parser.cpp" +#line 2362 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 388 "parser.ypp" +#line 389 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2363 "parser.cpp" +#line 2368 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 390 "parser.ypp" +#line 391 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2369 "parser.cpp" +#line 2374 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 395 "parser.ypp" +#line 396 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2375 "parser.cpp" +#line 2380 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 397 "parser.ypp" +#line 398 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2381 "parser.cpp" +#line 2386 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 402 "parser.ypp" +#line 403 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2387 "parser.cpp" +#line 2392 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 407 "parser.ypp" +#line 408 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2393 "parser.cpp" +#line 2398 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 409 "parser.ypp" +#line 410 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2399 "parser.cpp" +#line 2404 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 414 "parser.ypp" +#line 415 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2405 "parser.cpp" +#line 2410 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 419 "parser.ypp" +#line 420 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2411 "parser.cpp" +#line 2416 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 424 "parser.ypp" +#line 425 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2417 "parser.cpp" +#line 2422 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 429 "parser.ypp" +#line 430 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2423 "parser.cpp" +#line 2428 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 434 "parser.ypp" +#line 435 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2429 "parser.cpp" +#line 2434 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 439 "parser.ypp" +#line 440 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2435 "parser.cpp" +#line 2440 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 441 "parser.ypp" +#line 442 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2441 "parser.cpp" +#line 2446 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 446 "parser.ypp" +#line 447 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2447 "parser.cpp" +#line 2452 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 451 "parser.ypp" +#line 452 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2453 "parser.cpp" +#line 2458 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 453 "parser.ypp" +#line 454 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2459 "parser.cpp" +#line 2464 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 458 "parser.ypp" +#line 459 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2465 "parser.cpp" +#line 2470 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 463 "parser.ypp" +#line 464 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2471 "parser.cpp" +#line 2476 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 468 "parser.ypp" +#line 469 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2477 "parser.cpp" +#line 2482 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 473 "parser.ypp" +#line 474 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2483 "parser.cpp" +#line 2488 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 475 "parser.ypp" +#line 476 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2489 "parser.cpp" +#line 2494 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 480 "parser.ypp" +#line 481 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2495 "parser.cpp" +#line 2500 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 485 "parser.ypp" +#line 486 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2501 "parser.cpp" +#line 2506 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 490 "parser.ypp" +#line 491 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2507 "parser.cpp" +#line 2512 "parser.cpp" break; case 90: // expr: expr_ternary -#line 494 "parser.ypp" +#line 495 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2513 "parser.cpp" +#line 2518 "parser.cpp" break; case 91: // expr: expr_binary -#line 495 "parser.ypp" +#line 496 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2519 "parser.cpp" +#line 2524 "parser.cpp" break; case 92: // expr: expr_primitive -#line 496 "parser.ypp" +#line 497 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2525 "parser.cpp" +#line 2530 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2531 "parser.cpp" +#line 2536 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 501 "parser.ypp" +#line 502 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2537 "parser.cpp" +#line 2542 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 506 "parser.ypp" +#line 507 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2543 "parser.cpp" +#line 2548 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 508 "parser.ypp" +#line 509 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2549 "parser.cpp" +#line 2554 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2555 "parser.cpp" +#line 2560 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2561 "parser.cpp" +#line 2566 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2567 "parser.cpp" +#line 2572 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2573 "parser.cpp" +#line 2578 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 518 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2579 "parser.cpp" +#line 2584 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 520 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2585 "parser.cpp" +#line 2590 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 522 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2591 "parser.cpp" +#line 2596 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 524 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2597 "parser.cpp" +#line 2602 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 526 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2603 "parser.cpp" +#line 2608 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 531 "parser.ypp" +#line 532 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2609 "parser.cpp" +#line 2614 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 533 "parser.ypp" +#line 534 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2615 "parser.cpp" +#line 2620 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 538 "parser.ypp" +#line 539 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2621 "parser.cpp" +#line 2626 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 540 "parser.ypp" +#line 541 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2627 "parser.cpp" +#line 2632 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 545 "parser.ypp" +#line 546 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2633 "parser.cpp" +#line 2638 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 550 "parser.ypp" +#line 551 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2639 "parser.cpp" +#line 2644 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 552 "parser.ypp" +#line 553 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2645 "parser.cpp" +#line 2650 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2651 "parser.cpp" +#line 2656 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2657 "parser.cpp" +#line 2662 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2663 "parser.cpp" +#line 2668 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2669 "parser.cpp" +#line 2674 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2675 "parser.cpp" +#line 2680 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2681 "parser.cpp" +#line 2686 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2687 "parser.cpp" +#line 2692 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2693 "parser.cpp" +#line 2698 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2699 "parser.cpp" +#line 2704 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2705 "parser.cpp" +#line 2710 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2711 "parser.cpp" +#line 2716 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 576 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2717 "parser.cpp" +#line 2722 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2723 "parser.cpp" +#line 2728 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2729 "parser.cpp" +#line 2734 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2735 "parser.cpp" +#line 2740 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2741 "parser.cpp" +#line 2746 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2747 "parser.cpp" +#line 2752 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 589 "parser.ypp" +#line 590 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2753 "parser.cpp" +#line 2758 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 590 "parser.ypp" +#line 591 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2759 "parser.cpp" +#line 2764 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 591 "parser.ypp" +#line 592 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2765 "parser.cpp" +#line 2770 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2771 "parser.cpp" +#line 2776 "parser.cpp" break; case 134: // expr_primitive: expr_reference -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2777 "parser.cpp" +#line 2782 "parser.cpp" break; case 135: // expr_primitive: expr_array -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2783 "parser.cpp" +#line 2788 "parser.cpp" break; case 136: // expr_primitive: expr_field -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2789 "parser.cpp" +#line 2794 "parser.cpp" break; case 137: // expr_primitive: expr_size -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2795 "parser.cpp" +#line 2800 "parser.cpp" break; case 138: // expr_primitive: expr_paren -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2801 "parser.cpp" +#line 2806 "parser.cpp" break; case 139: // expr_primitive: expr_thisthread -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2807 "parser.cpp" +#line 2812 "parser.cpp" break; case 140: // expr_primitive: expr_empty_array -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2813 "parser.cpp" +#line 2818 "parser.cpp" break; case 141: // expr_primitive: expr_undefined -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2819 "parser.cpp" +#line 2824 "parser.cpp" break; case 142: // expr_primitive: expr_game -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2825 "parser.cpp" +#line 2830 "parser.cpp" break; case 143: // expr_primitive: expr_self -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2831 "parser.cpp" +#line 2836 "parser.cpp" break; case 144: // expr_primitive: expr_anim -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2837 "parser.cpp" +#line 2842 "parser.cpp" break; case 145: // expr_primitive: expr_level -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2843 "parser.cpp" +#line 2848 "parser.cpp" break; case 146: // expr_primitive: expr_animation -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2849 "parser.cpp" +#line 2854 "parser.cpp" break; case 147: // expr_primitive: expr_animtree -#line 606 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2855 "parser.cpp" +#line 2860 "parser.cpp" break; case 148: // expr_primitive: expr_identifier -#line 607 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2861 "parser.cpp" +#line 2866 "parser.cpp" break; case 149: // expr_primitive: expr_istring -#line 608 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2867 "parser.cpp" +#line 2872 "parser.cpp" break; case 150: // expr_primitive: expr_string -#line 609 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2873 "parser.cpp" +#line 2878 "parser.cpp" break; case 151: // expr_primitive: expr_color -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2879 "parser.cpp" +#line 2884 "parser.cpp" break; case 152: // expr_primitive: expr_vector -#line 611 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2885 "parser.cpp" +#line 2890 "parser.cpp" break; case 153: // expr_primitive: expr_float -#line 612 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2891 "parser.cpp" +#line 2896 "parser.cpp" break; case 154: // expr_primitive: expr_integer -#line 613 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2897 "parser.cpp" +#line 2902 "parser.cpp" break; case 155: // expr_primitive: expr_false -#line 614 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2903 "parser.cpp" +#line 2908 "parser.cpp" break; case 156: // expr_primitive: expr_true -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2909 "parser.cpp" +#line 2914 "parser.cpp" break; case 157: // expr_complement: "~" expr -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2915 "parser.cpp" +#line 2920 "parser.cpp" break; case 158: // expr_not: "!" expr -#line 625 "parser.ypp" +#line 626 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2921 "parser.cpp" +#line 2926 "parser.cpp" break; case 159: // expr_call: expr_function -#line 629 "parser.ypp" +#line 630 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2927 "parser.cpp" +#line 2932 "parser.cpp" break; case 160: // expr_call: expr_pointer -#line 630 "parser.ypp" +#line 631 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2933 "parser.cpp" +#line 2938 "parser.cpp" break; case 161: // expr_method: expr_object expr_function -#line 633 "parser.ypp" +#line 634 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2939 "parser.cpp" +#line 2944 "parser.cpp" break; case 162: // expr_method: expr_object expr_pointer -#line 634 "parser.ypp" +#line 635 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2945 "parser.cpp" +#line 2950 "parser.cpp" break; case 163: // expr_function: expr_identifier "(" expr_arguments ")" -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2951 "parser.cpp" +#line 2956 "parser.cpp" break; case 164: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 641 "parser.ypp" +#line 642 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2957 "parser.cpp" +#line 2962 "parser.cpp" break; case 165: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 643 "parser.ypp" +#line 644 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2963 "parser.cpp" +#line 2968 "parser.cpp" break; case 166: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2969 "parser.cpp" +#line 2974 "parser.cpp" break; case 167: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2975 "parser.cpp" +#line 2980 "parser.cpp" break; case 168: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2981 "parser.cpp" +#line 2986 "parser.cpp" break; case 169: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 654 "parser.ypp" +#line 655 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 2987 "parser.cpp" +#line 2992 "parser.cpp" break; case 170: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 656 "parser.ypp" +#line 657 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 2993 "parser.cpp" +#line 2998 "parser.cpp" break; case 171: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 658 "parser.ypp" +#line 659 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 2999 "parser.cpp" +#line 3004 "parser.cpp" break; case 172: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3005 "parser.cpp" +#line 3010 "parser.cpp" break; case 173: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 665 "parser.ypp" +#line 666 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3011 "parser.cpp" +#line 3016 "parser.cpp" break; case 174: // expr_parameters: expr_parameters "," expr_identifier -#line 670 "parser.ypp" +#line 671 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3017 "parser.cpp" +#line 3022 "parser.cpp" break; case 175: // expr_parameters: expr_identifier -#line 672 "parser.ypp" +#line 673 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3023 "parser.cpp" +#line 3028 "parser.cpp" break; case 176: // expr_parameters: %empty -#line 674 "parser.ypp" +#line 675 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3029 "parser.cpp" +#line 3034 "parser.cpp" break; case 177: // expr_arguments: expr_arguments_no_empty -#line 679 "parser.ypp" +#line 680 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3035 "parser.cpp" +#line 3040 "parser.cpp" break; case 178: // expr_arguments: %empty -#line 681 "parser.ypp" +#line 682 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3041 "parser.cpp" +#line 3046 "parser.cpp" break; case 179: // expr_arguments_no_empty: expr_arguments "," expr -#line 686 "parser.ypp" +#line 687 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3047 "parser.cpp" +#line 3052 "parser.cpp" break; case 180: // expr_arguments_no_empty: expr -#line 688 "parser.ypp" +#line 689 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3053 "parser.cpp" +#line 3058 "parser.cpp" break; case 181: // expr_reference: "::" expr_identifier -#line 693 "parser.ypp" +#line 694 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3059 "parser.cpp" +#line 3064 "parser.cpp" break; case 182: // expr_reference: expr_path "::" expr_identifier -#line 695 "parser.ypp" +#line 696 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3065 "parser.cpp" +#line 3070 "parser.cpp" break; case 183: // expr_array: expr_object "[" expr "]" -#line 700 "parser.ypp" +#line 701 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3071 "parser.cpp" +#line 3076 "parser.cpp" break; case 184: // expr_field: expr_object "." expr_identifier -#line 705 "parser.ypp" +#line 706 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3077 "parser.cpp" +#line 3082 "parser.cpp" break; - case 185: // expr_size: expr_object ".size" -#line 710 "parser.ypp" + case 185: // expr_field: expr_object "field" +#line 708 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3088 "parser.cpp" + break; + + case 186: // expr_size: expr_object ".size" +#line 713 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3083 "parser.cpp" +#line 3094 "parser.cpp" break; - case 186: // expr_paren: "(" expr ")" -#line 715 "parser.ypp" + case 187: // expr_paren: "(" expr ")" +#line 718 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3089 "parser.cpp" +#line 3100 "parser.cpp" break; - case 187: // expr_object: expr_call -#line 719 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3095 "parser.cpp" - break; - - case 188: // expr_object: expr_method -#line 720 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3101 "parser.cpp" - break; - - case 189: // expr_object: expr_array -#line 721 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3107 "parser.cpp" - break; - - case 190: // expr_object: expr_field + case 188: // expr_object: expr_call #line 722 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3113 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3106 "parser.cpp" break; - case 191: // expr_object: expr_game + case 189: // expr_object: expr_method #line 723 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3119 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3112 "parser.cpp" break; - case 192: // expr_object: expr_self + case 190: // expr_object: expr_array #line 724 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3125 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3118 "parser.cpp" break; - case 193: // expr_object: expr_anim + case 191: // expr_object: expr_field #line 725 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3131 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3124 "parser.cpp" break; - case 194: // expr_object: expr_level + case 192: // expr_object: expr_game #line 726 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3137 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3130 "parser.cpp" break; - case 195: // expr_object: expr_identifier + case 193: // expr_object: expr_self #line 727 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3136 "parser.cpp" + break; + + case 194: // expr_object: expr_anim +#line 728 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3142 "parser.cpp" + break; + + case 195: // expr_object: expr_level +#line 729 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3148 "parser.cpp" + break; + + case 196: // expr_object: expr_identifier +#line 730 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3143 "parser.cpp" +#line 3154 "parser.cpp" break; - case 196: // expr_thisthread: "thisthread" -#line 732 "parser.ypp" + case 197: // expr_thisthread: "thisthread" +#line 735 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3149 "parser.cpp" +#line 3160 "parser.cpp" break; - case 197: // expr_empty_array: "[" "]" -#line 737 "parser.ypp" + case 198: // expr_empty_array: "[" "]" +#line 740 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3155 "parser.cpp" +#line 3166 "parser.cpp" break; - case 198: // expr_undefined: "undefined" -#line 742 "parser.ypp" + case 199: // expr_undefined: "undefined" +#line 745 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3161 "parser.cpp" +#line 3172 "parser.cpp" break; - case 199: // expr_game: "game" -#line 747 "parser.ypp" + case 200: // expr_game: "game" +#line 750 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3167 "parser.cpp" +#line 3178 "parser.cpp" break; - case 200: // expr_self: "self" -#line 752 "parser.ypp" + case 201: // expr_self: "self" +#line 755 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3173 "parser.cpp" +#line 3184 "parser.cpp" break; - case 201: // expr_anim: "anim" -#line 757 "parser.ypp" + case 202: // expr_anim: "anim" +#line 760 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3179 "parser.cpp" +#line 3190 "parser.cpp" break; - case 202: // expr_level: "level" -#line 762 "parser.ypp" + case 203: // expr_level: "level" +#line 765 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3185 "parser.cpp" +#line 3196 "parser.cpp" break; - case 203: // expr_animation: "%" "identifier" -#line 767 "parser.ypp" + case 204: // expr_animation: "%" "identifier" +#line 770 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3191 "parser.cpp" +#line 3202 "parser.cpp" break; - case 204: // expr_animtree: "#animtree" -#line 772 "parser.ypp" + case 205: // expr_animtree: "#animtree" +#line 775 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3197 "parser.cpp" +#line 3208 "parser.cpp" break; - case 205: // expr_identifier: "identifier" -#line 777 "parser.ypp" + case 206: // expr_identifier: "identifier" +#line 780 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3203 "parser.cpp" +#line 3214 "parser.cpp" break; - case 206: // expr_path: "path" -#line 782 "parser.ypp" + case 207: // expr_path: "path" +#line 785 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3209 "parser.cpp" +#line 3220 "parser.cpp" break; - case 207: // expr_path: expr_identifier -#line 784 "parser.ypp" + case 208: // expr_path: expr_identifier +#line 787 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3215 "parser.cpp" +#line 3226 "parser.cpp" break; - case 208: // expr_istring: "localized string" -#line 789 "parser.ypp" + case 209: // expr_istring: "localized string" +#line 792 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3221 "parser.cpp" +#line 3232 "parser.cpp" break; - case 209: // expr_string: "string literal" -#line 794 "parser.ypp" + case 210: // expr_string: "string literal" +#line 797 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3227 "parser.cpp" +#line 3238 "parser.cpp" break; - case 210: // expr_color: "color" -#line 799 "parser.ypp" + case 211: // expr_color: "color" +#line 802 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3233 "parser.cpp" +#line 3244 "parser.cpp" break; - case 211: // expr_vector: "(" expr "," expr "," expr ")" -#line 804 "parser.ypp" + case 212: // expr_vector: "(" expr "," expr "," expr ")" +#line 807 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3239 "parser.cpp" +#line 3250 "parser.cpp" break; - case 212: // expr_float: "-" "float" -#line 809 "parser.ypp" + case 213: // expr_float: "-" "float" +#line 812 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3245 "parser.cpp" +#line 3256 "parser.cpp" break; - case 213: // expr_float: "float" -#line 811 "parser.ypp" + case 214: // expr_float: "float" +#line 814 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3251 "parser.cpp" +#line 3262 "parser.cpp" break; - case 214: // expr_integer: "-" "integer" -#line 816 "parser.ypp" + case 215: // expr_integer: "-" "integer" +#line 819 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3257 "parser.cpp" +#line 3268 "parser.cpp" break; - case 215: // expr_integer: "integer" -#line 818 "parser.ypp" + case 216: // expr_integer: "integer" +#line 821 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3263 "parser.cpp" +#line 3274 "parser.cpp" break; - case 216: // expr_false: "false" -#line 823 "parser.ypp" + case 217: // expr_false: "false" +#line 826 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3269 "parser.cpp" +#line 3280 "parser.cpp" break; - case 217: // expr_true: "true" -#line 828 "parser.ypp" + case 218: // expr_true: "true" +#line 831 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3275 "parser.cpp" +#line 3286 "parser.cpp" break; -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" default: break; @@ -3469,7 +3480,7 @@ namespace xsk { namespace gsc { namespace s2 { "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", ">>=", "<<=", "|", "&", "^", - "+", "-", "*", "/", "%", "path", "identifier", "string literal", + "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", "include", "declaration", @@ -3755,131 +3766,131 @@ namespace xsk { namespace gsc { namespace s2 { } - const short parser::yypact_ninf_ = -261; + const short parser::yypact_ninf_ = -267; - const short parser::yytable_ninf_ = -208; + const short parser::yytable_ninf_ = -209; const short parser::yypact_[] = { - 24, -261, -261, -71, -71, -23, -261, 39, 24, -261, - -261, -261, -261, -261, -261, -20, -261, -261, -5, -3, - -26, -261, -261, -261, -261, -35, 1143, -261, -261, -261, - 28, 17, -261, -261, -36, -33, -261, 27, -261, -261, - -261, -261, -261, -261, -261, 1143, 1015, -35, 1143, 1143, - -58, 7, -261, -261, -261, -261, 1897, -261, -261, -261, - -261, -261, 345, 435, -261, -261, -261, -261, 581, 609, - -261, -261, 614, -261, -261, -261, 848, 950, 1104, 1168, - -261, -261, 74, 46, -261, -261, -261, -261, -261, -261, - -261, -261, 54, 69, -35, 79, 73, 91, 83, 104, - 101, 110, 1222, 1015, -261, 1980, 111, 116, -261, -261, - -261, -261, -261, -261, -261, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, -261, 1207, -35, -261, -261, 122, - 121, 1143, -35, -261, 785, -261, -261, 1143, 1143, -35, - 1143, 1143, -35, 1143, -261, 1143, 1666, 1143, -261, 1862, - 114, 114, 2011, 2021, 2103, 2103, 53, 53, 53, 53, - 2052, 2093, 2062, 59, 59, -261, -261, -261, 1706, -261, - -35, 18, -261, 130, 836, 1143, 125, -11, 137, 989, - 138, 139, 150, 159, -53, 153, 154, 158, 1079, 160, - 163, 176, -261, 173, 127, 127, -261, -261, -261, 887, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, 168, 171, 174, 179, 180, -261, - -261, 683, -261, -261, -261, -261, 8, 1746, 21, 183, - 1786, 29, 186, 1826, 1010, 182, 1980, 1143, -261, 130, - -261, 1143, -261, 938, 1932, -261, 193, -261, 1143, 220, - 1143, 550, -35, 1143, 145, 191, 195, -261, -261, -261, - -261, 1967, -261, 1143, 1143, 1143, -261, -261, 210, 210, - -261, -261, -261, -261, -261, -261, -261, 202, 208, 212, - 216, -261, -261, 1143, 1143, 1143, 1143, 1143, 1143, 1143, - 1143, 1143, 1143, 1143, 205, -261, 1143, 213, -261, 1143, - 215, 1143, 222, 1980, 31, -261, -261, 214, 1388, 223, - 1422, 219, -261, -261, -261, 13, -6, 1456, -261, -261, - -261, 32, 50, 1666, 1143, 1143, 1143, 1143, 1980, 1980, - 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 230, - 51, 231, 60, 232, 1490, 1143, -261, -261, 989, 1143, - 989, 1143, 1143, -35, 69, 224, 225, 1524, 1266, 1310, - 1354, 1143, -261, 1143, -261, 1143, -261, 71, 263, 1558, - -261, 1980, 227, 1592, 260, -261, -261, -261, 233, 237, - 1143, 238, 1143, 239, 1143, 78, 84, 85, -261, 989, - 242, 550, 989, 1143, -261, -261, 252, -261, 253, -261, - 256, -261, -261, -261, -261, -261, 278, -261, 1626, 271, - 274, 276, 989, 989, -261, -261, -261, -261, -261 + 13, -267, -267, 8, 8, -11, -267, 27, 13, -267, + -267, -267, -267, -267, -267, -31, -267, -267, -16, -10, + -42, -267, -267, -267, -267, -38, 1203, -267, -267, -267, + 20, -21, -267, -267, -17, -5, -267, 29, -267, -267, + -267, -267, -267, -267, -267, 1203, 1073, -38, 1203, 1203, + 52, -2, -267, -267, -267, -267, 2007, -267, -267, -267, + -267, -267, 31, 354, -267, -267, -267, -267, 440, 813, + -267, -267, 943, -267, -267, -267, 1169, 1234, 1282, 1296, + -267, -267, 556, 49, -267, -267, -267, -267, -267, -267, + -267, -267, 43, 35, -38, 69, 79, 85, 93, 113, + 110, 119, 1333, 1073, -267, 2090, 118, 120, -267, -267, + -267, -267, -267, -267, -267, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, -267, 1268, -38, -267, -267, -267, + 126, 122, 1203, -38, -267, 787, -267, -267, 1203, 1203, + -38, 1203, 1203, -38, 1203, -267, 1203, 1069, 1203, -267, + 1972, 142, 142, 2121, 2131, 617, 617, 44, 44, 44, + 44, 2162, 2203, 2172, 73, 73, -267, -267, -267, 1777, + -267, -38, -8, -267, 128, 865, 1203, 129, -18, 132, + 1047, 136, 138, 143, 144, -64, 148, 135, 141, 1138, + 149, 153, 158, -267, 159, 123, 123, -267, -267, -267, + 917, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, 154, 155, 161, 165, 177, + -267, -267, 36, -267, -267, -267, -267, -22, 1817, 7, + 188, 1857, 9, 190, 1897, 1936, 186, 2090, 1203, -267, + 128, -267, 1203, -267, 995, 2042, -267, 192, -267, 1203, + 219, 1203, 542, -38, 1203, 150, 194, 196, -267, -267, + -267, -267, 2077, -267, 1203, 1203, 1203, -267, -267, 185, + 185, -267, -267, -267, -267, -267, -267, -267, 201, 206, + 207, 209, -267, -267, 1203, 1203, 1203, 1203, 1203, 1203, + 1203, 1203, 1203, 1203, 1203, 205, -267, 1203, 208, -267, + 1203, 210, 1203, 211, 2090, 11, -267, -267, 202, 1499, + 217, 1533, 213, -267, -267, -267, 677, 1, 1567, -267, + -267, -267, 17, 38, 1069, 1203, 1203, 1203, 1203, 2090, + 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, + 218, 45, 221, 46, 224, 1601, 1203, -267, -267, 1047, + 1203, 1047, 1203, 1203, -38, 35, 223, 225, 1635, 1377, + 1421, 1465, 1203, -267, 1203, -267, 1203, -267, 55, 264, + 1669, -267, 2090, 231, 1703, 241, -267, -267, -267, 232, + 233, 1203, 234, 1203, 237, 1203, 74, 90, 99, -267, + 1047, 238, 542, 1047, 1203, -267, -267, 248, -267, 249, + -267, 255, -267, -267, -267, -267, -267, 256, -267, 1737, + 251, 253, 254, 1047, 1047, -267, -267, -267, -267, -267 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 205, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 206, 207, 0, 0, - 0, 1, 4, 5, 6, 176, 0, 10, 11, 209, - 0, 0, 175, 204, 0, 0, 196, 0, 217, 216, - 198, 199, 200, 201, 202, 0, 178, 0, 0, 0, - 0, 0, 208, 210, 213, 215, 0, 90, 91, 92, + 3, 12, 13, 0, 0, 0, 206, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 207, 208, 0, 0, + 0, 1, 4, 5, 6, 176, 0, 10, 11, 210, + 0, 0, 175, 205, 0, 0, 197, 0, 218, 217, + 199, 200, 201, 202, 203, 0, 178, 0, 0, 0, + 0, 0, 209, 211, 214, 216, 0, 90, 91, 92, 129, 130, 131, 132, 159, 160, 133, 134, 135, 136, 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, 149, 150, 151, 152, 153, 154, - 155, 156, 0, 0, 0, 0, 207, 0, 0, 207, - 0, 0, 0, 178, 197, 180, 0, 177, 181, 158, - 157, 212, 214, 203, 18, 0, 0, 0, 0, 0, + 155, 156, 0, 0, 0, 0, 208, 0, 0, 208, + 0, 0, 0, 178, 198, 180, 0, 177, 181, 158, + 157, 213, 215, 204, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 185, 0, 0, 161, 162, 207, - 0, 178, 0, 17, 0, 19, 174, 0, 178, 0, - 0, 178, 0, 0, 186, 0, 180, 0, 173, 0, - 122, 123, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 124, 125, 126, 127, 128, 0, 184, - 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 186, 0, 0, 185, 161, 162, + 208, 0, 178, 0, 17, 0, 19, 174, 0, 178, + 0, 0, 178, 0, 0, 187, 0, 180, 0, 173, + 0, 122, 123, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 124, 125, 126, 127, 128, 0, + 184, 0, 0, 177, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 0, 0, 51, 20, 21, 0, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 0, 0, 0, 187, 188, 189, - 190, 0, 191, 192, 193, 194, 195, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 0, 183, 0, - 163, 178, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 178, 178, 0, 187, 188, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 165, 178, 0, 167, 178, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 178, 164, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 178, 166, 178, 168, 178, 211, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 178, 0, 178, 0, 178, 0, 0, 0, 169, 0, - 0, 55, 0, 0, 61, 63, 177, 66, 177, 68, - 177, 170, 171, 172, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 0, 0, 49, 0, 0, 0, 51, 20, 21, + 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 0, 0, 0, 188, 189, + 190, 191, 0, 192, 193, 194, 195, 196, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 179, 0, 183, + 0, 163, 178, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 178, 178, 0, 188, 189, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 178, 0, 167, + 178, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 178, 164, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 166, 178, 168, 178, 212, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 178, 0, 178, 0, 178, 0, 0, 0, 169, + 0, 0, 55, 0, 0, 61, 63, 177, 66, 177, + 68, 177, 170, 171, 172, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -261, -261, -261, 321, 323, 324, -261, -261, -261, -183, - -261, -88, 100, -78, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, - -261, -261, -261, -261, -261, -261, -261, -261, 187, -261, - -260, -257, -254, -261, -261, -261, -261, -261, -85, -12, - -70, -65, -261, -261, -128, -45, -261, 177, 247, -261, - -261, 257, -261, -261, -261, 275, 332, 359, 365, -261, - -261, 0, 6, -261, 2, -261, -261, -261, 142, -261, - -261 + -267, -267, -267, 294, 298, 301, -267, -267, -267, -72, + -267, -91, 146, -83, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 195, -267, + -266, -260, -258, -267, -267, -267, -267, -267, -130, -12, + -67, -65, -267, -267, 340, -45, -267, -6, 246, -267, + -267, 252, -267, -267, -267, 280, 329, 348, 366, -267, + -267, 0, 6, -267, -9, -267, -267, -267, 137, -267, + -267 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 206, - 207, 208, 209, 331, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 105, 392, - 234, 235, 236, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 31, 106, 182, 67, 68, 69, 70, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 207, + 208, 209, 210, 332, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 105, 393, + 235, 236, 237, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 31, 106, 183, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91 @@ -3888,209 +3899,220 @@ namespace xsk { namespace gsc { namespace s2 { const short parser::yytable_[] = { - 15, 107, 137, 17, 17, 145, 269, 138, 15, 18, - 19, 332, 95, 181, 333, 98, 372, 334, 16, 6, - 248, 20, 30, 251, 25, 32, 291, 1, 2, 3, - 4, 5, 274, 266, 96, 99, 111, 112, 29, 21, - 97, 100, 55, 267, 373, 34, 35, 108, 37, 27, - 26, 28, 141, 16, 6, 6, 16, 6, 107, 237, - -207, 135, 93, 260, 136, 29, 315, 94, 157, 301, - 302, 157, 139, 92, 318, 101, 366, 375, 140, 157, - 291, 157, 157, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 146, 376, 382, 113, 142, 237, - 157, 157, 16, 6, 237, 384, -195, -195, 143, -195, - 157, 116, 117, -195, 6, 144, 408, 148, 141, 286, - 286, 157, -195, 421, 237, -195, -207, 147, 157, 422, - 423, 150, 238, 324, 157, 157, 179, 129, 130, 131, - 132, 133, 183, 149, 246, 131, 132, 133, 151, 249, - 140, 332, 252, 152, 333, 341, 342, 334, 153, 34, - 35, 157, 37, -195, -195, 158, 141, 41, 42, 43, - 44, 137, 238, 180, 261, 203, 138, 238, 237, 265, - 259, 268, 270, 271, 246, 388, 286, 390, 360, 246, - 140, 362, 287, 287, 272, 140, 275, 238, 129, 130, - 131, 132, 133, 273, 246, 246, 277, 283, 278, 246, - 140, 140, 279, 56, 282, 140, 16, 6, 137, 137, - 284, 285, 292, 138, 138, 293, 424, 316, 294, 427, - 319, 322, 102, 295, 296, 109, 110, 387, 327, 329, - 112, 139, 34, 35, 338, 37, 344, 140, 339, 437, - 438, 238, 345, 405, 359, 406, 346, 407, 135, 287, - 347, 136, 361, 246, 363, 137, 365, 369, 367, 140, - 138, 246, 336, 371, 381, 383, 385, 140, 396, 397, - 409, 411, 413, 237, 263, 237, 395, 414, 139, 139, - 156, 415, 417, 419, 140, 140, 425, 429, 430, 16, - 6, 431, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 239, 178, 432, 237, 434, 286, 237, 435, 22, - 436, 23, 24, 426, 247, 139, 276, 250, 0, 0, - 253, 140, 254, 0, 256, 0, 0, 237, 237, 0, - 0, 0, 0, 0, 0, 416, 238, 418, 238, 420, - 0, 239, 0, 0, 0, 0, 239, 0, 246, 0, - 246, 0, 264, 394, 140, 0, 140, -187, -187, 0, - -187, 239, 239, 0, -187, 281, 239, 0, 0, 0, - 0, 240, 0, -187, 0, 0, -187, 238, 0, 287, - 238, 241, 0, 0, 0, 0, 0, 0, 0, 246, - 0, 246, 246, 0, 0, 140, 0, 140, 140, 242, - 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 240, 246, 246, -187, -187, 240, 0, 140, 140, - 239, 241, 0, 0, 323, 0, 241, 0, 239, 0, - 0, 240, 240, 0, 0, 328, 240, 330, 0, 242, - 337, 288, 289, 0, 242, 0, 241, -188, -188, 0, - -188, 0, 343, 0, -188, 0, 243, 0, 0, 242, - 242, 0, 0, -188, 242, 0, -188, 0, 0, 0, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 0, 0, 244, 0, 0, 0, 0, 364, 245, - 240, 0, 0, 0, 0, 0, 243, 0, 240, 0, - 241, 243, 0, 0, -188, -188, 0, 0, 335, 0, - 0, 377, 378, 379, 380, 0, 243, 243, 242, 0, - 0, 243, 0, 244, 0, 239, 242, 239, 244, 245, - 0, 0, 0, 0, 245, 0, 389, 0, 391, 393, - 0, 0, 0, 244, 244, 0, 0, 0, 244, 245, - 245, 0, 0, 0, 245, 0, 0, 0, 0, 0, - 0, 0, 34, 35, 0, 37, 239, 0, 239, 239, - 41, 42, 43, 44, 0, 243, 0, 0, 203, 0, - 428, 0, 0, 243, 0, 0, 204, 205, 0, 239, - 239, 0, 0, -189, -189, 240, -189, 240, 0, 0, - -189, 0, 244, 0, 0, 241, 0, 241, 245, -189, - 244, 0, -189, 0, 0, 0, 245, 0, 0, 16, - 6, -190, -190, 242, -190, 242, 34, 35, -190, 37, - 0, 0, 0, 134, 0, 0, 240, -190, 240, 240, - -190, 0, 135, 0, 0, 136, 241, 0, 335, 241, - -189, -189, 0, 0, 0, 0, 0, 0, 0, 240, - 240, 0, 0, 0, 242, 0, 242, 242, 0, 241, - 241, 0, 297, 298, 0, 299, 300, 0, -190, -190, - 243, 0, 243, 16, 6, 0, 0, 242, 242, 0, - 0, 0, 0, 0, 0, 34, 35, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 244, - 0, 135, 0, 245, 136, 245, 0, 0, 0, 301, - 302, 243, 0, 243, 243, 0, 0, 0, 0, 0, - 0, 0, 0, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 243, 243, 0, 0, 244, 0, - 244, 244, 16, 6, 245, 0, 245, 245, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 244, 244, 0, 0, 0, 185, 245, 245, 186, - 187, 188, 0, 189, 190, 191, 192, 0, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 34, 35, 0, - 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, - 0, 144, 202, 203, 0, 0, 0, 0, 0, 184, - 262, 204, 205, 0, 0, 0, 0, 185, 0, 0, - 186, 187, 188, 0, 189, 190, 191, 192, 0, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 34, 35, - 0, 37, 0, 0, 16, 6, 41, 42, 43, 44, - -191, -191, 144, -191, 203, 0, 0, -191, 0, 0, - 184, 0, 204, 205, 0, 0, -191, 0, 185, -191, - 0, 186, 187, 188, 0, 189, 190, 191, 192, 0, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 34, + 15, 107, 146, 17, 17, 138, 333, 139, 15, 18, + 19, 30, 334, 25, 335, 238, 1, 2, 3, 4, + 5, 275, 142, 373, 93, 32, 267, 21, 29, 94, + -208, 95, 55, 20, 96, 99, 268, 261, 27, 26, + 97, 100, 158, 98, 28, 298, 299, 108, 300, 301, + 29, 374, 316, 6, 319, 238, 367, 158, 107, 158, + 238, 158, 376, -188, -188, 92, -188, 158, 34, 35, + -188, 37, 140, 16, 6, 287, 287, 101, 141, -188, + 238, 145, -188, 377, 135, 16, 6, 136, 158, 113, + 383, 385, 302, 303, 147, 158, 158, 144, 16, 6, + 409, 143, 116, 117, 6, 158, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 148, 270, 422, + -188, -188, -188, 149, 158, 137, 16, 6, 129, 130, + 131, 132, 133, 239, 238, 423, 180, 150, 292, 240, + 158, 151, 287, 184, 424, 247, 333, 111, 112, 158, + 250, 141, 334, 253, 335, 34, 35, 152, 37, 131, + 132, 133, 153, 41, 42, 43, 44, 154, 158, 159, + 142, 204, 262, 239, 181, 138, 269, 139, 239, 240, + 271, 260, 272, 266, 240, 247, 276, 273, 274, 279, + 247, 141, 292, 288, 288, 280, 141, 284, 239, 240, + 240, 278, 285, 283, 240, 247, 247, 286, 293, 294, + 247, 141, 141, 16, 6, 295, 141, 34, 35, 296, + 37, 56, 138, 138, 139, 139, 129, 130, 131, 132, + 133, 297, 317, 135, 320, 323, 136, 328, 330, 238, + 102, 238, 140, 109, 110, 345, 112, 339, 141, 340, + 346, 347, 239, 348, 360, 366, 368, 362, 240, 364, + 288, 370, 382, 414, 247, 384, 240, 372, 386, 138, + 141, 139, 247, 337, 137, 16, 6, 397, 141, 398, + 238, 410, 287, 238, 396, 412, 415, 416, 418, 140, + 140, 420, 426, 430, 431, 141, 141, 389, 157, 391, + 432, 433, 22, 238, 238, 435, 23, 436, 437, 24, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 427, + 179, 264, 277, 0, 0, 0, 140, 0, 425, 0, + 0, 428, 141, 248, 0, 0, 251, 0, 0, 254, + 0, 255, 0, 257, 0, 0, 417, 239, 419, 239, + 421, 438, 439, 240, 0, 240, 0, 0, 0, 247, + 0, 247, 0, 0, 395, 141, 0, 141, 0, 0, + 0, 265, 0, 0, 0, 0, -189, -189, 0, -189, + 0, 241, 0, -189, 282, 0, 0, 242, 239, 0, + 288, 239, -189, 0, 240, -189, 240, 240, 0, 0, + 247, 0, 247, 247, 0, 0, 141, 0, 141, 141, + 0, 239, 239, 0, 0, 243, 0, 240, 240, 0, + 0, 241, 0, 247, 247, 0, 241, 242, 0, 141, + 141, 0, 242, -189, -189, -189, 0, 0, 0, 0, + 0, 241, 241, 324, 0, 0, 241, 289, 290, 0, + 0, 0, 242, 0, 329, 243, 331, 0, 0, 338, + 243, 0, -190, -190, 244, -190, 0, 0, 0, -190, + 0, 344, 182, 0, 0, 243, 243, 0, -190, 249, + 243, -190, 252, 245, 0, 0, 0, 0, 0, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 241, 246, 0, 0, 244, 0, 242, 365, 241, 244, + 0, 0, 0, 0, 336, 0, 0, 0, 0, -190, + -190, -190, 0, 245, 244, 244, 0, 0, 245, 244, + 378, 379, 380, 381, 243, 0, 0, 0, 0, 0, + 0, 246, 243, 245, 245, 0, 246, 0, 245, 0, + 0, 0, 0, 0, 0, 390, 0, 392, 394, 0, + 0, 246, 246, 0, 34, 35, 246, 37, 0, 0, + 0, 0, 41, 42, 43, 44, 0, 0, -196, -196, + 204, -196, 0, 244, 0, -196, 0, 0, 205, 206, + 142, 244, 325, 0, -196, 0, 0, -196, -208, 429, + 0, 0, 245, 0, 0, 241, 0, 241, 0, 0, + 245, 242, 0, 242, 342, 343, 0, 0, 0, 0, + 246, 0, 16, 6, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, -196, -196, -196, 0, 243, + 0, 243, 0, 0, 0, 0, 241, 361, 241, 241, + 363, 0, 242, 0, 336, 242, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 117, 0, 0, 241, + 241, 122, 123, 124, 125, 242, 242, 0, 0, 0, + 243, 0, 243, 243, 0, 0, 0, 0, 244, 0, + 244, 129, 130, 131, 132, 133, 388, 0, 0, 34, + 35, 0, 37, 243, 243, 0, 0, 245, 0, 245, + 0, 0, 406, 0, 407, 135, 408, 0, 136, 0, + 0, 0, 0, 302, 303, 246, 0, 246, 0, 244, + 0, 244, 244, 0, 0, 0, 0, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 245, 0, + 245, 245, 244, 244, 0, 0, 137, 16, 6, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 246, 246, + 0, 245, 245, 0, 0, 0, 0, 0, 0, 0, + 185, 0, 0, 0, 0, 0, 0, 0, 186, 246, + 246, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 0, 37, 0, 0, 0, 0, 41, 42, 43, + 44, 0, 0, 145, 203, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, -191, -191, 0, -191, 0, + 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, + 0, -191, 0, 0, -191, 0, 0, 0, 185, 263, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, -191, -191, -191, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, 43, - 44, 0, 0, 144, 290, 203, 0, -191, -191, 0, - 0, 184, 325, 204, 205, 0, 0, 0, 0, 185, - 0, 0, 186, 187, 188, 0, 189, 190, 191, 192, - 0, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 34, 35, 0, 37, 0, 0, 16, 6, 41, 42, - 43, 44, -192, -192, 144, -192, 203, 0, 0, -192, - 0, 0, 184, 0, 204, 205, 0, 0, -192, 0, - 185, -192, 0, 186, 187, 188, 0, 189, 190, 191, - 192, 0, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 34, 35, 33, 37, 0, 0, 16, 6, 41, - 42, 43, 44, 0, 0, 144, 0, 203, 0, -192, - -192, 0, 0, 0, 0, 204, 205, 34, 35, 36, - 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, - 321, 0, 0, 103, 104, 115, 0, 47, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 16, 6, - 0, 0, 0, 48, 49, 0, 0, 33, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 0, - 50, 0, 0, 51, 16, 6, 29, 52, 53, 54, - 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, - 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, - 0, 47, 0, 280, 0, 0, -193, -193, 0, -193, - 0, 0, 0, -193, 0, 0, 0, 48, 49, 0, - 0, 33, -193, 0, 0, -193, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 51, 16, 6, + 44, 0, 0, 145, 291, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 0, 37, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 136, 0, 0, 0, 185, 326, + 0, 0, 0, 0, 0, 0, 186, 16, 6, 187, + 188, 189, 0, 190, 191, 192, 193, 0, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 34, 35, 0, + 37, 0, 137, 16, 6, 41, 42, 43, 44, 0, + 0, 145, 0, 204, 0, 0, 0, 0, 0, 0, + 185, 205, 206, 0, 0, 0, 0, 0, 186, 0, + 0, 187, 188, 189, 0, 190, 191, 192, 193, 0, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 34, + 35, 33, 37, 0, 0, 16, 6, 41, 42, 43, + 44, 0, 0, 145, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 205, 206, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 256, 0, + 0, 103, 104, 0, 115, 47, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 16, 6, 0, + 0, 48, 49, 0, 0, 0, 33, 0, 0, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, + 47, 0, 281, 0, 0, 0, 0, 0, 0, 0, + 0, -192, -192, 0, -192, 0, 48, 49, -192, 0, + 0, 33, 0, 0, 0, 0, 0, -192, 0, 0, + -192, 0, 0, 50, 0, 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 0, 0, - 0, 46, 0, -193, -193, 47, 0, 0, 0, 0, - -194, -194, 0, -194, 0, 0, 0, -194, 0, 0, - 0, 48, 49, 0, 0, 33, -194, 0, 0, -194, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, - 0, 51, 16, 6, 29, 52, 53, 54, 55, 34, - 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, - 44, 45, 0, 0, 0, 103, 0, -194, -194, 47, - 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 155, 0, 0, 48, 49, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 50, 0, 0, 51, 16, 6, 29, 52, - 53, 54, 55, 126, 127, 128, 129, 130, 131, 132, - 133, 399, 0, 0, 0, 0, 400, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 401, 0, 0, 0, 0, - 402, 0, 0, 0, 0, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, + 0, 46, 0, 0, 0, 47, 0, 0, -192, -192, + -192, 0, 0, 0, 0, 0, -193, -193, 0, -193, + 0, 48, 49, -193, 0, 0, 33, 0, 0, 0, + 0, 0, -193, 0, 0, -193, 0, 0, 50, 0, + 0, 51, 0, 16, 6, 29, 52, 53, 54, 55, + 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, + 43, 44, 45, 0, -194, -194, 103, -194, 0, 0, + 47, -194, 0, -193, -193, -193, 0, 0, -195, -195, + -194, -195, 0, -194, 0, -195, 48, 49, 0, 0, + 0, 0, 0, 0, -195, 0, 0, -195, 0, 0, + 0, 0, 0, 50, 0, 0, 51, 0, 16, 6, + 29, 52, 53, 54, 55, 0, 0, 0, 0, 0, + 0, -194, -194, -194, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 156, 0, -195, -195, -195, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 400, 0, 0, 0, 0, 401, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 402, 0, 0, 0, + 0, 403, 0, 0, 0, 0, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 403, - 0, 0, 0, 0, 404, 0, 0, 0, 0, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 370, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 404, 0, 0, 0, 0, 405, 0, 0, 0, 0, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 369, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 375, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 387, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 115, 0, 0, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 374, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 386, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 115, 0, 0, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, - 0, 126, 127, 128, 129, 130, 131, 132, 133, 115, - 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 410, 0, 126, 127, 128, 129, 130, - 131, 132, 133, 115, 0, 0, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 126, - 127, 128, 129, 130, 131, 132, 133, 115, 0, 0, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 433, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 255, 0, 0, 0, 0, + 399, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 126, 127, 128, 129, + 130, 131, 132, 133, 115, 0, 0, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, + 126, 127, 128, 129, 130, 131, 132, 133, 115, 0, + 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 434, 0, 126, 127, 128, 129, 130, 131, + 132, 133, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 259, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 315, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 318, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 321, 0, 0, 0, + 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, + 128, 129, 130, 131, 132, 133, 322, 0, 0, 0, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 258, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 314, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 317, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 320, 0, 0, 0, 0, - 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, - 129, 130, 131, 132, 133, 257, 0, 115, 0, 0, + 129, 130, 131, 132, 133, 258, 0, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, 114, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, - 128, 129, 130, 131, 132, 133, 326, 115, 0, 0, + 128, 129, 130, 131, 132, 133, 327, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 128, 129, 130, 131, 132, - 133, 340, 115, 0, 0, 116, 117, 118, 119, 120, + 133, 341, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 0, @@ -4104,203 +4126,213 @@ namespace xsk { namespace gsc { namespace s2 { 0, 0, 0, 0, 127, 128, 129, 130, 131, 132, 133, 0, 0, 0, 127, 0, 129, 130, 131, 132, 133, 116, 117, 0, 0, 120, 121, 122, 123, 124, - 125, 116, 117, 0, 0, 0, 0, 122, 123, 124, - 125, 0, 0, 0, 0, 0, 0, 129, 130, 131, - 132, 133, 0, 0, 0, 0, 0, 129, 130, 131, + 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 129, 130, 131, 132, 133 }; const short parser::yycheck_[] = { - 0, 46, 72, 3, 4, 93, 189, 72, 8, 3, - 4, 271, 48, 141, 271, 48, 22, 271, 89, 90, - 148, 44, 20, 151, 44, 25, 209, 3, 4, 5, - 6, 7, 85, 44, 34, 35, 94, 95, 91, 0, - 34, 35, 95, 54, 50, 32, 33, 47, 35, 54, - 70, 54, 44, 89, 90, 90, 89, 90, 103, 144, - 52, 48, 45, 45, 51, 91, 45, 50, 50, 56, - 57, 50, 72, 45, 45, 48, 45, 45, 72, 50, - 263, 50, 50, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 94, 45, 45, 90, 52, 184, - 50, 50, 89, 90, 189, 45, 32, 33, 54, 35, - 50, 58, 59, 39, 90, 46, 45, 44, 44, 204, - 205, 50, 48, 45, 209, 51, 52, 48, 50, 45, - 45, 48, 144, 261, 50, 50, 136, 84, 85, 86, - 87, 88, 142, 52, 144, 86, 87, 88, 44, 149, - 144, 411, 152, 52, 411, 283, 284, 411, 48, 32, - 33, 50, 35, 89, 90, 49, 44, 40, 41, 42, - 43, 241, 184, 52, 44, 48, 241, 189, 263, 54, - 180, 44, 44, 44, 184, 368, 271, 370, 316, 189, - 184, 319, 204, 205, 44, 189, 194, 209, 84, 85, - 86, 87, 88, 44, 204, 205, 53, 44, 54, 209, - 204, 205, 54, 26, 54, 209, 89, 90, 288, 289, - 44, 48, 54, 288, 289, 54, 409, 44, 54, 412, - 44, 49, 45, 54, 54, 48, 49, 365, 45, 19, - 95, 241, 32, 33, 53, 35, 44, 241, 53, 432, - 433, 263, 44, 381, 49, 383, 44, 385, 48, 271, - 44, 51, 49, 263, 49, 335, 44, 44, 54, 263, - 335, 271, 272, 54, 44, 44, 44, 271, 54, 54, - 17, 54, 22, 368, 184, 370, 374, 54, 288, 289, - 103, 54, 54, 54, 288, 289, 54, 45, 45, 89, - 90, 45, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 144, 135, 45, 409, 54, 411, 412, 54, 8, - 54, 8, 8, 411, 147, 335, 194, 150, -1, -1, - 153, 335, 155, -1, 157, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 400, 368, 402, 370, 404, - -1, 184, -1, -1, -1, -1, 189, -1, 368, -1, - 370, -1, 185, 373, 368, -1, 370, 32, 33, -1, - 35, 204, 205, -1, 39, 198, 209, -1, -1, -1, - -1, 144, -1, 48, -1, -1, 51, 409, -1, 411, - 412, 144, -1, -1, -1, -1, -1, -1, -1, 409, - -1, 411, 412, -1, -1, 409, -1, 411, 412, 144, - 432, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 184, 432, 433, 89, 90, 189, -1, 432, 433, - 263, 184, -1, -1, 257, -1, 189, -1, 271, -1, - -1, 204, 205, -1, -1, 268, 209, 270, -1, 184, - 273, 204, 205, -1, 189, -1, 209, 32, 33, -1, - 35, -1, 285, -1, 39, -1, 144, -1, -1, 204, - 205, -1, -1, 48, 209, -1, 51, -1, -1, -1, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, -1, -1, 144, -1, -1, -1, -1, 321, 144, - 263, -1, -1, -1, -1, -1, 184, -1, 271, -1, - 263, 189, -1, -1, 89, 90, -1, -1, 271, -1, - -1, 344, 345, 346, 347, -1, 204, 205, 263, -1, - -1, 209, -1, 184, -1, 368, 271, 370, 189, 184, - -1, -1, -1, -1, 189, -1, 369, -1, 371, 372, - -1, -1, -1, 204, 205, -1, -1, -1, 209, 204, - 205, -1, -1, -1, 209, -1, -1, -1, -1, -1, - -1, -1, 32, 33, -1, 35, 409, -1, 411, 412, - 40, 41, 42, 43, -1, 263, -1, -1, 48, -1, - 413, -1, -1, 271, -1, -1, 56, 57, -1, 432, - 433, -1, -1, 32, 33, 368, 35, 370, -1, -1, - 39, -1, 263, -1, -1, 368, -1, 370, 263, 48, - 271, -1, 51, -1, -1, -1, 271, -1, -1, 89, - 90, 32, 33, 368, 35, 370, 32, 33, 39, 35, - -1, -1, -1, 39, -1, -1, 409, 48, 411, 412, - 51, -1, 48, -1, -1, 51, 409, -1, 411, 412, - 89, 90, -1, -1, -1, -1, -1, -1, -1, 432, - 433, -1, -1, -1, 409, -1, 411, 412, -1, 432, - 433, -1, 9, 10, -1, 12, 13, -1, 89, 90, - 368, -1, 370, 89, 90, -1, -1, 432, 433, -1, - -1, -1, -1, -1, -1, 32, 33, -1, 35, -1, - -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, - -1, 48, -1, 368, 51, 370, -1, -1, -1, 56, - 57, 409, -1, 411, 412, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 432, 433, -1, -1, 409, -1, - 411, 412, 89, 90, 409, -1, 411, 412, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, - -1, 432, 433, -1, -1, -1, 11, 432, 433, 14, + 0, 46, 93, 3, 4, 72, 272, 72, 8, 3, + 4, 20, 272, 44, 272, 145, 3, 4, 5, 6, + 7, 85, 44, 22, 45, 25, 44, 0, 92, 50, + 52, 48, 96, 44, 34, 35, 54, 45, 54, 70, + 34, 35, 50, 48, 54, 9, 10, 47, 12, 13, + 92, 50, 45, 91, 45, 185, 45, 50, 103, 50, + 190, 50, 45, 32, 33, 45, 35, 50, 32, 33, + 39, 35, 72, 90, 91, 205, 206, 48, 72, 48, + 210, 46, 51, 45, 48, 90, 91, 51, 50, 91, + 45, 45, 56, 57, 94, 50, 50, 54, 90, 91, + 45, 52, 58, 59, 91, 50, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 48, 190, 45, + 89, 90, 91, 44, 50, 89, 90, 91, 84, 85, + 86, 87, 88, 145, 264, 45, 136, 52, 210, 145, + 50, 48, 272, 143, 45, 145, 412, 95, 96, 50, + 150, 145, 412, 153, 412, 32, 33, 44, 35, 86, + 87, 88, 52, 40, 41, 42, 43, 48, 50, 49, + 44, 48, 44, 185, 52, 242, 44, 242, 190, 185, + 44, 181, 44, 54, 190, 185, 195, 44, 44, 54, + 190, 185, 264, 205, 206, 54, 190, 44, 210, 205, + 206, 53, 44, 54, 210, 205, 206, 48, 54, 54, + 210, 205, 206, 90, 91, 54, 210, 32, 33, 54, + 35, 26, 289, 290, 289, 290, 84, 85, 86, 87, + 88, 54, 44, 48, 44, 49, 51, 45, 19, 369, + 45, 371, 242, 48, 49, 44, 96, 53, 242, 53, + 44, 44, 264, 44, 49, 44, 54, 49, 264, 49, + 272, 44, 44, 22, 264, 44, 272, 54, 44, 336, + 264, 336, 272, 273, 89, 90, 91, 54, 272, 54, + 410, 17, 412, 413, 375, 54, 54, 54, 54, 289, + 290, 54, 54, 45, 45, 289, 290, 369, 103, 371, + 45, 45, 8, 433, 434, 54, 8, 54, 54, 8, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 412, + 135, 185, 195, -1, -1, -1, 336, -1, 410, -1, + -1, 413, 336, 148, -1, -1, 151, -1, -1, 154, + -1, 156, -1, 158, -1, -1, 401, 369, 403, 371, + 405, 433, 434, 369, -1, 371, -1, -1, -1, 369, + -1, 371, -1, -1, 374, 369, -1, 371, -1, -1, + -1, 186, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 145, -1, 39, 199, -1, -1, 145, 410, -1, + 412, 413, 48, -1, 410, 51, 412, 413, -1, -1, + 410, -1, 412, 413, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, 145, -1, 433, 434, -1, + -1, 185, -1, 433, 434, -1, 190, 185, -1, 433, + 434, -1, 190, 89, 90, 91, -1, -1, -1, -1, + -1, 205, 206, 258, -1, -1, 210, 205, 206, -1, + -1, -1, 210, -1, 269, 185, 271, -1, -1, 274, + 190, -1, 32, 33, 145, 35, -1, -1, -1, 39, + -1, 286, 142, -1, -1, 205, 206, -1, 48, 149, + 210, 51, 152, 145, -1, -1, -1, -1, -1, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 264, 145, -1, -1, 185, -1, 264, 322, 272, 190, + -1, -1, -1, -1, 272, -1, -1, -1, -1, 89, + 90, 91, -1, 185, 205, 206, -1, -1, 190, 210, + 345, 346, 347, 348, 264, -1, -1, -1, -1, -1, + -1, 185, 272, 205, 206, -1, 190, -1, 210, -1, + -1, -1, -1, -1, -1, 370, -1, 372, 373, -1, + -1, 205, 206, -1, 32, 33, 210, 35, -1, -1, + -1, -1, 40, 41, 42, 43, -1, -1, 32, 33, + 48, 35, -1, 264, -1, 39, -1, -1, 56, 57, + 44, 272, 262, -1, 48, -1, -1, 51, 52, 414, + -1, -1, 264, -1, -1, 369, -1, 371, -1, -1, + 272, 369, -1, 371, 284, 285, -1, -1, -1, -1, + 264, -1, 90, 91, -1, -1, -1, -1, 272, -1, + -1, -1, -1, -1, -1, 89, 90, 91, -1, 369, + -1, 371, -1, -1, -1, -1, 410, 317, 412, 413, + 320, -1, 410, -1, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 58, 59, -1, -1, 433, + 434, 64, 65, 66, 67, 433, 434, -1, -1, -1, + 410, -1, 412, 413, -1, -1, -1, -1, 369, -1, + 371, 84, 85, 86, 87, 88, 366, -1, -1, 32, + 33, -1, 35, 433, 434, -1, -1, 369, -1, 371, + -1, -1, 382, -1, 384, 48, 386, -1, 51, -1, + -1, -1, -1, 56, 57, 369, -1, 371, -1, 410, + -1, 412, 413, -1, -1, -1, -1, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 410, -1, + 412, 413, 433, 434, -1, -1, 89, 90, 91, -1, + -1, -1, -1, -1, -1, -1, 410, -1, 412, 413, + -1, 433, 434, -1, -1, -1, -1, -1, -1, -1, + 3, -1, -1, -1, -1, -1, -1, -1, 11, 433, + 434, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, -1, -1, -1, -1, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, - 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, - -1, 46, 47, 48, -1, -1, -1, -1, -1, 3, - 4, 56, 57, -1, -1, -1, -1, 11, -1, -1, - 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - -1, 35, -1, -1, 89, 90, 40, 41, 42, 43, - 32, 33, 46, 35, 48, -1, -1, 39, -1, -1, - 3, -1, 56, 57, -1, -1, 48, -1, 11, 51, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, -1, 35, -1, -1, 89, 90, 40, 41, 42, - 43, -1, -1, 46, 47, 48, -1, 89, 90, -1, - -1, 3, 4, 56, 57, -1, -1, -1, -1, 11, - -1, -1, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, -1, -1, 89, 90, 40, 41, - 42, 43, 32, 33, 46, 35, 48, -1, -1, 39, - -1, -1, 3, -1, 56, 57, -1, -1, 48, -1, - 11, 51, -1, 14, 15, 16, -1, 18, 19, 20, - 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 8, 35, -1, -1, 89, 90, 40, - 41, 42, 43, -1, -1, 46, -1, 48, -1, 89, - 90, -1, -1, -1, -1, 56, 57, 32, 33, 34, - 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, - 50, -1, -1, 48, 49, 55, -1, 52, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 89, 90, - -1, -1, -1, 68, 69, -1, -1, 8, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, -1, - 85, -1, -1, 88, 89, 90, 91, 92, 93, 94, - 95, 32, 33, 34, 35, 36, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, 48, -1, -1, - -1, 52, -1, 54, -1, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, 68, 69, -1, - -1, 8, 48, -1, -1, 51, -1, -1, -1, -1, - -1, -1, -1, -1, 85, -1, -1, 88, 89, 90, - 91, 92, 93, 94, 95, 32, 33, 34, 35, 36, + 33, -1, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, 47, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, + -1, 48, -1, -1, 51, -1, -1, -1, 3, 4, + -1, -1, -1, -1, -1, -1, 11, 90, 91, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, 89, 90, 91, 40, 41, 42, 43, -1, + -1, 46, -1, 48, -1, -1, -1, -1, -1, -1, + 3, 56, 57, -1, -1, -1, -1, -1, 11, -1, + -1, 14, 15, 16, -1, 18, 19, 20, 21, -1, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 8, 35, -1, -1, 90, 91, 40, 41, 42, + 43, -1, -1, 46, -1, 48, -1, -1, -1, -1, + -1, -1, -1, 56, 57, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 49, -1, + -1, 48, 49, -1, 55, 52, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 90, 91, -1, + -1, 68, 69, -1, -1, -1, 8, -1, -1, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, 48, -1, -1, -1, + 52, -1, 54, -1, -1, -1, -1, -1, -1, -1, + -1, 32, 33, -1, 35, -1, 68, 69, 39, -1, + -1, 8, -1, -1, -1, -1, -1, 48, -1, -1, + 51, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, - -1, 48, -1, 89, 90, 52, -1, -1, -1, -1, - 32, 33, -1, 35, -1, -1, -1, 39, -1, -1, - -1, 68, 69, -1, -1, 8, 48, -1, -1, 51, - -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, - -1, 88, 89, 90, 91, 92, 93, 94, 95, 32, - 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, 48, -1, 89, 90, 52, - -1, -1, -1, -1, -1, -1, -1, 45, -1, -1, - -1, -1, 50, -1, -1, 68, 69, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, 85, -1, -1, 88, 89, 90, 91, 92, - 93, 94, 95, 81, 82, 83, 84, 85, 86, 87, - 88, 45, -1, -1, -1, -1, 50, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 45, -1, -1, -1, -1, - 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, + -1, 48, -1, -1, -1, 52, -1, -1, 89, 90, + 91, -1, -1, -1, -1, -1, 32, 33, -1, 35, + -1, 68, 69, 39, -1, -1, 8, -1, -1, -1, + -1, -1, 48, -1, -1, 51, -1, -1, 85, -1, + -1, 88, -1, 90, 91, 92, 93, 94, 95, 96, + 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, + 42, 43, 44, -1, 32, 33, 48, 35, -1, -1, + 52, 39, -1, 89, 90, 91, -1, -1, 32, 33, + 48, 35, -1, 51, -1, 39, 68, 69, -1, -1, + -1, -1, -1, -1, 48, -1, -1, 51, -1, -1, + -1, -1, -1, 85, -1, -1, 88, -1, 90, 91, + 92, 93, 94, 95, 96, -1, -1, -1, -1, -1, + -1, 89, 90, 91, -1, -1, -1, -1, 45, -1, + -1, -1, -1, 50, -1, 89, 90, 91, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 45, -1, -1, -1, -1, 50, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 45, -1, -1, -1, + -1, 50, -1, -1, -1, -1, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 45, - -1, -1, -1, -1, 50, -1, -1, -1, -1, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + -1, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 45, -1, -1, -1, -1, 50, -1, -1, -1, -1, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 45, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 55, -1, -1, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 45, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 55, -1, -1, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 45, - -1, 81, 82, 83, 84, 85, 86, 87, 88, 55, - -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 45, -1, 81, 82, 83, 84, 85, - 86, 87, 88, 55, -1, -1, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 45, -1, 81, - 82, 83, 84, 85, 86, 87, 88, 55, -1, -1, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 45, -1, 81, 82, 83, 84, 85, 86, 87, - 88, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, - -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, - 84, 85, 86, 87, 88, 49, -1, -1, -1, -1, + 45, -1, 81, 82, 83, 84, 85, 86, 87, 88, + 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 45, -1, 81, 82, 83, 84, + 85, 86, 87, 88, 55, -1, -1, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 45, -1, + 81, 82, 83, 84, 85, 86, 87, 88, 55, -1, + -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 45, -1, 81, 82, 83, 84, 85, 86, + 87, 88, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 49, -1, -1, -1, + -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, + 83, 84, 85, 86, 87, 88, 50, -1, -1, -1, -1, 55, -1, -1, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, 82, 83, @@ -4329,86 +4361,85 @@ namespace xsk { namespace gsc { namespace s2 { -1, -1, -1, -1, 82, 83, 84, 85, 86, 87, 88, -1, -1, -1, 82, -1, 84, 85, 86, 87, 88, 58, 59, -1, -1, 62, 63, 64, 65, 66, - 67, 58, 59, -1, -1, -1, -1, 64, 65, 66, - 67, -1, -1, -1, -1, -1, -1, 84, 85, 86, - 87, 88, -1, -1, -1, -1, -1, 84, 85, 86, + 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 84, 85, 86, 87, 88 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 90, 106, 107, 108, - 109, 110, 111, 112, 113, 176, 89, 176, 177, 177, - 44, 0, 108, 109, 110, 44, 70, 54, 54, 91, - 179, 158, 176, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 91, 107, 108, 109, + 110, 111, 112, 113, 114, 177, 90, 177, 178, 178, + 44, 0, 109, 110, 111, 44, 70, 54, 54, 92, + 180, 159, 177, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 48, 52, 68, 69, - 85, 88, 92, 93, 94, 95, 143, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 45, 45, 50, 48, 176, 177, 48, 176, - 177, 48, 143, 48, 49, 143, 159, 160, 176, 143, - 143, 94, 95, 90, 54, 55, 58, 59, 60, 61, + 85, 88, 93, 94, 95, 96, 144, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 45, 45, 50, 48, 177, 178, 48, 177, + 178, 48, 144, 48, 49, 144, 160, 161, 177, 144, + 144, 95, 96, 91, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 81, 82, 83, 84, - 85, 86, 87, 88, 39, 48, 51, 155, 156, 176, - 177, 44, 52, 54, 46, 116, 176, 48, 44, 52, - 48, 44, 52, 48, 45, 50, 143, 50, 49, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 176, - 52, 159, 160, 176, 3, 11, 14, 15, 16, 18, - 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 47, 48, 56, 57, 114, 115, 116, 117, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 85, 86, 87, 88, 39, 48, 51, 89, 156, 157, + 177, 178, 44, 52, 54, 46, 117, 177, 48, 44, + 52, 48, 44, 52, 48, 45, 50, 144, 50, 49, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 177, 52, 160, 161, 177, 3, 11, 14, 15, 16, + 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 47, 48, 56, 57, 115, 116, 117, + 118, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 145, 146, 147, 153, 154, 162, - 163, 166, 170, 171, 172, 173, 176, 143, 159, 176, - 143, 159, 176, 143, 143, 49, 143, 53, 49, 176, - 45, 44, 4, 117, 143, 54, 44, 54, 44, 114, - 44, 44, 44, 44, 85, 179, 183, 53, 54, 54, - 54, 143, 54, 44, 44, 48, 153, 154, 166, 166, - 47, 114, 54, 54, 54, 54, 54, 9, 10, 12, - 13, 56, 57, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 49, 45, 44, 49, 45, 44, - 49, 50, 49, 143, 159, 4, 54, 45, 143, 19, - 143, 118, 145, 146, 147, 166, 176, 143, 53, 53, - 54, 159, 159, 143, 44, 44, 44, 44, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 49, - 159, 49, 159, 49, 143, 44, 45, 54, 45, 44, - 45, 54, 22, 50, 45, 45, 45, 143, 143, 143, - 143, 44, 45, 44, 45, 44, 45, 159, 114, 143, - 114, 143, 144, 143, 176, 116, 54, 54, 45, 45, - 50, 45, 50, 45, 50, 159, 159, 159, 45, 17, - 45, 54, 45, 22, 54, 54, 160, 54, 160, 54, - 160, 45, 45, 45, 114, 54, 118, 114, 143, 45, - 45, 45, 45, 45, 54, 54, 54, 114, 114 + 139, 140, 141, 142, 143, 146, 147, 148, 154, 155, + 163, 164, 167, 171, 172, 173, 174, 177, 144, 160, + 177, 144, 160, 177, 144, 144, 49, 144, 53, 49, + 177, 45, 44, 4, 118, 144, 54, 44, 54, 44, + 115, 44, 44, 44, 44, 85, 180, 184, 53, 54, + 54, 54, 144, 54, 44, 44, 48, 154, 155, 167, + 167, 47, 115, 54, 54, 54, 54, 54, 9, 10, + 12, 13, 56, 57, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 49, 45, 44, 49, 45, + 44, 49, 50, 49, 144, 160, 4, 54, 45, 144, + 19, 144, 119, 146, 147, 148, 167, 177, 144, 53, + 53, 54, 160, 160, 144, 44, 44, 44, 44, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 49, 160, 49, 160, 49, 144, 44, 45, 54, 45, + 44, 45, 54, 22, 50, 45, 45, 45, 144, 144, + 144, 144, 44, 45, 44, 45, 44, 45, 160, 115, + 144, 115, 144, 145, 144, 177, 117, 54, 54, 45, + 45, 50, 45, 50, 45, 50, 160, 160, 160, 45, + 17, 45, 54, 45, 22, 54, 54, 161, 54, 161, + 54, 161, 45, 45, 45, 115, 54, 119, 115, 144, + 45, 45, 45, 45, 45, 54, 54, 54, 115, 115 }; const unsigned char parser::yyr1_[] = { - 0, 105, 106, 106, 107, 107, 107, 107, 107, 107, - 108, 109, 110, 110, 110, 110, 110, 111, 112, 113, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 115, 115, 116, 116, - 117, 117, 118, 118, 118, 118, 119, 119, 120, 120, - 120, 121, 122, 122, 123, 124, 124, 125, 125, 126, - 127, 127, 128, 129, 130, 131, 132, 133, 133, 134, - 135, 135, 136, 137, 138, 139, 139, 140, 141, 142, - 143, 143, 143, 144, 144, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 146, 146, 147, 147, - 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 151, 152, 153, - 153, 154, 154, 155, 155, 155, 155, 155, 155, 156, - 156, 156, 156, 157, 158, 158, 158, 159, 159, 160, - 160, 161, 161, 162, 163, 164, 165, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 177, 178, 179, - 180, 181, 182, 182, 183, 183, 184, 185 + 0, 106, 107, 107, 108, 108, 108, 108, 108, 108, + 109, 110, 111, 111, 111, 111, 111, 112, 113, 114, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 116, 116, 117, 117, + 118, 118, 119, 119, 119, 119, 120, 120, 121, 121, + 121, 122, 123, 123, 124, 125, 125, 126, 126, 127, + 128, 128, 129, 130, 131, 132, 133, 134, 134, 135, + 136, 136, 137, 138, 139, 140, 140, 141, 142, 143, + 144, 144, 144, 145, 145, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 147, 147, 148, 148, + 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 152, 153, 154, + 154, 155, 155, 156, 156, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 159, 159, 159, 160, 160, 161, + 161, 162, 162, 163, 164, 164, 165, 166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 178, 179, + 180, 181, 182, 183, 183, 184, 184, 185, 186 }; const signed char @@ -4432,10 +4463,10 @@ namespace xsk { namespace gsc { namespace s2 { 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, - 1, 2, 3, 4, 3, 2, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 7, 2, 1, 2, 1, 1, 1 + 1, 2, 3, 4, 3, 2, 2, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 7, 2, 1, 2, 1, 1, 1 }; @@ -4445,28 +4476,28 @@ namespace xsk { namespace gsc { namespace s2 { const short parser::yyrline_[] = { - 0, 245, 245, 246, 250, 252, 254, 256, 258, 260, - 265, 269, 274, 275, 276, 277, 278, 282, 287, 292, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 326, 327, 331, 332, - 336, 338, 343, 345, 347, 350, 354, 356, 361, 363, - 365, 370, 375, 377, 382, 387, 389, 394, 396, 401, - 406, 408, 413, 418, 423, 428, 433, 438, 440, 445, - 450, 452, 457, 462, 467, 472, 474, 479, 484, 489, - 494, 495, 496, 500, 501, 505, 507, 509, 511, 513, - 515, 517, 519, 521, 523, 525, 530, 532, 537, 539, - 544, 549, 551, 553, 555, 557, 559, 561, 563, 565, - 567, 569, 571, 573, 575, 577, 579, 581, 583, 588, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 619, 624, 629, - 630, 633, 634, 638, 640, 642, 644, 646, 648, 653, - 655, 657, 659, 664, 669, 671, 674, 678, 681, 685, - 687, 692, 694, 699, 704, 709, 714, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 731, 736, 741, 746, - 751, 756, 761, 766, 771, 776, 781, 783, 788, 793, - 798, 803, 808, 810, 815, 817, 822, 827 + 0, 246, 246, 247, 251, 253, 255, 257, 259, 261, + 266, 270, 275, 276, 277, 278, 279, 283, 288, 293, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 327, 328, 332, 333, + 337, 339, 344, 346, 348, 351, 355, 357, 362, 364, + 366, 371, 376, 378, 383, 388, 390, 395, 397, 402, + 407, 409, 414, 419, 424, 429, 434, 439, 441, 446, + 451, 453, 458, 463, 468, 473, 475, 480, 485, 490, + 495, 496, 497, 501, 502, 506, 508, 510, 512, 514, + 516, 518, 520, 522, 524, 526, 531, 533, 538, 540, + 545, 550, 552, 554, 556, 558, 560, 562, 564, 566, + 568, 570, 572, 574, 576, 578, 580, 582, 584, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 616, 620, 625, 630, + 631, 634, 635, 639, 641, 643, 645, 647, 649, 654, + 656, 658, 660, 665, 670, 672, 675, 679, 682, 686, + 688, 693, 695, 700, 705, 707, 712, 717, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 734, 739, 744, + 749, 754, 759, 764, 769, 774, 779, 784, 786, 791, + 796, 801, 806, 811, 813, 818, 820, 825, 830 }; void @@ -4499,9 +4530,9 @@ namespace xsk { namespace gsc { namespace s2 { #line 13 "parser.ypp" } } } // xsk::gsc::s2 -#line 4503 "parser.cpp" +#line 4534 "parser.cpp" -#line 831 "parser.ypp" +#line 834 "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 7348e42d..f4b654a1 100644 --- a/src/s2/xsk/parser.hpp +++ b/src/s2/xsk/parser.hpp @@ -617,6 +617,7 @@ namespace xsk { namespace gsc { namespace s2 { // stmt_while char dummy66[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -762,22 +763,23 @@ namespace xsk { namespace gsc { namespace s2 { MUL = 86, // "*" DIV = 87, // "/" MOD = 88, // "%" - PATH = 89, // "path" - IDENTIFIER = 90, // "identifier" - STRING = 91, // "string literal" - ISTRING = 92, // "localized string" - COLOR = 93, // "color" - FLOAT = 94, // "float" - INTEGER = 95, // "integer" - ADD_ARRAY = 96, // ADD_ARRAY - THEN = 97, // THEN - TERN = 98, // TERN - NEG = 99, // NEG - ANIMREF = 100, // ANIMREF - PREINC = 101, // PREINC - PREDEC = 102, // PREDEC - POSTINC = 103, // POSTINC - POSTDEC = 104 // POSTDEC + FIELD = 89, // "field" + PATH = 90, // "path" + IDENTIFIER = 91, // "identifier" + STRING = 92, // "string literal" + ISTRING = 93, // "localized string" + COLOR = 94, // "color" + FLOAT = 95, // "float" + INTEGER = 96, // "integer" + ADD_ARRAY = 97, // ADD_ARRAY + THEN = 98, // THEN + TERN = 99, // TERN + NEG = 100, // NEG + ANIMREF = 101, // ANIMREF + PREINC = 102, // PREINC + PREDEC = 103, // PREDEC + POSTINC = 104, // POSTINC + POSTDEC = 105 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -794,7 +796,7 @@ namespace xsk { namespace gsc { namespace s2 { { enum symbol_kind_type { - YYNTOKENS = 105, ///< Number of tokens. + YYNTOKENS = 106, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -885,103 +887,104 @@ namespace xsk { namespace gsc { namespace s2 { S_MUL = 86, // "*" S_DIV = 87, // "/" S_MOD = 88, // "%" - S_PATH = 89, // "path" - S_IDENTIFIER = 90, // "identifier" - S_STRING = 91, // "string literal" - S_ISTRING = 92, // "localized string" - S_COLOR = 93, // "color" - S_FLOAT = 94, // "float" - S_INTEGER = 95, // "integer" - S_ADD_ARRAY = 96, // ADD_ARRAY - S_THEN = 97, // THEN - S_TERN = 98, // TERN - S_NEG = 99, // NEG - S_ANIMREF = 100, // ANIMREF - S_PREINC = 101, // PREINC - S_PREDEC = 102, // PREDEC - S_POSTINC = 103, // POSTINC - S_POSTDEC = 104, // POSTDEC - S_YYACCEPT = 105, // $accept - S_root = 106, // root - S_program = 107, // program - S_inline = 108, // inline - S_include = 109, // include - S_declaration = 110, // declaration - S_decl_usingtree = 111, // decl_usingtree - S_decl_constant = 112, // decl_constant - S_decl_thread = 113, // decl_thread - S_stmt = 114, // stmt - S_stmt_dev = 115, // stmt_dev - S_stmt_block = 116, // stmt_block - S_stmt_list = 117, // stmt_list - S_stmt_expr = 118, // stmt_expr - S_stmt_call = 119, // stmt_call - S_stmt_assign = 120, // stmt_assign - S_stmt_endon = 121, // stmt_endon - S_stmt_notify = 122, // stmt_notify - S_stmt_wait = 123, // stmt_wait - S_stmt_waittill = 124, // stmt_waittill - S_stmt_waittillmatch = 125, // stmt_waittillmatch - S_stmt_waittillframeend = 126, // stmt_waittillframeend - S_stmt_waitframe = 127, // stmt_waitframe - S_stmt_if = 128, // stmt_if - S_stmt_ifelse = 129, // stmt_ifelse - S_stmt_while = 130, // stmt_while - S_stmt_dowhile = 131, // stmt_dowhile - S_stmt_for = 132, // stmt_for - S_stmt_foreach = 133, // stmt_foreach - S_stmt_switch = 134, // stmt_switch - S_stmt_case = 135, // stmt_case - S_stmt_default = 136, // stmt_default - S_stmt_break = 137, // stmt_break - S_stmt_continue = 138, // stmt_continue - S_stmt_return = 139, // stmt_return - S_stmt_breakpoint = 140, // stmt_breakpoint - S_stmt_prof_begin = 141, // stmt_prof_begin - S_stmt_prof_end = 142, // stmt_prof_end - S_expr = 143, // expr - S_expr_or_empty = 144, // expr_or_empty - S_expr_assign = 145, // expr_assign - S_expr_increment = 146, // expr_increment - S_expr_decrement = 147, // expr_decrement - S_expr_ternary = 148, // expr_ternary - S_expr_binary = 149, // expr_binary - S_expr_primitive = 150, // expr_primitive - S_expr_complement = 151, // expr_complement - S_expr_not = 152, // expr_not - S_expr_call = 153, // expr_call - S_expr_method = 154, // expr_method - S_expr_function = 155, // expr_function - S_expr_pointer = 156, // expr_pointer - S_expr_add_array = 157, // expr_add_array - S_expr_parameters = 158, // expr_parameters - S_expr_arguments = 159, // expr_arguments - S_expr_arguments_no_empty = 160, // expr_arguments_no_empty - S_expr_reference = 161, // expr_reference - S_expr_array = 162, // expr_array - S_expr_field = 163, // expr_field - S_expr_size = 164, // expr_size - S_expr_paren = 165, // expr_paren - S_expr_object = 166, // expr_object - S_expr_thisthread = 167, // expr_thisthread - S_expr_empty_array = 168, // expr_empty_array - S_expr_undefined = 169, // expr_undefined - S_expr_game = 170, // expr_game - S_expr_self = 171, // expr_self - S_expr_anim = 172, // expr_anim - S_expr_level = 173, // expr_level - S_expr_animation = 174, // expr_animation - S_expr_animtree = 175, // expr_animtree - S_expr_identifier = 176, // expr_identifier - S_expr_path = 177, // expr_path - S_expr_istring = 178, // expr_istring - S_expr_string = 179, // expr_string - S_expr_color = 180, // expr_color - S_expr_vector = 181, // expr_vector - S_expr_float = 182, // expr_float - S_expr_integer = 183, // expr_integer - S_expr_false = 184, // expr_false - S_expr_true = 185 // expr_true + S_FIELD = 89, // "field" + S_PATH = 90, // "path" + S_IDENTIFIER = 91, // "identifier" + S_STRING = 92, // "string literal" + S_ISTRING = 93, // "localized string" + S_COLOR = 94, // "color" + S_FLOAT = 95, // "float" + S_INTEGER = 96, // "integer" + S_ADD_ARRAY = 97, // ADD_ARRAY + S_THEN = 98, // THEN + S_TERN = 99, // TERN + S_NEG = 100, // NEG + S_ANIMREF = 101, // ANIMREF + S_PREINC = 102, // PREINC + S_PREDEC = 103, // PREDEC + S_POSTINC = 104, // POSTINC + S_POSTDEC = 105, // POSTDEC + S_YYACCEPT = 106, // $accept + S_root = 107, // root + S_program = 108, // program + S_inline = 109, // inline + S_include = 110, // include + S_declaration = 111, // declaration + S_decl_usingtree = 112, // decl_usingtree + S_decl_constant = 113, // decl_constant + S_decl_thread = 114, // decl_thread + S_stmt = 115, // stmt + S_stmt_dev = 116, // stmt_dev + S_stmt_block = 117, // stmt_block + S_stmt_list = 118, // stmt_list + S_stmt_expr = 119, // stmt_expr + S_stmt_call = 120, // stmt_call + S_stmt_assign = 121, // stmt_assign + S_stmt_endon = 122, // stmt_endon + S_stmt_notify = 123, // stmt_notify + S_stmt_wait = 124, // stmt_wait + S_stmt_waittill = 125, // stmt_waittill + S_stmt_waittillmatch = 126, // stmt_waittillmatch + S_stmt_waittillframeend = 127, // stmt_waittillframeend + S_stmt_waitframe = 128, // stmt_waitframe + S_stmt_if = 129, // stmt_if + S_stmt_ifelse = 130, // stmt_ifelse + S_stmt_while = 131, // stmt_while + S_stmt_dowhile = 132, // stmt_dowhile + S_stmt_for = 133, // stmt_for + S_stmt_foreach = 134, // stmt_foreach + S_stmt_switch = 135, // stmt_switch + S_stmt_case = 136, // stmt_case + S_stmt_default = 137, // stmt_default + S_stmt_break = 138, // stmt_break + S_stmt_continue = 139, // stmt_continue + S_stmt_return = 140, // stmt_return + S_stmt_breakpoint = 141, // stmt_breakpoint + S_stmt_prof_begin = 142, // stmt_prof_begin + S_stmt_prof_end = 143, // stmt_prof_end + S_expr = 144, // expr + S_expr_or_empty = 145, // expr_or_empty + S_expr_assign = 146, // expr_assign + S_expr_increment = 147, // expr_increment + S_expr_decrement = 148, // expr_decrement + S_expr_ternary = 149, // expr_ternary + S_expr_binary = 150, // expr_binary + S_expr_primitive = 151, // expr_primitive + S_expr_complement = 152, // expr_complement + S_expr_not = 153, // expr_not + S_expr_call = 154, // expr_call + S_expr_method = 155, // expr_method + S_expr_function = 156, // expr_function + S_expr_pointer = 157, // expr_pointer + S_expr_add_array = 158, // expr_add_array + S_expr_parameters = 159, // expr_parameters + S_expr_arguments = 160, // expr_arguments + S_expr_arguments_no_empty = 161, // expr_arguments_no_empty + S_expr_reference = 162, // expr_reference + S_expr_array = 163, // expr_array + S_expr_field = 164, // expr_field + S_expr_size = 165, // expr_size + S_expr_paren = 166, // expr_paren + S_expr_object = 167, // expr_object + S_expr_thisthread = 168, // expr_thisthread + S_expr_empty_array = 169, // expr_empty_array + S_expr_undefined = 170, // expr_undefined + S_expr_game = 171, // expr_game + S_expr_self = 172, // expr_self + S_expr_anim = 173, // expr_anim + S_expr_level = 174, // expr_level + S_expr_animation = 175, // expr_animation + S_expr_animtree = 176, // expr_animtree + S_expr_identifier = 177, // expr_identifier + S_expr_path = 178, // expr_path + S_expr_istring = 179, // expr_istring + S_expr_string = 180, // expr_string + S_expr_color = 181, // expr_color + S_expr_vector = 182, // expr_vector + S_expr_float = 183, // expr_float + S_expr_integer = 184, // expr_integer + S_expr_false = 185, // expr_false + S_expr_true = 186 // expr_true }; }; @@ -1294,6 +1297,7 @@ namespace xsk { namespace gsc { namespace s2 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2563,6 +2567,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2679,7 +2684,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - S2_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + S2_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4064,6 +4069,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4648,7 +4668,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2191, ///< Last index in yytable_. + yylast_ = 2291, ///< Last index in yytable_. yynnts_ = 81, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -4952,6 +4972,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5267,6 +5288,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5340,7 +5362,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::s2 -#line 5344 "parser.hpp" +#line 5366 "parser.hpp" diff --git a/src/s4/xsk/lexer.cpp b/src/s4/xsk/lexer.cpp index a511ee44..a22f2e71 100644 --- a/src/s4/xsk/lexer.cpp +++ b/src/s4/xsk/lexer.cpp @@ -70,9 +70,9 @@ enum class keyword KW_INVALID, }; -buffer::buffer() : size(1024), length(0) +buffer::buffer() : length(0) { - data = static_cast(std::malloc(size)); + data = static_cast(std::malloc(max_buf_size)); } buffer::~buffer() @@ -82,18 +82,9 @@ buffer::~buffer() bool buffer::push(char c) { - if(length >= size) - { - auto nsize = size * 2; - auto ndata = reinterpret_cast(std::malloc(nsize)); + if(length >= max_buf_size) + return false; - if(!ndata) return false; - - std::memmove(ndata, data, size); - std::free(data); - size = nsize; - data = ndata; - } data[length++] = c; return true; } @@ -141,7 +132,7 @@ void reader::advance() } } -lexer::lexer(const std::string& name, const char* data, size_t size) : in_dev_state_(false), loc_(xsk::gsc::location(&name)), +lexer::lexer(const std::string& name, const char* data, size_t size) : indev_(false), loc_(xsk::gsc::location(&name)), mode_(build::dev), header_top_(0), locs_(std::stack()), readers_(std::stack()) { reader_.init(data, size); @@ -187,24 +178,28 @@ void lexer::restrict_header(const xsk::gsc::location& loc) auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type { buffer_.length = 0; + state_ = state::start; loc_.step(); while (true) { - if (reader_.state == reader::end) - { - if (in_dev_state_) - throw s4::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); + const auto& state = reader_.state; + auto& last = reader_.last_byte; + auto& curr = reader_.current_byte; + auto path = false; - if(header_top_ > 0) + if (state == reader::end) + { + if (indev_) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (header_top_ > 0) pop_header(); else return s4::parser::make_S4EOF(loc_); } reader_.advance(); - auto& last = reader_.last_byte; - auto& curr = reader_.current_byte; switch (last) { @@ -218,7 +213,7 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type loc_.step(); continue; case '/': - if(reader_.state == reader::end || (curr != '/' && curr != '*' && curr != '#' && curr != '=')) + if (curr != '/' && curr != '*' && curr != '#' && curr != '=') return s4::parser::make_DIV(loc_); reader_.advance(); @@ -228,29 +223,27 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type if (last == '#') { - if (in_dev_state_) + if (indev_) + throw comp_error(loc_, "cannot recurse devblock ('/#')"); + + if (mode_ == xsk::gsc::build::dev) { - throw s4::parser::syntax_error(loc_, "cannot recurse devblock ('/#')"); - } - else if (mode_ == xsk::gsc::build::dev) - { - in_dev_state_ = true; + indev_ = true; return s4::parser::make_DEVBEGIN(loc_); } else { while (true) { - if (reader_.state == reader::end) - { - throw s4::parser::syntax_error(loc_, "unmatched devblock start ('/#')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched devblock start ('/#')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '#' && curr == '/') + else if (last == '#' && curr == '/') { reader_.advance(); break; @@ -264,16 +257,15 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type { while (true) { - if (reader_.state == reader::end) - { - throw s4::parser::syntax_error(loc_, "unmatched multiline comment start ('/*')"); - } - else if (curr == '\n') + if (state == reader::end) + throw comp_error(loc_, "unmatched multiline comment start ('/*')"); + + if (curr == '\n') { loc_.lines(); loc_.step(); } - else if (reader_.state == reader::ok && last == '*' && curr == '/') + else if (last == '*' && curr == '/') { reader_.advance(); break; @@ -286,7 +278,7 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type { while (true) { - if (reader_.state == reader::end || curr == '\n') + if (state == reader::end || curr == '\n') break; reader_.advance(); @@ -296,69 +288,43 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type case '#': if (curr == '/') { - if (!in_dev_state_) - throw s4::parser::syntax_error(loc_, "unmatched devblock end ('#/')"); + if (!indev_) + throw comp_error(loc_, "unmatched devblock end ('#/')"); - in_dev_state_ = false; + indev_ = false; reader_.advance(); return s4::parser::make_DEVEND(loc_); } buffer_.push(last); - while (reader_.state == reader::ok) - { - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; + reader_.advance(); - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (state == reader::end || !((last > 64 && last < 91) || (last > 96 && last < 123))) + throw comp_error(loc_, "unterminated preprocessor directive ('#')"); - reader_.advance(); - } - - { - if (auto len = buffer_.length; len == 4 || len == 7) - { - auto data = buffer_.data; - auto color = true; - for (auto i = 1; i < len; i++) - { - if ((data[i] < 48 || data[i] > 57) && (data[i] < 65 || data[i] > 70) && (data[i] < 97 || data[i] > 102)) - { - color = false; - break; - } - } - - if (color) return s4::parser::make_COLOR(std::string(++data, --len), loc_); - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key == keyword::KW_INVALID) - throw s4::parser::syntax_error(loc_, utils::string::va("unknown preprocessor directive ('%s')", "#")); - - if (keyword_is_token(key)) - return keyword_token(key); - - // call preprocessor(key); - } - continue; + state_ = state::preprocessor; + goto lex_name; case '*': - if (reader_.state == reader::end || (curr != '/' && curr != '=')) + if (curr != '/' && curr != '=') return s4::parser::make_MUL(loc_); reader_.advance(); - if (curr == '/') - throw s4::parser::syntax_error(loc_, "unmatched multiline comment end ('*/')"); + if (last == '=') + return s4::parser::make_ASSIGN_MUL(loc_); - return s4::parser::make_ASSIGN_MUL(loc_); + throw comp_error(loc_, "unmatched multiline comment end ('*/')"); case '"': - case '\'': - return read_string(last, false); + state_ = state::string; + goto lex_string; case '.': - return read_dotsize(); + reader_.advance(); + + if(state == reader::end) + throw comp_error(loc_, "unterminated field ('.')"); + + state_ = state::field; + goto lex_name_or_number; case '(': return s4::parser::make_LPAREN(loc_); case ')': @@ -378,6 +344,7 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type case ':': if (curr != ':') return s4::parser::make_COLON(loc_); + reader_.advance(); return s4::parser::make_DOUBLECOLON(loc_); case '?': @@ -385,43 +352,70 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type case '=': if (curr != '=') return s4::parser::make_ASSIGN(loc_); + reader_.advance(); return s4::parser::make_EQUALITY(loc_); case '+': if (curr != '+' && curr != '=') return s4::parser::make_ADD(loc_); + reader_.advance(); - return (last == '+') ? s4::parser::make_INCREMENT(loc_) : s4::parser::make_ASSIGN_ADD(loc_); + + if (last == '+') + return s4::parser::make_INCREMENT(loc_); + + return s4::parser::make_ASSIGN_ADD(loc_); case '-': if (curr != '-' && curr != '=') return s4::parser::make_SUB(loc_); + reader_.advance(); - return (last == '-') ? s4::parser::make_DECREMENT(loc_) : s4::parser::make_ASSIGN_SUB(loc_); + + if (last == '-') + return s4::parser::make_DECREMENT(loc_); + + return s4::parser::make_ASSIGN_SUB(loc_); case '%': if (curr != '=') return s4::parser::make_MOD(loc_); + reader_.advance(); + return s4::parser::make_ASSIGN_MOD(loc_); case '|': if (curr != '|' && curr != '=') return s4::parser::make_BITWISE_OR(loc_); + reader_.advance(); - return (last == '|') ? s4::parser::make_OR(loc_) : s4::parser::make_ASSIGN_BW_OR(loc_); + + if (last == '|') + return s4::parser::make_OR(loc_); + + return s4::parser::make_ASSIGN_BW_OR(loc_); case '&': if (curr != '&' && curr != '=' && curr != '"' && curr != '\'') return s4::parser::make_BITWISE_AND(loc_); + reader_.advance(); - if (last == '"' || last == '\'') - return read_string(last, true); - return (last == '&') ? s4::parser::make_AND(loc_) : s4::parser::make_ASSIGN_BW_AND(loc_); + + if (last == '&') + return s4::parser::make_AND(loc_); + + if (last == '=') + return s4::parser::make_ASSIGN_BW_AND(loc_); + + state_ = state::localize; + goto lex_string; case '^': if (curr != '=') return s4::parser::make_BITWISE_EXOR(loc_); + reader_.advance(); return s4::parser::make_ASSIGN_BW_EXOR(loc_); case '!': if (curr != '=') return s4::parser::make_NOT(loc_); + reader_.advance(); return s4::parser::make_INEQUALITY(loc_); case '~': @@ -429,144 +423,233 @@ auto lexer::lex() -> xsk::gsc::s4::parser::symbol_type case '<': if (curr != '<' && curr != '=') return s4::parser::make_LESS(loc_); + reader_.advance(); - if (last == '<') - { - reader_.advance(); - return (last == '=') ? s4::parser::make_ASSIGN_LSHIFT(loc_) : s4::parser::make_LSHIFT(loc_); - } - return s4::parser::make_LESS_EQUAL(loc_); + if (last == '=') + return s4::parser::make_LESS_EQUAL(loc_); + + if (curr != '=') + return s4::parser::make_LSHIFT(loc_); + + reader_.advance(); + return s4::parser::make_ASSIGN_LSHIFT(loc_); case '>': if (curr != '>' && curr != '=') return s4::parser::make_GREATER(loc_); + reader_.advance(); - if (last == '>') - { - reader_.advance(); - return (last == '=') ? s4::parser::make_ASSIGN_RSHIFT(loc_) : s4::parser::make_RSHIFT(loc_); - } - return s4::parser::make_GREATER_EQUAL(loc_); + + if (last == '=') + return s4::parser::make_GREATER_EQUAL(loc_); + + if (curr != '=') + return s4::parser::make_RSHIFT(loc_); + + reader_.advance(); + return s4::parser::make_ASSIGN_RSHIFT(loc_); default: +lex_name_or_number: if (last >= '0' && last <= '9') - return lexer::read_number(last); + goto lex_number; else if (last == '_' || last >= 'A' && last <= 'Z' || last >= 'a' && last <= 'z') - return lexer::read_word(last); + goto lex_name; - throw s4::parser::syntax_error(loc_, utils::string::va("bad token: \'%c\'", last)); + throw comp_error(loc_, utils::string::va("bad token: \'%c\'", last)); } - } -} -auto lexer::read_string(char quote, bool localize) -> xsk::gsc::s4::parser::symbol_type -{ - if (localize) - reader_.advance(); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; +lex_string: + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); reader_.advance(); - if (last == '\n') - throw s4::parser::syntax_error(loc_, "unterminated string"); - - if (last == '\\') // process scapes + while (true) { - // TODO: - } - - if (last != '\\' && curr == quote) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - } - - if (reader_.state == reader::end) - { - throw s4::parser::syntax_error(loc_, utils::string::va("unmatched string start ('%s')", (quote == '"') ? "\"" : "\\'")); - } - - if (localize) - return s4::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - - return s4::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); -} - -auto lexer::read_number(char first) -> xsk::gsc::s4::parser::symbol_type -{ - if (first == '.') - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) + if (last == '"') break; - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + if (last == '\n') + throw comp_error(loc_, "unterminated string literal"); - reader_.advance(); - } + if (state == reader::end) + throw comp_error(loc_, "unmatched string start ('\"')"); - if (reader_.last_byte == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = true; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') + if (last == '\\') { - if (dot) - throw s4::parser::syntax_error(loc_, "invalid number '.'"); + char c = curr; + switch (curr) + { + case 't': c = '\t'; break; + case 'r': c = '\r'; break; + case 'n': c = '\n'; break; + case '"': c = '\"'; break; + case '\\': c = '\\'; break; + default: break; + } + + if (!buffer_.push(c)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - if (data[i] == 'f' && i != len - 1) - throw s4::parser::syntax_error(loc_, "invalid number 'f'"); + else if (!buffer_.push(last)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); } - return s4::parser::make_FLOAT(std::string(data, len), loc_); - } - else - { - auto curr = reader_.current_byte; + if (state_ == state::localize) + return s4::parser::make_ISTRING(std::string(buffer_.data, buffer_.length), loc_); - if (first == '0' && curr == 'o') + return s4::parser::make_STRING(std::string(buffer_.data, buffer_.length), loc_); + +lex_name: + buffer_.push(last); + + while (true) + { + if (state == reader::end) + break; + + if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) + break; + + if (curr == '\\') + { + if (last == '\\') + throw comp_error(loc_, "invalid path '\\\\'"); + + path = true; + if (!buffer_.push('/')) + throw comp_error(loc_, "max string size exceeded"); + } + else if (!buffer_.push(curr)) + throw comp_error(loc_, "max string size exceeded"); + + reader_.advance(); + } + + if(state_ == state::field) + { + if (path) + throw comp_error(loc_, "invalid field token '\\'"); + + if (std::string_view(buffer_.data, buffer_.length) == "size") + { + return s4::parser::make_SIZE(loc_); + } + + return s4::parser::make_FIELD(std::string(buffer_.data, buffer_.length), loc_); + } + else if (state_ == state::preprocessor) + { + if (path) + throw comp_error(loc_, "invalid preprocessor directive"); + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + // TODO: call preprocessor(key); + throw comp_error(loc_, "unknown preprocessor directive"); + state_ = state::start; + continue; + } + else + { + if (buffer_.data[0] != '_') + { + for (auto i = 0; i < buffer_.length; i++) + { + auto c = buffer_.data[i]; + + if (c > 64 && c < 91) + buffer_.data[i] = c + 32; + } + } + + auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); + + if (key != keyword::KW_INVALID) + return keyword_token(key); + + if (path) + { + if (buffer_.data[buffer_.length - 1] == '/') + throw comp_error(loc_, "invalid path end '\\'"); + + //return s4::parser::make_PATH(xsk::gsc::s4::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s4::parser::make_PATH(std::string(buffer_.data, buffer_.length), loc_); + } + + //return s4::parser::make_IDENTIFIER(xsk::gsc::s4::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); + return s4::parser::make_IDENTIFIER(std::string(buffer_.data, buffer_.length), loc_); + } + +lex_number: + if (state_ == state::field) + buffer_.push('.'); + + if (state_ == state::field || last == '.' || last != '0' || (last == '0' && (curr != 'o' && curr != 'b' && curr != 'x'))) + { + buffer_.push(last); + + auto dot = 0; + auto flt = 0; + + while (true) + { + if (state == reader::end) + break; + + if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) + throw comp_error(loc_, "invalid number literal"); + + if ((curr == '.' || curr == 'f') && last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (curr == '\'') + { + reader_.advance(); + continue; + } + + if (curr == 'f') + flt++; + else if (curr == '.') + dot++; + else if (!(curr > 47 && curr < 58)) + break; + + if (!buffer_.push(curr)) + throw comp_error(loc_, "number literal size exceeded"); + + reader_.advance(); + } + + if (last == '\'') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field && dot || dot > 1 || flt > 1 || flt && buffer_.data[buffer_.length - 1] != 'f') + throw comp_error(loc_, "invalid number literal"); + + if (state_ == state::field || dot || flt) + return s4::parser::make_FLOAT(std::string(buffer_.data, buffer_.length), loc_); + + return s4::parser::make_INTEGER(std::string(buffer_.data, buffer_.length), loc_); + } + else if (curr == 'o') { - buffer_.push(first); - buffer_.push('o'); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'o')) - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'o' && last == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'o') || (curr == 'o' && last == '\'')) + throw comp_error(loc_, "invalid octal literal"); if (curr == '\'') { @@ -583,30 +666,24 @@ auto lexer::read_number(char first) -> xsk::gsc::s4::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); + if (last == '\'' || buffer_.length <= 0) + throw comp_error(loc_, "invalid octal literal"); - if (buffer_.length < 3) - throw error("gsc lexer: invalid octal literal!"); - - return s4::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data + 2), loc_); + return s4::parser::make_INTEGER(xsk::utils::string::oct_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'b') + else if (curr == 'b') { - buffer_.push(first); - buffer_.push('b'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'b')) - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'b' && last == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'b') || (curr == 'b' && last == '\'')) + throw comp_error(loc_, "invalid binary literal"); if (curr == '\'') { @@ -618,35 +695,29 @@ auto lexer::read_number(char first) -> xsk::gsc::s4::parser::symbol_type break; if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); + throw comp_error(loc_, "number literal size exceeded"); reader_.advance(); } - if (reader_.last_byte == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid binary literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid binary literal"); return s4::parser::make_INTEGER(xsk::utils::string::bin_to_dec(buffer_.data), loc_); } - else if (first == '0' && curr == 'x') + else if (curr == 'x') { - buffer_.push(first); - buffer_.push('x'); + buffer_.push(last); + buffer_.push(curr); reader_.advance(); - while (reader_.state == reader::ok) + while (true) { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; + if (state == reader::end) + break; - if (curr == '\'' && (last == '\'' || last == 'x')) - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == 'x' && last == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); + if (curr == '\'' && (last == '\'' || last == 'x') || (curr == 'x' && last == '\'')) + throw comp_error(loc_, "invalid hexadecimal literal"); if (curr == '\'') { @@ -663,175 +734,15 @@ auto lexer::read_number(char first) -> xsk::gsc::s4::parser::symbol_type reader_.advance(); } - if (reader_.last_byte == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (buffer_.length < 3) - throw error("gsc lexer: invalid hexadecimal literal!"); + if (last == '\'' || buffer_.length < 3) + throw comp_error(loc_, "invalid hexadecimal literal"); return s4::parser::make_INTEGER(xsk::utils::string::hex_to_dec(buffer_.data), loc_); } - else - { - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto last = reader_.last_byte; - auto curr = reader_.current_byte; - - if (curr == '\'' && (last == '\'' || last == 'f' || last == '.')) - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if ((curr == '.' || curr == 'f') && last == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - if (curr == '\'') - { - reader_.advance(); - continue; - } - - if (!(curr == 'f' || curr == '.' || (curr > 47 && curr < 58))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (reader_.last_byte == '\'') - throw s4::parser::syntax_error(loc_, "invalid number '\''"); - - auto data = buffer_.data; - auto len = buffer_.length; - auto dot = false; - - for (auto i = 1; i < len; i++) - { - if (data[i] == '.') - { - if (dot) - throw s4::parser::syntax_error(loc_, "invalid number '.'"); - - dot = true; - } - if (data[i] == 'f' && i != len - 1) - throw s4::parser::syntax_error(loc_, "invalid number 'f'"); - } - - if (dot || data[len - 1] == 'f') - return s4::parser::make_FLOAT(std::string(data, len), loc_); - - return s4::parser::make_INTEGER(std::string(data, len), loc_); - } + // cant get here! } } -auto lexer::read_word(char first) -> xsk::gsc::s4::parser::symbol_type -{ - auto path = false; - - buffer_.push(first); - - while (reader_.state == reader::ok) - { - auto curr = reader_.current_byte; - - if (!(curr == '\\' || curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123) || (curr > 47 && curr < 58))) - break; - - if (curr == '\\') - { - if (reader_.last_byte == '\\') - throw s4::parser::syntax_error(loc_, "invalid path '\\\\'"); - - path = true; - curr = '/'; - } - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - - if(buffer_.data[0] != '_') - { - for(auto i = 0; i < buffer_.length; i++) - { - auto c = buffer_.data[i]; - - if (c > 64 && c < 91) - buffer_.data[i] = c + 32; - } - } - - auto key = get_keyword(std::string_view(buffer_.data, buffer_.length)); - - if (key != keyword::KW_INVALID) - return keyword_token(key); - - if (path) - { - if (buffer_.data[buffer_.length - 1] == '/') - throw s4::parser::syntax_error(loc_, "invalid path end '\\'"); - - return s4::parser::make_PATH(xsk::gsc::s4::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); - } - - return s4::parser::make_IDENTIFIER(xsk::gsc::s4::resolver::make_token(std::string_view(buffer_.data, buffer_.length)), loc_); -} - -auto lexer::read_dotsize() -> xsk::gsc::s4::parser::symbol_type -{ - auto curr = reader_.current_byte; - - if (curr > 47 && curr < 58) - { - return lexer::read_number('.'); - } - else if (curr == '_' || curr > 64 && curr < 91 || curr > 96 && curr < 123) - { - reader save; - save.state = reader_.state; - save.bytes_remaining = reader_.bytes_remaining; - save.buffer_pos = reader_.buffer_pos; - save.last_byte = reader_.last_byte; - save.current_byte = reader_.current_byte; - - while (reader_.state == reader::ok) - { - curr = reader_.current_byte; - - if (!(curr == '_' || (curr > 64 && curr < 91) || (curr > 96 && curr < 123))) - break; - - if (!buffer_.push(curr)) - throw error("gsc lexer: out of memory!"); - - reader_.advance(); - } - - if (std::string_view(buffer_.data, buffer_.length) == "size") - { - return s4::parser::make_SIZE(loc_); - } - - reader_.state = save.state; - reader_.bytes_remaining = save.bytes_remaining; - reader_.buffer_pos = save.buffer_pos; - reader_.last_byte = save.last_byte; - reader_.current_byte = save.current_byte; - - return s4::parser::make_DOT(loc_); - - } - else return s4::parser::make_DOT(loc_); -} - auto lexer::keyword_token(keyword k) -> xsk::gsc::s4::parser::symbol_type { switch (k) diff --git a/src/s4/xsk/lexer.hpp b/src/s4/xsk/lexer.hpp index 6b983c76..469490b2 100644 --- a/src/s4/xsk/lexer.hpp +++ b/src/s4/xsk/lexer.hpp @@ -12,11 +12,12 @@ namespace xsk::gsc::s4 enum class keyword; +constexpr size_t max_buf_size = 0x2000; + struct buffer { - int size; - int length; char* data; + int length; buffer(); ~buffer(); @@ -25,13 +26,13 @@ struct buffer struct reader { - enum states { end, ok }; + enum state_type : std::uint8_t { end, ok }; - states state; - int bytes_remaining; const char* buffer_pos; + std::uint32_t bytes_remaining; char last_byte; char current_byte; + state_type state; reader(); @@ -47,15 +48,17 @@ struct reader class lexer { -private: + enum class state : std::uint8_t { start, string, localize, field, preprocessor }; + reader reader_; buffer buffer_; location loc_; build mode_; - bool in_dev_state_; std::stack locs_; std::stack readers_; std::uint32_t header_top_; + state state_; + bool indev_; public: lexer(const std::string& name, const char* data, size_t size); @@ -65,10 +68,6 @@ public: void restrict_header(const xsk::gsc::location& loc); private: - auto read_string(char quote, bool localize) -> xsk::gsc::s4::parser::symbol_type; - auto read_number(char first) -> xsk::gsc::s4::parser::symbol_type; - auto read_word(char first) -> xsk::gsc::s4::parser::symbol_type; - auto read_dotsize() -> xsk::gsc::s4::parser::symbol_type; auto keyword_token(keyword k) -> xsk::gsc::s4::parser::symbol_type; static auto keyword_is_token(keyword k) -> bool; static auto get_keyword(std::string_view str) -> keyword; diff --git a/src/s4/xsk/parser.cpp b/src/s4/xsk/parser.cpp index 2654f27b..0c6d35e3 100644 --- a/src/s4/xsk/parser.cpp +++ b/src/s4/xsk/parser.cpp @@ -499,6 +499,7 @@ namespace xsk { namespace gsc { namespace s4 { value.YY_MOVE_OR_COPY< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -808,6 +809,7 @@ namespace xsk { namespace gsc { namespace s4 { value.move< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1117,6 +1119,7 @@ namespace xsk { namespace gsc { namespace s4 { value.copy< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1425,6 +1428,7 @@ namespace xsk { namespace gsc { namespace s4 { value.move< ast::stmt_while::ptr > (that.value); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -1988,6 +1992,7 @@ namespace xsk { namespace gsc { namespace s4 { yylhs.value.emplace< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2019,1327 +2024,1333 @@ namespace xsk { namespace gsc { namespace s4 { switch (yyn) { case 2: // root: program -#line 249 "parser.ypp" +#line 250 "parser.ypp" { ast = std::move(yystack_[0].value.as < ast::program::ptr > ()); } -#line 2025 "parser.cpp" +#line 2030 "parser.cpp" break; case 3: // root: %empty -#line 250 "parser.ypp" +#line 251 "parser.ypp" { ast = std::make_unique(yylhs.location); } -#line 2031 "parser.cpp" +#line 2036 "parser.cpp" break; case 4: // program: program inline -#line 255 "parser.ypp" +#line 256 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); } -#line 2037 "parser.cpp" +#line 2042 "parser.cpp" break; case 5: // program: program include -#line 257 "parser.ypp" +#line 258 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2043 "parser.cpp" +#line 2048 "parser.cpp" break; case 6: // program: program declaration -#line 259 "parser.ypp" +#line 260 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::move(yystack_[1].value.as < ast::program::ptr > ()); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2049 "parser.cpp" +#line 2054 "parser.cpp" break; case 7: // program: inline -#line 261 "parser.ypp" +#line 262 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); } -#line 2055 "parser.cpp" +#line 2060 "parser.cpp" break; case 8: // program: include -#line 263 "parser.ypp" +#line 264 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->includes.push_back(std::move(yystack_[0].value.as < ast::include::ptr > ())); } -#line 2061 "parser.cpp" +#line 2066 "parser.cpp" break; case 9: // program: declaration -#line 265 "parser.ypp" +#line 266 "parser.ypp" { yylhs.value.as < ast::program::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::program::ptr > ()->declarations.push_back(std::move(yystack_[0].value.as < ast::decl > ())); } -#line 2067 "parser.cpp" +#line 2072 "parser.cpp" break; case 10: // inline: "#inline" expr_path ";" -#line 269 "parser.ypp" +#line 270 "parser.ypp" { lexer.push_header(yystack_[1].value.as < ast::expr_path::ptr > ()->value); } -#line 2073 "parser.cpp" +#line 2078 "parser.cpp" break; case 11: // include: "#include" expr_path ";" -#line 274 "parser.ypp" +#line 275 "parser.ypp" { yylhs.value.as < ast::include::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_path::ptr > ())); } -#line 2079 "parser.cpp" +#line 2084 "parser.cpp" break; case 12: // declaration: "/#" -#line 278 "parser.ypp" +#line 279 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_begin = std::make_unique(yylhs.location); } -#line 2085 "parser.cpp" +#line 2090 "parser.cpp" break; case 13: // declaration: "#/" -#line 279 "parser.ypp" +#line 280 "parser.ypp" { yylhs.value.as < ast::decl > ().as_dev_end = std::make_unique(yylhs.location); } -#line 2091 "parser.cpp" +#line 2096 "parser.cpp" break; case 14: // declaration: decl_usingtree -#line 280 "parser.ypp" +#line 281 "parser.ypp" { yylhs.value.as < ast::decl > ().as_usingtree = std::move(yystack_[0].value.as < ast::decl_usingtree::ptr > ()); } -#line 2097 "parser.cpp" +#line 2102 "parser.cpp" break; case 15: // declaration: decl_constant -#line 281 "parser.ypp" +#line 282 "parser.ypp" { yylhs.value.as < ast::decl > ().as_constant = std::move(yystack_[0].value.as < ast::decl_constant::ptr > ()); } -#line 2103 "parser.cpp" +#line 2108 "parser.cpp" break; case 16: // declaration: decl_thread -#line 282 "parser.ypp" +#line 283 "parser.ypp" { yylhs.value.as < ast::decl > ().as_thread = std::move(yystack_[0].value.as < ast::decl_thread::ptr > ()); } -#line 2109 "parser.cpp" +#line 2114 "parser.cpp" break; case 17: // decl_usingtree: "#using_animtree" "(" expr_string ")" ";" -#line 287 "parser.ypp" +#line 288 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_usingtree::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_string::ptr > ())); } -#line 2115 "parser.cpp" +#line 2120 "parser.cpp" break; case 18: // decl_constant: expr_identifier "=" expr ";" -#line 292 "parser.ypp" +#line 293 "parser.ypp" { yylhs.value.as < ast::decl_constant::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2121 "parser.cpp" +#line 2126 "parser.cpp" break; case 19: // decl_thread: expr_identifier "(" expr_parameters ")" stmt_block -#line 297 "parser.ypp" +#line 298 "parser.ypp" { lexer.restrict_header(yylhs.location); yylhs.value.as < ast::decl_thread::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2127 "parser.cpp" +#line 2132 "parser.cpp" break; case 20: // stmt: stmt_dev -#line 301 "parser.ypp" +#line 302 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2133 "parser.cpp" +#line 2138 "parser.cpp" break; case 21: // stmt: stmt_block -#line 302 "parser.ypp" +#line 303 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_list = std::move(yystack_[0].value.as < ast::stmt_list::ptr > ()); } -#line 2139 "parser.cpp" +#line 2144 "parser.cpp" break; case 22: // stmt: stmt_call -#line 303 "parser.ypp" +#line 304 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_call = std::move(yystack_[0].value.as < ast::stmt_call::ptr > ()); } -#line 2145 "parser.cpp" +#line 2150 "parser.cpp" break; case 23: // stmt: stmt_assign -#line 304 "parser.ypp" +#line 305 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_assign = std::move(yystack_[0].value.as < ast::stmt_assign::ptr > ()); } -#line 2151 "parser.cpp" +#line 2156 "parser.cpp" break; case 24: // stmt: stmt_endon -#line 305 "parser.ypp" +#line 306 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_endon = std::move(yystack_[0].value.as < ast::stmt_endon::ptr > ()); } -#line 2157 "parser.cpp" +#line 2162 "parser.cpp" break; case 25: // stmt: stmt_notify -#line 306 "parser.ypp" +#line 307 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_notify = std::move(yystack_[0].value.as < ast::stmt_notify::ptr > ()); } -#line 2163 "parser.cpp" +#line 2168 "parser.cpp" break; case 26: // stmt: stmt_wait -#line 307 "parser.ypp" +#line 308 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_wait = std::move(yystack_[0].value.as < ast::stmt_wait::ptr > ()); } -#line 2169 "parser.cpp" +#line 2174 "parser.cpp" break; case 27: // stmt: stmt_waittill -#line 308 "parser.ypp" +#line 309 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittill = std::move(yystack_[0].value.as < ast::stmt_waittill::ptr > ()); } -#line 2175 "parser.cpp" +#line 2180 "parser.cpp" break; case 28: // stmt: stmt_waittillmatch -#line 309 "parser.ypp" +#line 310 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillmatch = std::move(yystack_[0].value.as < ast::stmt_waittillmatch::ptr > ()); } -#line 2181 "parser.cpp" +#line 2186 "parser.cpp" break; case 29: // stmt: stmt_waittillframeend -#line 310 "parser.ypp" +#line 311 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waittillframeend = std::move(yystack_[0].value.as < ast::stmt_waittillframeend::ptr > ()); } -#line 2187 "parser.cpp" +#line 2192 "parser.cpp" break; case 30: // stmt: stmt_waitframe -#line 311 "parser.ypp" +#line 312 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_waitframe = std::move(yystack_[0].value.as < ast::stmt_waitframe::ptr > ()); } -#line 2193 "parser.cpp" +#line 2198 "parser.cpp" break; case 31: // stmt: stmt_if -#line 312 "parser.ypp" +#line 313 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_if = std::move(yystack_[0].value.as < ast::stmt_if::ptr > ()); } -#line 2199 "parser.cpp" +#line 2204 "parser.cpp" break; case 32: // stmt: stmt_ifelse -#line 313 "parser.ypp" +#line 314 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_ifelse = std::move(yystack_[0].value.as < ast::stmt_ifelse::ptr > ()); } -#line 2205 "parser.cpp" +#line 2210 "parser.cpp" break; case 33: // stmt: stmt_while -#line 314 "parser.ypp" +#line 315 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_while = std::move(yystack_[0].value.as < ast::stmt_while::ptr > ()); } -#line 2211 "parser.cpp" +#line 2216 "parser.cpp" break; case 34: // stmt: stmt_dowhile -#line 315 "parser.ypp" +#line 316 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_dowhile = std::move(yystack_[0].value.as < ast::stmt_dowhile::ptr > ()); } -#line 2217 "parser.cpp" +#line 2222 "parser.cpp" break; case 35: // stmt: stmt_for -#line 316 "parser.ypp" +#line 317 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_for = std::move(yystack_[0].value.as < ast::stmt_for::ptr > ()); } -#line 2223 "parser.cpp" +#line 2228 "parser.cpp" break; case 36: // stmt: stmt_foreach -#line 317 "parser.ypp" +#line 318 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_foreach = std::move(yystack_[0].value.as < ast::stmt_foreach::ptr > ()); } -#line 2229 "parser.cpp" +#line 2234 "parser.cpp" break; case 37: // stmt: stmt_switch -#line 318 "parser.ypp" +#line 319 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_switch = std::move(yystack_[0].value.as < ast::stmt_switch::ptr > ()); } -#line 2235 "parser.cpp" +#line 2240 "parser.cpp" break; case 38: // stmt: stmt_case -#line 319 "parser.ypp" +#line 320 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_case = std::move(yystack_[0].value.as < ast::stmt_case::ptr > ()); } -#line 2241 "parser.cpp" +#line 2246 "parser.cpp" break; case 39: // stmt: stmt_default -#line 320 "parser.ypp" +#line 321 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_default = std::move(yystack_[0].value.as < ast::stmt_default::ptr > ()); } -#line 2247 "parser.cpp" +#line 2252 "parser.cpp" break; case 40: // stmt: stmt_break -#line 321 "parser.ypp" +#line 322 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_break = std::move(yystack_[0].value.as < ast::stmt_break::ptr > ()); } -#line 2253 "parser.cpp" +#line 2258 "parser.cpp" break; case 41: // stmt: stmt_continue -#line 322 "parser.ypp" +#line 323 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_continue = std::move(yystack_[0].value.as < ast::stmt_continue::ptr > ()); } -#line 2259 "parser.cpp" +#line 2264 "parser.cpp" break; case 42: // stmt: stmt_return -#line 323 "parser.ypp" +#line 324 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_return = std::move(yystack_[0].value.as < ast::stmt_return::ptr > ()); } -#line 2265 "parser.cpp" +#line 2270 "parser.cpp" break; case 43: // stmt: stmt_breakpoint -#line 324 "parser.ypp" +#line 325 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_breakpoint = std::move(yystack_[0].value.as < ast::stmt_breakpoint::ptr > ()); } -#line 2271 "parser.cpp" +#line 2276 "parser.cpp" break; case 44: // stmt: stmt_prof_begin -#line 325 "parser.ypp" +#line 326 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_begin = std::move(yystack_[0].value.as < ast::stmt_prof_begin::ptr > ()); } -#line 2277 "parser.cpp" +#line 2282 "parser.cpp" break; case 45: // stmt: stmt_prof_end -#line 326 "parser.ypp" +#line 327 "parser.ypp" { yylhs.value.as < ast::stmt > ().as_prof_end = std::move(yystack_[0].value.as < ast::stmt_prof_end::ptr > ()); } -#line 2283 "parser.cpp" +#line 2288 "parser.cpp" break; case 46: // stmt_dev: "/#" stmt_list "#/" -#line 330 "parser.ypp" +#line 331 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2289 "parser.cpp" +#line 2294 "parser.cpp" break; case 47: // stmt_dev: "/#" "#/" -#line 331 "parser.ypp" +#line 332 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2295 "parser.cpp" +#line 2300 "parser.cpp" break; case 48: // stmt_block: "{" stmt_list "}" -#line 335 "parser.ypp" +#line 336 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); } -#line 2301 "parser.cpp" +#line 2306 "parser.cpp" break; case 49: // stmt_block: "{" "}" -#line 336 "parser.ypp" +#line 337 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); } -#line 2307 "parser.cpp" +#line 2312 "parser.cpp" break; case 50: // stmt_list: stmt_list stmt -#line 341 "parser.ypp" +#line 342 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::move(yystack_[1].value.as < ast::stmt_list::ptr > ()); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2313 "parser.cpp" +#line 2318 "parser.cpp" break; case 51: // stmt_list: stmt -#line 343 "parser.ypp" +#line 344 "parser.ypp" { yylhs.value.as < ast::stmt_list::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::stmt_list::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2319 "parser.cpp" +#line 2324 "parser.cpp" break; case 52: // stmt_expr: expr_assign -#line 348 "parser.ypp" +#line 349 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2325 "parser.cpp" +#line 2330 "parser.cpp" break; case 53: // stmt_expr: expr_increment -#line 350 "parser.ypp" +#line 351 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2331 "parser.cpp" +#line 2336 "parser.cpp" break; case 54: // stmt_expr: expr_decrement -#line 352 "parser.ypp" +#line 353 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2337 "parser.cpp" +#line 2342 "parser.cpp" break; case 55: // stmt_expr: %empty -#line 354 "parser.ypp" +#line 355 "parser.ypp" { yylhs.value.as < ast::stmt_expr::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2343 "parser.cpp" +#line 2348 "parser.cpp" break; case 56: // stmt_call: expr_call ";" -#line 359 "parser.ypp" +#line 360 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_call::ptr > ()))); } -#line 2349 "parser.cpp" +#line 2354 "parser.cpp" break; case 57: // stmt_call: expr_method ";" -#line 361 "parser.ypp" +#line 362 "parser.ypp" { yylhs.value.as < ast::stmt_call::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_method::ptr > ()))); } -#line 2355 "parser.cpp" +#line 2360 "parser.cpp" break; case 58: // stmt_assign: expr_assign ";" -#line 366 "parser.ypp" +#line 367 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2361 "parser.cpp" +#line 2366 "parser.cpp" break; case 59: // stmt_assign: expr_increment ";" -#line 368 "parser.ypp" +#line 369 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2367 "parser.cpp" +#line 2372 "parser.cpp" break; case 60: // stmt_assign: expr_decrement ";" -#line 370 "parser.ypp" +#line 371 "parser.ypp" { yylhs.value.as < ast::stmt_assign::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2373 "parser.cpp" +#line 2378 "parser.cpp" break; case 61: // stmt_endon: expr_object "endon" "(" expr ")" ";" -#line 375 "parser.ypp" +#line 376 "parser.ypp" { yylhs.value.as < ast::stmt_endon::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ())); } -#line 2379 "parser.cpp" +#line 2384 "parser.cpp" break; case 62: // stmt_notify: expr_object "notify" "(" expr "," expr_arguments_no_empty ")" ";" -#line 380 "parser.ypp" +#line 381 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2385 "parser.cpp" +#line 2390 "parser.cpp" break; case 63: // stmt_notify: expr_object "notify" "(" expr ")" ";" -#line 382 "parser.ypp" +#line 383 "parser.ypp" { yylhs.value.as < ast::stmt_notify::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2391 "parser.cpp" +#line 2396 "parser.cpp" break; case 64: // stmt_wait: "wait" expr ";" -#line 387 "parser.ypp" +#line 388 "parser.ypp" { yylhs.value.as < ast::stmt_wait::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2397 "parser.cpp" +#line 2402 "parser.cpp" break; case 65: // stmt_waittill: expr_object "waittill" "(" expr "," expr_arguments_no_empty ")" ";" -#line 392 "parser.ypp" +#line 393 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2403 "parser.cpp" +#line 2408 "parser.cpp" break; case 66: // stmt_waittill: expr_object "waittill" "(" expr ")" ";" -#line 394 "parser.ypp" +#line 395 "parser.ypp" { yylhs.value.as < ast::stmt_waittill::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2409 "parser.cpp" +#line 2414 "parser.cpp" break; case 67: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr "," expr_arguments_no_empty ")" ";" -#line 399 "parser.ypp" +#line 400 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[7].value.as < ast::expr > ()), std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2415 "parser.cpp" +#line 2420 "parser.cpp" break; case 68: // stmt_waittillmatch: expr_object "waittillmatch" "(" expr ")" ";" -#line 401 "parser.ypp" +#line 402 "parser.ypp" { yylhs.value.as < ast::stmt_waittillmatch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::make_unique(yylhs.location)); } -#line 2421 "parser.cpp" +#line 2426 "parser.cpp" break; case 69: // stmt_waittillframeend: "waittillframeend" ";" -#line 406 "parser.ypp" +#line 407 "parser.ypp" { yylhs.value.as < ast::stmt_waittillframeend::ptr > () = std::make_unique(yylhs.location); } -#line 2427 "parser.cpp" +#line 2432 "parser.cpp" break; case 70: // stmt_waitframe: "waitframe" ";" -#line 411 "parser.ypp" +#line 412 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2433 "parser.cpp" +#line 2438 "parser.cpp" break; case 71: // stmt_waitframe: "waitframe" "(" ")" ";" -#line 413 "parser.ypp" +#line 414 "parser.ypp" { yylhs.value.as < ast::stmt_waitframe::ptr > () = std::make_unique(yylhs.location); } -#line 2439 "parser.cpp" +#line 2444 "parser.cpp" break; case 72: // stmt_if: "if" "(" expr ")" stmt -#line 418 "parser.ypp" +#line 419 "parser.ypp" { yylhs.value.as < ast::stmt_if::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2445 "parser.cpp" +#line 2450 "parser.cpp" break; case 73: // stmt_ifelse: "if" "(" expr ")" stmt "else" stmt -#line 423 "parser.ypp" +#line 424 "parser.ypp" { yylhs.value.as < ast::stmt_ifelse::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::stmt > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2451 "parser.cpp" +#line 2456 "parser.cpp" break; case 74: // stmt_while: "while" "(" expr ")" stmt -#line 428 "parser.ypp" +#line 429 "parser.ypp" { yylhs.value.as < ast::stmt_while::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2457 "parser.cpp" +#line 2462 "parser.cpp" break; case 75: // stmt_dowhile: "do" stmt "while" "(" expr ")" ";" -#line 433 "parser.ypp" +#line 434 "parser.ypp" { yylhs.value.as < ast::stmt_dowhile::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[5].value.as < ast::stmt > ())); } -#line 2463 "parser.cpp" +#line 2468 "parser.cpp" break; case 76: // stmt_for: "for" "(" stmt_expr ";" expr_or_empty ";" stmt_expr ")" stmt -#line 438 "parser.ypp" +#line 439 "parser.ypp" { yylhs.value.as < ast::stmt_for::ptr > () = std::make_unique(yylhs.location, ast::stmt(std::move(yystack_[6].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[4].value.as < ast::expr > ()), ast::stmt(std::move(yystack_[2].value.as < ast::stmt_expr::ptr > ())), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2469 "parser.cpp" +#line 2474 "parser.cpp" break; case 77: // stmt_foreach: "foreach" "(" expr_identifier "in" expr ")" stmt -#line 443 "parser.ypp" +#line 444 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2475 "parser.cpp" +#line 2480 "parser.cpp" break; case 78: // stmt_foreach: "foreach" "(" expr_identifier "," expr_identifier "in" expr ")" stmt -#line 445 "parser.ypp" +#line 446 "parser.ypp" { yylhs.value.as < ast::stmt_foreach::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[6].value.as < ast::expr_identifier::ptr > ())), ast::expr(std::move(yystack_[4].value.as < ast::expr_identifier::ptr > ())), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt > ())); } -#line 2481 "parser.cpp" +#line 2486 "parser.cpp" break; case 79: // stmt_switch: "switch" "(" expr ")" stmt_block -#line 450 "parser.ypp" +#line 451 "parser.ypp" { yylhs.value.as < ast::stmt_switch::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::stmt_list::ptr > ())); } -#line 2487 "parser.cpp" +#line 2492 "parser.cpp" break; case 80: // stmt_case: "case" expr_integer ":" -#line 455 "parser.ypp" +#line 456 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_integer::ptr > ())), std::make_unique(yylhs.location)); } -#line 2493 "parser.cpp" +#line 2498 "parser.cpp" break; case 81: // stmt_case: "case" expr_string ":" -#line 457 "parser.ypp" +#line 458 "parser.ypp" { yylhs.value.as < ast::stmt_case::ptr > () = std::make_unique(yylhs.location, ast::expr(std::move(yystack_[1].value.as < ast::expr_string::ptr > ())), std::make_unique(yylhs.location)); } -#line 2499 "parser.cpp" +#line 2504 "parser.cpp" break; case 82: // stmt_default: "default" ":" -#line 462 "parser.ypp" +#line 463 "parser.ypp" { yylhs.value.as < ast::stmt_default::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2505 "parser.cpp" +#line 2510 "parser.cpp" break; case 83: // stmt_break: "break" ";" -#line 467 "parser.ypp" +#line 468 "parser.ypp" { yylhs.value.as < ast::stmt_break::ptr > () = std::make_unique(yylhs.location); } -#line 2511 "parser.cpp" +#line 2516 "parser.cpp" break; case 84: // stmt_continue: "continue" ";" -#line 472 "parser.ypp" +#line 473 "parser.ypp" { yylhs.value.as < ast::stmt_continue::ptr > () = std::make_unique(yylhs.location); } -#line 2517 "parser.cpp" +#line 2522 "parser.cpp" break; case 85: // stmt_return: "return" expr ";" -#line 477 "parser.ypp" +#line 478 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 2523 "parser.cpp" +#line 2528 "parser.cpp" break; case 86: // stmt_return: "return" ";" -#line 479 "parser.ypp" +#line 480 "parser.ypp" { yylhs.value.as < ast::stmt_return::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location)); } -#line 2529 "parser.cpp" +#line 2534 "parser.cpp" break; case 87: // stmt_breakpoint: "breakpoint" ";" -#line 484 "parser.ypp" +#line 485 "parser.ypp" { yylhs.value.as < ast::stmt_breakpoint::ptr > () = std::make_unique(yylhs.location); } -#line 2535 "parser.cpp" +#line 2540 "parser.cpp" break; case 88: // stmt_prof_begin: "prof_begin" "(" expr_arguments ")" ";" -#line 489 "parser.ypp" +#line 490 "parser.ypp" { yylhs.value.as < ast::stmt_prof_begin::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2541 "parser.cpp" +#line 2546 "parser.cpp" break; case 89: // stmt_prof_end: "prof_end" "(" expr_arguments ")" ";" -#line 494 "parser.ypp" +#line 495 "parser.ypp" { yylhs.value.as < ast::stmt_prof_end::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ())); } -#line 2547 "parser.cpp" +#line 2552 "parser.cpp" break; case 90: // expr: expr_ternary -#line 498 "parser.ypp" +#line 499 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2553 "parser.cpp" +#line 2558 "parser.cpp" break; case 91: // expr: expr_binary -#line 499 "parser.ypp" +#line 500 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2559 "parser.cpp" +#line 2564 "parser.cpp" break; case 92: // expr: expr_primitive -#line 500 "parser.ypp" +#line 501 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2565 "parser.cpp" +#line 2570 "parser.cpp" break; case 93: // expr_or_empty: expr -#line 504 "parser.ypp" +#line 505 "parser.ypp" { yylhs.value.as < ast::expr > () = std::move(yystack_[0].value.as < ast::expr > ()); } -#line 2571 "parser.cpp" +#line 2576 "parser.cpp" break; case 94: // expr_or_empty: %empty -#line 505 "parser.ypp" +#line 506 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location); } -#line 2577 "parser.cpp" +#line 2582 "parser.cpp" break; case 95: // expr_assign: expr_object "=" expr -#line 510 "parser.ypp" +#line 511 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2583 "parser.cpp" +#line 2588 "parser.cpp" break; case 96: // expr_assign: expr_object "|=" expr -#line 512 "parser.ypp" +#line 513 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2589 "parser.cpp" +#line 2594 "parser.cpp" break; case 97: // expr_assign: expr_object "&=" expr -#line 514 "parser.ypp" +#line 515 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2595 "parser.cpp" +#line 2600 "parser.cpp" break; case 98: // expr_assign: expr_object "^=" expr -#line 516 "parser.ypp" +#line 517 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2601 "parser.cpp" +#line 2606 "parser.cpp" break; case 99: // expr_assign: expr_object "<<=" expr -#line 518 "parser.ypp" +#line 519 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()),std::move( yystack_[0].value.as < ast::expr > ())); } -#line 2607 "parser.cpp" +#line 2612 "parser.cpp" break; case 100: // expr_assign: expr_object ">>=" expr -#line 520 "parser.ypp" +#line 521 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2613 "parser.cpp" +#line 2618 "parser.cpp" break; case 101: // expr_assign: expr_object "+=" expr -#line 522 "parser.ypp" +#line 523 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2619 "parser.cpp" +#line 2624 "parser.cpp" break; case 102: // expr_assign: expr_object "-=" expr -#line 524 "parser.ypp" +#line 525 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2625 "parser.cpp" +#line 2630 "parser.cpp" break; case 103: // expr_assign: expr_object "*=" expr -#line 526 "parser.ypp" +#line 527 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2631 "parser.cpp" +#line 2636 "parser.cpp" break; case 104: // expr_assign: expr_object "/=" expr -#line 528 "parser.ypp" +#line 529 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2637 "parser.cpp" +#line 2642 "parser.cpp" break; case 105: // expr_assign: expr_object "%=" expr -#line 530 "parser.ypp" +#line 531 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2643 "parser.cpp" +#line 2648 "parser.cpp" break; case 106: // expr_increment: "++" expr_object -#line 535 "parser.ypp" +#line 536 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2649 "parser.cpp" +#line 2654 "parser.cpp" break; case 107: // expr_increment: expr_object "++" -#line 537 "parser.ypp" +#line 538 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2655 "parser.cpp" +#line 2660 "parser.cpp" break; case 108: // expr_decrement: "--" expr_object -#line 542 "parser.ypp" +#line 543 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ()), true); } -#line 2661 "parser.cpp" +#line 2666 "parser.cpp" break; case 109: // expr_decrement: expr_object "--" -#line 544 "parser.ypp" +#line 545 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), false); } -#line 2667 "parser.cpp" +#line 2672 "parser.cpp" break; case 110: // expr_ternary: expr "?" expr ":" expr -#line 549 "parser.ypp" +#line 550 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[4].value.as < ast::expr > ()), std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2673 "parser.cpp" +#line 2678 "parser.cpp" break; case 111: // expr_binary: expr "||" expr -#line 554 "parser.ypp" +#line 555 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2679 "parser.cpp" +#line 2684 "parser.cpp" break; case 112: // expr_binary: expr "&&" expr -#line 556 "parser.ypp" +#line 557 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2685 "parser.cpp" +#line 2690 "parser.cpp" break; case 113: // expr_binary: expr "==" expr -#line 558 "parser.ypp" +#line 559 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2691 "parser.cpp" +#line 2696 "parser.cpp" break; case 114: // expr_binary: expr "!=" expr -#line 560 "parser.ypp" +#line 561 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2697 "parser.cpp" +#line 2702 "parser.cpp" break; case 115: // expr_binary: expr "<=" expr -#line 562 "parser.ypp" +#line 563 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2703 "parser.cpp" +#line 2708 "parser.cpp" break; case 116: // expr_binary: expr ">=" expr -#line 564 "parser.ypp" +#line 565 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2709 "parser.cpp" +#line 2714 "parser.cpp" break; case 117: // expr_binary: expr "<" expr -#line 566 "parser.ypp" +#line 567 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2715 "parser.cpp" +#line 2720 "parser.cpp" break; case 118: // expr_binary: expr ">" expr -#line 568 "parser.ypp" +#line 569 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2721 "parser.cpp" +#line 2726 "parser.cpp" break; case 119: // expr_binary: expr "|" expr -#line 570 "parser.ypp" +#line 571 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2727 "parser.cpp" +#line 2732 "parser.cpp" break; case 120: // expr_binary: expr "&" expr -#line 572 "parser.ypp" +#line 573 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2733 "parser.cpp" +#line 2738 "parser.cpp" break; case 121: // expr_binary: expr "^" expr -#line 574 "parser.ypp" +#line 575 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2739 "parser.cpp" +#line 2744 "parser.cpp" break; case 122: // expr_binary: expr "<<" expr -#line 576 "parser.ypp" +#line 577 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2745 "parser.cpp" +#line 2750 "parser.cpp" break; case 123: // expr_binary: expr ">>" expr -#line 578 "parser.ypp" +#line 579 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2751 "parser.cpp" +#line 2756 "parser.cpp" break; case 124: // expr_binary: expr "+" expr -#line 580 "parser.ypp" +#line 581 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2757 "parser.cpp" +#line 2762 "parser.cpp" break; case 125: // expr_binary: expr "-" expr -#line 582 "parser.ypp" +#line 583 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2763 "parser.cpp" +#line 2768 "parser.cpp" break; case 126: // expr_binary: expr "*" expr -#line 584 "parser.ypp" +#line 585 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2769 "parser.cpp" +#line 2774 "parser.cpp" break; case 127: // expr_binary: expr "/" expr -#line 586 "parser.ypp" +#line 587 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2775 "parser.cpp" +#line 2780 "parser.cpp" break; case 128: // expr_binary: expr "%" expr -#line 588 "parser.ypp" +#line 589 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2781 "parser.cpp" +#line 2786 "parser.cpp" break; case 129: // expr_primitive: expr_complement -#line 592 "parser.ypp" +#line 593 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_complement::ptr > ()); } -#line 2787 "parser.cpp" +#line 2792 "parser.cpp" break; case 130: // expr_primitive: expr_not -#line 593 "parser.ypp" +#line 594 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_not::ptr > ()); } -#line 2793 "parser.cpp" +#line 2798 "parser.cpp" break; case 131: // expr_primitive: expr_call -#line 594 "parser.ypp" +#line 595 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 2799 "parser.cpp" +#line 2804 "parser.cpp" break; case 132: // expr_primitive: expr_method -#line 595 "parser.ypp" +#line 596 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 2805 "parser.cpp" +#line 2810 "parser.cpp" break; case 133: // expr_primitive: expr_add_array -#line 596 "parser.ypp" +#line 597 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_add_array::ptr > ()); } -#line 2811 "parser.cpp" +#line 2816 "parser.cpp" break; case 134: // expr_primitive: expr_isdefined -#line 597 "parser.ypp" +#line 598 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_isdefined::ptr > ()); } -#line 2817 "parser.cpp" +#line 2822 "parser.cpp" break; case 135: // expr_primitive: expr_istrue -#line 598 "parser.ypp" +#line 599 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istrue::ptr > ()); } -#line 2823 "parser.cpp" +#line 2828 "parser.cpp" break; case 136: // expr_primitive: expr_reference -#line 599 "parser.ypp" +#line 600 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_reference::ptr > ()); } -#line 2829 "parser.cpp" +#line 2834 "parser.cpp" break; case 137: // expr_primitive: expr_array -#line 600 "parser.ypp" +#line 601 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 2835 "parser.cpp" +#line 2840 "parser.cpp" break; case 138: // expr_primitive: expr_field -#line 601 "parser.ypp" +#line 602 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 2841 "parser.cpp" +#line 2846 "parser.cpp" break; case 139: // expr_primitive: expr_size -#line 602 "parser.ypp" +#line 603 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_size::ptr > ()); } -#line 2847 "parser.cpp" +#line 2852 "parser.cpp" break; case 140: // expr_primitive: expr_paren -#line 603 "parser.ypp" +#line 604 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_paren::ptr > ()); } -#line 2853 "parser.cpp" +#line 2858 "parser.cpp" break; case 141: // expr_primitive: expr_thisthread -#line 604 "parser.ypp" +#line 605 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_thisthread::ptr > ()); } -#line 2859 "parser.cpp" +#line 2864 "parser.cpp" break; case 142: // expr_primitive: expr_empty_array -#line 605 "parser.ypp" +#line 606 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_empty_array::ptr > ()); } -#line 2865 "parser.cpp" +#line 2870 "parser.cpp" break; case 143: // expr_primitive: expr_undefined -#line 606 "parser.ypp" +#line 607 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_undefined::ptr > ()); } -#line 2871 "parser.cpp" +#line 2876 "parser.cpp" break; case 144: // expr_primitive: expr_game -#line 607 "parser.ypp" +#line 608 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 2877 "parser.cpp" +#line 2882 "parser.cpp" break; case 145: // expr_primitive: expr_self -#line 608 "parser.ypp" +#line 609 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 2883 "parser.cpp" +#line 2888 "parser.cpp" break; case 146: // expr_primitive: expr_anim -#line 609 "parser.ypp" +#line 610 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 2889 "parser.cpp" +#line 2894 "parser.cpp" break; case 147: // expr_primitive: expr_level -#line 610 "parser.ypp" +#line 611 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 2895 "parser.cpp" +#line 2900 "parser.cpp" break; case 148: // expr_primitive: expr_animation -#line 611 "parser.ypp" +#line 612 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animation::ptr > ()); } -#line 2901 "parser.cpp" +#line 2906 "parser.cpp" break; case 149: // expr_primitive: expr_animtree -#line 612 "parser.ypp" +#line 613 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_animtree::ptr > ()); } -#line 2907 "parser.cpp" +#line 2912 "parser.cpp" break; case 150: // expr_primitive: expr_identifier -#line 613 "parser.ypp" +#line 614 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 2913 "parser.cpp" +#line 2918 "parser.cpp" break; case 151: // expr_primitive: expr_istring -#line 614 "parser.ypp" +#line 615 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_istring::ptr > ()); } -#line 2919 "parser.cpp" +#line 2924 "parser.cpp" break; case 152: // expr_primitive: expr_string -#line 615 "parser.ypp" +#line 616 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_string::ptr > ()); } -#line 2925 "parser.cpp" +#line 2930 "parser.cpp" break; case 153: // expr_primitive: expr_color -#line 616 "parser.ypp" +#line 617 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_color::ptr > ()); } -#line 2931 "parser.cpp" +#line 2936 "parser.cpp" break; case 154: // expr_primitive: expr_vector -#line 617 "parser.ypp" +#line 618 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_vector::ptr > ()); } -#line 2937 "parser.cpp" +#line 2942 "parser.cpp" break; case 155: // expr_primitive: expr_float -#line 618 "parser.ypp" +#line 619 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_float::ptr > ()); } -#line 2943 "parser.cpp" +#line 2948 "parser.cpp" break; case 156: // expr_primitive: expr_integer -#line 619 "parser.ypp" +#line 620 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_integer::ptr > ()); } -#line 2949 "parser.cpp" +#line 2954 "parser.cpp" break; case 157: // expr_primitive: expr_false -#line 620 "parser.ypp" +#line 621 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_false::ptr > ()); } -#line 2955 "parser.cpp" +#line 2960 "parser.cpp" break; case 158: // expr_primitive: expr_true -#line 621 "parser.ypp" +#line 622 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_true::ptr > ()); } -#line 2961 "parser.cpp" +#line 2966 "parser.cpp" break; case 159: // expr_complement: "~" expr -#line 626 "parser.ypp" +#line 627 "parser.ypp" { yylhs.value.as < ast::expr_complement::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2967 "parser.cpp" +#line 2972 "parser.cpp" break; case 160: // expr_not: "!" expr -#line 631 "parser.ypp" +#line 632 "parser.ypp" { yylhs.value.as < ast::expr_not::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::expr > ())); } -#line 2973 "parser.cpp" +#line 2978 "parser.cpp" break; case 161: // expr_call: expr_function -#line 635 "parser.ypp" +#line 636 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2979 "parser.cpp" +#line 2984 "parser.cpp" break; case 162: // expr_call: expr_pointer -#line 636 "parser.ypp" +#line 637 "parser.ypp" { yylhs.value.as < ast::expr_call::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[0].value.as < ast::call > ())); } -#line 2985 "parser.cpp" +#line 2990 "parser.cpp" break; case 163: // expr_method: expr_object expr_function -#line 639 "parser.ypp" +#line 640 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2991 "parser.cpp" +#line 2996 "parser.cpp" break; case 164: // expr_method: expr_object expr_pointer -#line 640 "parser.ypp" +#line 641 "parser.ypp" { yylhs.value.as < ast::expr_method::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::call > ())); } -#line 2997 "parser.cpp" +#line 3002 "parser.cpp" break; case 165: // expr_function: expr_identifier "(" expr_arguments ")" -#line 645 "parser.ypp" +#line 646 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3003 "parser.cpp" +#line 3008 "parser.cpp" break; case 166: // expr_function: expr_path "::" expr_identifier "(" expr_arguments ")" -#line 647 "parser.ypp" +#line 648 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3009 "parser.cpp" +#line 3014 "parser.cpp" break; case 167: // expr_function: "thread" expr_identifier "(" expr_arguments ")" -#line 649 "parser.ypp" +#line 650 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3015 "parser.cpp" +#line 3020 "parser.cpp" break; case 168: // expr_function: "thread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 651 "parser.ypp" +#line 652 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3021 "parser.cpp" +#line 3026 "parser.cpp" break; case 169: // expr_function: "childthread" expr_identifier "(" expr_arguments ")" -#line 653 "parser.ypp" +#line 654 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3027 "parser.cpp" +#line 3032 "parser.cpp" break; case 170: // expr_function: "childthread" expr_path "::" expr_identifier "(" expr_arguments ")" -#line 655 "parser.ypp" +#line 656 "parser.ypp" { yylhs.value.as < ast::call > ().as_function = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr_path::ptr > ()), std::move(yystack_[3].value.as < ast::expr_identifier::ptr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3033 "parser.cpp" +#line 3038 "parser.cpp" break; case 171: // expr_pointer: "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 660 "parser.ypp" +#line 661 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::normal); } -#line 3039 "parser.cpp" +#line 3044 "parser.cpp" break; case 172: // expr_pointer: "thread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 662 "parser.ypp" +#line 663 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::thread); } -#line 3045 "parser.cpp" +#line 3050 "parser.cpp" break; case 173: // expr_pointer: "childthread" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 664 "parser.ypp" +#line 665 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::childthread); } -#line 3051 "parser.cpp" +#line 3056 "parser.cpp" break; case 174: // expr_pointer: "call" "[" "[" expr "]" "]" "(" expr_arguments ")" -#line 666 "parser.ypp" +#line 667 "parser.ypp" { yylhs.value.as < ast::call > ().as_pointer = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ()), ast::call::mode::builtin); } -#line 3057 "parser.cpp" +#line 3062 "parser.cpp" break; case 175: // expr_add_array: "[" expr_arguments_no_empty "]" -#line 671 "parser.ypp" +#line 672 "parser.ypp" { yylhs.value.as < ast::expr_add_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr_arguments::ptr > ())); } -#line 3063 "parser.cpp" +#line 3068 "parser.cpp" break; case 176: // expr_parameters: expr_parameters "," expr_identifier -#line 676 "parser.ypp" +#line 677 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::move(yystack_[2].value.as < ast::expr_parameters::ptr > ()); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3069 "parser.cpp" +#line 3074 "parser.cpp" break; case 177: // expr_parameters: expr_identifier -#line 678 "parser.ypp" +#line 679 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_parameters::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3075 "parser.cpp" +#line 3080 "parser.cpp" break; case 178: // expr_parameters: %empty -#line 680 "parser.ypp" +#line 681 "parser.ypp" { yylhs.value.as < ast::expr_parameters::ptr > () = std::make_unique(yylhs.location); } -#line 3081 "parser.cpp" +#line 3086 "parser.cpp" break; case 179: // expr_arguments: expr_arguments_no_empty -#line 685 "parser.ypp" +#line 686 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[0].value.as < ast::expr_arguments::ptr > ()); } -#line 3087 "parser.cpp" +#line 3092 "parser.cpp" break; case 180: // expr_arguments: %empty -#line 687 "parser.ypp" +#line 688 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); } -#line 3093 "parser.cpp" +#line 3098 "parser.cpp" break; case 181: // expr_arguments_no_empty: expr_arguments "," expr -#line 692 "parser.ypp" +#line 693 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::move(yystack_[2].value.as < ast::expr_arguments::ptr > ()); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3099 "parser.cpp" +#line 3104 "parser.cpp" break; case 182: // expr_arguments_no_empty: expr -#line 694 "parser.ypp" +#line 695 "parser.ypp" { yylhs.value.as < ast::expr_arguments::ptr > () = std::make_unique(yylhs.location); yylhs.value.as < ast::expr_arguments::ptr > ()->list.push_back(std::move(yystack_[0].value.as < ast::expr > ())); } -#line 3105 "parser.cpp" +#line 3110 "parser.cpp" break; case 183: // expr_isdefined: "isdefined" "(" expr ")" -#line 699 "parser.ypp" +#line 700 "parser.ypp" { yylhs.value.as < ast::expr_isdefined::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3111 "parser.cpp" +#line 3116 "parser.cpp" break; case 184: // expr_istrue: "istrue" "(" expr ")" -#line 704 "parser.ypp" +#line 705 "parser.ypp" { yylhs.value.as < ast::expr_istrue::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3117 "parser.cpp" +#line 3122 "parser.cpp" break; case 185: // expr_reference: "::" expr_identifier -#line 709 "parser.ypp" +#line 710 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::make_unique(yylhs.location), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3123 "parser.cpp" +#line 3128 "parser.cpp" break; case 186: // expr_reference: expr_path "::" expr_identifier -#line 711 "parser.ypp" +#line 712 "parser.ypp" { yylhs.value.as < ast::expr_reference::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr_path::ptr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3129 "parser.cpp" +#line 3134 "parser.cpp" break; case 187: // expr_array: expr_object "[" expr "]" -#line 716 "parser.ypp" +#line 717 "parser.ypp" { yylhs.value.as < ast::expr_array::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3135 "parser.cpp" +#line 3140 "parser.cpp" break; case 188: // expr_field: expr_object "." expr_identifier -#line 721 "parser.ypp" +#line 722 "parser.ypp" { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[2].value.as < ast::expr > ()), std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ())); } -#line 3141 "parser.cpp" +#line 3146 "parser.cpp" break; - case 189: // expr_size: expr_object ".size" -#line 726 "parser.ypp" + case 189: // expr_field: expr_object "field" +#line 724 "parser.ypp" + { yylhs.value.as < ast::expr_field::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ()), std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ())); } +#line 3152 "parser.cpp" + break; + + case 190: // expr_size: expr_object ".size" +#line 729 "parser.ypp" { yylhs.value.as < ast::expr_size::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3147 "parser.cpp" +#line 3158 "parser.cpp" break; - case 190: // expr_paren: "(" expr ")" -#line 731 "parser.ypp" + case 191: // expr_paren: "(" expr ")" +#line 734 "parser.ypp" { yylhs.value.as < ast::expr_paren::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3153 "parser.cpp" +#line 3164 "parser.cpp" break; - case 191: // expr_object: expr_call -#line 735 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } -#line 3159 "parser.cpp" - break; - - case 192: // expr_object: expr_method -#line 736 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } -#line 3165 "parser.cpp" - break; - - case 193: // expr_object: expr_array -#line 737 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } -#line 3171 "parser.cpp" - break; - - case 194: // expr_object: expr_field + case 192: // expr_object: expr_call #line 738 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } -#line 3177 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_call::ptr > ()); } +#line 3170 "parser.cpp" break; - case 195: // expr_object: expr_game + case 193: // expr_object: expr_method #line 739 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } -#line 3183 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_method::ptr > ()); } +#line 3176 "parser.cpp" break; - case 196: // expr_object: expr_self + case 194: // expr_object: expr_array #line 740 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } -#line 3189 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_array::ptr > ()); } +#line 3182 "parser.cpp" break; - case 197: // expr_object: expr_anim + case 195: // expr_object: expr_field #line 741 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } -#line 3195 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_field::ptr > ()); } +#line 3188 "parser.cpp" break; - case 198: // expr_object: expr_level + case 196: // expr_object: expr_game #line 742 "parser.ypp" - { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } -#line 3201 "parser.cpp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_game::ptr > ()); } +#line 3194 "parser.cpp" break; - case 199: // expr_object: expr_identifier + case 197: // expr_object: expr_self #line 743 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_self::ptr > ()); } +#line 3200 "parser.cpp" + break; + + case 198: // expr_object: expr_anim +#line 744 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_anim::ptr > ()); } +#line 3206 "parser.cpp" + break; + + case 199: // expr_object: expr_level +#line 745 "parser.ypp" + { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_level::ptr > ()); } +#line 3212 "parser.cpp" + break; + + case 200: // expr_object: expr_identifier +#line 746 "parser.ypp" { yylhs.value.as < ast::expr > ().as_node = std::move(yystack_[0].value.as < ast::expr_identifier::ptr > ()); } -#line 3207 "parser.cpp" +#line 3218 "parser.cpp" break; - case 200: // expr_thisthread: "thisthread" -#line 748 "parser.ypp" + case 201: // expr_thisthread: "thisthread" +#line 751 "parser.ypp" { yylhs.value.as < ast::expr_thisthread::ptr > () = std::make_unique(yylhs.location); } -#line 3213 "parser.cpp" +#line 3224 "parser.cpp" break; - case 201: // expr_empty_array: "[" "]" -#line 753 "parser.ypp" + case 202: // expr_empty_array: "[" "]" +#line 756 "parser.ypp" { yylhs.value.as < ast::expr_empty_array::ptr > () = std::make_unique(yylhs.location); } -#line 3219 "parser.cpp" +#line 3230 "parser.cpp" break; - case 202: // expr_undefined: "undefined" -#line 758 "parser.ypp" + case 203: // expr_undefined: "undefined" +#line 761 "parser.ypp" { yylhs.value.as < ast::expr_undefined::ptr > () = std::make_unique(yylhs.location); } -#line 3225 "parser.cpp" +#line 3236 "parser.cpp" break; - case 203: // expr_game: "game" -#line 763 "parser.ypp" + case 204: // expr_game: "game" +#line 766 "parser.ypp" { yylhs.value.as < ast::expr_game::ptr > () = std::make_unique(yylhs.location); } -#line 3231 "parser.cpp" +#line 3242 "parser.cpp" break; - case 204: // expr_self: "self" -#line 768 "parser.ypp" + case 205: // expr_self: "self" +#line 771 "parser.ypp" { yylhs.value.as < ast::expr_self::ptr > () = std::make_unique(yylhs.location); } -#line 3237 "parser.cpp" +#line 3248 "parser.cpp" break; - case 205: // expr_anim: "anim" -#line 773 "parser.ypp" + case 206: // expr_anim: "anim" +#line 776 "parser.ypp" { yylhs.value.as < ast::expr_anim::ptr > () = std::make_unique(yylhs.location); } -#line 3243 "parser.cpp" +#line 3254 "parser.cpp" break; - case 206: // expr_level: "level" -#line 778 "parser.ypp" + case 207: // expr_level: "level" +#line 781 "parser.ypp" { yylhs.value.as < ast::expr_level::ptr > () = std::make_unique(yylhs.location); } -#line 3249 "parser.cpp" +#line 3260 "parser.cpp" break; - case 207: // expr_animation: "%" "identifier" -#line 783 "parser.ypp" + case 208: // expr_animation: "%" "identifier" +#line 786 "parser.ypp" { yylhs.value.as < ast::expr_animation::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3255 "parser.cpp" +#line 3266 "parser.cpp" break; - case 208: // expr_animtree: "#animtree" -#line 788 "parser.ypp" + case 209: // expr_animtree: "#animtree" +#line 791 "parser.ypp" { yylhs.value.as < ast::expr_animtree::ptr > () = std::make_unique(yylhs.location); } -#line 3261 "parser.cpp" +#line 3272 "parser.cpp" break; - case 209: // expr_identifier: "identifier" -#line 793 "parser.ypp" + case 210: // expr_identifier: "identifier" +#line 796 "parser.ypp" { yylhs.value.as < ast::expr_identifier::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3267 "parser.cpp" +#line 3278 "parser.cpp" break; - case 210: // expr_path: "path" -#line 798 "parser.ypp" + case 211: // expr_path: "path" +#line 801 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3273 "parser.cpp" +#line 3284 "parser.cpp" break; - case 211: // expr_path: expr_identifier -#line 800 "parser.ypp" + case 212: // expr_path: expr_identifier +#line 803 "parser.ypp" { yylhs.value.as < ast::expr_path::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < ast::expr_identifier::ptr > ()->value); } -#line 3279 "parser.cpp" +#line 3290 "parser.cpp" break; - case 212: // expr_istring: "localized string" -#line 805 "parser.ypp" + case 213: // expr_istring: "localized string" +#line 808 "parser.ypp" { yylhs.value.as < ast::expr_istring::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3285 "parser.cpp" +#line 3296 "parser.cpp" break; - case 213: // expr_string: "string literal" -#line 810 "parser.ypp" + case 214: // expr_string: "string literal" +#line 813 "parser.ypp" { yylhs.value.as < ast::expr_string::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3291 "parser.cpp" +#line 3302 "parser.cpp" break; - case 214: // expr_color: "color" -#line 815 "parser.ypp" + case 215: // expr_color: "color" +#line 818 "parser.ypp" { yylhs.value.as < ast::expr_color::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3297 "parser.cpp" +#line 3308 "parser.cpp" break; - case 215: // expr_vector: "(" expr "," expr "," expr ")" -#line 820 "parser.ypp" + case 216: // expr_vector: "(" expr "," expr "," expr ")" +#line 823 "parser.ypp" { yylhs.value.as < ast::expr_vector::ptr > () = std::make_unique(yylhs.location, std::move(yystack_[5].value.as < ast::expr > ()), std::move(yystack_[3].value.as < ast::expr > ()), std::move(yystack_[1].value.as < ast::expr > ())); } -#line 3303 "parser.cpp" +#line 3314 "parser.cpp" break; - case 216: // expr_float: "-" "float" -#line 825 "parser.ypp" + case 217: // expr_float: "-" "float" +#line 828 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3309 "parser.cpp" +#line 3320 "parser.cpp" break; - case 217: // expr_float: "float" -#line 827 "parser.ypp" + case 218: // expr_float: "float" +#line 830 "parser.ypp" { yylhs.value.as < ast::expr_float::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3315 "parser.cpp" +#line 3326 "parser.cpp" break; - case 218: // expr_integer: "-" "integer" -#line 832 "parser.ypp" + case 219: // expr_integer: "-" "integer" +#line 835 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, "-" + yystack_[0].value.as < std::string > ()); } -#line 3321 "parser.cpp" +#line 3332 "parser.cpp" break; - case 219: // expr_integer: "integer" -#line 834 "parser.ypp" + case 220: // expr_integer: "integer" +#line 837 "parser.ypp" { yylhs.value.as < ast::expr_integer::ptr > () = std::make_unique(yylhs.location, yystack_[0].value.as < std::string > ()); } -#line 3327 "parser.cpp" +#line 3338 "parser.cpp" break; - case 220: // expr_false: "false" -#line 839 "parser.ypp" + case 221: // expr_false: "false" +#line 842 "parser.ypp" { yylhs.value.as < ast::expr_false::ptr > () = std::make_unique(yylhs.location); } -#line 3333 "parser.cpp" +#line 3344 "parser.cpp" break; - case 221: // expr_true: "true" -#line 844 "parser.ypp" + case 222: // expr_true: "true" +#line 847 "parser.ypp" { yylhs.value.as < ast::expr_true::ptr > () = std::make_unique(yylhs.location); } -#line 3339 "parser.cpp" +#line 3350 "parser.cpp" break; -#line 3343 "parser.cpp" +#line 3354 "parser.cpp" default: break; @@ -3533,7 +3544,7 @@ namespace xsk { namespace gsc { namespace s4 { "isdefined", "istrue", "(", ")", "{", "}", "[", "]", ",", ".", "::", ":", ";", "?", "++", "--", "<<", ">>", "||", "&&", "==", "!=", "<=", ">=", "<", ">", "!", "~", "=", "+=", "-=", "*=", "/=", "%=", "|=", "&=", "^=", - ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "path", + ">>=", "<<=", "|", "&", "^", "+", "-", "*", "/", "%", "field", "path", "identifier", "string literal", "localized string", "color", "float", "integer", "ADD_ARRAY", "THEN", "TERN", "NEG", "ANIMREF", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "$accept", "root", "program", "inline", @@ -3820,133 +3831,133 @@ namespace xsk { namespace gsc { namespace s4 { } - const short parser::yypact_ninf_ = -276; + const short parser::yypact_ninf_ = -277; - const short parser::yytable_ninf_ = -212; + const short parser::yytable_ninf_ = -213; const short parser::yypact_[] = { - 23, -276, -276, -40, -40, -30, -276, 54, 23, -276, - -276, -276, -276, -276, -276, -8, -276, -276, -1, 16, - -57, -276, -276, -276, -276, -17, 1128, -276, -276, -276, - 44, -15, -276, -276, -35, -33, -276, 43, -276, -276, - -276, -276, -276, -276, -276, 48, 57, 1128, 996, -17, - 1128, 1128, -31, 25, -276, -276, -276, -276, 2050, -276, - -276, -276, -276, -276, 305, 699, -276, -276, -276, -276, - -276, -276, 722, 1019, -276, -276, 1029, -276, -276, -276, - 1092, 1154, 1224, 1271, -276, -276, 588, 64, -276, -276, - -276, -276, -276, -276, -276, -276, 69, 78, -17, 87, - 82, 91, 93, 101, 95, 103, 1128, 1128, 1266, 996, - -276, 2133, 99, 128, -276, -276, -276, -276, -276, -276, - -276, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - -276, 1194, -17, -276, -276, 119, 121, 1128, -17, -276, - 81, -276, -276, 1128, 1128, -17, 1128, 1128, -17, 1128, - 1434, 1468, -276, 1128, 1780, 1128, -276, 2015, 164, 164, - 2164, 2174, 2246, 2246, -42, -42, -42, -42, 2205, 717, - 2215, 45, 45, -276, -276, -276, 1820, -276, -17, 27, - -276, 135, 823, 1128, 127, -3, 141, 968, 144, 147, - 149, 153, -20, 154, 146, 148, 1062, 152, 168, 169, - -276, 160, 503, 503, -276, -276, -276, 869, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, 165, 166, 170, 174, 175, -276, -276, 635, - -276, -276, -276, -276, -23, 1860, 36, 178, 1900, 38, - 179, 1940, -276, -276, 1979, 181, 2133, 1128, -276, 135, - -276, 1128, -276, 922, 2085, -276, 189, -276, 1128, 197, - 1128, 28, -17, 1128, 140, 184, 185, -276, -276, -276, - -276, 2120, -276, 1128, 1128, 1128, -276, -276, -11, -11, - -276, -276, -276, -276, -276, -276, -276, 196, 200, 201, - 202, -276, -276, 1128, 1128, 1128, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 192, -276, 1128, 205, -276, 1128, - 206, 1128, 214, 2133, 80, -276, -276, 207, 1502, 216, - 1536, 208, -276, -276, -276, 1220, -2, 1570, -276, -276, - -276, 89, 110, 1780, 1128, 1128, 1128, 1128, 2133, 2133, - 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 219, - 112, 220, 114, 222, 1604, 1128, -276, -276, 968, 1128, - 968, 1128, 1128, -17, 78, 221, 227, 1638, 1312, 1356, - 1400, 1128, -276, 1128, -276, 1128, -276, 116, 255, 1672, - -276, 2133, 229, 1706, 248, -276, -276, -276, 230, 232, - 1128, 234, 1128, 237, 1128, 122, 124, 130, -276, 968, - 238, 28, 968, 1128, -276, -276, 231, -276, 250, -276, - 261, -276, -276, -276, -276, -276, 262, -276, 1740, 239, - 246, 254, 968, 968, -276, -276, -276, -276, -276 + 40, -277, -277, -40, -40, -22, -277, 30, 40, -277, + -277, -277, -277, -277, -277, -39, -277, -277, -24, -20, + -52, -277, -277, -277, -277, -54, 1143, -277, -277, -277, + 3, -30, -277, -277, -38, -35, -277, 60, -277, -277, + -277, -277, -277, -277, -277, 68, 82, 1143, 1009, -54, + 1143, 1143, 63, -13, -277, -277, -277, -277, 2139, -277, + -277, -277, -277, -277, 570, 712, -277, -277, -277, -277, + -277, -277, 1032, 1103, -277, -277, 1166, -277, -277, -277, + 1288, 1300, 1310, 1319, -277, -277, 457, 17, -277, -277, + -277, -277, -277, -277, -277, -277, 73, 89, -54, 91, + 97, 96, 105, 112, 108, 114, 1143, 1143, 1357, 1009, + -277, 2222, 113, 115, -277, -277, -277, -277, -277, -277, + -277, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, + -277, 1210, -54, -277, -277, -277, 121, 117, 1143, -54, + -277, 76, -277, -277, 1143, 1143, -54, 1143, 1143, -54, + 1143, 1523, 1557, -277, 1143, 1869, 1143, -277, 2104, 88, + 88, 2253, 2263, 2335, 2335, -23, -23, -23, -23, 2294, + 720, 2304, -29, -29, -277, -277, -277, 1909, -277, -54, + -21, -277, 135, 809, 1143, 127, -27, 138, 981, 141, + 144, 146, 148, -71, 154, 140, 145, 1076, 159, 156, + 157, -277, 171, 228, 228, -277, -277, -277, 855, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, 166, 167, 172, 173, 175, -277, -277, + 657, -277, -277, -277, -277, -26, 1949, 4, 190, 1989, + 21, 195, 2029, -277, -277, 2068, 191, 2222, 1143, -277, + 135, -277, 1143, -277, 935, 2174, -277, 199, -277, 1143, + 224, 1143, 80, -54, 1143, 149, 194, 198, -277, -277, + -277, -277, 2209, -277, 1143, 1143, 1143, -277, -277, 147, + 147, -277, -277, -277, -277, -277, -277, -277, 208, 209, + 211, 212, -277, -277, 1143, 1143, 1143, 1143, 1143, 1143, + 1143, 1143, 1143, 1143, 1143, 213, -277, 1143, 214, -277, + 1143, 215, 1143, 216, 2222, 22, -277, -277, 203, 1591, + 226, 1625, 217, -277, -277, -277, 1237, -4, 1659, -277, + -277, -277, 23, 25, 1869, 1143, 1143, 1143, 1143, 2222, + 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, + 230, 31, 231, 34, 233, 1693, 1143, -277, -277, 981, + 1143, 981, 1143, 1143, -54, 89, 229, 236, 1727, 1401, + 1445, 1489, 1143, -277, 1143, -277, 1143, -277, 37, 267, + 1761, -277, 2222, 239, 1795, 265, -277, -277, -277, 240, + 241, 1143, 242, 1143, 246, 1143, 41, 84, 93, -277, + 981, 247, 80, 981, 1143, -277, -277, 257, -277, 262, + -277, 264, -277, -277, -277, -277, -277, 269, -277, 1829, + 256, 258, 261, 981, 981, -277, -277, -277, -277, -277 }; const unsigned char parser::yydefact_[] = { - 3, 12, 13, 0, 0, 0, 209, 0, 2, 7, - 8, 9, 14, 15, 16, 0, 210, 211, 0, 0, - 0, 1, 4, 5, 6, 178, 0, 10, 11, 213, - 0, 0, 177, 208, 0, 0, 200, 0, 221, 220, - 202, 203, 204, 205, 206, 0, 0, 0, 180, 0, - 0, 0, 0, 0, 212, 214, 217, 219, 0, 90, + 3, 12, 13, 0, 0, 0, 210, 0, 2, 7, + 8, 9, 14, 15, 16, 0, 211, 212, 0, 0, + 0, 1, 4, 5, 6, 178, 0, 10, 11, 214, + 0, 0, 177, 209, 0, 0, 201, 0, 222, 221, + 203, 204, 205, 206, 207, 0, 0, 0, 180, 0, + 0, 0, 0, 0, 213, 215, 218, 220, 0, 90, 91, 92, 129, 130, 131, 132, 161, 162, 133, 134, 135, 136, 137, 138, 139, 140, 0, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 0, 151, 152, 153, 154, 155, 156, 157, 158, 0, 0, 0, 0, - 211, 0, 0, 211, 0, 0, 0, 0, 0, 180, - 201, 182, 0, 179, 185, 160, 159, 216, 218, 207, + 212, 0, 0, 212, 0, 0, 0, 0, 0, 180, + 202, 182, 0, 179, 185, 160, 159, 217, 219, 208, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 0, 0, 163, 164, 211, 0, 180, 0, 17, - 0, 19, 176, 0, 180, 0, 0, 180, 0, 0, - 0, 0, 190, 0, 182, 0, 175, 0, 122, 123, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 124, 125, 126, 127, 128, 0, 188, 0, 0, - 179, 186, 0, 0, 0, 0, 0, 0, 0, 0, + 190, 0, 0, 189, 163, 164, 212, 0, 180, 0, + 17, 0, 19, 176, 0, 180, 0, 0, 180, 0, + 0, 0, 0, 191, 0, 182, 0, 175, 0, 122, + 123, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 124, 125, 126, 127, 128, 0, 188, 0, + 0, 179, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 51, 20, 21, 0, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 0, 0, 0, 191, 192, 193, 194, 0, - 195, 196, 197, 198, 199, 0, 0, 0, 0, 0, - 0, 0, 183, 184, 0, 0, 181, 0, 187, 0, - 165, 180, 47, 0, 0, 69, 0, 70, 0, 0, - 0, 55, 0, 0, 0, 0, 0, 82, 83, 84, - 86, 0, 87, 180, 180, 0, 191, 192, 106, 108, - 48, 50, 58, 59, 60, 56, 57, 0, 0, 0, - 0, 107, 109, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 167, 180, 0, 169, 180, - 0, 0, 0, 110, 0, 46, 64, 0, 0, 0, - 0, 0, 52, 53, 54, 0, 0, 0, 81, 80, - 85, 0, 0, 0, 0, 0, 0, 0, 95, 101, - 102, 103, 104, 105, 96, 97, 98, 100, 99, 0, - 0, 0, 0, 0, 0, 180, 166, 71, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 180, 168, 180, 170, 180, 215, 0, 72, 0, - 74, 93, 0, 0, 0, 79, 88, 89, 0, 0, - 180, 0, 180, 0, 180, 0, 0, 0, 171, 0, - 0, 55, 0, 0, 61, 63, 179, 66, 179, 68, - 179, 172, 173, 174, 73, 75, 0, 77, 0, 0, - 0, 0, 0, 0, 62, 65, 67, 76, 78 + 0, 49, 0, 0, 0, 51, 20, 21, 0, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 0, 0, 0, 192, 193, 194, 195, + 0, 196, 197, 198, 199, 200, 0, 0, 0, 0, + 0, 0, 0, 183, 184, 0, 0, 181, 0, 187, + 0, 165, 180, 47, 0, 0, 69, 0, 70, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 82, 83, + 84, 86, 0, 87, 180, 180, 0, 192, 193, 106, + 108, 48, 50, 58, 59, 60, 56, 57, 0, 0, + 0, 0, 107, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 167, 180, 0, 169, + 180, 0, 0, 0, 110, 0, 46, 64, 0, 0, + 0, 0, 0, 52, 53, 54, 0, 0, 0, 81, + 80, 85, 0, 0, 0, 0, 0, 0, 0, 95, + 101, 102, 103, 104, 105, 96, 97, 98, 100, 99, + 0, 0, 0, 0, 0, 0, 180, 166, 71, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 168, 180, 170, 180, 216, 0, 72, + 0, 74, 93, 0, 0, 0, 79, 88, 89, 0, + 0, 180, 0, 180, 0, 180, 0, 0, 0, 171, + 0, 0, 55, 0, 0, 61, 63, 179, 66, 179, + 68, 179, 172, 173, 174, 73, 75, 0, 77, 0, + 0, 0, 0, 0, 0, 62, 65, 67, 76, 78 }; const short parser::yypgoto_[] = { - -276, -276, -276, 303, 304, 306, -276, -276, -276, -184, - -276, -95, 142, -108, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, 194, -276, - -275, -269, -267, -276, -276, -276, -276, -276, -12, -6, - -71, -65, -276, -276, 13, -47, -276, -276, -276, 79, - 253, -276, -276, 279, -276, -276, -276, 345, 373, 380, - 390, -276, -276, 0, 6, -276, -13, -276, -276, -276, - 134, -276, -276 + -277, -277, -277, 281, 310, 311, -277, -277, -277, 207, + -277, -95, 150, -81, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 201, -277, + -276, -269, -268, -277, -277, -277, -277, -277, -66, -7, + -65, -55, -277, -277, 306, -47, -277, -277, -277, 12, + 19, -277, -277, 196, -277, -277, -277, 253, 333, 347, + 378, -277, -277, 0, 6, -277, -15, -277, -277, -277, + 142, -277, -277 }; const short parser::yydefgoto_[] = { - 0, 7, 8, 9, 10, 11, 12, 13, 14, 214, - 215, 216, 217, 341, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 111, 402, - 242, 243, 244, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 31, 112, 190, 69, 70, 71, 72, + 0, 7, 8, 9, 10, 11, 12, 13, 14, 215, + 216, 217, 218, 342, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 111, 403, + 243, 244, 245, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 31, 112, 191, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 @@ -3955,557 +3966,575 @@ namespace xsk { namespace gsc { namespace s4 { const short parser::yytable_[] = { - 15, 113, 151, 17, 17, 143, 342, 30, 15, 18, - 19, 144, 343, 279, 344, 99, 20, 102, 122, 123, - 382, 34, 35, 147, 37, 32, 1, 2, 3, 4, - 5, -211, 97, 301, 100, 103, 29, 98, 25, 141, - 101, 104, 142, 276, 135, 136, 137, 138, 139, 114, - 383, 16, 6, 277, 21, 27, 16, 6, 16, 6, - 34, 35, 113, 37, 26, 117, 118, 284, 41, 42, - 43, 44, 28, 29, 270, 6, 145, 57, 211, 165, - 16, 6, 146, 325, 192, 328, 212, 213, 165, 301, - 165, 96, 193, 105, 106, 194, 195, 196, 152, 197, - 198, 199, 200, 107, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 34, 35, 6, 37, 119, 148, 16, - 6, 41, 42, 43, 44, 149, 150, 376, 154, 150, - 210, 211, 165, 137, 138, 139, 385, 153, 245, 212, - 213, 165, 187, 156, 246, 155, 342, 157, 191, 158, - 254, 165, 343, 159, 344, 257, 146, 386, 260, 392, - 189, 394, 165, 418, 165, 147, 165, 256, 165, 431, - 259, 432, 16, 6, 165, 188, 165, 433, 143, 166, - 245, 271, 165, 275, 144, 245, 246, 278, 269, 285, - 280, 246, 254, 281, 398, 282, 400, 254, 146, 283, - 296, 296, 288, 146, 289, 245, 297, 297, 292, 287, - 295, 246, 254, 254, 293, 294, 339, 254, 146, 146, - 58, 302, 303, 146, 326, 329, 304, 143, 143, 247, - 305, 306, 332, 144, 144, 434, 337, 118, 437, 348, - 349, 108, 354, 369, 115, 116, 355, 356, 357, 145, - 135, 136, 137, 138, 139, 146, 371, 373, 447, 448, - 375, 245, 379, 377, 381, 391, 393, 246, 395, 296, - 423, 247, 419, 254, 143, 297, 247, 406, 439, 146, - 144, 254, 346, 407, 334, 421, 424, 146, 425, 405, - 427, 247, 247, 429, 435, 444, 247, 440, 145, 145, - 160, 161, 445, 164, 146, 146, 351, 352, 441, 442, - 446, 22, 23, 436, 24, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 273, 186, 286, -191, -191, 370, - -191, 0, 372, 0, -191, 145, 0, 255, 0, 0, - 258, 146, 247, 261, 0, -191, 0, 264, -191, 266, - 247, 0, 0, 426, 0, 428, 245, 430, 245, 0, - 0, 0, 246, 0, 246, 0, 0, 0, 254, 0, - 254, 0, 0, 404, 146, 0, 146, 274, 397, 0, - 0, 0, 0, 0, 0, 0, -191, -191, 0, 0, - 291, 0, 0, 248, 415, 0, 416, 245, 417, 296, - 245, 0, 0, 246, 0, 297, 246, 0, 0, 254, - 0, 254, 254, 0, 0, 146, 0, 146, 146, 249, - 245, 245, 0, 0, 0, 0, 246, 246, 0, 0, - 0, 0, 254, 254, 0, 248, 0, 0, 146, 146, - 248, 0, 0, 0, 0, 0, 0, 247, 0, 247, - 0, 333, 0, 0, 0, 248, 248, 0, 0, 0, - 248, 249, 338, 0, 340, 0, 249, 347, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, - 0, 298, 299, 0, 0, 250, 249, 0, 247, 0, - 247, 247, 0, 0, 0, 0, 0, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 0, 0, - 0, 247, 247, 251, 0, 374, 248, 0, 0, 0, - 252, 0, 0, 0, 248, 34, 35, 250, 37, 0, - 253, 0, 250, 41, 42, 43, 44, 0, 387, 388, - 389, 390, 249, 211, 0, 0, 0, 250, 250, 0, - 345, 0, 250, 0, 0, 251, 0, 0, 0, 0, - 251, 0, 252, 399, 0, 401, 403, 252, 0, 0, - 0, 0, 253, 0, 0, 251, 251, 253, 0, 0, - 251, 0, 252, 252, 16, 6, 0, 252, 0, 0, - 0, 0, 253, 253, 0, 0, 0, 253, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 438, 250, 0, - -199, -199, 0, -199, 0, 0, 250, -199, 0, 0, - 0, 248, 0, 248, 147, 0, 0, 0, -199, 0, - 0, -199, -211, 0, 307, 308, 251, 309, 310, 0, - 0, 0, 0, 252, 251, 0, 0, 249, 0, 249, - 0, 252, 0, 253, 0, 0, 0, 34, 35, 0, - 37, 253, 248, 0, 248, 248, 0, 0, 0, -199, - -199, 0, 0, 0, 0, 141, 0, 0, 142, 0, - 0, 0, 0, 311, 312, 248, 248, 0, 249, 0, - 345, 249, 0, 0, 0, 0, 0, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 0, 0, - 0, 249, 249, 250, 0, 250, 16, 6, 0, 0, - 0, -192, -192, 0, -192, 0, 0, 0, -192, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -192, - 0, 251, -192, 251, -193, -193, 0, -193, 252, 0, - 252, -193, 0, 0, 250, 0, 250, 250, 253, 0, - 253, 0, -193, 0, 0, -193, 0, 122, 123, 0, - 0, 126, 127, 128, 129, 130, 131, 250, 250, 0, - -192, -192, 251, 0, 251, 251, 0, 0, 0, 252, - 0, 252, 252, 135, 136, 137, 138, 139, 0, 253, - 0, 253, 253, -193, -193, 251, 251, 0, 0, 0, - 0, 0, 252, 252, 0, 0, 192, 272, 0, 0, - 0, 0, 253, 253, 193, 0, 0, 194, 195, 196, - 0, 197, 198, 199, 200, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 34, 35, 0, 37, 0, - 0, 0, 0, 41, 42, 43, 44, 0, 0, 0, - 0, 150, 192, 211, 0, 0, 0, 0, 0, 0, - 193, 212, 213, 194, 195, 196, 0, 197, 198, 199, - 200, 0, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 34, 35, 0, 37, 0, 0, 0, 0, 41, - 42, 43, 44, 0, 16, 6, 0, 150, 300, 211, - 0, 0, 0, 0, 0, 192, 335, 212, 213, 0, - 0, 0, 0, 193, 0, 0, 194, 195, 196, 0, - 197, 198, 199, 200, 0, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 34, 35, 0, 37, 0, 0, - 16, 6, 41, 42, 43, 44, 0, 0, 0, 0, - 150, 192, 211, 0, 0, 0, 0, 0, 0, 193, - 212, 213, 194, 195, 196, 0, 197, 198, 199, 200, - 0, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 34, 35, 0, 37, 33, 0, 0, 0, 41, 42, - 43, 44, 0, 16, 6, 0, 150, 0, 211, 0, - 0, 0, 0, 0, 0, 0, 212, 213, 34, 35, + 15, 113, 152, 17, 17, 30, 343, 25, 15, 18, + 19, 144, 99, 344, 345, 102, 285, 97, 383, 277, + 148, 145, 98, 29, 20, 32, 271, 57, -212, 278, + 21, 166, 27, 26, 100, 103, 28, 122, 123, 6, + 101, 104, 29, 1, 2, 3, 4, 5, 384, 114, + 96, 326, 16, 6, 16, 6, 166, 16, 6, 137, + 138, 139, 113, 135, 136, 137, 138, 139, 329, 377, + 386, 149, 387, 166, 166, 166, 146, 166, 393, 193, + 119, 395, 147, 166, 419, 246, 166, 194, 432, 166, + 195, 196, 197, 166, 198, 199, 200, 201, 153, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 34, 35, + 105, 37, 34, 35, 106, 37, 41, 42, 43, 44, + 41, 42, 43, 44, 151, 211, 212, 246, 107, 150, + 212, 433, 246, 6, 213, 214, 166, 151, 213, 214, + 434, 154, 188, 155, 247, 166, 343, 297, 297, 192, + 156, 255, 246, 344, 345, 157, 258, 147, 158, 261, + 117, 118, 159, 248, 160, 166, 167, 148, 16, 6, + 249, 189, 16, 6, 135, 136, 137, 138, 139, 34, + 35, 272, 37, 276, 279, 144, 247, 281, 286, 270, + 282, 247, 283, 255, 284, 145, 289, 141, 255, 147, + 142, 290, 294, 295, 147, 248, 298, 298, 246, 288, + 248, 247, 249, 255, 255, 293, 297, 249, 255, 147, + 147, 296, 303, 304, 147, 248, 248, 58, 305, 306, + 248, 307, 249, 249, 144, 144, 327, 249, 143, 16, + 6, 330, 333, 340, 145, 145, 338, 118, 108, 349, + 146, 115, 116, 350, 355, 356, 147, 357, 358, 378, + 34, 35, 376, 37, 370, 372, 374, 247, 41, 42, + 43, 44, 380, 382, 255, 298, 392, 394, 212, 396, + 147, 144, 255, 347, 420, 407, 248, 424, 147, 22, + 406, 145, 408, 249, 248, 422, 425, 426, 428, 146, + 146, 249, 430, 436, 440, 147, 147, 161, 162, 441, + 165, 442, 445, 246, 446, 246, 443, 447, 23, 24, + 16, 6, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 437, 187, 274, 0, 287, 146, 250, 0, 0, + 0, 0, 147, 0, 246, 256, 297, 246, 259, 0, + 0, 262, 0, 0, 427, 265, 429, 267, 431, 0, + 0, 0, 247, 0, 247, 0, 0, 246, 246, 255, + 0, 255, 0, 0, 405, 147, 0, 147, 0, 250, + 0, 248, 0, 248, 250, 275, 0, 0, 249, 0, + 249, 0, 0, 0, 251, 280, 0, 0, 292, 299, + 300, 0, 0, 247, 250, 298, 247, 0, 0, 0, + 255, 0, 255, 255, 0, 302, 147, 0, 147, 147, + 0, 0, 248, 0, 248, 248, 247, 247, 0, 249, + 0, 249, 249, 255, 255, 0, 251, 0, 0, 147, + 147, 251, 0, 0, 190, 248, 248, 0, 0, 0, + 0, 257, 249, 249, 260, 0, 251, 251, 0, 334, + 250, 251, 0, 0, 0, 0, 0, 0, 346, 0, + 339, 302, 341, 0, 252, 348, 0, 0, 0, -200, + -200, 0, -200, 0, 0, 0, -200, 354, 253, 0, + 0, 0, 0, 148, 0, 0, 0, -200, 0, 0, + -200, -212, 0, 0, 0, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 252, 251, 0, 254, + 0, 252, 0, 375, 0, 251, 0, 0, 0, 0, + 253, 0, 0, 0, 0, 253, 252, 252, -200, -200, + -200, 252, 0, 0, 0, 0, 388, 389, 390, 391, + 253, 253, 0, 0, 0, 253, 0, 0, 0, 0, + 0, 254, 0, 0, 0, 250, 254, 250, 335, 0, + 0, 400, 0, 402, 404, 0, 399, 0, 401, 0, + 0, 254, 254, 0, 0, 0, 254, 0, 0, 0, + 352, 353, -192, -192, 0, -192, 0, 252, 0, -192, + 0, 0, 0, 0, 0, 252, 250, 0, 346, 250, + -192, 253, 0, -192, 0, 439, 0, 435, 0, 253, + 438, 0, 251, 371, 251, 0, 373, 0, 0, 250, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 448, 449, 254, 0, 0, 0, 0, 0, 0, 0, + 254, -192, -192, -192, 0, 0, 308, 309, 0, 310, + 311, 0, 0, 251, 0, 251, 251, 0, 0, 0, + 0, 0, 398, 0, 0, 0, 0, 0, 0, 34, + 35, 0, 37, 0, 0, 0, 251, 251, 416, 0, + 417, 0, 418, 0, 0, 0, 0, 141, 0, 0, + 142, 0, 252, 0, 252, 312, 313, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 253, 0, 253, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 0, 0, 0, 0, -193, -193, 0, -193, 143, 16, + 6, -193, 0, 252, 0, 252, 252, 254, 0, 254, + 0, 0, -193, 0, 0, -193, 0, 253, 0, 253, + 253, 0, 0, 0, 0, 0, 252, 252, 0, 0, + 122, 123, 0, 0, 126, 127, 128, 129, 130, 131, + 253, 253, 0, 0, 0, 0, 0, 0, 254, 0, + 254, 254, 0, -193, -193, -193, 135, 136, 137, 138, + 139, 0, 193, 273, 0, 0, 0, 0, 0, 0, + 194, 254, 254, 195, 196, 197, 0, 198, 199, 200, + 201, 0, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 34, 35, 0, 37, 0, 0, 0, 0, 41, + 42, 43, 44, 0, 0, 0, 0, 151, 193, 212, + 0, 0, 0, 0, 0, 0, 194, 213, 214, 195, + 196, 197, 0, 198, 199, 200, 201, 0, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 34, 35, 0, + 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, + 0, 16, 6, 151, 301, 212, 0, 0, 0, 0, + 0, 0, 0, 213, 214, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 193, 336, + 0, 0, 0, 0, 0, 0, 194, 16, 6, 195, + 196, 197, 0, 198, 199, 200, 201, 0, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 34, 35, 0, + 37, 0, 0, 0, 0, 41, 42, 43, 44, 0, + 0, 0, 0, 151, 193, 212, 0, 0, 0, 0, + 0, 0, 194, 213, 214, 195, 196, 197, 0, 198, + 199, 200, 201, 0, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 34, 35, 0, 37, 33, 0, 0, + 0, 41, 42, 43, 44, 0, 0, 16, 6, 151, + 0, 212, 0, 0, 0, 0, 0, 0, 0, 213, + 214, 34, 35, 36, 37, 38, 39, 40, 0, 41, + 42, 43, 44, 45, 46, 47, 0, 0, 0, 109, + 110, 0, 0, 49, -194, -194, 0, -194, 0, 0, + 0, -194, 0, 16, 6, 0, 0, 0, 0, 50, + 51, 0, -194, 0, 33, -194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 53, + 0, 16, 6, 29, 54, 55, 56, 57, 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, - 45, 46, 47, 0, 0, 0, 109, 110, 0, 0, - 49, -194, -194, 0, -194, 0, 0, 0, -194, 16, - 6, 34, 35, 0, 37, 0, 50, 51, 140, -194, - 33, 0, -194, 0, 0, 0, 0, 0, 0, 141, - 0, 0, 142, 52, 0, 0, 53, 16, 6, 29, - 54, 55, 56, 57, 34, 35, 36, 37, 38, 39, - 40, 0, 41, 42, 43, 44, 45, 46, 47, 0, - -194, -194, 48, 0, 0, 0, 49, 0, 290, 0, - 16, 6, 0, 0, -195, -195, 0, -195, 0, 0, - 0, -195, 50, 51, 0, 0, 33, 0, 0, 0, - 0, 0, -195, 0, 0, -195, 0, 0, 0, 52, - 0, 0, 53, 16, 6, 29, 54, 55, 56, 57, - 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, - 43, 44, 45, 46, 47, 0, 0, 0, 48, 0, - 0, 0, 49, -195, -195, 0, -196, -196, 0, -196, - 0, 0, 0, -196, 0, 0, 0, 0, 50, 51, - 0, 0, 33, 0, -196, 0, 0, -196, 0, 0, - 0, 0, 0, 0, 0, 52, 0, 0, 53, 16, - 6, 29, 54, 55, 56, 57, 34, 35, 36, 37, - 38, 39, 40, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 0, 0, 109, -196, -196, 0, 49, 0, - 0, 0, 34, 35, 0, 37, -197, -197, 0, -197, - 0, 0, 0, -197, 50, 51, 0, 0, 0, 0, - 141, 0, 0, 142, -197, 0, 0, -197, 311, 312, - 0, 52, 0, 0, 53, 16, 6, 29, 54, 55, - 56, 57, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, -198, -198, 0, -198, 0, 0, 0, - -198, 16, 6, 162, 0, -197, -197, 0, 163, 0, - 0, -198, 0, 121, -198, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 0, 0, 409, - 0, 0, -198, -198, 410, 0, 0, 0, 0, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 411, 0, 0, 0, 0, 412, 0, - 0, 0, 0, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 413, 0, 0, - 0, 0, 414, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 45, 46, 47, -194, -194, -194, 48, 0, 0, 0, + 49, 0, 291, 0, 0, -195, -195, 0, -195, 0, + 0, 0, -195, 0, 0, 0, 50, 51, 0, 0, + 0, 33, 0, -195, 0, 0, -195, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 53, 0, 16, 6, + 29, 54, 55, 56, 57, 34, 35, 36, 37, 38, + 39, 40, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 48, -195, -195, -195, 49, 34, 35, + 0, 37, 0, 0, 0, 140, 0, 0, 0, 0, + 0, 0, 0, 50, 51, 0, 141, 0, 33, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 263, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 378, - 0, 132, 133, 134, 135, 136, 137, 138, 139, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 380, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 384, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 52, 0, 0, 53, 0, 16, 6, 29, 54, 55, + 56, 57, 34, 35, 36, 37, 38, 39, 40, 0, + 41, 42, 43, 44, 45, 46, 47, 143, 16, 6, + 109, 0, 0, 0, 49, 0, 0, 0, 0, 34, + 35, 0, 37, 0, 0, 0, 0, 0, 0, 0, + 50, 51, 0, 0, 0, 0, 0, 141, 0, 0, + 142, 0, 0, 0, 0, 312, 313, 52, 0, 0, + 53, 0, 16, 6, 29, 54, 55, 56, 57, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + -196, -196, 0, -196, 0, 0, 0, -196, 143, 16, + 6, 0, -197, -197, 0, -197, 0, 0, -196, -197, + 0, -196, -198, -198, 0, -198, 0, 0, 0, -198, + -197, -199, -199, -197, -199, 0, 0, 0, -199, 0, + -198, 0, 0, -198, 0, 0, 0, 0, 0, -199, + 0, 0, -199, 0, 0, 0, 0, 0, 0, -196, + -196, -196, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -197, -197, -197, 0, 0, 0, 0, 0, 0, + 0, -198, -198, -198, 163, 0, 0, 0, 0, 164, + -199, -199, -199, 0, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 396, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 408, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 420, - 0, 132, 133, 134, 135, 136, 137, 138, 139, 121, - 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 422, 0, 132, 133, 134, 135, 136, - 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 443, 0, 132, - 133, 134, 135, 136, 137, 138, 139, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 410, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 412, 0, 0, 0, 0, 413, 0, 0, + 0, 0, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 414, 0, 0, 0, + 0, 415, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 265, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 263, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 264, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 379, 0, + 132, 133, 134, 135, 136, 137, 138, 139, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 381, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 385, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 268, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 324, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 327, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 330, 0, 0, 0, 0, 0, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 331, 0, 0, 0, 0, 121, 0, 0, 122, + 397, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 421, 0, + 132, 133, 134, 135, 136, 137, 138, 139, 121, 0, + 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 423, 0, 132, 133, 134, 135, 136, 137, + 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 444, 0, 132, 133, + 134, 135, 136, 137, 138, 139, 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, - 267, 0, 121, 0, 0, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 134, 135, 136, 137, 138, 139, 120, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 266, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, - 139, 336, 121, 0, 0, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 134, 135, 136, 137, 138, 139, 350, 121, 0, 0, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 121, 0, 0, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 0, 0, 0, 0, 0, 132, 133, 134, 135, - 136, 137, 138, 139, 122, 123, 0, 125, 126, 127, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 269, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 325, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 328, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 331, 0, 0, 0, 0, 0, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 332, 0, 0, 0, 0, 121, 0, 0, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 132, 133, 134, 135, 136, 137, 138, 139, 268, + 0, 121, 0, 0, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, + 135, 136, 137, 138, 139, 120, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 133, 134, 135, 136, 137, 138, 139, + 337, 121, 0, 0, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 133, 134, + 135, 136, 137, 138, 139, 351, 121, 0, 0, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 121, + 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 0, 0, 0, 0, 0, 132, 133, 134, 135, 136, + 137, 138, 139, 122, 123, 0, 125, 126, 127, 128, + 129, 130, 131, 122, 123, 0, 0, 126, 127, 128, + 129, 130, 131, 0, 0, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 0, 0, 132, 133, 134, 135, + 136, 137, 138, 139, 122, 123, 0, 0, 126, 127, 128, 129, 130, 131, 122, 123, 0, 0, 126, 127, - 128, 129, 130, 131, 0, 0, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 0, 0, 132, 133, 134, - 135, 136, 137, 138, 139, 122, 123, 0, 0, 126, - 127, 128, 129, 130, 131, 122, 123, 0, 0, 126, - 127, 128, 129, 130, 131, 0, 0, 0, 0, 133, - 134, 135, 136, 137, 138, 139, 0, 0, 0, 133, - 0, 135, 136, 137, 138, 139, 122, 123, 0, 0, - 0, 0, 128, 129, 130, 131, 0, 0, 0, 0, + 128, 129, 130, 131, 0, 0, 0, 0, 133, 134, + 135, 136, 137, 138, 139, 0, 0, 0, 133, 0, + 135, 136, 137, 138, 139, 122, 123, 0, 0, 0, + 0, 128, 129, 130, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 136, 137, 138, 139 + 0, 135, 136, 137, 138, 139 }; const short parser::yycheck_[] = { - 0, 48, 97, 3, 4, 76, 281, 20, 8, 3, - 4, 76, 281, 197, 281, 50, 46, 50, 60, 61, - 22, 32, 33, 46, 35, 25, 3, 4, 5, 6, - 7, 54, 47, 217, 34, 35, 93, 52, 46, 50, - 34, 35, 53, 46, 86, 87, 88, 89, 90, 49, - 52, 91, 92, 56, 0, 56, 91, 92, 91, 92, - 32, 33, 109, 35, 72, 96, 97, 87, 40, 41, - 42, 43, 56, 93, 47, 92, 76, 97, 50, 52, - 91, 92, 76, 47, 3, 47, 58, 59, 52, 273, - 52, 47, 11, 50, 46, 14, 15, 16, 98, 18, - 19, 20, 21, 46, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 92, 35, 92, 54, 91, - 92, 40, 41, 42, 43, 56, 48, 47, 46, 48, - 49, 50, 52, 88, 89, 90, 47, 50, 150, 58, - 59, 52, 142, 50, 150, 54, 421, 46, 148, 54, - 150, 52, 421, 50, 421, 155, 150, 47, 158, 47, - 147, 47, 52, 47, 52, 46, 52, 154, 52, 47, - 157, 47, 91, 92, 52, 54, 52, 47, 249, 51, - 192, 46, 52, 56, 249, 197, 192, 46, 188, 202, - 46, 197, 192, 46, 378, 46, 380, 197, 192, 46, - 212, 213, 56, 197, 56, 217, 212, 213, 56, 55, - 50, 217, 212, 213, 46, 46, 19, 217, 212, 213, - 26, 56, 56, 217, 46, 46, 56, 298, 299, 150, - 56, 56, 51, 298, 299, 419, 47, 97, 422, 55, - 55, 47, 46, 51, 50, 51, 46, 46, 46, 249, - 86, 87, 88, 89, 90, 249, 51, 51, 442, 443, - 46, 273, 46, 56, 56, 46, 46, 273, 46, 281, - 22, 192, 17, 273, 345, 281, 197, 56, 47, 273, - 345, 281, 282, 56, 271, 56, 56, 281, 56, 384, - 56, 212, 213, 56, 56, 56, 217, 47, 298, 299, - 106, 107, 56, 109, 298, 299, 293, 294, 47, 47, - 56, 8, 8, 421, 8, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 192, 141, 202, 32, 33, 326, - 35, -1, 329, -1, 39, 345, -1, 153, -1, -1, - 156, 345, 273, 159, -1, 50, -1, 163, 53, 165, - 281, -1, -1, 410, -1, 412, 378, 414, 380, -1, - -1, -1, 378, -1, 380, -1, -1, -1, 378, -1, - 380, -1, -1, 383, 378, -1, 380, 193, 375, -1, - -1, -1, -1, -1, -1, -1, 91, 92, -1, -1, - 206, -1, -1, 150, 391, -1, 393, 419, 395, 421, - 422, -1, -1, 419, -1, 421, 422, -1, -1, 419, - -1, 421, 422, -1, -1, 419, -1, 421, 422, 150, - 442, 443, -1, -1, -1, -1, 442, 443, -1, -1, - -1, -1, 442, 443, -1, 192, -1, -1, 442, 443, - 197, -1, -1, -1, -1, -1, -1, 378, -1, 380, - -1, 267, -1, -1, -1, 212, 213, -1, -1, -1, - 217, 192, 278, -1, 280, -1, 197, 283, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 295, - -1, 212, 213, -1, -1, 150, 217, -1, 419, -1, - 421, 422, -1, -1, -1, -1, -1, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, -1, -1, - -1, 442, 443, 150, -1, 331, 273, -1, -1, -1, - 150, -1, -1, -1, 281, 32, 33, 192, 35, -1, - 150, -1, 197, 40, 41, 42, 43, -1, 354, 355, - 356, 357, 273, 50, -1, -1, -1, 212, 213, -1, - 281, -1, 217, -1, -1, 192, -1, -1, -1, -1, - 197, -1, 192, 379, -1, 381, 382, 197, -1, -1, - -1, -1, 192, -1, -1, 212, 213, 197, -1, -1, - 217, -1, 212, 213, 91, 92, -1, 217, -1, -1, - -1, -1, 212, 213, -1, -1, -1, 217, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 423, 273, -1, - 32, 33, -1, 35, -1, -1, 281, 39, -1, -1, - -1, 378, -1, 380, 46, -1, -1, -1, 50, -1, - -1, 53, 54, -1, 9, 10, 273, 12, 13, -1, - -1, -1, -1, 273, 281, -1, -1, 378, -1, 380, - -1, 281, -1, 273, -1, -1, -1, 32, 33, -1, - 35, 281, 419, -1, 421, 422, -1, -1, -1, 91, - 92, -1, -1, -1, -1, 50, -1, -1, 53, -1, - -1, -1, -1, 58, 59, 442, 443, -1, 419, -1, - 421, 422, -1, -1, -1, -1, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, -1, -1, - -1, 442, 443, 378, -1, 380, 91, 92, -1, -1, - -1, 32, 33, -1, 35, -1, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 50, - -1, 378, 53, 380, 32, 33, -1, 35, 378, -1, - 380, 39, -1, -1, 419, -1, 421, 422, 378, -1, - 380, -1, 50, -1, -1, 53, -1, 60, 61, -1, - -1, 64, 65, 66, 67, 68, 69, 442, 443, -1, - 91, 92, 419, -1, 421, 422, -1, -1, -1, 419, - -1, 421, 422, 86, 87, 88, 89, 90, -1, 419, - -1, 421, 422, 91, 92, 442, 443, -1, -1, -1, - -1, -1, 442, 443, -1, -1, 3, 4, -1, -1, - -1, -1, 442, 443, 11, -1, -1, 14, 15, 16, - -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, - -1, -1, -1, 40, 41, 42, 43, -1, -1, -1, - -1, 48, 3, 50, -1, -1, -1, -1, -1, -1, - 11, 58, 59, 14, 15, 16, -1, 18, 19, 20, + 0, 48, 97, 3, 4, 20, 282, 46, 8, 3, + 4, 76, 50, 282, 282, 50, 87, 47, 22, 46, + 46, 76, 52, 94, 46, 25, 47, 98, 54, 56, + 0, 52, 56, 72, 34, 35, 56, 60, 61, 93, + 34, 35, 94, 3, 4, 5, 6, 7, 52, 49, + 47, 47, 92, 93, 92, 93, 52, 92, 93, 88, + 89, 90, 109, 86, 87, 88, 89, 90, 47, 47, + 47, 54, 47, 52, 52, 52, 76, 52, 47, 3, + 93, 47, 76, 52, 47, 151, 52, 11, 47, 52, + 14, 15, 16, 52, 18, 19, 20, 21, 98, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 50, 35, 32, 33, 46, 35, 40, 41, 42, 43, + 40, 41, 42, 43, 48, 49, 50, 193, 46, 56, + 50, 47, 198, 93, 58, 59, 52, 48, 58, 59, + 47, 50, 142, 46, 151, 52, 422, 213, 214, 149, + 54, 151, 218, 422, 422, 50, 156, 151, 46, 159, + 97, 98, 54, 151, 50, 52, 51, 46, 92, 93, + 151, 54, 92, 93, 86, 87, 88, 89, 90, 32, + 33, 46, 35, 56, 46, 250, 193, 46, 203, 189, + 46, 198, 46, 193, 46, 250, 56, 50, 198, 193, + 53, 56, 46, 46, 198, 193, 213, 214, 274, 55, + 198, 218, 193, 213, 214, 56, 282, 198, 218, 213, + 214, 50, 56, 56, 218, 213, 214, 26, 56, 56, + 218, 56, 213, 214, 299, 300, 46, 218, 91, 92, + 93, 46, 51, 19, 299, 300, 47, 98, 47, 55, + 250, 50, 51, 55, 46, 46, 250, 46, 46, 56, + 32, 33, 46, 35, 51, 51, 51, 274, 40, 41, + 42, 43, 46, 56, 274, 282, 46, 46, 50, 46, + 274, 346, 282, 283, 17, 56, 274, 22, 282, 8, + 385, 346, 56, 274, 282, 56, 56, 56, 56, 299, + 300, 282, 56, 56, 47, 299, 300, 106, 107, 47, + 109, 47, 56, 379, 56, 381, 47, 56, 8, 8, + 92, 93, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 422, 141, 193, -1, 203, 346, 151, -1, -1, + -1, -1, 346, -1, 420, 154, 422, 423, 157, -1, + -1, 160, -1, -1, 411, 164, 413, 166, 415, -1, + -1, -1, 379, -1, 381, -1, -1, 443, 444, 379, + -1, 381, -1, -1, 384, 379, -1, 381, -1, 193, + -1, 379, -1, 381, 198, 194, -1, -1, 379, -1, + 381, -1, -1, -1, 151, 198, -1, -1, 207, 213, + 214, -1, -1, 420, 218, 422, 423, -1, -1, -1, + 420, -1, 422, 423, -1, 218, 420, -1, 422, 423, + -1, -1, 420, -1, 422, 423, 443, 444, -1, 420, + -1, 422, 423, 443, 444, -1, 193, -1, -1, 443, + 444, 198, -1, -1, 148, 443, 444, -1, -1, -1, + -1, 155, 443, 444, 158, -1, 213, 214, -1, 268, + 274, 218, -1, -1, -1, -1, -1, -1, 282, -1, + 279, 274, 281, -1, 151, 284, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, 39, 296, 151, -1, + -1, -1, -1, 46, -1, -1, -1, 50, -1, -1, + 53, 54, -1, -1, -1, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 193, 274, -1, 151, + -1, 198, -1, 332, -1, 282, -1, -1, -1, -1, + 193, -1, -1, -1, -1, 198, 213, 214, 91, 92, + 93, 218, -1, -1, -1, -1, 355, 356, 357, 358, + 213, 214, -1, -1, -1, 218, -1, -1, -1, -1, + -1, 193, -1, -1, -1, 379, 198, 381, 272, -1, + -1, 380, -1, 382, 383, -1, 379, -1, 381, -1, + -1, 213, 214, -1, -1, -1, 218, -1, -1, -1, + 294, 295, 32, 33, -1, 35, -1, 274, -1, 39, + -1, -1, -1, -1, -1, 282, 420, -1, 422, 423, + 50, 274, -1, 53, -1, 424, -1, 420, -1, 282, + 423, -1, 379, 327, 381, -1, 330, -1, -1, 443, + 444, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 443, 444, 274, -1, -1, -1, -1, -1, -1, -1, + 282, 91, 92, 93, -1, -1, 9, 10, -1, 12, + 13, -1, -1, 420, -1, 422, 423, -1, -1, -1, + -1, -1, 376, -1, -1, -1, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, 443, 444, 392, -1, + 394, -1, 396, -1, -1, -1, -1, 50, -1, -1, + 53, -1, 379, -1, 381, 58, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 379, -1, 381, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + -1, -1, -1, -1, 32, 33, -1, 35, 91, 92, + 93, 39, -1, 420, -1, 422, 423, 379, -1, 381, + -1, -1, 50, -1, -1, 53, -1, 420, -1, 422, + 423, -1, -1, -1, -1, -1, 443, 444, -1, -1, + 60, 61, -1, -1, 64, 65, 66, 67, 68, 69, + 443, 444, -1, -1, -1, -1, -1, -1, 420, -1, + 422, 423, -1, 91, 92, 93, 86, 87, 88, 89, + 90, -1, 3, 4, -1, -1, -1, -1, -1, -1, + 11, 443, 444, 14, 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, -1, -1, 40, - 41, 42, 43, -1, 91, 92, -1, 48, 49, 50, - -1, -1, -1, -1, -1, 3, 4, 58, 59, -1, - -1, -1, -1, 11, -1, -1, 14, 15, 16, -1, - 18, 19, 20, 21, -1, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, -1, 35, -1, -1, - 91, 92, 40, 41, 42, 43, -1, -1, -1, -1, - 48, 3, 50, -1, -1, -1, -1, -1, -1, 11, - 58, 59, 14, 15, 16, -1, 18, 19, 20, 21, - -1, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, -1, 35, 8, -1, -1, -1, 40, 41, - 42, 43, -1, 91, 92, -1, 48, -1, 50, -1, - -1, -1, -1, -1, -1, -1, 58, 59, 32, 33, + 41, 42, 43, -1, -1, -1, -1, 48, 3, 50, + -1, -1, -1, -1, -1, -1, 11, 58, 59, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, + -1, 92, 93, 48, 49, 50, -1, -1, -1, -1, + -1, -1, -1, 58, 59, -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, + -1, -1, -1, -1, -1, -1, 11, 92, 93, 14, + 15, 16, -1, 18, 19, 20, 21, -1, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, -1, + 35, -1, -1, -1, -1, 40, 41, 42, 43, -1, + -1, -1, -1, 48, 3, 50, -1, -1, -1, -1, + -1, -1, 11, 58, 59, 14, 15, 16, -1, 18, + 19, 20, 21, -1, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, -1, 35, 8, -1, -1, + -1, 40, 41, 42, 43, -1, -1, 92, 93, 48, + -1, 50, -1, -1, -1, -1, -1, -1, -1, 58, + 59, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, 45, 46, -1, -1, -1, 50, + 51, -1, -1, 54, 32, 33, -1, 35, -1, -1, + -1, 39, -1, 92, 93, -1, -1, -1, -1, 70, + 71, -1, 50, -1, 8, 53, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 87, -1, -1, 90, + -1, 92, 93, 94, 95, 96, 97, 98, 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, 42, 43, - 44, 45, 46, -1, -1, -1, 50, 51, -1, -1, - 54, 32, 33, -1, 35, -1, -1, -1, 39, 91, - 92, 32, 33, -1, 35, -1, 70, 71, 39, 50, - 8, -1, 53, -1, -1, -1, -1, -1, -1, 50, - -1, -1, 53, 87, -1, -1, 90, 91, 92, 93, - 94, 95, 96, 97, 32, 33, 34, 35, 36, 37, - 38, -1, 40, 41, 42, 43, 44, 45, 46, -1, - 91, 92, 50, -1, -1, -1, 54, -1, 56, -1, - 91, 92, -1, -1, 32, 33, -1, 35, -1, -1, - -1, 39, 70, 71, -1, -1, 8, -1, -1, -1, - -1, -1, 50, -1, -1, 53, -1, -1, -1, 87, - -1, -1, 90, 91, 92, 93, 94, 95, 96, 97, - 32, 33, 34, 35, 36, 37, 38, -1, 40, 41, - 42, 43, 44, 45, 46, -1, -1, -1, 50, -1, - -1, -1, 54, 91, 92, -1, 32, 33, -1, 35, - -1, -1, -1, 39, -1, -1, -1, -1, 70, 71, - -1, -1, 8, -1, 50, -1, -1, 53, -1, -1, - -1, -1, -1, -1, -1, 87, -1, -1, 90, 91, - 92, 93, 94, 95, 96, 97, 32, 33, 34, 35, - 36, 37, 38, -1, 40, 41, 42, 43, 44, 45, - 46, -1, -1, -1, 50, 91, 92, -1, 54, -1, - -1, -1, 32, 33, -1, 35, 32, 33, -1, 35, - -1, -1, -1, 39, 70, 71, -1, -1, -1, -1, - 50, -1, -1, 53, 50, -1, -1, 53, 58, 59, - -1, 87, -1, -1, 90, 91, 92, 93, 94, 95, - 96, 97, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 32, 33, -1, 35, -1, -1, -1, - 39, 91, 92, 47, -1, 91, 92, -1, 52, -1, - -1, 50, -1, 57, 53, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 90, -1, -1, 47, - -1, -1, 91, 92, 52, -1, -1, -1, -1, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 47, -1, -1, -1, -1, 52, -1, - -1, -1, -1, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 47, -1, -1, - -1, -1, 52, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 44, 45, 46, 91, 92, 93, 50, -1, -1, -1, + 54, -1, 56, -1, -1, 32, 33, -1, 35, -1, + -1, -1, 39, -1, -1, -1, 70, 71, -1, -1, + -1, 8, -1, 50, -1, -1, 53, -1, -1, -1, + -1, -1, -1, 87, -1, -1, 90, -1, 92, 93, + 94, 95, 96, 97, 98, 32, 33, 34, 35, 36, + 37, 38, -1, 40, 41, 42, 43, 44, 45, 46, + -1, -1, -1, 50, 91, 92, 93, 54, 32, 33, + -1, 35, -1, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, 70, 71, -1, 50, -1, 8, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 47, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 47, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 47, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 47, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 87, -1, -1, 90, -1, 92, 93, 94, 95, 96, + 97, 98, 32, 33, 34, 35, 36, 37, 38, -1, + 40, 41, 42, 43, 44, 45, 46, 91, 92, 93, + 50, -1, -1, -1, 54, -1, -1, -1, -1, 32, + 33, -1, 35, -1, -1, -1, -1, -1, -1, -1, + 70, 71, -1, -1, -1, -1, -1, 50, -1, -1, + 53, -1, -1, -1, -1, 58, 59, 87, -1, -1, + 90, -1, 92, 93, 94, 95, 96, 97, 98, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 32, 33, -1, 35, -1, -1, -1, 39, 91, 92, + 93, -1, 32, 33, -1, 35, -1, -1, 50, 39, + -1, 53, 32, 33, -1, 35, -1, -1, -1, 39, + 50, 32, 33, 53, 35, -1, -1, -1, 39, -1, + 50, -1, -1, 53, -1, -1, -1, -1, -1, 50, + -1, -1, 53, -1, -1, -1, -1, -1, -1, 91, + 92, 93, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 91, 92, 93, -1, -1, -1, -1, -1, -1, + -1, 91, 92, 93, 47, -1, -1, -1, -1, 52, + 91, 92, 93, -1, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 47, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 47, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 47, - -1, 83, 84, 85, 86, 87, 88, 89, 90, 57, - -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 47, -1, 83, 84, 85, 86, 87, - 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 47, -1, 83, - 84, 85, 86, 87, 88, 89, 90, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 83, 84, 85, 86, 87, 88, 89, 90, 47, -1, + -1, -1, -1, 52, -1, -1, -1, -1, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 47, -1, -1, -1, -1, 52, -1, -1, + -1, -1, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 47, -1, -1, -1, + -1, 52, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 47, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 47, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 51, -1, -1, -1, -1, -1, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 52, -1, -1, -1, -1, 57, -1, -1, 60, + 47, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 47, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 47, -1, + 83, 84, 85, 86, 87, 88, 89, 90, 57, -1, + -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 47, -1, 83, 84, 85, 86, 87, 88, + 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 47, -1, 83, 84, + 85, 86, 87, 88, 89, 90, 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, - 55, -1, 57, -1, -1, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 83, 84, 85, 86, 87, 88, 89, - 90, 56, 57, -1, -1, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 83, 84, - 85, 86, 87, 88, 89, 90, 56, 57, -1, -1, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 57, -1, -1, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 83, 84, 85, 86, 87, 88, 89, - 90, -1, -1, -1, -1, -1, 83, 84, 85, 86, - 87, 88, 89, 90, 60, 61, -1, 63, 64, 65, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 51, -1, -1, -1, -1, -1, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 52, -1, -1, -1, -1, 57, -1, -1, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 83, 84, 85, 86, 87, 88, 89, 90, 55, + -1, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 83, 84, 85, 86, 87, 88, 89, 90, + 56, 57, -1, -1, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, 84, 85, + 86, 87, 88, 89, 90, 56, 57, -1, -1, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 57, + -1, -1, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 83, 84, 85, 86, 87, 88, 89, 90, + -1, -1, -1, -1, -1, 83, 84, 85, 86, 87, + 88, 89, 90, 60, 61, -1, 63, 64, 65, 66, + 67, 68, 69, 60, 61, -1, -1, 64, 65, 66, + 67, 68, 69, -1, -1, -1, 83, 84, 85, 86, + 87, 88, 89, 90, -1, -1, 83, 84, 85, 86, + 87, 88, 89, 90, 60, 61, -1, -1, 64, 65, 66, 67, 68, 69, 60, 61, -1, -1, 64, 65, - 66, 67, 68, 69, -1, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 90, -1, -1, 83, 84, 85, - 86, 87, 88, 89, 90, 60, 61, -1, -1, 64, - 65, 66, 67, 68, 69, 60, 61, -1, -1, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, 84, - 85, 86, 87, 88, 89, 90, -1, -1, -1, 84, - -1, 86, 87, 88, 89, 90, 60, 61, -1, -1, - -1, -1, 66, 67, 68, 69, -1, -1, -1, -1, + 66, 67, 68, 69, -1, -1, -1, -1, 84, 85, + 86, 87, 88, 89, 90, -1, -1, -1, 84, -1, + 86, 87, 88, 89, 90, 60, 61, -1, -1, -1, + -1, 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 86, 87, 88, 89, 90 + -1, 86, 87, 88, 89, 90 }; const unsigned char parser::yystos_[] = { - 0, 3, 4, 5, 6, 7, 92, 108, 109, 110, - 111, 112, 113, 114, 115, 180, 91, 180, 181, 181, - 46, 0, 110, 111, 112, 46, 72, 56, 56, 93, - 183, 160, 180, 8, 32, 33, 34, 35, 36, 37, + 0, 3, 4, 5, 6, 7, 93, 109, 110, 111, + 112, 113, 114, 115, 116, 181, 92, 181, 182, 182, + 46, 0, 111, 112, 113, 46, 72, 56, 56, 94, + 184, 161, 181, 8, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 50, 54, - 70, 71, 87, 90, 94, 95, 96, 97, 145, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 47, 47, 52, 50, - 180, 181, 50, 180, 181, 50, 46, 46, 145, 50, - 51, 145, 161, 162, 180, 145, 145, 96, 97, 92, + 70, 71, 87, 90, 95, 96, 97, 98, 146, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 47, 47, 52, 50, + 181, 182, 50, 181, 182, 50, 46, 46, 146, 50, + 51, 146, 162, 163, 181, 146, 146, 97, 98, 93, 56, 57, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 83, 84, 85, 86, 87, 88, 89, 90, - 39, 50, 53, 157, 158, 180, 181, 46, 54, 56, - 48, 118, 180, 50, 46, 54, 50, 46, 54, 50, - 145, 145, 47, 52, 145, 52, 51, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 180, 54, 161, - 162, 180, 3, 11, 14, 15, 16, 18, 19, 20, - 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 49, 50, 58, 59, 116, 117, 118, 119, 121, 122, + 39, 50, 53, 91, 158, 159, 181, 182, 46, 54, + 56, 48, 119, 181, 50, 46, 54, 50, 46, 54, + 50, 146, 146, 47, 52, 146, 52, 51, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 181, 54, + 162, 163, 181, 3, 11, 14, 15, 16, 18, 19, + 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 49, 50, 58, 59, 117, 118, 119, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 147, 148, 149, 155, 156, 166, 167, 170, - 174, 175, 176, 177, 180, 145, 161, 180, 145, 161, - 180, 145, 47, 47, 145, 51, 145, 55, 51, 180, - 47, 46, 4, 119, 145, 56, 46, 56, 46, 116, - 46, 46, 46, 46, 87, 183, 187, 55, 56, 56, - 56, 145, 56, 46, 46, 50, 155, 156, 170, 170, - 49, 116, 56, 56, 56, 56, 56, 9, 10, 12, - 13, 58, 59, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 51, 47, 46, 51, 47, 46, - 51, 52, 51, 145, 161, 4, 56, 47, 145, 19, - 145, 120, 147, 148, 149, 170, 180, 145, 55, 55, - 56, 161, 161, 145, 46, 46, 46, 46, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, 145, 51, - 161, 51, 161, 51, 145, 46, 47, 56, 47, 46, - 47, 56, 22, 52, 47, 47, 47, 145, 145, 145, - 145, 46, 47, 46, 47, 46, 47, 161, 116, 145, - 116, 145, 146, 145, 180, 118, 56, 56, 47, 47, - 52, 47, 52, 47, 52, 161, 161, 161, 47, 17, - 47, 56, 47, 22, 56, 56, 162, 56, 162, 56, - 162, 47, 47, 47, 116, 56, 120, 116, 145, 47, - 47, 47, 47, 47, 56, 56, 56, 116, 116 + 143, 144, 145, 148, 149, 150, 156, 157, 167, 168, + 171, 175, 176, 177, 178, 181, 146, 162, 181, 146, + 162, 181, 146, 47, 47, 146, 51, 146, 55, 51, + 181, 47, 46, 4, 120, 146, 56, 46, 56, 46, + 117, 46, 46, 46, 46, 87, 184, 188, 55, 56, + 56, 56, 146, 56, 46, 46, 50, 156, 157, 171, + 171, 49, 117, 56, 56, 56, 56, 56, 9, 10, + 12, 13, 58, 59, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 51, 47, 46, 51, 47, + 46, 51, 52, 51, 146, 162, 4, 56, 47, 146, + 19, 146, 121, 148, 149, 150, 171, 181, 146, 55, + 55, 56, 162, 162, 146, 46, 46, 46, 46, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 51, 162, 51, 162, 51, 146, 46, 47, 56, 47, + 46, 47, 56, 22, 52, 47, 47, 47, 146, 146, + 146, 146, 46, 47, 46, 47, 46, 47, 162, 117, + 146, 117, 146, 147, 146, 181, 119, 56, 56, 47, + 47, 52, 47, 52, 47, 52, 162, 162, 162, 47, + 17, 47, 56, 47, 22, 56, 56, 163, 56, 163, + 56, 163, 47, 47, 47, 117, 56, 121, 117, 146, + 47, 47, 47, 47, 47, 56, 56, 56, 117, 117 }; const unsigned char parser::yyr1_[] = { - 0, 107, 108, 108, 109, 109, 109, 109, 109, 109, - 110, 111, 112, 112, 112, 112, 112, 113, 114, 115, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 117, 117, 118, 118, - 119, 119, 120, 120, 120, 120, 121, 121, 122, 122, - 122, 123, 124, 124, 125, 126, 126, 127, 127, 128, - 129, 129, 130, 131, 132, 133, 134, 135, 135, 136, - 137, 137, 138, 139, 140, 141, 141, 142, 143, 144, - 145, 145, 145, 146, 146, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 148, 148, 149, 149, - 150, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 0, 108, 109, 109, 110, 110, 110, 110, 110, 110, + 111, 112, 113, 113, 113, 113, 113, 114, 115, 116, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 118, 118, 119, 119, + 120, 120, 121, 121, 121, 121, 122, 122, 123, 123, + 123, 124, 125, 125, 126, 127, 127, 128, 128, 129, + 130, 130, 131, 132, 133, 134, 135, 136, 136, 137, + 138, 138, 139, 140, 141, 142, 142, 143, 144, 145, + 146, 146, 146, 147, 147, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 149, 149, 150, 150, + 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, - 154, 155, 155, 156, 156, 157, 157, 157, 157, 157, - 157, 158, 158, 158, 158, 159, 160, 160, 160, 161, - 161, 162, 162, 163, 164, 165, 165, 166, 167, 168, - 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 155, 156, 156, 157, 157, 158, 158, 158, 158, 158, + 158, 159, 159, 159, 159, 160, 161, 161, 161, 162, + 162, 163, 163, 164, 165, 166, 166, 167, 168, 168, + 169, 170, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 181, 182, 183, 184, 185, 186, 186, 187, 187, - 188, 189 + 181, 182, 182, 183, 184, 185, 186, 187, 187, 188, + 188, 189, 190 }; const signed char @@ -4530,10 +4559,10 @@ namespace xsk { namespace gsc { namespace s4 { 2, 1, 1, 2, 2, 4, 6, 5, 7, 5, 7, 8, 9, 9, 9, 3, 3, 1, 0, 1, 0, 3, 1, 4, 4, 2, 3, 4, 3, 2, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 7, 2, 1, 2, 1, - 1, 1 + 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 7, 2, 1, 2, + 1, 1, 1 }; @@ -4543,29 +4572,29 @@ namespace xsk { namespace gsc { namespace s4 { const short parser::yyrline_[] = { - 0, 249, 249, 250, 254, 256, 258, 260, 262, 264, - 269, 273, 278, 279, 280, 281, 282, 286, 291, 296, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 330, 331, 335, 336, - 340, 342, 347, 349, 351, 354, 358, 360, 365, 367, - 369, 374, 379, 381, 386, 391, 393, 398, 400, 405, - 410, 412, 417, 422, 427, 432, 437, 442, 444, 449, - 454, 456, 461, 466, 471, 476, 478, 483, 488, 493, - 498, 499, 500, 504, 505, 509, 511, 513, 515, 517, - 519, 521, 523, 525, 527, 529, 534, 536, 541, 543, - 548, 553, 555, 557, 559, 561, 563, 565, 567, 569, - 571, 573, 575, 577, 579, 581, 583, 585, 587, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 625, - 630, 635, 636, 639, 640, 644, 646, 648, 650, 652, - 654, 659, 661, 663, 665, 670, 675, 677, 680, 684, - 687, 691, 693, 698, 703, 708, 710, 715, 720, 725, - 730, 735, 736, 737, 738, 739, 740, 741, 742, 743, - 747, 752, 757, 762, 767, 772, 777, 782, 787, 792, - 797, 799, 804, 809, 814, 819, 824, 826, 831, 833, - 838, 843 + 0, 250, 250, 251, 255, 257, 259, 261, 263, 265, + 270, 274, 279, 280, 281, 282, 283, 287, 292, 297, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 331, 332, 336, 337, + 341, 343, 348, 350, 352, 355, 359, 361, 366, 368, + 370, 375, 380, 382, 387, 392, 394, 399, 401, 406, + 411, 413, 418, 423, 428, 433, 438, 443, 445, 450, + 455, 457, 462, 467, 472, 477, 479, 484, 489, 494, + 499, 500, 501, 505, 506, 510, 512, 514, 516, 518, + 520, 522, 524, 526, 528, 530, 535, 537, 542, 544, + 549, 554, 556, 558, 560, 562, 564, 566, 568, 570, + 572, 574, 576, 578, 580, 582, 584, 586, 588, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 626, + 631, 636, 637, 640, 641, 645, 647, 649, 651, 653, + 655, 660, 662, 664, 666, 671, 676, 678, 681, 685, + 688, 692, 694, 699, 704, 709, 711, 716, 721, 723, + 728, 733, 738, 739, 740, 741, 742, 743, 744, 745, + 746, 750, 755, 760, 765, 770, 775, 780, 785, 790, + 795, 800, 802, 807, 812, 817, 822, 827, 829, 834, + 836, 841, 846 }; void @@ -4598,9 +4627,9 @@ namespace xsk { namespace gsc { namespace s4 { #line 13 "parser.ypp" } } } // xsk::gsc::s4 -#line 4602 "parser.cpp" +#line 4631 "parser.cpp" -#line 847 "parser.ypp" +#line 850 "parser.ypp" void xsk::gsc::s4::parser::error(const xsk::gsc::location& loc, const std::string& msg) diff --git a/src/s4/xsk/parser.hpp b/src/s4/xsk/parser.hpp index e9edf48d..70366dab 100644 --- a/src/s4/xsk/parser.hpp +++ b/src/s4/xsk/parser.hpp @@ -623,6 +623,7 @@ namespace xsk { namespace gsc { namespace s4 { // stmt_while char dummy68[sizeof (ast::stmt_while::ptr)]; + // "field" // "path" // "identifier" // "string literal" @@ -770,22 +771,23 @@ namespace xsk { namespace gsc { namespace s4 { MUL = 88, // "*" DIV = 89, // "/" MOD = 90, // "%" - PATH = 91, // "path" - IDENTIFIER = 92, // "identifier" - STRING = 93, // "string literal" - ISTRING = 94, // "localized string" - COLOR = 95, // "color" - FLOAT = 96, // "float" - INTEGER = 97, // "integer" - ADD_ARRAY = 98, // ADD_ARRAY - THEN = 99, // THEN - TERN = 100, // TERN - NEG = 101, // NEG - ANIMREF = 102, // ANIMREF - PREINC = 103, // PREINC - PREDEC = 104, // PREDEC - POSTINC = 105, // POSTINC - POSTDEC = 106 // POSTDEC + FIELD = 91, // "field" + PATH = 92, // "path" + IDENTIFIER = 93, // "identifier" + STRING = 94, // "string literal" + ISTRING = 95, // "localized string" + COLOR = 96, // "color" + FLOAT = 97, // "float" + INTEGER = 98, // "integer" + ADD_ARRAY = 99, // ADD_ARRAY + THEN = 100, // THEN + TERN = 101, // TERN + NEG = 102, // NEG + ANIMREF = 103, // ANIMREF + PREINC = 104, // PREINC + PREDEC = 105, // PREDEC + POSTINC = 106, // POSTINC + POSTDEC = 107 // POSTDEC }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -802,7 +804,7 @@ namespace xsk { namespace gsc { namespace s4 { { enum symbol_kind_type { - YYNTOKENS = 107, ///< Number of tokens. + YYNTOKENS = 108, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -895,105 +897,106 @@ namespace xsk { namespace gsc { namespace s4 { S_MUL = 88, // "*" S_DIV = 89, // "/" S_MOD = 90, // "%" - S_PATH = 91, // "path" - S_IDENTIFIER = 92, // "identifier" - S_STRING = 93, // "string literal" - S_ISTRING = 94, // "localized string" - S_COLOR = 95, // "color" - S_FLOAT = 96, // "float" - S_INTEGER = 97, // "integer" - S_ADD_ARRAY = 98, // ADD_ARRAY - S_THEN = 99, // THEN - S_TERN = 100, // TERN - S_NEG = 101, // NEG - S_ANIMREF = 102, // ANIMREF - S_PREINC = 103, // PREINC - S_PREDEC = 104, // PREDEC - S_POSTINC = 105, // POSTINC - S_POSTDEC = 106, // POSTDEC - S_YYACCEPT = 107, // $accept - S_root = 108, // root - S_program = 109, // program - S_inline = 110, // inline - S_include = 111, // include - S_declaration = 112, // declaration - S_decl_usingtree = 113, // decl_usingtree - S_decl_constant = 114, // decl_constant - S_decl_thread = 115, // decl_thread - S_stmt = 116, // stmt - S_stmt_dev = 117, // stmt_dev - S_stmt_block = 118, // stmt_block - S_stmt_list = 119, // stmt_list - S_stmt_expr = 120, // stmt_expr - S_stmt_call = 121, // stmt_call - S_stmt_assign = 122, // stmt_assign - S_stmt_endon = 123, // stmt_endon - S_stmt_notify = 124, // stmt_notify - S_stmt_wait = 125, // stmt_wait - S_stmt_waittill = 126, // stmt_waittill - S_stmt_waittillmatch = 127, // stmt_waittillmatch - S_stmt_waittillframeend = 128, // stmt_waittillframeend - S_stmt_waitframe = 129, // stmt_waitframe - S_stmt_if = 130, // stmt_if - S_stmt_ifelse = 131, // stmt_ifelse - S_stmt_while = 132, // stmt_while - S_stmt_dowhile = 133, // stmt_dowhile - S_stmt_for = 134, // stmt_for - S_stmt_foreach = 135, // stmt_foreach - S_stmt_switch = 136, // stmt_switch - S_stmt_case = 137, // stmt_case - S_stmt_default = 138, // stmt_default - S_stmt_break = 139, // stmt_break - S_stmt_continue = 140, // stmt_continue - S_stmt_return = 141, // stmt_return - S_stmt_breakpoint = 142, // stmt_breakpoint - S_stmt_prof_begin = 143, // stmt_prof_begin - S_stmt_prof_end = 144, // stmt_prof_end - S_expr = 145, // expr - S_expr_or_empty = 146, // expr_or_empty - S_expr_assign = 147, // expr_assign - S_expr_increment = 148, // expr_increment - S_expr_decrement = 149, // expr_decrement - S_expr_ternary = 150, // expr_ternary - S_expr_binary = 151, // expr_binary - S_expr_primitive = 152, // expr_primitive - S_expr_complement = 153, // expr_complement - S_expr_not = 154, // expr_not - S_expr_call = 155, // expr_call - S_expr_method = 156, // expr_method - S_expr_function = 157, // expr_function - S_expr_pointer = 158, // expr_pointer - S_expr_add_array = 159, // expr_add_array - S_expr_parameters = 160, // expr_parameters - S_expr_arguments = 161, // expr_arguments - S_expr_arguments_no_empty = 162, // expr_arguments_no_empty - S_expr_isdefined = 163, // expr_isdefined - S_expr_istrue = 164, // expr_istrue - S_expr_reference = 165, // expr_reference - S_expr_array = 166, // expr_array - S_expr_field = 167, // expr_field - S_expr_size = 168, // expr_size - S_expr_paren = 169, // expr_paren - S_expr_object = 170, // expr_object - S_expr_thisthread = 171, // expr_thisthread - S_expr_empty_array = 172, // expr_empty_array - S_expr_undefined = 173, // expr_undefined - S_expr_game = 174, // expr_game - S_expr_self = 175, // expr_self - S_expr_anim = 176, // expr_anim - S_expr_level = 177, // expr_level - S_expr_animation = 178, // expr_animation - S_expr_animtree = 179, // expr_animtree - S_expr_identifier = 180, // expr_identifier - S_expr_path = 181, // expr_path - S_expr_istring = 182, // expr_istring - S_expr_string = 183, // expr_string - S_expr_color = 184, // expr_color - S_expr_vector = 185, // expr_vector - S_expr_float = 186, // expr_float - S_expr_integer = 187, // expr_integer - S_expr_false = 188, // expr_false - S_expr_true = 189 // expr_true + S_FIELD = 91, // "field" + S_PATH = 92, // "path" + S_IDENTIFIER = 93, // "identifier" + S_STRING = 94, // "string literal" + S_ISTRING = 95, // "localized string" + S_COLOR = 96, // "color" + S_FLOAT = 97, // "float" + S_INTEGER = 98, // "integer" + S_ADD_ARRAY = 99, // ADD_ARRAY + S_THEN = 100, // THEN + S_TERN = 101, // TERN + S_NEG = 102, // NEG + S_ANIMREF = 103, // ANIMREF + S_PREINC = 104, // PREINC + S_PREDEC = 105, // PREDEC + S_POSTINC = 106, // POSTINC + S_POSTDEC = 107, // POSTDEC + S_YYACCEPT = 108, // $accept + S_root = 109, // root + S_program = 110, // program + S_inline = 111, // inline + S_include = 112, // include + S_declaration = 113, // declaration + S_decl_usingtree = 114, // decl_usingtree + S_decl_constant = 115, // decl_constant + S_decl_thread = 116, // decl_thread + S_stmt = 117, // stmt + S_stmt_dev = 118, // stmt_dev + S_stmt_block = 119, // stmt_block + S_stmt_list = 120, // stmt_list + S_stmt_expr = 121, // stmt_expr + S_stmt_call = 122, // stmt_call + S_stmt_assign = 123, // stmt_assign + S_stmt_endon = 124, // stmt_endon + S_stmt_notify = 125, // stmt_notify + S_stmt_wait = 126, // stmt_wait + S_stmt_waittill = 127, // stmt_waittill + S_stmt_waittillmatch = 128, // stmt_waittillmatch + S_stmt_waittillframeend = 129, // stmt_waittillframeend + S_stmt_waitframe = 130, // stmt_waitframe + S_stmt_if = 131, // stmt_if + S_stmt_ifelse = 132, // stmt_ifelse + S_stmt_while = 133, // stmt_while + S_stmt_dowhile = 134, // stmt_dowhile + S_stmt_for = 135, // stmt_for + S_stmt_foreach = 136, // stmt_foreach + S_stmt_switch = 137, // stmt_switch + S_stmt_case = 138, // stmt_case + S_stmt_default = 139, // stmt_default + S_stmt_break = 140, // stmt_break + S_stmt_continue = 141, // stmt_continue + S_stmt_return = 142, // stmt_return + S_stmt_breakpoint = 143, // stmt_breakpoint + S_stmt_prof_begin = 144, // stmt_prof_begin + S_stmt_prof_end = 145, // stmt_prof_end + S_expr = 146, // expr + S_expr_or_empty = 147, // expr_or_empty + S_expr_assign = 148, // expr_assign + S_expr_increment = 149, // expr_increment + S_expr_decrement = 150, // expr_decrement + S_expr_ternary = 151, // expr_ternary + S_expr_binary = 152, // expr_binary + S_expr_primitive = 153, // expr_primitive + S_expr_complement = 154, // expr_complement + S_expr_not = 155, // expr_not + S_expr_call = 156, // expr_call + S_expr_method = 157, // expr_method + S_expr_function = 158, // expr_function + S_expr_pointer = 159, // expr_pointer + S_expr_add_array = 160, // expr_add_array + S_expr_parameters = 161, // expr_parameters + S_expr_arguments = 162, // expr_arguments + S_expr_arguments_no_empty = 163, // expr_arguments_no_empty + S_expr_isdefined = 164, // expr_isdefined + S_expr_istrue = 165, // expr_istrue + S_expr_reference = 166, // expr_reference + S_expr_array = 167, // expr_array + S_expr_field = 168, // expr_field + S_expr_size = 169, // expr_size + S_expr_paren = 170, // expr_paren + S_expr_object = 171, // expr_object + S_expr_thisthread = 172, // expr_thisthread + S_expr_empty_array = 173, // expr_empty_array + S_expr_undefined = 174, // expr_undefined + S_expr_game = 175, // expr_game + S_expr_self = 176, // expr_self + S_expr_anim = 177, // expr_anim + S_expr_level = 178, // expr_level + S_expr_animation = 179, // expr_animation + S_expr_animtree = 180, // expr_animtree + S_expr_identifier = 181, // expr_identifier + S_expr_path = 182, // expr_path + S_expr_istring = 183, // expr_istring + S_expr_string = 184, // expr_string + S_expr_color = 185, // expr_color + S_expr_vector = 186, // expr_vector + S_expr_float = 187, // expr_float + S_expr_integer = 188, // expr_integer + S_expr_false = 189, // expr_false + S_expr_true = 190 // expr_true }; }; @@ -1314,6 +1317,7 @@ namespace xsk { namespace gsc { namespace s4 { value.move< ast::stmt_while::ptr > (std::move (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2619,6 +2623,7 @@ switch (yykind) value.template destroy< ast::stmt_while::ptr > (); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -2735,7 +2740,7 @@ switch (yykind) : super_type(token_type (tok), v, l) #endif { - S4_ASSERT ((token::PATH <= tok && tok <= token::INTEGER)); + S4_ASSERT ((token::FIELD <= tok && tok <= token::INTEGER)); } }; @@ -4150,6 +4155,21 @@ switch (yykind) return symbol_type (token::MOD, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_FIELD (std::string v, location_type l) + { + return symbol_type (token::FIELD, std::move (v), std::move (l)); + } +#else + static + symbol_type + make_FIELD (const std::string& v, const location_type& l) + { + return symbol_type (token::FIELD, v, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4734,7 +4754,7 @@ switch (yykind) /// Constants. enum { - yylast_ = 2336, ///< Last index in yytable_. + yylast_ = 2425, ///< Last index in yytable_. yynnts_ = 83, ///< Number of nonterminal symbols. yyfinal_ = 21 ///< Termination state number. }; @@ -5046,6 +5066,7 @@ switch (yykind) value.copy< ast::stmt_while::ptr > (YY_MOVE (that.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5369,6 +5390,7 @@ switch (yykind) value.move< ast::stmt_while::ptr > (YY_MOVE (s.value)); break; + case symbol_kind::S_FIELD: // "field" case symbol_kind::S_PATH: // "path" case symbol_kind::S_IDENTIFIER: // "identifier" case symbol_kind::S_STRING: // "string literal" @@ -5442,7 +5464,7 @@ switch (yykind) #line 13 "parser.ypp" } } } // xsk::gsc::s4 -#line 5446 "parser.hpp" +#line 5468 "parser.hpp"