问题和可能的解决方案, 以及解决方案可能面临的问题 - [x] 如何防止 bb 的 prebbs / sucbbs 被非法修改 - 只允许 terminator set_prebbs / sucbbs (friend?), 用户只能通过修改 terminator 指令修改 prebbs / sucbbs; 同时给 bb 添加 `optional<Instruction *> terminator` 成员, 防止重复设置 - 如果要在插入 terminator 后删除/替换这条指令该怎么办? - a) 不允许删除 terminator, 只允许修改 - b) 提供专用的 terminator 删除/替换 接口 - [x] `set_operand` 设为纯虚, 使用虚函数接口防止 inst 的内部状态被破坏 (类型检查, bb 的 prebbs sucbbs 等) - 可以在 `Instruction` 给出一个默认实现 - [x] 是否要把 inst 修改 bb 成员的位置统一起来, 目前插入 ilist 在 bb 的 create_inst 而插入 pre_bbs / suc_bbs 在 inst 的构造函数 以上问题要考虑到未来的具体使用场景 翻译过程中待处理的部分 - [x] 修改ast,提供常量初始化接口 - [x] ast FuncDefGlobal param提供name参数 - [x] ast中AssignStmt是否要将var_name和idxs修改为LValExpr 这两部分在翻译过程中有相当大的代码重合
问题和可能的解决方案, 以及解决方案可能面临的问题
optional<Instruction *> terminator成员, 防止重复设置set_operand设为纯虚, 使用虚函数接口防止 inst 的内部状态被破坏 (类型检查, bb 的 prebbs sucbbs 等)Instruction给出一个默认实现以上问题要考虑到未来的具体使用场景
翻译过程中待处理的部分
这两部分在翻译过程中有相当大的代码重合