Initial import/sketch of opcode analyzer (
bug 3279).
Uses single static assignment to recover expression trees from straight-line byte code.
1 #ifndef _INCLUDE_SP_DECOMP_CODE_ANALYZER_H_
2 #define _INCLUDE_SP_DECOMP_CODE_ANALYZER_H_
4 #include <sp_vm_types.h>
15 #define OPDEF(num,name,str,params) \
17 #include "opcodes.tbl"
31 BaseNode(cell_t _op) : op(_op)
37 struct ConstNode : public BaseNode
39 ConstNode(cell_t _val) : BaseNode(_OP_CONST), val(_val)
45 struct StmtNode : public BaseNode
47 StmtNode(cell_t _op, BaseNode *_node, StmtNode *_next) : BaseNode(_op)
58 struct CallNode : public BaseNode
60 CallNode(FunctionInfo *f, BaseNode **t, unsigned int c) : BaseNode(OP_CALL)
71 struct DefineNode : public BaseNode
73 TempNode(const char *name
77 struct UnaryNode : public BaseNode
79 UnaryNode(cell_t _op, BaseNode *_node) : BaseNode(_op), node(_node)
85 struct VarNode : public BaseNode
87 VarNode(FuncVar *_var) : BaseNode(_OP_VAR), var(_var)
93 struct BinOpNode : public BaseNode
95 BinOpNode(cell_t _op, BaseNode *_left, BaseNode *_right) : BaseNode(_op)
104 struct DeclNode : public BaseNode
106 DeclNode(VarNode *_var, BaseNode *_expr) : BaseNode(_OP_NEW), var(_var), expr(_expr)
115 sp_fdbg_symbol_t *sym;
116 sp_fdbg_arraydim_t *dims;
125 sp_fdbg_symbol_t *sym;
126 FuncVar known_args[SP_MAX_EXEC_PARAMS];
127 unsigned int num_known_args;
134 unsigned int num_known_vars;
139 int Sp_DecompFunction(sp_decomp_t *dc, uint32_t code_addr, bool is_public);
141 #endif //_INCLUDE_SP_DECOMP_CODE_ANALYZER_H_