diff --git a/src/Bytecode.hh b/src/Bytecode.hh index 77ed306b..35df3f1c 100644 --- a/src/Bytecode.hh +++ b/src/Bytecode.hh @@ -145,624 +145,299 @@ protected: ~Instruction() = default; }; -template -class InstructionWithOneArgument : public Instruction +struct FLDZ final : public Instruction { -protected: - T1 arg1; - -public: - InstructionWithOneArgument(Tag tag_arg, T1 arg_arg1) : Instruction {tag_arg}, arg1 {arg_arg1} - { - } - -protected: - // See Instruction destructor for the rationale - ~InstructionWithOneArgument() = default; -}; - -template -class InstructionWithTwoArguments : public Instruction -{ -protected: - T1 arg1; - T2 arg2; - -public: - InstructionWithTwoArguments(Tag tag_arg, T1 arg_arg1, T2 arg_arg2) : - Instruction {tag_arg}, arg1 {arg_arg1}, arg2 {arg_arg2} - { - } - -protected: - // See Instruction destructor for the rationale - ~InstructionWithTwoArguments() = default; -}; - -template -class InstructionWithThreeArguments : public Instruction -{ -protected: - T1 arg1; - T2 arg2; - T3 arg3; - -public: - InstructionWithThreeArguments(Tag tag_arg, T1 arg_arg1, T2 arg_arg2, T3 arg_arg3) : - Instruction {tag_arg}, arg1 {arg_arg1}, arg2 {arg_arg2}, arg3 {arg_arg3} - { - } - -protected: - // See Instruction destructor for the rationale - ~InstructionWithThreeArguments() = default; -}; - -template -class InstructionWithFourArguments : public Instruction -{ -protected: - T1 arg1; - T2 arg2; - T3 arg3; - T4 arg4; - -public: - InstructionWithFourArguments(Tag tag_arg, T1 arg_arg1, T2 arg_arg2, T3 arg_arg3, T4 arg_arg4) : - Instruction {tag_arg}, - arg1 {arg_arg1}, - arg2 {arg_arg2}, - arg3 {move(arg_arg3)}, - arg4 {arg_arg4} - { - } - -protected: - // See Instruction destructor for the rationale - ~InstructionWithFourArguments() = default; -}; - -class FLDZ final : public Instruction -{ -public: FLDZ() : Instruction {Tag::FLDZ} { } }; -class FEND final : public Instruction +struct FEND final : public Instruction { -public: FEND() : Instruction {Tag::FEND} { } }; -class FENDBLOCK final : public Instruction +struct FENDBLOCK final : public Instruction { -public: FENDBLOCK() : Instruction {Tag::FENDBLOCK} { } }; -class FENDEQU final : public Instruction +struct FENDEQU final : public Instruction { -public: FENDEQU() : Instruction {Tag::FENDEQU} { } }; -class FDIMT final : public InstructionWithOneArgument +struct FDIMT final : public Instruction { -public: - explicit FDIMT(int size_arg) : InstructionWithOneArgument {Tag::FDIMT, size_arg} + const int size; + explicit FDIMT(int size_arg) : Instruction {Tag::FDIMT}, size {size_arg} { } - int - get_size() - { - return arg1; - }; }; -class FDIMST final : public InstructionWithOneArgument +struct FDIMST final : public Instruction { -public: - explicit FDIMST(int size_arg) : InstructionWithOneArgument {Tag::FDIMST, size_arg} + const int size; + explicit FDIMST(int size_arg) : Instruction {Tag::FDIMST}, size {size_arg} { } - int - get_size() - { - return arg1; - }; }; -class FLDC final : public InstructionWithOneArgument +struct FLDC final : public Instruction { -public: - explicit FLDC(double value_arg) : InstructionWithOneArgument {Tag::FLDC, value_arg} + const double value; + explicit FLDC(double value_arg) : Instruction {Tag::FLDC}, value {value_arg} { } - double - get_value() - { - return arg1; - }; }; -class FLDU final : public InstructionWithOneArgument +struct FLDU final : public Instruction { -public: - explicit FLDU(int pos_arg) : InstructionWithOneArgument {Tag::FLDU, pos_arg} + const int pos; + explicit FLDU(int pos_arg) : Instruction {Tag::FLDU}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FLDSU final : public InstructionWithOneArgument +struct FLDSU final : public Instruction { -public: - explicit FLDSU(int pos_arg) : InstructionWithOneArgument {Tag::FLDSU, pos_arg} + const int pos; + explicit FLDSU(int pos_arg) : Instruction {Tag::FLDSU}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FLDR final : public InstructionWithOneArgument +struct FLDR final : public Instruction { -public: - explicit FLDR(int pos_arg) : InstructionWithOneArgument {Tag::FLDR, pos_arg} + const int pos; + explicit FLDR(int pos_arg) : Instruction {Tag::FLDR}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FLDT final : public InstructionWithOneArgument +struct FLDT final : public Instruction { -public: - explicit FLDT(int pos_arg) : InstructionWithOneArgument {Tag::FLDT, pos_arg} + const int pos; + explicit FLDT(int pos_arg) : Instruction {Tag::FLDT}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FLDST final : public InstructionWithOneArgument +struct FLDST final : public Instruction { -public: - explicit FLDST(int pos_arg) : InstructionWithOneArgument {Tag::FLDST, pos_arg} + const int pos; + explicit FLDST(int pos_arg) : Instruction {Tag::FLDST}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPT final : public InstructionWithOneArgument +struct FSTPT final : public Instruction { -public: - explicit FSTPT(int pos_arg) : InstructionWithOneArgument {Tag::FSTPT, pos_arg} + const int pos; + explicit FSTPT(int pos_arg) : Instruction {Tag::FSTPT}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPST final : public InstructionWithOneArgument +struct FSTPST final : public Instruction { -public: - explicit FSTPST(int pos_arg) : InstructionWithOneArgument {Tag::FSTPST, pos_arg} + const int pos; + explicit FSTPST(int pos_arg) : Instruction {Tag::FSTPST}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPR final : public InstructionWithOneArgument +struct FSTPR final : public Instruction { -public: - explicit FSTPR(int pos_arg) : InstructionWithOneArgument {Tag::FSTPR, pos_arg} + const int pos; + explicit FSTPR(int pos_arg) : Instruction {Tag::FSTPR}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPU final : public InstructionWithOneArgument +struct FSTPU final : public Instruction { -public: - explicit FSTPU(int pos_arg) : InstructionWithOneArgument {Tag::FSTPU, pos_arg} + const int pos; + explicit FSTPU(int pos_arg) : Instruction {Tag::FSTPU}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPSU final : public InstructionWithOneArgument +struct FSTPSU final : public Instruction { -public: - explicit FSTPSU(int pos_arg) : InstructionWithOneArgument {Tag::FSTPSU, pos_arg} + const int pos; + explicit FSTPSU(int pos_arg) : Instruction {Tag::FSTPSU}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPG final : public InstructionWithOneArgument +struct FSTPG final : public Instruction { -public: - explicit FSTPG(int pos_arg) : InstructionWithOneArgument {Tag::FSTPG, pos_arg} + const int pos; + explicit FSTPG(int pos_arg) : Instruction {Tag::FSTPG}, pos {pos_arg} { } - int - get_pos() - { - return arg1; - }; }; -class FSTPG2 final : public InstructionWithTwoArguments +struct FSTPG2 final : public Instruction { -public: - FSTPG2(int row_arg, int col_arg) : InstructionWithTwoArguments {Tag::FSTPG2, row_arg, col_arg} + const int row, col; + FSTPG2(int row_arg, int col_arg) : Instruction {Tag::FSTPG2}, row {row_arg}, col {col_arg} { } - int - get_row() - { - return arg1; - }; - int - get_col() - { - return arg2; - }; }; -class FSTPG3 final : public InstructionWithFourArguments +struct FSTPG3 final : public Instruction { -public: + const int row, col, lag, col_pos; FSTPG3(int row_arg, int col_arg, int lag_arg, int col_pos_arg) : - InstructionWithFourArguments {Tag::FSTPG3, row_arg, col_arg, lag_arg, col_pos_arg} + Instruction {Tag::FSTPG3}, row {row_arg}, col {col_arg}, lag {lag_arg}, col_pos {col_pos_arg} { } - int - get_row() - { - return arg1; - }; - int - get_col() - { - return arg2; - }; - int - get_lag() - { - return arg3; - }; - int - get_col_pos() - { - return arg4; - }; -}; - -class FUNARY final : public InstructionWithOneArgument -{ -public: - explicit FUNARY(UnaryOpcode op_type_arg) : InstructionWithOneArgument {Tag::FUNARY, op_type_arg} - { - } - UnaryOpcode - get_op_type() - { - return arg1; - }; -}; - -class FBINARY final : public InstructionWithOneArgument -{ -public: - explicit FBINARY(BinaryOpcode op_type_arg) : - InstructionWithOneArgument {Tag::FBINARY, op_type_arg} - { - } - BinaryOpcode - get_op_type() - { - return arg1; - }; -}; - -class FTRINARY final : public InstructionWithOneArgument -{ -public: - explicit FTRINARY(TrinaryOpcode op_type_arg) : - InstructionWithOneArgument {Tag::FTRINARY, op_type_arg} - { - } - TrinaryOpcode - get_op_type() - { - return arg1; - }; -}; - -class FJMPIFEVAL final : public InstructionWithOneArgument -{ -public: - explicit FJMPIFEVAL(int arg_pos) : InstructionWithOneArgument {Tag::FJMPIFEVAL, arg_pos} - { - } - int - get_pos() - { - return arg1; - } }; -class FJMP final : public InstructionWithOneArgument +struct FUNARY final : public Instruction { -public: - explicit FJMP(int arg_pos) : InstructionWithOneArgument {Tag::FJMP, arg_pos} + const UnaryOpcode op_code; + explicit FUNARY(UnaryOpcode op_code_arg) : Instruction {Tag::FUNARY}, op_code {op_code_arg} { } - int - get_pos() - { - return arg1; - } }; -class FLDTEF final : public InstructionWithOneArgument +struct FBINARY final : public Instruction { -public: - explicit FLDTEF(int number) : InstructionWithOneArgument {Tag::FLDTEF, number} + const BinaryOpcode op_code; + explicit FBINARY(BinaryOpcode op_code_arg) : Instruction {Tag::FBINARY}, op_code {op_code_arg} { } - int - get_number() - { - return arg1; - } }; -class FSTPTEF final : public InstructionWithOneArgument +struct FTRINARY final : public Instruction { -public: - explicit FSTPTEF(int number) : InstructionWithOneArgument {Tag::FSTPTEF, number} + const TrinaryOpcode op_code; + explicit FTRINARY(TrinaryOpcode op_code_arg) : Instruction {Tag::FTRINARY}, op_code {op_code_arg} { } - int - get_number() - { - return arg1; - } }; -class FLDTEFD final : public InstructionWithTwoArguments +struct FJMPIFEVAL final : public Instruction { -public: - FLDTEFD(int indx, int row) : InstructionWithTwoArguments {Tag::FLDTEFD, indx, row} + const int pos; + explicit FJMPIFEVAL(int pos_arg) : Instruction {Tag::FJMPIFEVAL}, pos {pos_arg} { } - int - get_indx() - { - return arg1; - }; - int - get_row() - { - return arg2; - }; }; -class FSTPTEFD final : public InstructionWithTwoArguments +struct FJMP final : public Instruction { -public: - FSTPTEFD(int indx, int row) : InstructionWithTwoArguments {Tag::FSTPTEFD, indx, row} + const int pos; + explicit FJMP(int pos_arg) : Instruction {Tag::FJMP}, pos {pos_arg} { } - int - get_indx() - { - return arg1; - }; - int - get_row() - { - return arg2; - }; }; -class FLDTEFDD final : public InstructionWithThreeArguments +struct FLDTEF final : public Instruction { -public: - FLDTEFDD(int indx, int row, int col) : - InstructionWithThreeArguments {Tag::FLDTEFDD, indx, row, col} + const int number; + explicit FLDTEF(int number_arg) : Instruction {Tag::FLDTEF}, number {number_arg} { } - int - get_indx() - { - return arg1; - }; - int - get_row() - { - return arg2; - }; - int - get_col() - { - return arg3; - }; }; -class FSTPTEFDD final : public InstructionWithThreeArguments +struct FSTPTEF final : public Instruction { -public: - FSTPTEFDD(int indx, int row, int col) : - InstructionWithThreeArguments {Tag::FSTPTEF, indx, row, col} + const int number; + explicit FSTPTEF(int number_arg) : Instruction {Tag::FSTPTEF}, number {number_arg} { } - int - get_indx() - { - return arg1; - }; - int - get_row() - { - return arg2; - }; - int - get_col() - { - return arg3; - }; }; -class FLDVS final : public InstructionWithTwoArguments +struct FLDTEFD final : public Instruction { -public: - FLDVS(SymbolType type_arg, int pos_arg) : - InstructionWithTwoArguments {Tag::FLDVS, type_arg, pos_arg} + const int indx, row; + FLDTEFD(int indx_arg, int row_arg) : Instruction {Tag::FLDTEFD}, indx {indx_arg}, row {row_arg} { } - SymbolType - get_type() - { - return arg1; - }; - int - get_pos() - { - return arg2; - }; }; -class FLDSV final : public InstructionWithTwoArguments +struct FSTPTEFD final : public Instruction { -public: - FLDSV(SymbolType type_arg, int pos_arg) : - InstructionWithTwoArguments {Tag::FLDSV, type_arg, pos_arg} + const int indx, row; + FSTPTEFD(int indx_arg, int row_arg) : Instruction {Tag::FSTPTEFD}, indx {indx_arg}, row {row_arg} { } - SymbolType - get_type() - { - return arg1; - }; - int - get_pos() - { - return arg2; - }; }; -class FSTPSV final : public InstructionWithTwoArguments +struct FLDTEFDD final : public Instruction { -public: + const int indx, row, col; + FLDTEFDD(int indx_arg, int row_arg, int col_arg) : + Instruction {Tag::FLDTEFDD}, indx {indx_arg}, row {row_arg}, col {col_arg} + { + } +}; + +struct FSTPTEFDD final : public Instruction +{ + const int indx, row, col; + FSTPTEFDD(int indx_arg, int row_arg, int col_arg) : + Instruction {Tag::FSTPTEF}, indx {indx_arg}, row {row_arg}, col {col_arg} + { + } +}; + +struct FLDVS final : public Instruction +{ + const SymbolType type; + const int pos; + FLDVS(SymbolType type_arg, int pos_arg) : Instruction {Tag::FLDVS}, type {type_arg}, pos {pos_arg} + { + } +}; + +struct FLDSV final : public Instruction +{ + const SymbolType type; + const int pos; + FLDSV(SymbolType type_arg, int pos_arg) : Instruction {Tag::FLDSV}, type {type_arg}, pos {pos_arg} + { + } +}; + +struct FSTPSV final : public Instruction +{ + const SymbolType type; + const int pos; FSTPSV(SymbolType type_arg, int pos_arg) : - InstructionWithTwoArguments {Tag::FSTPSV, type_arg, pos_arg} + Instruction {Tag::FSTPSV}, type {type_arg}, pos {pos_arg} { } - SymbolType - get_type() - { - return arg1; - }; - int - get_pos() - { - return arg2; - }; }; -class FLDV final : public InstructionWithThreeArguments +struct FLDV final : public Instruction { -public: + const SymbolType type; + const int pos, lead_lag; FLDV(SymbolType type_arg, int pos_arg, int lead_lag_arg) : - InstructionWithThreeArguments {Tag::FLDV, type_arg, pos_arg, lead_lag_arg} + Instruction {Tag::FLDV}, type {type_arg}, pos {pos_arg}, lead_lag {lead_lag_arg} { } - SymbolType - get_type() - { - return arg1; - }; - int - get_pos() - { - return arg2; - }; - int - get_lead_lag() - { - return arg3; - }; }; -class FSTPV final : public InstructionWithThreeArguments +struct FSTPV final : public Instruction { -public: + const SymbolType type; + const int pos, lead_lag; FSTPV(SymbolType type_arg, int pos_arg, int lead_lag_arg) : - InstructionWithThreeArguments {Tag::FSTPV, type_arg, pos_arg, lead_lag_arg} + Instruction {Tag::FSTPV}, type {type_arg}, pos {pos_arg}, lead_lag {lead_lag_arg} { } - SymbolType - get_type() - { - return arg1; - }; - int - get_pos() - { - return arg2; - }; - int - get_lead_lag() - { - return arg3; - }; }; class FCALL final : public Instruction @@ -822,47 +497,47 @@ public: { // printf("get_function_name => func_name=%s\n",func_name.c_str());fflush(stdout); return func_name; - }; + } int get_nb_output_arguments() { return nb_output_arguments; - }; + } int get_nb_input_arguments() { return nb_input_arguments; - }; + } int get_indx() { return indx; - }; + } void set_arg_func_name(string arg_arg_func_name) { arg_func_name = move(arg_arg_func_name); - }; + } string get_arg_func_name() { return arg_func_name; - }; + } void set_nb_add_input_arguments(int arg_add_input_arguments) { add_input_arguments = arg_add_input_arguments; - }; + } int get_nb_add_input_arguments() { return add_input_arguments; - }; + } void set_row(int arg_row) { row = arg_row; - }; + } int get_row() { @@ -872,12 +547,12 @@ public: set_col(int arg_col) { col = arg_col; - }; + } int get_col() { return col; - }; + } ExternalFunctionCallType get_call_type() { @@ -928,17 +603,17 @@ public: get_equation() { return equation; - }; + } int get_dvariable1() { return dvariable1; - }; + } int get_lag1() { return lag1; - }; + } }; class FBEGINBLOCK final : public Instruction @@ -1051,42 +726,42 @@ public: get_size() { return size; - }; + } BlockSimulationType get_type() { return type; - }; + } bool get_is_linear() { return is_linear; - }; + } int get_u_count_int() { return u_count_int; - }; + } vector get_Block_Contain() { return Block_Contain_; - }; + } int get_nb_col_jacob() { return nb_col_jacob; - }; + } int get_exo_size() { return exo_size; - }; + } int get_det_exo_size() { return det_exo_size; - }; + } vector get_endogenous() {