diff --git a/src/include/IR.h b/src/include/IR.h index f1759cd..60db35a 100644 --- a/src/include/IR.h +++ b/src/include/IR.h @@ -188,24 +188,6 @@ class Use { void setValue(Value *newValue) { value = newValue; } ///< 将被使用的值设置为newValue }; -template -inline std::enable_if_t, bool> -isa(const Value *value) { - return T::classof(value); -} - -template -inline std::enable_if_t, T *> -dyncast(Value *value) { - return isa(value) ? static_cast(value) : nullptr; -} - -template -inline std::enable_if_t, const T *> -dyncast(const Value *value) { - return isa(value) ? static_cast(value) : nullptr; -} - //! The base class of all value types class Value { @@ -1001,7 +983,7 @@ protected: } public: - BasicBlock *getBlock() const { return dyncast(getOperand(0)); } + BasicBlock *getBlock() const { return dynamic_cast(getOperand(0)); } auto getArguments() const { return make_range(std::next(operand_begin()), operand_end()); } @@ -1029,10 +1011,10 @@ protected: public: Value *getCondition() const { return getOperand(0); } BasicBlock *getThenBlock() const { - return dyncast(getOperand(1)); + return dynamic_cast(getOperand(1)); } BasicBlock *getElseBlock() const { - return dyncast(getOperand(2)); + return dynamic_cast(getOperand(2)); } auto getThenArguments() const { auto begin = std::next(operand_begin(), 3); @@ -1213,6 +1195,8 @@ public: }; +class GlobalValue; + // 循环类 class Loop { public: @@ -1658,6 +1642,7 @@ class Module { } return result.first->second.get(); } ///< 创建外部函数 + ///< 变量创建伴随着符号表的更新 auto createGlobalValue(const std::string &name, Type *type, const std::vector &dims = {}, const ValueCounter &init = {}) -> GlobalValue * { bool isFinished = variableTable.isCurNodeNull(); diff --git a/src/include/SysYIRGenerator.h b/src/include/SysYIRGenerator.h index b4ead27..a5f5a91 100644 --- a/src/include/SysYIRGenerator.h +++ b/src/include/SysYIRGenerator.h @@ -71,7 +71,7 @@ public: std::any visitGlobalConstDecl(SysYParser::GlobalConstDeclContext *ctx) override; std::any visitGlobalVarDecl(SysYParser::GlobalVarDeclContext *ctx) override; - std::any visitDecl(SysYParser::DeclContext *ctx) override ; + // std::any visitDecl(SysYParser::DeclContext *ctx) override; std::any visitConstDecl(SysYParser::ConstDeclContext *ctx) override; std::any visitVarDecl(SysYParser::VarDeclContext *ctx) override;