feat(arc): impl waitrealtime (#172)
This commit is contained in:
parent
fb755ef937
commit
8e1326c36e
@ -63,6 +63,7 @@ namespace xsk::arc
|
|||||||
%token ENDON "endon"
|
%token ENDON "endon"
|
||||||
%token NOTIFY "notify"
|
%token NOTIFY "notify"
|
||||||
%token WAIT "wait"
|
%token WAIT "wait"
|
||||||
|
%token WAITREALTIME "waitrealtime"
|
||||||
%token WAITTILL "waittill"
|
%token WAITTILL "waittill"
|
||||||
%token WAITTILLMATCH "waittillmatch"
|
%token WAITTILLMATCH "waittillmatch"
|
||||||
%token WAITTILLFRAMEEND "waittillframeend"
|
%token WAITTILLFRAMEEND "waittillframeend"
|
||||||
@ -183,6 +184,7 @@ namespace xsk::arc
|
|||||||
%type <stmt_endon::ptr> stmt_endon
|
%type <stmt_endon::ptr> stmt_endon
|
||||||
%type <stmt_notify::ptr> stmt_notify
|
%type <stmt_notify::ptr> stmt_notify
|
||||||
%type <stmt_wait::ptr> stmt_wait
|
%type <stmt_wait::ptr> stmt_wait
|
||||||
|
%type <stmt_waitrealtime::ptr> stmt_waitrealtime
|
||||||
%type <stmt_waittill::ptr> stmt_waittill
|
%type <stmt_waittill::ptr> stmt_waittill
|
||||||
%type <stmt_waittillmatch::ptr> stmt_waittillmatch
|
%type <stmt_waittillmatch::ptr> stmt_waittillmatch
|
||||||
%type <stmt_waittillframeend::ptr> stmt_waittillframeend
|
%type <stmt_waittillframeend::ptr> stmt_waittillframeend
|
||||||
@ -357,6 +359,7 @@ stmt
|
|||||||
| stmt_endon { $$ = std::move($1); }
|
| stmt_endon { $$ = std::move($1); }
|
||||||
| stmt_notify { $$ = std::move($1); }
|
| stmt_notify { $$ = std::move($1); }
|
||||||
| stmt_wait { $$ = std::move($1); }
|
| stmt_wait { $$ = std::move($1); }
|
||||||
|
| stmt_waitrealtime { $$ = std::move($1); }
|
||||||
| stmt_waittill { $$ = std::move($1); }
|
| stmt_waittill { $$ = std::move($1); }
|
||||||
| stmt_waittillmatch { $$ = std::move($1); }
|
| stmt_waittillmatch { $$ = std::move($1); }
|
||||||
| stmt_waittillframeend { $$ = std::move($1); }
|
| stmt_waittillframeend { $$ = std::move($1); }
|
||||||
@ -462,6 +465,11 @@ stmt_wait
|
|||||||
{ $$ = stmt_wait::make(@$, std::move($2)); }
|
{ $$ = stmt_wait::make(@$, std::move($2)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
stmt_waitrealtime
|
||||||
|
: WAITREALTIME expr SEMICOLON
|
||||||
|
{ $$ = stmt_waitrealtime::make(@$, std::move($2)); }
|
||||||
|
;
|
||||||
|
|
||||||
stmt_waittill
|
stmt_waittill
|
||||||
: expr_object WAITTILL LPAREN expr COMMA expr_arguments_no_empty RPAREN SEMICOLON
|
: expr_object WAITTILL LPAREN expr COMMA expr_arguments_no_empty RPAREN SEMICOLON
|
||||||
{ $$ = stmt_waittill::make(@$, std::move($1), std::move($4), std::move($6)); }
|
{ $$ = stmt_waittill::make(@$, std::move($1), std::move($4), std::move($6)); }
|
||||||
@ -1230,6 +1238,7 @@ std::unordered_map<token::kind, parser::token::token_kind_type> const tok_to_par
|
|||||||
{ token::ENDON, parser::token::ENDON },
|
{ token::ENDON, parser::token::ENDON },
|
||||||
{ token::NOTIFY, parser::token::NOTIFY },
|
{ token::NOTIFY, parser::token::NOTIFY },
|
||||||
{ token::WAIT, parser::token::WAIT },
|
{ token::WAIT, parser::token::WAIT },
|
||||||
|
{ token::WAITREALTIME, parser::token::WAITREALTIME },
|
||||||
{ token::WAITTILL, parser::token::WAITTILL },
|
{ token::WAITTILL, parser::token::WAITTILL },
|
||||||
{ token::WAITTILLMATCH, parser::token::WAITTILLMATCH },
|
{ token::WAITTILLMATCH, parser::token::WAITTILLMATCH },
|
||||||
{ token::WAITTILLFRAMEEND, parser::token::WAITTILLFRAMEEND },
|
{ token::WAITTILLFRAMEEND, parser::token::WAITTILLFRAMEEND },
|
||||||
@ -1289,6 +1298,7 @@ std::unordered_map<std::string_view, parser::token::token_kind_type> const keywo
|
|||||||
{ "endon", parser::token::ENDON },
|
{ "endon", parser::token::ENDON },
|
||||||
{ "notify", parser::token::NOTIFY },
|
{ "notify", parser::token::NOTIFY },
|
||||||
{ "wait", parser::token::WAIT },
|
{ "wait", parser::token::WAIT },
|
||||||
|
{ "waitrealtime", parser::token::WAITREALTIME},
|
||||||
{ "waittill", parser::token::WAITTILL },
|
{ "waittill", parser::token::WAITTILL },
|
||||||
{ "waittillmatch", parser::token::WAITTILLMATCH },
|
{ "waittillmatch", parser::token::WAITTILLMATCH },
|
||||||
{ "waittillframeend", parser::token::WAITTILLFRAMEEND },
|
{ "waittillframeend", parser::token::WAITTILLFRAMEEND },
|
||||||
|
@ -88,10 +88,10 @@ struct node
|
|||||||
stmt_endon,
|
stmt_endon,
|
||||||
stmt_notify,
|
stmt_notify,
|
||||||
stmt_wait,
|
stmt_wait,
|
||||||
|
stmt_waitrealtime,
|
||||||
stmt_waittill,
|
stmt_waittill,
|
||||||
stmt_waittillmatch,
|
stmt_waittillmatch,
|
||||||
stmt_waittillframeend,
|
stmt_waittillframeend,
|
||||||
stmt_waitrealtime,
|
|
||||||
stmt_if,
|
stmt_if,
|
||||||
stmt_ifelse,
|
stmt_ifelse,
|
||||||
stmt_while,
|
stmt_while,
|
||||||
@ -1001,6 +1001,16 @@ struct stmt_wait : public stmt
|
|||||||
XSK_ARC_AST_MAKE(stmt_wait)
|
XSK_ARC_AST_MAKE(stmt_wait)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct stmt_waitrealtime : public stmt
|
||||||
|
{
|
||||||
|
using ptr = std::unique_ptr<stmt_waitrealtime>;
|
||||||
|
|
||||||
|
expr::ptr time;
|
||||||
|
|
||||||
|
stmt_waitrealtime(location const& loc, expr::ptr time);
|
||||||
|
XSK_ARC_AST_MAKE(stmt_waitrealtime)
|
||||||
|
};
|
||||||
|
|
||||||
struct stmt_waittill : public stmt
|
struct stmt_waittill : public stmt
|
||||||
{
|
{
|
||||||
using ptr = std::unique_ptr<stmt_waittill>;
|
using ptr = std::unique_ptr<stmt_waittill>;
|
||||||
@ -1033,16 +1043,6 @@ struct stmt_waittillframeend : public stmt
|
|||||||
XSK_ARC_AST_MAKE(stmt_waittillframeend)
|
XSK_ARC_AST_MAKE(stmt_waittillframeend)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct stmt_waitrealtime : public stmt
|
|
||||||
{
|
|
||||||
using ptr = std::unique_ptr<stmt_waitrealtime>;
|
|
||||||
|
|
||||||
expr::ptr time;
|
|
||||||
|
|
||||||
stmt_waitrealtime(location const& loc, expr::ptr time);
|
|
||||||
XSK_ARC_AST_MAKE(stmt_waitrealtime)
|
|
||||||
};
|
|
||||||
|
|
||||||
struct stmt_if : public stmt
|
struct stmt_if : public stmt
|
||||||
{
|
{
|
||||||
using ptr = std::unique_ptr<stmt_if>;
|
using ptr = std::unique_ptr<stmt_if>;
|
||||||
|
@ -20,9 +20,9 @@ struct token
|
|||||||
NAME, PATH, STRING, ISTRING, HASHSTR, INT, FLT,
|
NAME, PATH, STRING, ISTRING, HASHSTR, INT, FLT,
|
||||||
|
|
||||||
DEVBEGIN, DEVEND, INLINE, INCLUDE, USINGTREE, ANIMTREE, AUTOEXEC, CODECALL, PRIVATE,
|
DEVBEGIN, DEVEND, INLINE, INCLUDE, USINGTREE, ANIMTREE, AUTOEXEC, CODECALL, PRIVATE,
|
||||||
ENDON, NOTIFY, WAIT, WAITTILL, WAITTILLMATCH, WAITTILLFRAMEEND, IF, ELSE, DO, WHILE,
|
ENDON, NOTIFY, WAIT, WAITREALTIME, WAITTILL, WAITTILLMATCH, WAITTILLFRAMEEND, IF, ELSE,
|
||||||
FOR, FOREACH, IN, SWITCH, CASE, DEFAULT, BREAK, CONTINUE, RETURN, PROFBEGIN, PROFEND,
|
DO, WHILE, FOR, FOREACH, IN, SWITCH, CASE, DEFAULT, BREAK, CONTINUE, RETURN, PROFBEGIN,
|
||||||
THREAD, TRUE, FALSE, UNDEFINED, SIZE, GAME, SELF, ANIM, LEVEL,
|
PROFEND, THREAD, TRUE, FALSE, UNDEFINED, SIZE, GAME, SELF, ANIM, LEVEL,
|
||||||
CONST, ISDEFINED, VECTORSCALE, ANGLESTOUP, ANGLESTORIGHT, ANGLESTOFORWARD, ANGLECLAMP180,
|
CONST, ISDEFINED, VECTORSCALE, ANGLESTOUP, ANGLESTORIGHT, ANGLESTOFORWARD, ANGLECLAMP180,
|
||||||
VECTORTOANGLES, ABS, GETTIME, GETDVAR, GETDVARINT, GETDVARFLOAT, GETDVARVECTOR, GETDVARCOLORRED,
|
VECTORTOANGLES, ABS, GETTIME, GETDVAR, GETDVARINT, GETDVARFLOAT, GETDVARVECTOR, GETDVARCOLORRED,
|
||||||
GETDVARCOLORGREEN, GETDVARCOLORBLUE, GETDVARCOLORALPHA, GETFIRSTARRAYKEY, GETNEXTARRAYKEY,
|
GETDVARCOLORGREEN, GETDVARCOLORBLUE, GETDVARCOLORALPHA, GETFIRSTARRAYKEY, GETNEXTARRAYKEY,
|
||||||
|
@ -45,6 +45,7 @@ private:
|
|||||||
auto emit_stmt_endon(stmt_endon const& stm) -> void;
|
auto emit_stmt_endon(stmt_endon const& stm) -> void;
|
||||||
auto emit_stmt_notify(stmt_notify const& stm) -> void;
|
auto emit_stmt_notify(stmt_notify const& stm) -> void;
|
||||||
auto emit_stmt_wait(stmt_wait const& stm) -> void;
|
auto emit_stmt_wait(stmt_wait const& stm) -> void;
|
||||||
|
auto emit_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void;
|
||||||
auto emit_stmt_waittill(stmt_waittill const& stm) -> void;
|
auto emit_stmt_waittill(stmt_waittill const& stm) -> void;
|
||||||
auto emit_stmt_waittillmatch(stmt_waittillmatch const& stm) -> void;
|
auto emit_stmt_waittillmatch(stmt_waittillmatch const& stm) -> void;
|
||||||
auto emit_stmt_waittillframeend(stmt_waittillframeend const& stm) -> void;
|
auto emit_stmt_waittillframeend(stmt_waittillframeend const& stm) -> void;
|
||||||
|
@ -65,9 +65,9 @@ private:
|
|||||||
auto process_stmt_endon(stmt_endon& stm) -> void;
|
auto process_stmt_endon(stmt_endon& stm) -> void;
|
||||||
auto process_stmt_notify(stmt_notify& stm) -> void;
|
auto process_stmt_notify(stmt_notify& stm) -> void;
|
||||||
auto process_stmt_wait(stmt_wait& stm) -> void;
|
auto process_stmt_wait(stmt_wait& stm) -> void;
|
||||||
|
auto process_stmt_waitrealtime(stmt_waitrealtime& stm) -> void;
|
||||||
auto process_stmt_waittill(stmt_waittill& stm) -> void;
|
auto process_stmt_waittill(stmt_waittill& stm) -> void;
|
||||||
auto process_stmt_waittillmatch(stmt_waittillmatch& stm) -> void;
|
auto process_stmt_waittillmatch(stmt_waittillmatch& stm) -> void;
|
||||||
auto process_stmt_waitrealtime(stmt_waitrealtime& stm) -> void;
|
|
||||||
auto process_stmt_if(stmt_if& stm) -> void;
|
auto process_stmt_if(stmt_if& stm) -> void;
|
||||||
auto process_stmt_ifelse(stmt_ifelse& stm) -> void;
|
auto process_stmt_ifelse(stmt_ifelse& stm) -> void;
|
||||||
auto process_stmt_while(stmt_while& stm) -> void;
|
auto process_stmt_while(stmt_while& stm) -> void;
|
||||||
|
@ -679,17 +679,20 @@ namespace xsk { namespace arc {
|
|||||||
// stmt_wait
|
// stmt_wait
|
||||||
char dummy78[sizeof (stmt_wait::ptr)];
|
char dummy78[sizeof (stmt_wait::ptr)];
|
||||||
|
|
||||||
|
// stmt_waitrealtime
|
||||||
|
char dummy79[sizeof (stmt_waitrealtime::ptr)];
|
||||||
|
|
||||||
// stmt_waittill
|
// stmt_waittill
|
||||||
char dummy79[sizeof (stmt_waittill::ptr)];
|
char dummy80[sizeof (stmt_waittill::ptr)];
|
||||||
|
|
||||||
// stmt_waittillframeend
|
// stmt_waittillframeend
|
||||||
char dummy80[sizeof (stmt_waittillframeend::ptr)];
|
char dummy81[sizeof (stmt_waittillframeend::ptr)];
|
||||||
|
|
||||||
// stmt_waittillmatch
|
// stmt_waittillmatch
|
||||||
char dummy81[sizeof (stmt_waittillmatch::ptr)];
|
char dummy82[sizeof (stmt_waittillmatch::ptr)];
|
||||||
|
|
||||||
// stmt_while
|
// stmt_while
|
||||||
char dummy82[sizeof (stmt_while::ptr)];
|
char dummy83[sizeof (stmt_while::ptr)];
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The size of the largest semantic type.
|
/// The size of the largest semantic type.
|
||||||
@ -755,116 +758,117 @@ namespace xsk { namespace arc {
|
|||||||
ENDON = 13, // "endon"
|
ENDON = 13, // "endon"
|
||||||
NOTIFY = 14, // "notify"
|
NOTIFY = 14, // "notify"
|
||||||
WAIT = 15, // "wait"
|
WAIT = 15, // "wait"
|
||||||
WAITTILL = 16, // "waittill"
|
WAITREALTIME = 16, // "waitrealtime"
|
||||||
WAITTILLMATCH = 17, // "waittillmatch"
|
WAITTILL = 17, // "waittill"
|
||||||
WAITTILLFRAMEEND = 18, // "waittillframeend"
|
WAITTILLMATCH = 18, // "waittillmatch"
|
||||||
IF = 19, // "if"
|
WAITTILLFRAMEEND = 19, // "waittillframeend"
|
||||||
ELSE = 20, // "else"
|
IF = 20, // "if"
|
||||||
DO = 21, // "do"
|
ELSE = 21, // "else"
|
||||||
WHILE = 22, // "while"
|
DO = 22, // "do"
|
||||||
FOR = 23, // "for"
|
WHILE = 23, // "while"
|
||||||
FOREACH = 24, // "foreach"
|
FOR = 24, // "for"
|
||||||
IN = 25, // "in"
|
FOREACH = 25, // "foreach"
|
||||||
SWITCH = 26, // "switch"
|
IN = 26, // "in"
|
||||||
CASE = 27, // "case"
|
SWITCH = 27, // "switch"
|
||||||
DEFAULT = 28, // "default"
|
CASE = 28, // "case"
|
||||||
BREAK = 29, // "break"
|
DEFAULT = 29, // "default"
|
||||||
CONTINUE = 30, // "continue"
|
BREAK = 30, // "break"
|
||||||
RETURN = 31, // "return"
|
CONTINUE = 31, // "continue"
|
||||||
PROFBEGIN = 32, // "prof_begin"
|
RETURN = 32, // "return"
|
||||||
PROFEND = 33, // "prof_end"
|
PROFBEGIN = 33, // "prof_begin"
|
||||||
THREAD = 34, // "thread"
|
PROFEND = 34, // "prof_end"
|
||||||
TRUE = 35, // "true"
|
THREAD = 35, // "thread"
|
||||||
FALSE = 36, // "false"
|
TRUE = 36, // "true"
|
||||||
UNDEFINED = 37, // "undefined"
|
FALSE = 37, // "false"
|
||||||
SIZE = 38, // "size"
|
UNDEFINED = 38, // "undefined"
|
||||||
GAME = 39, // "game"
|
SIZE = 39, // "size"
|
||||||
SELF = 40, // "self"
|
GAME = 40, // "game"
|
||||||
ANIM = 41, // "anim"
|
SELF = 41, // "self"
|
||||||
LEVEL = 42, // "level"
|
ANIM = 42, // "anim"
|
||||||
CONST = 43, // "const"
|
LEVEL = 43, // "level"
|
||||||
GETNEXTARRAYKEY = 44, // "getnextarraykey"
|
CONST = 44, // "const"
|
||||||
GETFIRSTARRAYKEY = 45, // "getfirstarraykey"
|
GETNEXTARRAYKEY = 45, // "getnextarraykey"
|
||||||
GETDVARCOLORALPHA = 46, // "getdvarcoloralpha"
|
GETFIRSTARRAYKEY = 46, // "getfirstarraykey"
|
||||||
GETDVARCOLORBLUE = 47, // "getdvarcolorblue"
|
GETDVARCOLORALPHA = 47, // "getdvarcoloralpha"
|
||||||
GETDVARCOLORGREEN = 48, // "getdvarcolorgreen"
|
GETDVARCOLORBLUE = 48, // "getdvarcolorblue"
|
||||||
GETDVARCOLORRED = 49, // "getdvarcolorred"
|
GETDVARCOLORGREEN = 49, // "getdvarcolorgreen"
|
||||||
GETDVARVECTOR = 50, // "getdvarvector"
|
GETDVARCOLORRED = 50, // "getdvarcolorred"
|
||||||
GETDVARFLOAT = 51, // "getdvarfloat"
|
GETDVARVECTOR = 51, // "getdvarvector"
|
||||||
GETDVARINT = 52, // "getdvarint"
|
GETDVARFLOAT = 52, // "getdvarfloat"
|
||||||
GETDVAR = 53, // "getdvar"
|
GETDVARINT = 53, // "getdvarint"
|
||||||
GETTIME = 54, // "gettime"
|
GETDVAR = 54, // "getdvar"
|
||||||
ABS = 55, // "abs"
|
GETTIME = 55, // "gettime"
|
||||||
VECTORTOANGLES = 56, // "vectortoangles"
|
ABS = 56, // "abs"
|
||||||
ANGLECLAMP180 = 57, // "angleclamp180"
|
VECTORTOANGLES = 57, // "vectortoangles"
|
||||||
ANGLESTOFORWARD = 58, // "anglestoforward"
|
ANGLECLAMP180 = 58, // "angleclamp180"
|
||||||
ANGLESTORIGHT = 59, // "anglestoright"
|
ANGLESTOFORWARD = 59, // "anglestoforward"
|
||||||
ANGLESTOUP = 60, // "anglestoup"
|
ANGLESTORIGHT = 60, // "anglestoright"
|
||||||
VECTORSCALE = 61, // "vectorscale"
|
ANGLESTOUP = 61, // "anglestoup"
|
||||||
ISDEFINED = 62, // "isdefined"
|
VECTORSCALE = 62, // "vectorscale"
|
||||||
LPAREN = 63, // "("
|
ISDEFINED = 63, // "isdefined"
|
||||||
RPAREN = 64, // ")"
|
LPAREN = 64, // "("
|
||||||
LBRACE = 65, // "{"
|
RPAREN = 65, // ")"
|
||||||
RBRACE = 66, // "}"
|
LBRACE = 66, // "{"
|
||||||
LBRACKET = 67, // "["
|
RBRACE = 67, // "}"
|
||||||
RBRACKET = 68, // "]"
|
LBRACKET = 68, // "["
|
||||||
COMMA = 69, // ","
|
RBRACKET = 69, // "]"
|
||||||
DOT = 70, // "."
|
COMMA = 70, // ","
|
||||||
DOUBLEDOT = 71, // ".."
|
DOT = 71, // "."
|
||||||
ELLIPSIS = 72, // "..."
|
DOUBLEDOT = 72, // ".."
|
||||||
DOUBLECOLON = 73, // "::"
|
ELLIPSIS = 73, // "..."
|
||||||
COLON = 74, // ":"
|
DOUBLECOLON = 74, // "::"
|
||||||
SEMICOLON = 75, // ";"
|
COLON = 75, // ":"
|
||||||
QMARK = 76, // "?"
|
SEMICOLON = 76, // ";"
|
||||||
INCREMENT = 77, // "++"
|
QMARK = 77, // "?"
|
||||||
DECREMENT = 78, // "--"
|
INCREMENT = 78, // "++"
|
||||||
LSHIFT = 79, // "<<"
|
DECREMENT = 79, // "--"
|
||||||
RSHIFT = 80, // ">>"
|
LSHIFT = 80, // "<<"
|
||||||
OR = 81, // "||"
|
RSHIFT = 81, // ">>"
|
||||||
AND = 82, // "&&"
|
OR = 82, // "||"
|
||||||
EQUALITY = 83, // "=="
|
AND = 83, // "&&"
|
||||||
INEQUALITY = 84, // "!="
|
EQUALITY = 84, // "=="
|
||||||
LESS_EQUAL = 85, // "<="
|
INEQUALITY = 85, // "!="
|
||||||
GREATER_EQUAL = 86, // ">="
|
LESS_EQUAL = 86, // "<="
|
||||||
LESS = 87, // "<"
|
GREATER_EQUAL = 87, // ">="
|
||||||
GREATER = 88, // ">"
|
LESS = 88, // "<"
|
||||||
NOT = 89, // "!"
|
GREATER = 89, // ">"
|
||||||
COMPLEMENT = 90, // "~"
|
NOT = 90, // "!"
|
||||||
ASSIGN = 91, // "="
|
COMPLEMENT = 91, // "~"
|
||||||
ASSIGN_ADD = 92, // "+="
|
ASSIGN = 92, // "="
|
||||||
ASSIGN_SUB = 93, // "-="
|
ASSIGN_ADD = 93, // "+="
|
||||||
ASSIGN_MUL = 94, // "*="
|
ASSIGN_SUB = 94, // "-="
|
||||||
ASSIGN_DIV = 95, // "/="
|
ASSIGN_MUL = 95, // "*="
|
||||||
ASSIGN_MOD = 96, // "%="
|
ASSIGN_DIV = 96, // "/="
|
||||||
ASSIGN_BW_OR = 97, // "|="
|
ASSIGN_MOD = 97, // "%="
|
||||||
ASSIGN_BW_AND = 98, // "&="
|
ASSIGN_BW_OR = 98, // "|="
|
||||||
ASSIGN_BW_EXOR = 99, // "^="
|
ASSIGN_BW_AND = 99, // "&="
|
||||||
ASSIGN_RSHIFT = 100, // ">>="
|
ASSIGN_BW_EXOR = 100, // "^="
|
||||||
ASSIGN_LSHIFT = 101, // "<<="
|
ASSIGN_RSHIFT = 101, // ">>="
|
||||||
BITWISE_OR = 102, // "|"
|
ASSIGN_LSHIFT = 102, // "<<="
|
||||||
BITWISE_AND = 103, // "&"
|
BITWISE_OR = 103, // "|"
|
||||||
BITWISE_EXOR = 104, // "^"
|
BITWISE_AND = 104, // "&"
|
||||||
ADD = 105, // "+"
|
BITWISE_EXOR = 105, // "^"
|
||||||
SUB = 106, // "-"
|
ADD = 106, // "+"
|
||||||
MUL = 107, // "*"
|
SUB = 107, // "-"
|
||||||
DIV = 108, // "/"
|
MUL = 108, // "*"
|
||||||
MOD = 109, // "%"
|
DIV = 109, // "/"
|
||||||
PATH = 110, // "path"
|
MOD = 110, // "%"
|
||||||
IDENTIFIER = 111, // "identifier"
|
PATH = 111, // "path"
|
||||||
STRING = 112, // "string literal"
|
IDENTIFIER = 112, // "identifier"
|
||||||
ISTRING = 113, // "localized string"
|
STRING = 113, // "string literal"
|
||||||
HASHSTR = 114, // "hash string"
|
ISTRING = 114, // "localized string"
|
||||||
FLOAT = 115, // "float"
|
HASHSTR = 115, // "hash string"
|
||||||
INTEGER = 116, // "integer"
|
FLOAT = 116, // "float"
|
||||||
SIZEOF = 117, // SIZEOF
|
INTEGER = 117, // "integer"
|
||||||
THEN = 118, // THEN
|
SIZEOF = 118, // SIZEOF
|
||||||
TERN = 119, // TERN
|
THEN = 119, // THEN
|
||||||
NEG = 120, // NEG
|
TERN = 120, // TERN
|
||||||
ANIMREF = 121, // ANIMREF
|
NEG = 121, // NEG
|
||||||
PREINC = 122, // PREINC
|
ANIMREF = 122, // ANIMREF
|
||||||
PREDEC = 123, // PREDEC
|
PREINC = 123, // PREINC
|
||||||
POSTINC = 124, // POSTINC
|
PREDEC = 124, // PREDEC
|
||||||
POSTDEC = 125 // POSTDEC
|
POSTINC = 125, // POSTINC
|
||||||
|
POSTDEC = 126 // POSTDEC
|
||||||
};
|
};
|
||||||
/// Backward compatibility alias (Bison 3.6).
|
/// Backward compatibility alias (Bison 3.6).
|
||||||
typedef token_kind_type yytokentype;
|
typedef token_kind_type yytokentype;
|
||||||
@ -881,7 +885,7 @@ namespace xsk { namespace arc {
|
|||||||
{
|
{
|
||||||
enum symbol_kind_type
|
enum symbol_kind_type
|
||||||
{
|
{
|
||||||
YYNTOKENS = 126, ///< Number of tokens.
|
YYNTOKENS = 127, ///< Number of tokens.
|
||||||
S_YYEMPTY = -2,
|
S_YYEMPTY = -2,
|
||||||
S_YYEOF = 0, // "end of file"
|
S_YYEOF = 0, // "end of file"
|
||||||
S_YYerror = 1, // error
|
S_YYerror = 1, // error
|
||||||
@ -899,217 +903,219 @@ namespace xsk { namespace arc {
|
|||||||
S_ENDON = 13, // "endon"
|
S_ENDON = 13, // "endon"
|
||||||
S_NOTIFY = 14, // "notify"
|
S_NOTIFY = 14, // "notify"
|
||||||
S_WAIT = 15, // "wait"
|
S_WAIT = 15, // "wait"
|
||||||
S_WAITTILL = 16, // "waittill"
|
S_WAITREALTIME = 16, // "waitrealtime"
|
||||||
S_WAITTILLMATCH = 17, // "waittillmatch"
|
S_WAITTILL = 17, // "waittill"
|
||||||
S_WAITTILLFRAMEEND = 18, // "waittillframeend"
|
S_WAITTILLMATCH = 18, // "waittillmatch"
|
||||||
S_IF = 19, // "if"
|
S_WAITTILLFRAMEEND = 19, // "waittillframeend"
|
||||||
S_ELSE = 20, // "else"
|
S_IF = 20, // "if"
|
||||||
S_DO = 21, // "do"
|
S_ELSE = 21, // "else"
|
||||||
S_WHILE = 22, // "while"
|
S_DO = 22, // "do"
|
||||||
S_FOR = 23, // "for"
|
S_WHILE = 23, // "while"
|
||||||
S_FOREACH = 24, // "foreach"
|
S_FOR = 24, // "for"
|
||||||
S_IN = 25, // "in"
|
S_FOREACH = 25, // "foreach"
|
||||||
S_SWITCH = 26, // "switch"
|
S_IN = 26, // "in"
|
||||||
S_CASE = 27, // "case"
|
S_SWITCH = 27, // "switch"
|
||||||
S_DEFAULT = 28, // "default"
|
S_CASE = 28, // "case"
|
||||||
S_BREAK = 29, // "break"
|
S_DEFAULT = 29, // "default"
|
||||||
S_CONTINUE = 30, // "continue"
|
S_BREAK = 30, // "break"
|
||||||
S_RETURN = 31, // "return"
|
S_CONTINUE = 31, // "continue"
|
||||||
S_PROFBEGIN = 32, // "prof_begin"
|
S_RETURN = 32, // "return"
|
||||||
S_PROFEND = 33, // "prof_end"
|
S_PROFBEGIN = 33, // "prof_begin"
|
||||||
S_THREAD = 34, // "thread"
|
S_PROFEND = 34, // "prof_end"
|
||||||
S_TRUE = 35, // "true"
|
S_THREAD = 35, // "thread"
|
||||||
S_FALSE = 36, // "false"
|
S_TRUE = 36, // "true"
|
||||||
S_UNDEFINED = 37, // "undefined"
|
S_FALSE = 37, // "false"
|
||||||
S_SIZE = 38, // "size"
|
S_UNDEFINED = 38, // "undefined"
|
||||||
S_GAME = 39, // "game"
|
S_SIZE = 39, // "size"
|
||||||
S_SELF = 40, // "self"
|
S_GAME = 40, // "game"
|
||||||
S_ANIM = 41, // "anim"
|
S_SELF = 41, // "self"
|
||||||
S_LEVEL = 42, // "level"
|
S_ANIM = 42, // "anim"
|
||||||
S_CONST = 43, // "const"
|
S_LEVEL = 43, // "level"
|
||||||
S_GETNEXTARRAYKEY = 44, // "getnextarraykey"
|
S_CONST = 44, // "const"
|
||||||
S_GETFIRSTARRAYKEY = 45, // "getfirstarraykey"
|
S_GETNEXTARRAYKEY = 45, // "getnextarraykey"
|
||||||
S_GETDVARCOLORALPHA = 46, // "getdvarcoloralpha"
|
S_GETFIRSTARRAYKEY = 46, // "getfirstarraykey"
|
||||||
S_GETDVARCOLORBLUE = 47, // "getdvarcolorblue"
|
S_GETDVARCOLORALPHA = 47, // "getdvarcoloralpha"
|
||||||
S_GETDVARCOLORGREEN = 48, // "getdvarcolorgreen"
|
S_GETDVARCOLORBLUE = 48, // "getdvarcolorblue"
|
||||||
S_GETDVARCOLORRED = 49, // "getdvarcolorred"
|
S_GETDVARCOLORGREEN = 49, // "getdvarcolorgreen"
|
||||||
S_GETDVARVECTOR = 50, // "getdvarvector"
|
S_GETDVARCOLORRED = 50, // "getdvarcolorred"
|
||||||
S_GETDVARFLOAT = 51, // "getdvarfloat"
|
S_GETDVARVECTOR = 51, // "getdvarvector"
|
||||||
S_GETDVARINT = 52, // "getdvarint"
|
S_GETDVARFLOAT = 52, // "getdvarfloat"
|
||||||
S_GETDVAR = 53, // "getdvar"
|
S_GETDVARINT = 53, // "getdvarint"
|
||||||
S_GETTIME = 54, // "gettime"
|
S_GETDVAR = 54, // "getdvar"
|
||||||
S_ABS = 55, // "abs"
|
S_GETTIME = 55, // "gettime"
|
||||||
S_VECTORTOANGLES = 56, // "vectortoangles"
|
S_ABS = 56, // "abs"
|
||||||
S_ANGLECLAMP180 = 57, // "angleclamp180"
|
S_VECTORTOANGLES = 57, // "vectortoangles"
|
||||||
S_ANGLESTOFORWARD = 58, // "anglestoforward"
|
S_ANGLECLAMP180 = 58, // "angleclamp180"
|
||||||
S_ANGLESTORIGHT = 59, // "anglestoright"
|
S_ANGLESTOFORWARD = 59, // "anglestoforward"
|
||||||
S_ANGLESTOUP = 60, // "anglestoup"
|
S_ANGLESTORIGHT = 60, // "anglestoright"
|
||||||
S_VECTORSCALE = 61, // "vectorscale"
|
S_ANGLESTOUP = 61, // "anglestoup"
|
||||||
S_ISDEFINED = 62, // "isdefined"
|
S_VECTORSCALE = 62, // "vectorscale"
|
||||||
S_LPAREN = 63, // "("
|
S_ISDEFINED = 63, // "isdefined"
|
||||||
S_RPAREN = 64, // ")"
|
S_LPAREN = 64, // "("
|
||||||
S_LBRACE = 65, // "{"
|
S_RPAREN = 65, // ")"
|
||||||
S_RBRACE = 66, // "}"
|
S_LBRACE = 66, // "{"
|
||||||
S_LBRACKET = 67, // "["
|
S_RBRACE = 67, // "}"
|
||||||
S_RBRACKET = 68, // "]"
|
S_LBRACKET = 68, // "["
|
||||||
S_COMMA = 69, // ","
|
S_RBRACKET = 69, // "]"
|
||||||
S_DOT = 70, // "."
|
S_COMMA = 70, // ","
|
||||||
S_DOUBLEDOT = 71, // ".."
|
S_DOT = 71, // "."
|
||||||
S_ELLIPSIS = 72, // "..."
|
S_DOUBLEDOT = 72, // ".."
|
||||||
S_DOUBLECOLON = 73, // "::"
|
S_ELLIPSIS = 73, // "..."
|
||||||
S_COLON = 74, // ":"
|
S_DOUBLECOLON = 74, // "::"
|
||||||
S_SEMICOLON = 75, // ";"
|
S_COLON = 75, // ":"
|
||||||
S_QMARK = 76, // "?"
|
S_SEMICOLON = 76, // ";"
|
||||||
S_INCREMENT = 77, // "++"
|
S_QMARK = 77, // "?"
|
||||||
S_DECREMENT = 78, // "--"
|
S_INCREMENT = 78, // "++"
|
||||||
S_LSHIFT = 79, // "<<"
|
S_DECREMENT = 79, // "--"
|
||||||
S_RSHIFT = 80, // ">>"
|
S_LSHIFT = 80, // "<<"
|
||||||
S_OR = 81, // "||"
|
S_RSHIFT = 81, // ">>"
|
||||||
S_AND = 82, // "&&"
|
S_OR = 82, // "||"
|
||||||
S_EQUALITY = 83, // "=="
|
S_AND = 83, // "&&"
|
||||||
S_INEQUALITY = 84, // "!="
|
S_EQUALITY = 84, // "=="
|
||||||
S_LESS_EQUAL = 85, // "<="
|
S_INEQUALITY = 85, // "!="
|
||||||
S_GREATER_EQUAL = 86, // ">="
|
S_LESS_EQUAL = 86, // "<="
|
||||||
S_LESS = 87, // "<"
|
S_GREATER_EQUAL = 87, // ">="
|
||||||
S_GREATER = 88, // ">"
|
S_LESS = 88, // "<"
|
||||||
S_NOT = 89, // "!"
|
S_GREATER = 89, // ">"
|
||||||
S_COMPLEMENT = 90, // "~"
|
S_NOT = 90, // "!"
|
||||||
S_ASSIGN = 91, // "="
|
S_COMPLEMENT = 91, // "~"
|
||||||
S_ASSIGN_ADD = 92, // "+="
|
S_ASSIGN = 92, // "="
|
||||||
S_ASSIGN_SUB = 93, // "-="
|
S_ASSIGN_ADD = 93, // "+="
|
||||||
S_ASSIGN_MUL = 94, // "*="
|
S_ASSIGN_SUB = 94, // "-="
|
||||||
S_ASSIGN_DIV = 95, // "/="
|
S_ASSIGN_MUL = 95, // "*="
|
||||||
S_ASSIGN_MOD = 96, // "%="
|
S_ASSIGN_DIV = 96, // "/="
|
||||||
S_ASSIGN_BW_OR = 97, // "|="
|
S_ASSIGN_MOD = 97, // "%="
|
||||||
S_ASSIGN_BW_AND = 98, // "&="
|
S_ASSIGN_BW_OR = 98, // "|="
|
||||||
S_ASSIGN_BW_EXOR = 99, // "^="
|
S_ASSIGN_BW_AND = 99, // "&="
|
||||||
S_ASSIGN_RSHIFT = 100, // ">>="
|
S_ASSIGN_BW_EXOR = 100, // "^="
|
||||||
S_ASSIGN_LSHIFT = 101, // "<<="
|
S_ASSIGN_RSHIFT = 101, // ">>="
|
||||||
S_BITWISE_OR = 102, // "|"
|
S_ASSIGN_LSHIFT = 102, // "<<="
|
||||||
S_BITWISE_AND = 103, // "&"
|
S_BITWISE_OR = 103, // "|"
|
||||||
S_BITWISE_EXOR = 104, // "^"
|
S_BITWISE_AND = 104, // "&"
|
||||||
S_ADD = 105, // "+"
|
S_BITWISE_EXOR = 105, // "^"
|
||||||
S_SUB = 106, // "-"
|
S_ADD = 106, // "+"
|
||||||
S_MUL = 107, // "*"
|
S_SUB = 107, // "-"
|
||||||
S_DIV = 108, // "/"
|
S_MUL = 108, // "*"
|
||||||
S_MOD = 109, // "%"
|
S_DIV = 109, // "/"
|
||||||
S_PATH = 110, // "path"
|
S_MOD = 110, // "%"
|
||||||
S_IDENTIFIER = 111, // "identifier"
|
S_PATH = 111, // "path"
|
||||||
S_STRING = 112, // "string literal"
|
S_IDENTIFIER = 112, // "identifier"
|
||||||
S_ISTRING = 113, // "localized string"
|
S_STRING = 113, // "string literal"
|
||||||
S_HASHSTR = 114, // "hash string"
|
S_ISTRING = 114, // "localized string"
|
||||||
S_FLOAT = 115, // "float"
|
S_HASHSTR = 115, // "hash string"
|
||||||
S_INTEGER = 116, // "integer"
|
S_FLOAT = 116, // "float"
|
||||||
S_SIZEOF = 117, // SIZEOF
|
S_INTEGER = 117, // "integer"
|
||||||
S_THEN = 118, // THEN
|
S_SIZEOF = 118, // SIZEOF
|
||||||
S_TERN = 119, // TERN
|
S_THEN = 119, // THEN
|
||||||
S_NEG = 120, // NEG
|
S_TERN = 120, // TERN
|
||||||
S_ANIMREF = 121, // ANIMREF
|
S_NEG = 121, // NEG
|
||||||
S_PREINC = 122, // PREINC
|
S_ANIMREF = 122, // ANIMREF
|
||||||
S_PREDEC = 123, // PREDEC
|
S_PREINC = 123, // PREINC
|
||||||
S_POSTINC = 124, // POSTINC
|
S_PREDEC = 124, // PREDEC
|
||||||
S_POSTDEC = 125, // POSTDEC
|
S_POSTINC = 125, // POSTINC
|
||||||
S_YYACCEPT = 126, // $accept
|
S_POSTDEC = 126, // POSTDEC
|
||||||
S_root = 127, // root
|
S_YYACCEPT = 127, // $accept
|
||||||
S_program = 128, // program
|
S_root = 128, // root
|
||||||
S_inline = 129, // inline
|
S_program = 129, // program
|
||||||
S_include = 130, // include
|
S_inline = 130, // inline
|
||||||
S_declaration = 131, // declaration
|
S_include = 131, // include
|
||||||
S_decl_usingtree = 132, // decl_usingtree
|
S_declaration = 132, // declaration
|
||||||
S_decl_function = 133, // decl_function
|
S_decl_usingtree = 133, // decl_usingtree
|
||||||
S_stmt = 134, // stmt
|
S_decl_function = 134, // decl_function
|
||||||
S_stmt_or_dev = 135, // stmt_or_dev
|
S_stmt = 135, // stmt
|
||||||
S_stmt_list = 136, // stmt_list
|
S_stmt_or_dev = 136, // stmt_or_dev
|
||||||
S_stmt_or_dev_list = 137, // stmt_or_dev_list
|
S_stmt_list = 137, // stmt_list
|
||||||
S_stmt_dev = 138, // stmt_dev
|
S_stmt_or_dev_list = 138, // stmt_or_dev_list
|
||||||
S_stmt_comp = 139, // stmt_comp
|
S_stmt_dev = 139, // stmt_dev
|
||||||
S_stmt_expr = 140, // stmt_expr
|
S_stmt_comp = 140, // stmt_comp
|
||||||
S_stmt_call = 141, // stmt_call
|
S_stmt_expr = 141, // stmt_expr
|
||||||
S_stmt_const = 142, // stmt_const
|
S_stmt_call = 142, // stmt_call
|
||||||
S_stmt_assign = 143, // stmt_assign
|
S_stmt_const = 143, // stmt_const
|
||||||
S_stmt_endon = 144, // stmt_endon
|
S_stmt_assign = 144, // stmt_assign
|
||||||
S_stmt_notify = 145, // stmt_notify
|
S_stmt_endon = 145, // stmt_endon
|
||||||
S_stmt_wait = 146, // stmt_wait
|
S_stmt_notify = 146, // stmt_notify
|
||||||
S_stmt_waittill = 147, // stmt_waittill
|
S_stmt_wait = 147, // stmt_wait
|
||||||
S_stmt_waittillmatch = 148, // stmt_waittillmatch
|
S_stmt_waitrealtime = 148, // stmt_waitrealtime
|
||||||
S_stmt_waittillframeend = 149, // stmt_waittillframeend
|
S_stmt_waittill = 149, // stmt_waittill
|
||||||
S_stmt_if = 150, // stmt_if
|
S_stmt_waittillmatch = 150, // stmt_waittillmatch
|
||||||
S_stmt_ifelse = 151, // stmt_ifelse
|
S_stmt_waittillframeend = 151, // stmt_waittillframeend
|
||||||
S_stmt_while = 152, // stmt_while
|
S_stmt_if = 152, // stmt_if
|
||||||
S_stmt_dowhile = 153, // stmt_dowhile
|
S_stmt_ifelse = 153, // stmt_ifelse
|
||||||
S_stmt_for = 154, // stmt_for
|
S_stmt_while = 154, // stmt_while
|
||||||
S_stmt_foreach = 155, // stmt_foreach
|
S_stmt_dowhile = 155, // stmt_dowhile
|
||||||
S_stmt_switch = 156, // stmt_switch
|
S_stmt_for = 156, // stmt_for
|
||||||
S_stmt_case = 157, // stmt_case
|
S_stmt_foreach = 157, // stmt_foreach
|
||||||
S_stmt_default = 158, // stmt_default
|
S_stmt_switch = 158, // stmt_switch
|
||||||
S_stmt_break = 159, // stmt_break
|
S_stmt_case = 159, // stmt_case
|
||||||
S_stmt_continue = 160, // stmt_continue
|
S_stmt_default = 160, // stmt_default
|
||||||
S_stmt_return = 161, // stmt_return
|
S_stmt_break = 161, // stmt_break
|
||||||
S_stmt_prof_begin = 162, // stmt_prof_begin
|
S_stmt_continue = 162, // stmt_continue
|
||||||
S_stmt_prof_end = 163, // stmt_prof_end
|
S_stmt_return = 163, // stmt_return
|
||||||
S_expr = 164, // expr
|
S_stmt_prof_begin = 164, // stmt_prof_begin
|
||||||
S_expr_or_empty = 165, // expr_or_empty
|
S_stmt_prof_end = 165, // stmt_prof_end
|
||||||
S_expr_increment = 166, // expr_increment
|
S_expr = 166, // expr
|
||||||
S_expr_decrement = 167, // expr_decrement
|
S_expr_or_empty = 167, // expr_or_empty
|
||||||
S_expr_assign = 168, // expr_assign
|
S_expr_increment = 168, // expr_increment
|
||||||
S_expr_ternary = 169, // expr_ternary
|
S_expr_decrement = 169, // expr_decrement
|
||||||
S_expr_binary = 170, // expr_binary
|
S_expr_assign = 170, // expr_assign
|
||||||
S_expr_primitive = 171, // expr_primitive
|
S_expr_ternary = 171, // expr_ternary
|
||||||
S_expr_complement = 172, // expr_complement
|
S_expr_binary = 172, // expr_binary
|
||||||
S_expr_negate = 173, // expr_negate
|
S_expr_primitive = 173, // expr_primitive
|
||||||
S_expr_not = 174, // expr_not
|
S_expr_complement = 174, // expr_complement
|
||||||
S_expr_call = 175, // expr_call
|
S_expr_negate = 175, // expr_negate
|
||||||
S_expr_method = 176, // expr_method
|
S_expr_not = 176, // expr_not
|
||||||
S_expr_function = 177, // expr_function
|
S_expr_call = 177, // expr_call
|
||||||
S_expr_pointer = 178, // expr_pointer
|
S_expr_method = 178, // expr_method
|
||||||
S_expr_parameters = 179, // expr_parameters
|
S_expr_function = 179, // expr_function
|
||||||
S_expr_parameters_default = 180, // expr_parameters_default
|
S_expr_pointer = 180, // expr_pointer
|
||||||
S_expr_arguments = 181, // expr_arguments
|
S_expr_parameters = 181, // expr_parameters
|
||||||
S_expr_arguments_no_empty = 182, // expr_arguments_no_empty
|
S_expr_parameters_default = 182, // expr_parameters_default
|
||||||
S_expr_getnextarraykey = 183, // expr_getnextarraykey
|
S_expr_arguments = 183, // expr_arguments
|
||||||
S_expr_getfirstarraykey = 184, // expr_getfirstarraykey
|
S_expr_arguments_no_empty = 184, // expr_arguments_no_empty
|
||||||
S_expr_getdvarcoloralpha = 185, // expr_getdvarcoloralpha
|
S_expr_getnextarraykey = 185, // expr_getnextarraykey
|
||||||
S_expr_getdvarcolorblue = 186, // expr_getdvarcolorblue
|
S_expr_getfirstarraykey = 186, // expr_getfirstarraykey
|
||||||
S_expr_getdvarcolorgreen = 187, // expr_getdvarcolorgreen
|
S_expr_getdvarcoloralpha = 187, // expr_getdvarcoloralpha
|
||||||
S_expr_getdvarcolorred = 188, // expr_getdvarcolorred
|
S_expr_getdvarcolorblue = 188, // expr_getdvarcolorblue
|
||||||
S_expr_getdvarvector = 189, // expr_getdvarvector
|
S_expr_getdvarcolorgreen = 189, // expr_getdvarcolorgreen
|
||||||
S_expr_getdvarfloat = 190, // expr_getdvarfloat
|
S_expr_getdvarcolorred = 190, // expr_getdvarcolorred
|
||||||
S_expr_getdvarint = 191, // expr_getdvarint
|
S_expr_getdvarvector = 191, // expr_getdvarvector
|
||||||
S_expr_getdvar = 192, // expr_getdvar
|
S_expr_getdvarfloat = 192, // expr_getdvarfloat
|
||||||
S_expr_gettime = 193, // expr_gettime
|
S_expr_getdvarint = 193, // expr_getdvarint
|
||||||
S_expr_abs = 194, // expr_abs
|
S_expr_getdvar = 194, // expr_getdvar
|
||||||
S_expr_vectortoangles = 195, // expr_vectortoangles
|
S_expr_gettime = 195, // expr_gettime
|
||||||
S_expr_angleclamp180 = 196, // expr_angleclamp180
|
S_expr_abs = 196, // expr_abs
|
||||||
S_expr_anglestoforward = 197, // expr_anglestoforward
|
S_expr_vectortoangles = 197, // expr_vectortoangles
|
||||||
S_expr_anglestoright = 198, // expr_anglestoright
|
S_expr_angleclamp180 = 198, // expr_angleclamp180
|
||||||
S_expr_anglestoup = 199, // expr_anglestoup
|
S_expr_anglestoforward = 199, // expr_anglestoforward
|
||||||
S_expr_vectorscale = 200, // expr_vectorscale
|
S_expr_anglestoright = 200, // expr_anglestoright
|
||||||
S_expr_isdefined = 201, // expr_isdefined
|
S_expr_anglestoup = 201, // expr_anglestoup
|
||||||
S_expr_reference = 202, // expr_reference
|
S_expr_vectorscale = 202, // expr_vectorscale
|
||||||
S_expr_array = 203, // expr_array
|
S_expr_isdefined = 203, // expr_isdefined
|
||||||
S_expr_field = 204, // expr_field
|
S_expr_reference = 204, // expr_reference
|
||||||
S_expr_size = 205, // expr_size
|
S_expr_array = 205, // expr_array
|
||||||
S_expr_paren = 206, // expr_paren
|
S_expr_field = 206, // expr_field
|
||||||
S_expr_object = 207, // expr_object
|
S_expr_size = 207, // expr_size
|
||||||
S_expr_empty_array = 208, // expr_empty_array
|
S_expr_paren = 208, // expr_paren
|
||||||
S_expr_undefined = 209, // expr_undefined
|
S_expr_object = 209, // expr_object
|
||||||
S_expr_game = 210, // expr_game
|
S_expr_empty_array = 210, // expr_empty_array
|
||||||
S_expr_self = 211, // expr_self
|
S_expr_undefined = 211, // expr_undefined
|
||||||
S_expr_anim = 212, // expr_anim
|
S_expr_game = 212, // expr_game
|
||||||
S_expr_level = 213, // expr_level
|
S_expr_self = 213, // expr_self
|
||||||
S_expr_animation = 214, // expr_animation
|
S_expr_anim = 214, // expr_anim
|
||||||
S_expr_animtree = 215, // expr_animtree
|
S_expr_level = 215, // expr_level
|
||||||
S_expr_identifier_nosize = 216, // expr_identifier_nosize
|
S_expr_animation = 216, // expr_animation
|
||||||
S_expr_identifier = 217, // expr_identifier
|
S_expr_animtree = 217, // expr_animtree
|
||||||
S_expr_path = 218, // expr_path
|
S_expr_identifier_nosize = 218, // expr_identifier_nosize
|
||||||
S_expr_istring = 219, // expr_istring
|
S_expr_identifier = 219, // expr_identifier
|
||||||
S_expr_string = 220, // expr_string
|
S_expr_path = 220, // expr_path
|
||||||
S_expr_vector = 221, // expr_vector
|
S_expr_istring = 221, // expr_istring
|
||||||
S_expr_hash = 222, // expr_hash
|
S_expr_string = 222, // expr_string
|
||||||
S_expr_float = 223, // expr_float
|
S_expr_vector = 223, // expr_vector
|
||||||
S_expr_integer = 224, // expr_integer
|
S_expr_hash = 224, // expr_hash
|
||||||
S_expr_false = 225, // expr_false
|
S_expr_float = 225, // expr_float
|
||||||
S_expr_true = 226 // expr_true
|
S_expr_integer = 226, // expr_integer
|
||||||
|
S_expr_false = 227, // expr_false
|
||||||
|
S_expr_true = 228 // expr_true
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1481,6 +1487,10 @@ namespace xsk { namespace arc {
|
|||||||
value.move< stmt_wait::ptr > (std::move (that.value));
|
value.move< stmt_wait::ptr > (std::move (that.value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case symbol_kind::S_stmt_waitrealtime: // stmt_waitrealtime
|
||||||
|
value.move< stmt_waitrealtime::ptr > (std::move (that.value));
|
||||||
|
break;
|
||||||
|
|
||||||
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
||||||
value.move< stmt_waittill::ptr > (std::move (that.value));
|
value.move< stmt_waittill::ptr > (std::move (that.value));
|
||||||
break;
|
break;
|
||||||
@ -2612,6 +2622,20 @@ namespace xsk { namespace arc {
|
|||||||
{}
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 201103L <= YY_CPLUSPLUS
|
||||||
|
basic_symbol (typename Base::kind_type t, stmt_waitrealtime::ptr&& v, location_type&& l)
|
||||||
|
: Base (t)
|
||||||
|
, value (std::move (v))
|
||||||
|
, location (std::move (l))
|
||||||
|
{}
|
||||||
|
#else
|
||||||
|
basic_symbol (typename Base::kind_type t, const stmt_waitrealtime::ptr& v, const location_type& l)
|
||||||
|
: Base (t)
|
||||||
|
, value (v)
|
||||||
|
, location (l)
|
||||||
|
{}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 201103L <= YY_CPLUSPLUS
|
#if 201103L <= YY_CPLUSPLUS
|
||||||
basic_symbol (typename Base::kind_type t, stmt_waittill::ptr&& v, location_type&& l)
|
basic_symbol (typename Base::kind_type t, stmt_waittill::ptr&& v, location_type&& l)
|
||||||
: Base (t)
|
: Base (t)
|
||||||
@ -3027,6 +3051,10 @@ switch (yykind)
|
|||||||
value.template destroy< stmt_wait::ptr > ();
|
value.template destroy< stmt_wait::ptr > ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case symbol_kind::S_stmt_waitrealtime: // stmt_waitrealtime
|
||||||
|
value.template destroy< stmt_waitrealtime::ptr > ();
|
||||||
|
break;
|
||||||
|
|
||||||
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
||||||
value.template destroy< stmt_waittill::ptr > ();
|
value.template destroy< stmt_waittill::ptr > ();
|
||||||
break;
|
break;
|
||||||
@ -3445,6 +3473,21 @@ switch (yykind)
|
|||||||
return symbol_type (token::WAIT, l);
|
return symbol_type (token::WAIT, l);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 201103L <= YY_CPLUSPLUS
|
||||||
|
static
|
||||||
|
symbol_type
|
||||||
|
make_WAITREALTIME (location_type l)
|
||||||
|
{
|
||||||
|
return symbol_type (token::WAITREALTIME, std::move (l));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static
|
||||||
|
symbol_type
|
||||||
|
make_WAITREALTIME (const location_type& l)
|
||||||
|
{
|
||||||
|
return symbol_type (token::WAITREALTIME, l);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if 201103L <= YY_CPLUSPLUS
|
#if 201103L <= YY_CPLUSPLUS
|
||||||
static
|
static
|
||||||
symbol_type
|
symbol_type
|
||||||
@ -5439,8 +5482,8 @@ switch (yykind)
|
|||||||
/// Constants.
|
/// Constants.
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
yylast_ = 3330, ///< Last index in yytable_.
|
yylast_ = 3307, ///< Last index in yytable_.
|
||||||
yynnts_ = 101, ///< Number of nonterminal symbols.
|
yynnts_ = 102, ///< Number of nonterminal symbols.
|
||||||
yyfinal_ = 28 ///< Termination state number.
|
yyfinal_ = 28 ///< Termination state number.
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -5804,6 +5847,10 @@ switch (yykind)
|
|||||||
value.copy< stmt_wait::ptr > (YY_MOVE (that.value));
|
value.copy< stmt_wait::ptr > (YY_MOVE (that.value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case symbol_kind::S_stmt_waitrealtime: // stmt_waitrealtime
|
||||||
|
value.copy< stmt_waitrealtime::ptr > (YY_MOVE (that.value));
|
||||||
|
break;
|
||||||
|
|
||||||
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
||||||
value.copy< stmt_waittill::ptr > (YY_MOVE (that.value));
|
value.copy< stmt_waittill::ptr > (YY_MOVE (that.value));
|
||||||
break;
|
break;
|
||||||
@ -6186,6 +6233,10 @@ switch (yykind)
|
|||||||
value.move< stmt_wait::ptr > (YY_MOVE (s.value));
|
value.move< stmt_wait::ptr > (YY_MOVE (s.value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case symbol_kind::S_stmt_waitrealtime: // stmt_waitrealtime
|
||||||
|
value.move< stmt_waitrealtime::ptr > (YY_MOVE (s.value));
|
||||||
|
break;
|
||||||
|
|
||||||
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
case symbol_kind::S_stmt_waittill: // stmt_waittill
|
||||||
value.move< stmt_waittill::ptr > (YY_MOVE (s.value));
|
value.move< stmt_waittill::ptr > (YY_MOVE (s.value));
|
||||||
break;
|
break;
|
||||||
@ -6269,7 +6320,7 @@ switch (yykind)
|
|||||||
|
|
||||||
#line 13 "parser.ypp"
|
#line 13 "parser.ypp"
|
||||||
} } // xsk::arc
|
} } // xsk::arc
|
||||||
#line 6273 "parser.hpp"
|
#line 6324 "parser.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,10 +49,10 @@ private:
|
|||||||
auto dump_stmt_endon(stmt_endon const& stm) -> void;
|
auto dump_stmt_endon(stmt_endon const& stm) -> void;
|
||||||
auto dump_stmt_notify(stmt_notify const& stm) -> void;
|
auto dump_stmt_notify(stmt_notify const& stm) -> void;
|
||||||
auto dump_stmt_wait(stmt_wait const& stm) -> void;
|
auto dump_stmt_wait(stmt_wait const& stm) -> void;
|
||||||
|
auto dump_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void;
|
||||||
auto dump_stmt_waittill(stmt_waittill const& stm) -> void;
|
auto dump_stmt_waittill(stmt_waittill const& stm) -> void;
|
||||||
auto dump_stmt_waittillmatch(stmt_waittillmatch const& stm) -> void;
|
auto dump_stmt_waittillmatch(stmt_waittillmatch const& stm) -> void;
|
||||||
auto dump_stmt_waittillframeend(stmt_waittillframeend const& stm) -> void;
|
auto dump_stmt_waittillframeend(stmt_waittillframeend const& stm) -> void;
|
||||||
auto dump_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void;
|
|
||||||
auto dump_stmt_if(stmt_if const& stm) -> void;
|
auto dump_stmt_if(stmt_if const& stm) -> void;
|
||||||
auto dump_stmt_ifelse(stmt_ifelse const& stm) -> void;
|
auto dump_stmt_ifelse(stmt_ifelse const& stm) -> void;
|
||||||
auto dump_stmt_while(stmt_while const& stm) -> void;
|
auto dump_stmt_while(stmt_while const& stm) -> void;
|
||||||
|
@ -411,10 +411,10 @@ XSK_ARC_STMT_IS(stmt_expr)
|
|||||||
XSK_ARC_STMT_IS(stmt_endon)
|
XSK_ARC_STMT_IS(stmt_endon)
|
||||||
XSK_ARC_STMT_IS(stmt_notify)
|
XSK_ARC_STMT_IS(stmt_notify)
|
||||||
XSK_ARC_STMT_IS(stmt_wait)
|
XSK_ARC_STMT_IS(stmt_wait)
|
||||||
|
XSK_ARC_STMT_IS(stmt_waitrealtime)
|
||||||
XSK_ARC_STMT_IS(stmt_waittill)
|
XSK_ARC_STMT_IS(stmt_waittill)
|
||||||
XSK_ARC_STMT_IS(stmt_waittillmatch)
|
XSK_ARC_STMT_IS(stmt_waittillmatch)
|
||||||
XSK_ARC_STMT_IS(stmt_waittillframeend)
|
XSK_ARC_STMT_IS(stmt_waittillframeend)
|
||||||
XSK_ARC_STMT_IS(stmt_waitrealtime)
|
|
||||||
XSK_ARC_STMT_IS(stmt_if)
|
XSK_ARC_STMT_IS(stmt_if)
|
||||||
XSK_ARC_STMT_IS(stmt_ifelse)
|
XSK_ARC_STMT_IS(stmt_ifelse)
|
||||||
XSK_ARC_STMT_IS(stmt_while)
|
XSK_ARC_STMT_IS(stmt_while)
|
||||||
@ -742,6 +742,10 @@ stmt_wait::stmt_wait(location const& loc, expr::ptr time) : stmt{ type::stmt_wai
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stmt_waitrealtime::stmt_waitrealtime(location const& loc, expr::ptr time) : stmt{ type::stmt_waitrealtime, loc }, time{ std::move(time) }
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
stmt_waittill::stmt_waittill(location const& loc, expr::ptr obj, expr::ptr event, expr_arguments::ptr args) : stmt{ type::stmt_waittill, loc }, obj{ std::move(obj) }, event{ std::move(event) }, args{ std::move(args) }
|
stmt_waittill::stmt_waittill(location const& loc, expr::ptr obj, expr::ptr event, expr_arguments::ptr args) : stmt{ type::stmt_waittill, loc }, obj{ std::move(obj) }, event{ std::move(event) }, args{ std::move(args) }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -754,10 +758,6 @@ stmt_waittillframeend::stmt_waittillframeend(location const& loc) : stmt{ type::
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
stmt_waitrealtime::stmt_waitrealtime(location const& loc, expr::ptr time) : stmt{ type::stmt_waitrealtime, loc }, time{ std::move(time) }
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
stmt_if::stmt_if(location const& loc, expr::ptr test, stmt::ptr body) : stmt{ type::stmt_if, loc }, test{ std::move(test) }, body{ std::move(body) }
|
stmt_if::stmt_if(location const& loc, expr::ptr test, stmt::ptr body) : stmt{ type::stmt_if, loc }, test{ std::move(test) }, body{ std::move(body) }
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@ auto token::to_string() -> std::string
|
|||||||
case token::ENDON: return "endon";
|
case token::ENDON: return "endon";
|
||||||
case token::NOTIFY: return "notify";
|
case token::NOTIFY: return "notify";
|
||||||
case token::WAIT: return "wait";
|
case token::WAIT: return "wait";
|
||||||
|
case token::WAITREALTIME: return "waitrealtime";
|
||||||
case token::WAITTILL: return "waittill";
|
case token::WAITTILL: return "waittill";
|
||||||
case token::WAITTILLMATCH: return "waittillmatch";
|
case token::WAITTILLMATCH: return "waittillmatch";
|
||||||
case token::WAITTILLFRAMEEND: return "waittillframeend";
|
case token::WAITTILLFRAMEEND: return "waittillframeend";
|
||||||
|
@ -161,6 +161,9 @@ auto compiler::emit_stmt(stmt const& stm) -> void
|
|||||||
case node::stmt_wait:
|
case node::stmt_wait:
|
||||||
emit_stmt_wait(stm.as<stmt_wait>());
|
emit_stmt_wait(stm.as<stmt_wait>());
|
||||||
break;
|
break;
|
||||||
|
case node::stmt_waitrealtime:
|
||||||
|
emit_stmt_waitrealtime(stm.as<stmt_waitrealtime>());
|
||||||
|
break;
|
||||||
case node::stmt_waittill:
|
case node::stmt_waittill:
|
||||||
emit_stmt_waittill(stm.as<stmt_waittill>());
|
emit_stmt_waittill(stm.as<stmt_waittill>());
|
||||||
break;
|
break;
|
||||||
@ -294,6 +297,12 @@ auto compiler::emit_stmt_wait(stmt_wait const& stm) -> void
|
|||||||
emit_opcode(opcode::OP_Wait);
|
emit_opcode(opcode::OP_Wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto compiler::emit_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void
|
||||||
|
{
|
||||||
|
emit_expr(*stm.time);
|
||||||
|
emit_opcode(opcode::OP_RealWait);
|
||||||
|
}
|
||||||
|
|
||||||
auto compiler::emit_stmt_waittill(stmt_waittill const& stm) -> void
|
auto compiler::emit_stmt_waittill(stmt_waittill const& stm) -> void
|
||||||
{
|
{
|
||||||
emit_expr(*stm.event);
|
emit_expr(*stm.event);
|
||||||
|
@ -2037,15 +2037,15 @@ auto decompiler::process_stmt(stmt& stm) -> void
|
|||||||
case node::stmt_wait:
|
case node::stmt_wait:
|
||||||
process_stmt_wait(stm.as<stmt_wait>());
|
process_stmt_wait(stm.as<stmt_wait>());
|
||||||
break;
|
break;
|
||||||
|
case node::stmt_waitrealtime:
|
||||||
|
process_stmt_waitrealtime(stm.as<stmt_waitrealtime>());
|
||||||
|
break;
|
||||||
case node::stmt_waittill:
|
case node::stmt_waittill:
|
||||||
process_stmt_waittill(stm.as<stmt_waittill>());
|
process_stmt_waittill(stm.as<stmt_waittill>());
|
||||||
break;
|
break;
|
||||||
case node::stmt_waittillmatch:
|
case node::stmt_waittillmatch:
|
||||||
process_stmt_waittillmatch(stm.as<stmt_waittillmatch>());
|
process_stmt_waittillmatch(stm.as<stmt_waittillmatch>());
|
||||||
break;
|
break;
|
||||||
case node::stmt_waitrealtime:
|
|
||||||
process_stmt_waitrealtime(stm.as<stmt_waitrealtime>());
|
|
||||||
break;
|
|
||||||
case node::stmt_if:
|
case node::stmt_if:
|
||||||
process_stmt_if(stm.as<stmt_if>());
|
process_stmt_if(stm.as<stmt_if>());
|
||||||
break;
|
break;
|
||||||
@ -2135,6 +2135,11 @@ auto decompiler::process_stmt_wait(stmt_wait& stm) -> void
|
|||||||
process_expr(stm.time);
|
process_expr(stm.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto decompiler::process_stmt_waitrealtime(stmt_waitrealtime& stm) -> void
|
||||||
|
{
|
||||||
|
process_expr(stm.time);
|
||||||
|
}
|
||||||
|
|
||||||
auto decompiler::process_stmt_waittill(stmt_waittill& stm) -> void
|
auto decompiler::process_stmt_waittill(stmt_waittill& stm) -> void
|
||||||
{
|
{
|
||||||
process_expr(stm.event);
|
process_expr(stm.event);
|
||||||
@ -2153,11 +2158,6 @@ auto decompiler::process_stmt_waittillmatch(stmt_waittillmatch& stm) -> void
|
|||||||
process_expr(stm.obj);
|
process_expr(stm.obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto decompiler::process_stmt_waitrealtime(stmt_waitrealtime& stm) -> void
|
|
||||||
{
|
|
||||||
process_expr(stm.time);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto decompiler::process_stmt_if(stmt_if& stm) -> void
|
auto decompiler::process_stmt_if(stmt_if& stm) -> void
|
||||||
{
|
{
|
||||||
process_expr(stm.test);
|
process_expr(stm.test);
|
||||||
|
4166
src/arc/parser.cpp
4166
src/arc/parser.cpp
File diff suppressed because it is too large
Load Diff
@ -309,6 +309,9 @@ auto source::dump_stmt(stmt const& stm) -> void
|
|||||||
case node::stmt_wait:
|
case node::stmt_wait:
|
||||||
dump_stmt_wait(stm.as<stmt_wait>());
|
dump_stmt_wait(stm.as<stmt_wait>());
|
||||||
break;
|
break;
|
||||||
|
case node::stmt_waitrealtime:
|
||||||
|
dump_stmt_waitrealtime(stm.as<stmt_waitrealtime>());
|
||||||
|
break;
|
||||||
case node::stmt_waittill:
|
case node::stmt_waittill:
|
||||||
dump_stmt_waittill(stm.as<stmt_waittill>());
|
dump_stmt_waittill(stm.as<stmt_waittill>());
|
||||||
break;
|
break;
|
||||||
@ -318,9 +321,6 @@ auto source::dump_stmt(stmt const& stm) -> void
|
|||||||
case node::stmt_waittillframeend:
|
case node::stmt_waittillframeend:
|
||||||
dump_stmt_waittillframeend(stm.as<stmt_waittillframeend>());
|
dump_stmt_waittillframeend(stm.as<stmt_waittillframeend>());
|
||||||
break;
|
break;
|
||||||
case node::stmt_waitrealtime:
|
|
||||||
dump_stmt_waitrealtime(stm.as<stmt_waitrealtime>());
|
|
||||||
break;
|
|
||||||
case node::stmt_if:
|
case node::stmt_if:
|
||||||
dump_stmt_if(stm.as<stmt_if>());
|
dump_stmt_if(stm.as<stmt_if>());
|
||||||
break;
|
break;
|
||||||
@ -521,6 +521,22 @@ auto source::dump_stmt_wait(stmt_wait const& stm) -> void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto source::dump_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void
|
||||||
|
{
|
||||||
|
if (stm.time->is<expr_paren>())
|
||||||
|
{
|
||||||
|
fmt::format_to(std::back_inserter(buf_), "waitrealtime");
|
||||||
|
dump_expr(*stm.time);
|
||||||
|
fmt::format_to(std::back_inserter(buf_), ";");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fmt::format_to(std::back_inserter(buf_), "waitrealtime( ");
|
||||||
|
dump_expr(*stm.time);
|
||||||
|
fmt::format_to(std::back_inserter(buf_), " );");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto source::dump_stmt_waittill(stmt_waittill const& stm) -> void
|
auto source::dump_stmt_waittill(stmt_waittill const& stm) -> void
|
||||||
{
|
{
|
||||||
dump_expr(*stm.obj);
|
dump_expr(*stm.obj);
|
||||||
@ -564,22 +580,6 @@ auto source::dump_stmt_waittillframeend(stmt_waittillframeend const&) -> void
|
|||||||
fmt::format_to(std::back_inserter(buf_), "waittillframeend;");
|
fmt::format_to(std::back_inserter(buf_), "waittillframeend;");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto source::dump_stmt_waitrealtime(stmt_waitrealtime const& stm) -> void
|
|
||||||
{
|
|
||||||
if (stm.time->is<expr_paren>())
|
|
||||||
{
|
|
||||||
fmt::format_to(std::back_inserter(buf_), "waitrealtime");
|
|
||||||
dump_expr(*stm.time);
|
|
||||||
fmt::format_to(std::back_inserter(buf_), ";");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fmt::format_to(std::back_inserter(buf_), "waitrealtime( ");
|
|
||||||
dump_expr(*stm.time);
|
|
||||||
fmt::format_to(std::back_inserter(buf_), " );");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto source::dump_stmt_if(stmt_if const& stm) -> void
|
auto source::dump_stmt_if(stmt_if const& stm) -> void
|
||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(buf_), "if ( ");
|
fmt::format_to(std::back_inserter(buf_), "if ( ");
|
||||||
|
Loading…
Reference in New Issue
Block a user