From 663b1139c9a656071176a990cf92f7d1093cb112 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 18 Aug 2023 22:20:15 -0700 Subject: [PATCH] stmt: add constructor boilerplate --- stmt.hpp | 167 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 130 insertions(+), 37 deletions(-) diff --git a/stmt.hpp b/stmt.hpp index 0cd683f..0c9f9aa 100644 --- a/stmt.hpp +++ b/stmt.hpp @@ -4,16 +4,23 @@ namespace dsp { -/* -struct assign_t : stmt_accept_t +struct stmt_t { - assign_t(token_t name, expr_t * value) - : name(name), value(value) {} - - const token_t name; - const expr_t * value; + virtual void accept(visitor_t const * visitor) const = 0; + virtual std::string accept(visitor_t const * visitor) const = 0; +}; + +template +struct stmt_accept_t : stmt_t { + virtual void accept(visitor_t const * visitor) const { + return visitor->visit(static_cast(this)); + } + + virtual std::string accept(visitor_t const * visitor) const + { + return visitor->visit(static_cast(this)); + } }; -*/ template struct imm_t { @@ -45,7 +52,11 @@ enum alu_type_t { rl8, }; -struct alu_t { +struct alu_t : stmt_accept_t +{ + alu_t(alu_type_t type) + : type(type) {} + const alu_type_t type; }; @@ -54,31 +65,54 @@ enum struct xy_src_t { m0 , m1 , m2 , m3, }; -struct op_t { +struct op_t : stmt_accept_t +{ }; -struct mov_ram_x_t : op_t { +struct mov_ram_x_t : virtual op_t +{ + mov_ram_x_t(xy_src_t src) + : src(src) {} + const xy_src_t src; }; -struct mov_mul_p_t : op_t { +struct mov_mul_p_t : op_t +{ + mov_mul_p_t() {} }; -struct mov_ram_p_t : op_t { +struct mov_ram_p_t : op_t +{ + mov_ram_p_t(xy_src_t src) + : src(src) {} + const xy_src_t src; }; -struct mov_ram_y_t : op_t { +struct mov_ram_y_t : op_t +{ + mov_ram_y_t(xy_src_t src) + : src(src) {} + const xy_src_t src; }; -struct clr_a_t : op_t { +struct clr_a_t : op_t +{ + clr_a_t() {} }; -struct mov_alu_a_t : op_t { +struct mov_alu_a_t : op_t +{ + mov_alu_a_t() {} }; -struct mov_ram_a_t : op_t { +struct mov_ram_a_t : op_t +{ + mov_ram_a_t(xy_src_t src) + : src(src) {} + const xy_src_t src; }; @@ -94,17 +128,29 @@ enum struct d1_src_t { m0 , m1 , m2 , m3 , }; -struct mov_imm_d1 : op_t { +struct mov_imm_d1 : op_t +{ + mov_imm_d1(simm_t<8> imm, d1_dest_t dest) + : imm(imm), dest(dest) {} + const simm_t<8> imm; const d1_dest_t dest; }; -struct mov_ram_d1 : op_t { +struct mov_ram_d1 : op_t +{ + mov_ram_d1(d1_src_t src, d1_dest_t dest) + : src(src), dest(dest) {} + const d1_src_t src; const d1_dest_t dest; }; -struct instruction_t { +struct instruction_t : stmt_accept_t +{ + instruction_t(std::vector ops) + : ops(ops) {} + const std::vector ops; }; @@ -127,11 +173,19 @@ enum struct cond_t { zs, nzs, }; -struct mvi_t { +struct mvi_t : stmt_accept_t +{ + mvi_t(uimm_t<25> imm) + : imm(imm) {} + const uimm_t<25> imm; }; -struct mvi_cond_t { +struct mvi_cond_t : stmt_accept_t +{ + mvi_cond_t(uimm_t<19> imm) + : imm(imm) {} + const uimm_t<19> imm; }; @@ -159,30 +213,46 @@ enum struct egress_t { prg, }; -struct ingress_imm_t { +struct ingress_imm_t : stmt_accept_t +{ + ingress_imm_t(bool hold, ingress_t ingress, simm_t<8> imm) + : hold(hold), ingress(ingress), imm(imm) {} + const bool hold; const ingress_t ingress; const simm_t<8> imm; }; -struct egress_imm_t { +struct egress_imm_t : stmt_accept_t +{ + egress_imm_t(bool hold, egress_t egress, simm_t<8> imm) + : hold(hold), egress(egress), imm(imm) {} + const bool hold; const egress_t egress; const simm_t<8> imm; }; enum struct length_ram_t { - m0, m1, m2, m3, + m0 , m1 , m2 , m3 , mc0, mc1, mc2, mc3, }; -struct ingress_ram_t { +struct ingress_ram_t : stmt_accept_t +{ + ingress_ram_t(bool hold, ingress_t ingress, length_ram_t ram) + : hold(hold), ingress(ingress), ram(ram) {} + const bool hold; const ingress_t ingress; const length_ram_t ram; }; -struct egress_ram_t { +struct egress_ram_t : stmt_accept_t +{ + egress_ram_t(bool hold, egress_t egress, length_ram_t ram) + : hold(hold), egress(egress), ram(ram) {} + const bool hold; const egress_t egress; const length_ram_t ram; @@ -201,35 +271,58 @@ enum struct cond_t { zs, nzs, }; -struct jmp_t { - uimm_t<8> imm; +struct jmp_t : stmt_accept_t +{ + jmp_t(uimm_t<8> imm) + : imm(imm) {} + + const uimm_t<8> imm; }; -struct jmp_cond_t { - uimm_t<8> imm; - cond_t cond; +struct jmp_cond_t : stmt_accept_t +{ + jmp_cond_t(uimm_t<8> imm, cond_t cond) + : imm(imm), cond(cond) {} + + const uimm_t<8> imm; + const cond_t cond; }; } // jump namespace loop { -struct btm_t { +struct btm_t : stmt_accept_t +{ }; -struct lps_t { +struct lps_t : stmt_accept_t +{ }; } // loop namespace end { -struct end_t { +struct end_t : stmt_accept_t +{ }; -struct endi_t { +struct endi_t : stmt_accept_t +{ }; -} // loop +} // end + +/* +struct assign_t : stmt_accept_t +{ + assign_t(token_t name, expr_t * value) + : name(name), value(value) {} + + const token_t name; + const expr_t * value; +}; +*/ } // dsp