#pragma once #include #include "decompiler/IR/IR.h" #include "decompiler/Disasm/Register.h" #include "decompiler/util/TP_Type.h" class ExpressionStack { public: ExpressionStack() = default; void set(Register reg, std::shared_ptr value); std::shared_ptr get(Register reg); bool is_single_expression(); std::string print(LinkedObjectFile& file); std::vector> get_result(); private: struct StackEntry { bool display = true; // should this appear in the output? Register destination; // what register we are setting std::shared_ptr source; // the value we are setting the register to. // TP_Type type; std::string print(LinkedObjectFile& file); }; std::vector m_stack; bool display_stack_empty(); StackEntry& get_display_stack_top(); };