add treyarch const locals

This commit is contained in:
xensik
2022-10-20 17:19:34 +02:00
parent e5d6196da1
commit 9b7ee7971d
8 changed files with 1722 additions and 1730 deletions

View File

@ -415,6 +415,9 @@ stmt_expr::stmt_expr(const location& loc, ast::expr expr) : node(kind::stmt_expr
stmt_call::stmt_call(ast::expr expr) : node(kind::stmt_call), expr(std::move(expr)) {}
stmt_call::stmt_call(const location& loc, ast::expr expr) : node(kind::stmt_call, loc), expr(std::move(expr)) {}
stmt_const::stmt_const(expr_identifier::ptr lvalue, expr rvalue) : node(kind::stmt_const), lvalue(std::move(lvalue)), rvalue(std::move(rvalue)) {}
stmt_const::stmt_const(const location& loc, expr_identifier::ptr lvalue, expr rvalue) : node(kind::stmt_const, loc), lvalue(std::move(lvalue)), rvalue(std::move(rvalue)) {}
stmt_assign::stmt_assign(ast::expr expr) : node(kind::stmt_assign), expr(std::move(expr)) {}
stmt_assign::stmt_assign(const location& loc, ast::expr expr) : node(kind::stmt_assign, loc), expr(std::move(expr)) {}
@ -492,9 +495,6 @@ stmt_prof_end::stmt_prof_end(const location& loc, expr_arguments::ptr args) : no
decl_thread::decl_thread(expr_identifier::ptr name, expr_parameters::ptr params, stmt_list::ptr stmt, export_flags flags) : node(kind::decl_thread), name(std::move(name)), params(std::move(params)), stmt(std::move(stmt)), flags(flags) {}
decl_thread::decl_thread(const location& loc, expr_identifier::ptr name, expr_parameters::ptr params, stmt_list::ptr stmt, export_flags flags) : node(kind::decl_thread, loc), name(std::move(name)), params(std::move(params)), stmt(std::move(stmt)), flags(flags) {}
decl_constant::decl_constant(expr_identifier::ptr name, expr value) : node(kind::decl_constant), name(std::move(name)), value(std::move(value)) {}
decl_constant::decl_constant(const location& loc, expr_identifier::ptr name, expr value) : node(kind::decl_constant, loc), name(std::move(name)), value(std::move(value)) {}
decl_usingtree::decl_usingtree(expr_string::ptr name) : node(kind::decl_usingtree), name(std::move(name)) {}
decl_usingtree::decl_usingtree(const location& loc, expr_string::ptr name) : node(kind::decl_usingtree, loc), name(std::move(name)) {}
@ -1086,6 +1086,11 @@ auto stmt_call::print() const -> std::string
return expr.print() + ";";
};
auto stmt_const::print() const -> std::string
{
return "const "s + lvalue->print() + " = " + rvalue.print() + ";";
};
auto stmt_assign::print() const -> std::string
{
return expr.print() + ";";
@ -1382,11 +1387,6 @@ auto decl_thread::print() const -> std::string
return data;
}
auto decl_constant::print() const -> std::string
{
return name->print() + " = "s + value.print() + ";\n";
}
auto decl_usingtree::print() const -> std::string
{
return "#using_animtree"s + "(" + name->print() + ");\n";
@ -1846,6 +1846,7 @@ stmt::~stmt()
case kind::stmt_dev: as_dev.~unique_ptr(); return;
case kind::stmt_expr: as_expr.~unique_ptr(); return;
case kind::stmt_call: as_call.~unique_ptr(); return;
case kind::stmt_const: as_const.~unique_ptr(); return;
case kind::stmt_assign: as_assign.~unique_ptr(); return;
case kind::stmt_endon: as_endon.~unique_ptr(); return;
case kind::stmt_notify: as_notify.~unique_ptr(); return;
@ -1929,7 +1930,6 @@ decl::~decl()
case kind::decl_dev_begin: as_dev_begin.~unique_ptr(); return;
case kind::decl_dev_end: as_dev_end.~unique_ptr(); return;
case kind::decl_thread: as_thread.~unique_ptr(); return;
case kind::decl_constant: as_constant.~unique_ptr(); return;
case kind::decl_usingtree: as_usingtree.~unique_ptr(); return;
default: return;
}

View File

@ -98,6 +98,7 @@ enum class kind
stmt_dev,
stmt_expr,
stmt_call,
stmt_const,
stmt_assign,
stmt_endon,
stmt_notify,
@ -122,7 +123,6 @@ enum class kind
stmt_prof_begin,
stmt_prof_end,
decl_thread,
decl_constant,
decl_usingtree,
decl_dev_begin,
decl_dev_end,
@ -232,6 +232,7 @@ struct stmt_list;
struct stmt_dev;
struct stmt_expr;
struct stmt_call;
struct stmt_const;
struct stmt_assign;
struct stmt_endon;
struct stmt_notify;
@ -256,7 +257,6 @@ struct stmt_breakpoint;
struct stmt_prof_begin;
struct stmt_prof_end;
struct decl_thread;
struct decl_constant;
struct decl_usingtree;
struct decl_dev_begin;
struct decl_dev_end;
@ -405,6 +405,7 @@ union stmt
std::unique_ptr<stmt_dev> as_dev;
std::unique_ptr<stmt_expr> as_expr;
std::unique_ptr<stmt_call> as_call;
std::unique_ptr<stmt_const> as_const;
std::unique_ptr<stmt_assign> as_assign;
std::unique_ptr<stmt_endon> as_endon;
std::unique_ptr<stmt_notify> as_notify;
@ -459,7 +460,6 @@ union decl
std::unique_ptr<decl_dev_begin> as_dev_begin;
std::unique_ptr<decl_dev_end> as_dev_end;
std::unique_ptr<decl_usingtree> as_usingtree;
std::unique_ptr<decl_constant> as_constant;
std::unique_ptr<decl_thread> as_thread;
decl();
@ -1457,6 +1457,18 @@ struct stmt_call : public node
auto print() const -> std::string override;
};
struct stmt_const : public node
{
using ptr = std::unique_ptr<stmt_const>;
expr_identifier::ptr lvalue;
expr rvalue;
stmt_const(expr_identifier::ptr lvalue, expr rvalue);
stmt_const(const location& loc, expr_identifier::ptr lvalue, expr rvalue);
auto print() const -> std::string override;
};
struct stmt_assign : public node
{
using ptr = std::unique_ptr<stmt_assign>;
@ -1763,18 +1775,6 @@ struct decl_thread : public node
auto print() const -> std::string override;
};
struct decl_constant : public node
{
using ptr = std::unique_ptr<decl_constant>;
expr_identifier::ptr name;
expr value;
decl_constant(expr_identifier::ptr name, expr value);
decl_constant(const location& loc, expr_identifier::ptr name, expr value);
auto print() const -> std::string override;
};
struct decl_usingtree : public node
{
using ptr = std::unique_ptr<decl_usingtree>;