From a1ba450950ffb7ccb2a979d766b7abb0873248f4 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 14:59:22 +0800 Subject: [PATCH 01/39] =?UTF-8?q?chore(git)=E4=BF=AE=E6=94=B9.gitignore?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 1ee33a1..53075fa 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,9 @@ Thumbs.db # Project outputs # ========================= test/test_result/ + +# ========================= +# mxr +# ========================= +result.txt +build.sh \ No newline at end of file From 2070193fcdadb0815ebaa1063c31273e9b2b8049 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:00:11 +0800 Subject: [PATCH 02/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 70 ++++++++++++++++++-- src/ir/Type.cpp | 171 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 228 insertions(+), 13 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index b961192..739185d 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -41,6 +41,8 @@ namespace ir { class Type; +class ArrayType; +class FunctionType; class Value; class User; class ConstantValue; @@ -93,23 +95,79 @@ class Context { class Type { public: - enum class Kind { Void, Int32, PtrInt32 }; - explicit Type(Kind k); + enum class Kind { Void, Int32, PtrInt32, Array, Function }; + + virtual ~Type() = default; + // 使用静态共享对象获取类型。 // 同一类型可直接比较返回值是否相等,例如: // Type::GetInt32Type() == Type::GetInt32Type() static const std::shared_ptr& GetVoidType(); static const std::shared_ptr& GetInt32Type(); static const std::shared_ptr& GetPtrInt32Type(); - Kind GetKind() const; - bool IsVoid() const; - bool IsInt32() const; - bool IsPtrInt32() const; + static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); + static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); + + // 类型判断 + Kind GetKind() const { return kind_; } + bool IsVoid() const { return kind_ == Kind::Void; } + bool IsInt32() const { return kind_ == Kind::Int32; } + bool IsPtrInt32() const { return kind_ == Kind::PtrInt32; } + bool IsArray() const { return kind_ == Kind::Array; } + bool IsFunction() const { return kind_ == Kind::Function; } + + // 类型属性 + virtual size_t Size() const; // 字节大小 + virtual size_t Alignment() const; // 对齐要求 + virtual bool IsComplete() const; // 是否为完整类型(非 void,数组维度已知等) + +protected: + explicit Type(Kind k); // 构造函数 protected,只能由工厂和派生类调用 private: Kind kind_; }; +// 数组类型 +class ArrayType : public Type { +public: + // 获取元素类型和维度 + const std::shared_ptr& GetElementType() const { return elem_type_; } + const std::vector& GetDimensions() const { return dims_; } + size_t GetElementCount() const; // 总元素个数 + + size_t Size() const override; + size_t Alignment() const override; + bool IsComplete() const override; + +protected: + ArrayType(std::shared_ptr elem, std::vector dims); + friend class Type; // 允许 Type::GetArrayType 构造 + +private: + std::shared_ptr elem_type_; + std::vector dims_; +}; + +// 函数类型 +class FunctionType : public Type { +public: + const std::shared_ptr& GetReturnType() const { return return_type_; } + const std::vector>& GetParamTypes() const { return param_types_; } + + size_t Size() const override; // 函数类型没有大小,通常返回 0 + size_t Alignment() const override; // 无对齐要求 + bool IsComplete() const override; // 函数类型视为完整 + +protected: + FunctionType(std::shared_ptr ret, std::vector> params); + friend class Type; + +private: + std::shared_ptr return_type_; + std::vector> param_types_; +}; + class Value { public: Value(std::shared_ptr ty, std::string name); diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 3e1684d..6c220fb 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -1,31 +1,188 @@ // 当前仅支持 void、i32 和 i32*。 #include "ir/IR.h" +#include namespace ir { Type::Type(Kind k) : kind_(k) {} +size_t Type::Size() const { + switch (kind_) { + case Kind::Void: return 0; + case Kind::Int32: return 4; + case Kind::PtrInt32: return 8; // 假设 64 位平台 + default: return 0; // 派生类应重写 + } +} + +size_t Type::Alignment() const { + switch (kind_) { + case Kind::Int32: return 4; + case Kind::PtrInt32: return 8; + default: return 1; // void 和复合类型由派生类处理 + } +} + +bool Type::IsComplete() const { + // void 视为完整类型(但不能有对象),int 和指针都是完整类型 + return kind_ != Kind::Void; +} const std::shared_ptr& Type::GetVoidType() { - static const std::shared_ptr type = std::make_shared(Kind::Void); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Void)); return type; } const std::shared_ptr& Type::GetInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::Int32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Int32)); return type; } const std::shared_ptr& Type::GetPtrInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::PtrInt32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt32)); return type; } -Type::Kind Type::GetKind() const { return kind_; } +// ---------- 数组类型缓存 ---------- +// 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 +struct ArrayKey { + const Type* elem_type; + std::vector dims; + + bool operator==(const ArrayKey& other) const { + return elem_type == other.elem_type && dims == other.dims; + } +}; + +struct ArrayKeyHash { + std::size_t operator()(const ArrayKey& key) const { + std::size_t h = std::hash{}(key.elem_type); + for (int d : key.dims) { + h ^= std::hash{}(d) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, ArrayKeyHash>& GetArrayCache() { + static std::unordered_map, ArrayKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetArrayType(std::shared_ptr elem, + std::vector dims) { + // 检查维度合法性 + for (int d : dims) { + if (d <= 0) { + // SysY 数组维度必须为正整数常量表达式,这里假设已检查 + return nullptr; + } + } + + ArrayKey key{elem.get(), dims}; + auto& cache = GetArrayCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } + + auto arr = std::shared_ptr(new ArrayType(std::move(elem), std::move(dims))); + cache[key] = arr; + return arr; +} + +// ---------- 函数类型缓存 ---------- +struct FunctionKey { + const Type* return_type; + std::vector param_types; + + bool operator==(const FunctionKey& other) const { + return return_type == other.return_type && param_types == other.param_types; + } +}; + +struct FunctionKeyHash { + std::size_t operator()(const FunctionKey& key) const { + std::size_t h = std::hash{}(key.return_type); + for (const Type* t : key.param_types) { + h ^= std::hash{}(t) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, FunctionKeyHash>& GetFunctionCache() { + static std::unordered_map, FunctionKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetFunctionType(std::shared_ptr ret, + std::vector> params) { + // 提取裸指针用于键(保证唯一性,因为 shared_ptr 指向同一对象) + std::vector param_ptrs; + param_ptrs.reserve(params.size()); + for (const auto& p : params) { + param_ptrs.push_back(p.get()); + } + + FunctionKey key{ret.get(), std::move(param_ptrs)}; + auto& cache = GetFunctionCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } + + auto func = std::shared_ptr(new FunctionType(std::move(ret), std::move(params))); + cache[key] = func; + return func; +} + +// ---------- ArrayType 实现 ---------- +ArrayType::ArrayType(std::shared_ptr elem, std::vector dims) + : Type(Kind::Array), elem_type_(std::move(elem)), dims_(std::move(dims)) { + // 数组元素类型必须是完整类型 + assert(elem_type_ && elem_type_->IsComplete()); +} + +size_t ArrayType::GetElementCount() const { + size_t count = 1; + for (int d : dims_) count *= d; + return count; +} + +size_t ArrayType::Size() const { + return GetElementCount() * elem_type_->Size(); +} -bool Type::IsVoid() const { return kind_ == Kind::Void; } +size_t ArrayType::Alignment() const { + // 数组对齐等于其元素对齐 + return elem_type_->Alignment(); +} -bool Type::IsInt32() const { return kind_ == Kind::Int32; } +bool ArrayType::IsComplete() const { + // 维度已确定且元素类型完整,则数组完整 + return !dims_.empty() && elem_type_->IsComplete(); +} -bool Type::IsPtrInt32() const { return kind_ == Kind::PtrInt32; } +// ---------- FunctionType 实现 ---------- +FunctionType::FunctionType(std::shared_ptr ret, + std::vector> params) + : Type(Kind::Function), return_type_(std::move(ret)), param_types_(std::move(params)) {} + +size_t FunctionType::Size() const { + // 函数类型没有运行时大小,通常用于类型检查,返回 0 + return 0; +} + +size_t FunctionType::Alignment() const { + // 不对齐 + return 1; +} + +bool FunctionType::IsComplete() const { + // 函数类型总是完整的(只要返回类型完整,但 SysY 中 void 也视为完整) + return true; +} } // namespace ir From c21c066e4d89c3f7cb45e494ae2e08fcc29cc14d Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:28:43 +0800 Subject: [PATCH 03/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=B3=BB=E7=BB=9F=E6=B5=AE=E7=82=B9=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 6 +++++- src/ir/IRPrinter.cpp | 14 ++++++++------ src/ir/Type.cpp | 22 ++++++++++++++++++---- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index 739185d..c6eb019 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -95,7 +95,7 @@ class Context { class Type { public: - enum class Kind { Void, Int32, PtrInt32, Array, Function }; + enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Array, Function }; virtual ~Type() = default; @@ -104,7 +104,9 @@ class Type { // Type::GetInt32Type() == Type::GetInt32Type() static const std::shared_ptr& GetVoidType(); static const std::shared_ptr& GetInt32Type(); + static const std::shared_ptr& GetFloatType(); static const std::shared_ptr& GetPtrInt32Type(); + static const std::shared_ptr& GetPtrFloatType(); static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); @@ -112,7 +114,9 @@ class Type { Kind GetKind() const { return kind_; } bool IsVoid() const { return kind_ == Kind::Void; } bool IsInt32() const { return kind_ == Kind::Int32; } + bool IsFloat() const { return kind_ == Kind::Float; } bool IsPtrInt32() const { return kind_ == Kind::PtrInt32; } + bool IsPtrFloat() const { return kind_ == Kind::PtrFloat; } bool IsArray() const { return kind_ == Kind::Array; } bool IsFunction() const { return kind_ == Kind::Function; } diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 30efbb6..86df39f 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -14,12 +14,14 @@ namespace ir { static const char* TypeToString(const Type& ty) { switch (ty.GetKind()) { - case Type::Kind::Void: - return "void"; - case Type::Kind::Int32: - return "i32"; - case Type::Kind::PtrInt32: - return "i32*"; + case Type::Kind::Void: return "void"; + case Type::Kind::Int32: return "i32"; + case Type::Kind::Float: return "float"; + case Type::Kind::PtrInt32: return "i32*"; + case Type::Kind::PtrFloat: return "float*"; + case Type::Kind::Array: return "array"; + case Type::Kind::Function: return "function"; + default: return "unknown"; } throw std::runtime_error(FormatError("ir", "未知类型")); } diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 6c220fb..6ec92ec 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -10,21 +10,25 @@ size_t Type::Size() const { switch (kind_) { case Kind::Void: return 0; case Kind::Int32: return 4; - case Kind::PtrInt32: return 8; // 假设 64 位平台 - default: return 0; // 派生类应重写 + case Kind::Float: return 4; // 单精度浮点 4 字节 + case Kind::PtrInt32: return 8; // 假设 64 位指针 + case Kind::PtrFloat: return 8; + default: return 0; // 派生类应重写 } } size_t Type::Alignment() const { switch (kind_) { case Kind::Int32: return 4; + case Kind::Float: return 4; case Kind::PtrInt32: return 8; - default: return 1; // void 和复合类型由派生类处理 + case Kind::PtrFloat: return 8; + default: return 1; } } bool Type::IsComplete() const { - // void 视为完整类型(但不能有对象),int 和指针都是完整类型 + // void 视为完整类型(不能有对象但可用于函数返回类型),int 和指针都是完整类型 return kind_ != Kind::Void; } const std::shared_ptr& Type::GetVoidType() { @@ -37,11 +41,21 @@ const std::shared_ptr& Type::GetInt32Type() { return type; } +const std::shared_ptr& Type::GetFloatType() { + static const std::shared_ptr type(new Type(Kind::Float)); + return type; +} + const std::shared_ptr& Type::GetPtrInt32Type() { static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt32)); return type; } +const std::shared_ptr& Type::GetPtrFloatType() { + static const std::shared_ptr type(new Type(Kind::PtrFloat)); + return type; +} + // ---------- 数组类型缓存 ---------- // 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 struct ArrayKey { From c450277c835526e9d90bb2596a9ab77565571b56 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:33:27 +0800 Subject: [PATCH 04/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=B3=BB=E7=BB=9FLabel=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 4 +++- src/ir/IRPrinter.cpp | 1 + src/ir/Type.cpp | 8 +++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index c6eb019..4ea12dc 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -95,7 +95,7 @@ class Context { class Type { public: - enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Array, Function }; + enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Label, Array, Function }; virtual ~Type() = default; @@ -107,6 +107,7 @@ class Type { static const std::shared_ptr& GetFloatType(); static const std::shared_ptr& GetPtrInt32Type(); static const std::shared_ptr& GetPtrFloatType(); + static const std::shared_ptr& GetLabelType(); static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); @@ -117,6 +118,7 @@ class Type { bool IsFloat() const { return kind_ == Kind::Float; } bool IsPtrInt32() const { return kind_ == Kind::PtrInt32; } bool IsPtrFloat() const { return kind_ == Kind::PtrFloat; } + bool IsLabel() const { return kind_ == Kind::Label; } bool IsArray() const { return kind_ == Kind::Array; } bool IsFunction() const { return kind_ == Kind::Function; } diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 86df39f..5b11d63 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -19,6 +19,7 @@ static const char* TypeToString(const Type& ty) { case Type::Kind::Float: return "float"; case Type::Kind::PtrInt32: return "i32*"; case Type::Kind::PtrFloat: return "float*"; + case Type::Kind::Label: return "label"; case Type::Kind::Array: return "array"; case Type::Kind::Function: return "function"; default: return "unknown"; diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 6ec92ec..8d0f5b9 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -13,6 +13,7 @@ size_t Type::Size() const { case Kind::Float: return 4; // 单精度浮点 4 字节 case Kind::PtrInt32: return 8; // 假设 64 位指针 case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 标签地址大小(指针大小) default: return 0; // 派生类应重写 } } @@ -23,12 +24,12 @@ size_t Type::Alignment() const { case Kind::Float: return 4; case Kind::PtrInt32: return 8; case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 与指针相同 default: return 1; } } bool Type::IsComplete() const { - // void 视为完整类型(不能有对象但可用于函数返回类型),int 和指针都是完整类型 return kind_ != Kind::Void; } const std::shared_ptr& Type::GetVoidType() { @@ -56,6 +57,11 @@ const std::shared_ptr& Type::GetPtrFloatType() { return type; } +const std::shared_ptr& Type::GetLabelType() { + static const std::shared_ptr type(new Type(Kind::Label)); + return type; +} + // ---------- 数组类型缓存 ---------- // 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 struct ArrayKey { From 5d4bb511d1983ffb2a484bc3c8f2e42e1261376d Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:38:48 +0800 Subject: [PATCH 05/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 64 +++++++++++++++-- src/sem/SymbolTable.cpp | 146 +++++++++++++++++++++++++++++++++++--- 2 files changed, 196 insertions(+), 14 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index c9396dd..d52fc9b 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -3,15 +3,67 @@ #include #include +#include +#include #include "SysYParser.h" +#include "../ir/IR.h" + +// 符号种类 +enum class SymbolKind { + Variable, + Function, + Parameter, + Constant +}; + +// 符号条目 +struct Symbol { + std::string name; + SymbolKind kind; + std::shared_ptr type; // 指向 Type 对象的智能指针 + int scope_level = 0; // 定义时的作用域深度 + int stack_offset = -1; // 局部变量/参数栈偏移(全局变量为 -1) + bool is_initialized = false; // 是否已初始化 + + // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) + std::vector> param_types; + + // 对于常量,存储常量值(此处仅支持 int32) + int const_value = 0; + + // 关联的语法树节点(用于报错位置或进一步分析) + SysYParser::VarDefContext* var_def_ctx = nullptr; + SysYParser::FuncDefContext* func_def_ctx = nullptr; +}; class SymbolTable { - public: - void Add(const std::string& name, SysYParser::VarDefContext* decl); - bool Contains(const std::string& name) const; - SysYParser::VarDefContext* Lookup(const std::string& name) const; + public: + SymbolTable(); + ~SymbolTable() = default; + + // ----- 作用域管理 ----- + void enterScope(); // 进入新作用域 + void exitScope(); // 退出当前作用域 + int currentScopeLevel() const { return static_cast(scopes_.size()) - 1; } + + // ----- 符号操作(推荐使用)----- + bool addSymbol(const Symbol& sym); // 添加符号到当前作用域 + Symbol* lookup(const std::string& name); // 从当前作用域向外查找 + Symbol* lookupCurrent(const std::string& name); // 仅在当前作用域查找 + + // ----- 与原接口兼容(保留原有功能)----- + void Add(const std::string& name, SysYParser::VarDefContext* decl); + bool Contains(const std::string& name) const; + SysYParser::VarDefContext* Lookup(const std::string& name) const; + + // ----- 辅助函数:从语法树节点构造 Type ----- + static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); + static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); + + private: + // 作用域栈:每个元素是一个从名字到符号的映射 + std::vector> scopes_; - private: - std::unordered_map table_; + static constexpr int GLOBAL_SCOPE = 0; // 全局作用域索引 }; diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index ffeea89..69fc91f 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -1,17 +1,147 @@ -// 维护局部变量声明的注册与查找。 - #include "sem/SymbolTable.h" -void SymbolTable::Add(const std::string& name, - SysYParser::VarDefContext* decl) { - table_[name] = decl; +// ---------- 构造函数 ---------- +SymbolTable::SymbolTable() { + // 初始化全局作用域 + scopes_.emplace_back(); +} + +// ---------- 作用域管理 ---------- +void SymbolTable::enterScope() { + scopes_.emplace_back(); +} + +void SymbolTable::exitScope() { + if (scopes_.size() > 1) { + scopes_.pop_back(); + } + // 不能退出全局作用域 +} + +// ---------- 符号添加与查找 ---------- +bool SymbolTable::addSymbol(const Symbol& sym) { + auto& current_scope = scopes_.back(); + if (current_scope.find(sym.name) != current_scope.end()) { + return false; // 重复定义 + } + current_scope[sym.name] = sym; + return true; +} + +Symbol* SymbolTable::lookup(const std::string& name) { + // 从当前作用域向外层查找 + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto& scope = *it; + auto found = scope.find(name); + if (found != scope.end()) { + return &found->second; + } + } + return nullptr; +} + +Symbol* SymbolTable::lookupCurrent(const std::string& name) { + auto& current_scope = scopes_.back(); + auto it = current_scope.find(name); + if (it != current_scope.end()) { + return &it->second; + } + return nullptr; +} + +// ---------- 兼容原接口 ---------- +void SymbolTable::Add(const std::string& name, SysYParser::VarDefContext* decl) { + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = getTypeFromVarDef(decl); + sym.var_def_ctx = decl; + sym.scope_level = currentScopeLevel(); + addSymbol(sym); } bool SymbolTable::Contains(const std::string& name) const { - return table_.find(name) != table_.end(); + // const 方法不能修改 scopes_,我们模拟查找 + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + if (it->find(name) != it->end()) { + return true; + } + } + return false; } SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { - auto it = table_.find(name); - return it == table_.end() ? nullptr : it->second; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto found = it->find(name); + if (found != it->end()) { + // 只返回变量定义的上下文(函数等其他符号返回 nullptr) + if (found->second.kind == SymbolKind::Variable) { + return found->second.var_def_ctx; + } + return nullptr; + } + } + return nullptr; +} + +// ---------- 辅助函数:从语法树节点构造 Type ---------- +std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { + // 这里需要根据实际的语法树结构来提取类型。 + // 假设 ctx 中包含类型节点和数组维度信息。 + // 以下代码为示意,具体实现需根据你的 SysY 语法定义调整。 + + // 1. 判断基本类型(int / float / void 等) + std::shared_ptr base_type; + if (ctx->type() && ctx->type()->INT()) { + base_type = Type::GetInt32Type(); + } else if (ctx->type() && ctx->type()->FLOAT()) { + // 若你扩展了 float 类型,可类似处理 + // base_type = Type::GetFloatType(); + } else { + // 默认为 int + base_type = Type::GetInt32Type(); + } + + // 2. 处理数组维度 + // 假设 ctx 中有 arraySpecifier() 返回维度列表,每个维度是一个表达式节点 + // 这里简单假设维度值在语法树中已经计算好,并存储在某个 vector 中 + std::vector dims; + // 示意:遍历数组维度节点,将常量值推入 dims + // for (auto dimNode : ctx->arraySpecifier()) { + // dims.push_back(parseConstExpr(dimNode)); + // } + + if (dims.empty()) { + // 非数组,直接返回基本类型 + return base_type; + } else { + // 数组类型:递归构建数组类型 + // 注意:Type::GetArrayType 需要元素类型和维度列表 + return Type::GetArrayType(base_type, dims); + } +} + +std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { + // 提取返回类型 + std::shared_ptr ret_type; + if (ctx->type() && ctx->type()->VOID()) { + ret_type = Type::GetVoidType(); + } else if (ctx->type() && ctx->type()->INT()) { + ret_type = Type::GetInt32Type(); + } else { + ret_type = Type::GetInt32Type(); // 默认 + } + + // 提取参数类型列表 + std::vector> param_types; + if (ctx->paramList()) { + for (auto param : ctx->paramList()->param()) { + // 假设 param 包含类型信息 + // 这里简单构建 int 类型,实际需根据参数声明解析 + param_types.push_back(Type::GetInt32Type()); + } + } + + // 创建函数类型 + return Type::GetFunctionType(ret_type, param_types); } From a0d5288351bee6d55b84fcb2e9f820b7d9e0fa89 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:47:03 +0800 Subject: [PATCH 06/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E5=AF=B9=E6=B5=AE=E7=82=B9=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 8 ++++-- src/sem/SymbolTable.cpp | 58 ++++++++++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index d52fc9b..b200642 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -29,8 +29,12 @@ struct Symbol { // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) std::vector> param_types; - // 对于常量,存储常量值(此处仅支持 int32) - int const_value = 0; + // 对于常量,存储常量值(这里支持 int32 和 float) + union ConstantValue { + int i32; + float f32; + } const_value; + bool is_int_const = true; // 标记常量类型,用于区分 int 和 float // 关联的语法树节点(用于报错位置或进一步分析) SysYParser::VarDefContext* var_def_ctx = nullptr; diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 69fc91f..18a28ad 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -90,16 +90,20 @@ std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* // 假设 ctx 中包含类型节点和数组维度信息。 // 以下代码为示意,具体实现需根据你的 SysY 语法定义调整。 - // 1. 判断基本类型(int / float / void 等) + // 1. 获取基本类型 std::shared_ptr base_type; - if (ctx->type() && ctx->type()->INT()) { - base_type = Type::GetInt32Type(); - } else if (ctx->type() && ctx->type()->FLOAT()) { - // 若你扩展了 float 类型,可类似处理 - // base_type = Type::GetFloatType(); + // 假设 ctx 中有 type() 方法返回类型节点,且类型节点有 INT()、FLOAT() 等方法 + if (ctx->type()) { + if (ctx->type()->INT()) { + base_type = Type::GetInt32Type(); + } else if (ctx->type()->FLOAT()) { + base_type = Type::GetFloatType(); + } else { + // 默认为 int + base_type = Type::GetInt32Type(); + } } else { - // 默认为 int - base_type = Type::GetInt32Type(); + base_type = Type::GetInt32Type(); // 默认 } // 2. 处理数组维度 @@ -124,10 +128,16 @@ std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { // 提取返回类型 std::shared_ptr ret_type; - if (ctx->type() && ctx->type()->VOID()) { - ret_type = Type::GetVoidType(); - } else if (ctx->type() && ctx->type()->INT()) { - ret_type = Type::GetInt32Type(); + if (ctx->type()) { + if (ctx->type()->VOID()) { + ret_type = Type::GetVoidType(); + } else if (ctx->type()->INT()) { + ret_type = Type::GetInt32Type(); + } else if (ctx->type()->FLOAT()) { + ret_type = Type::GetFloatType(); + } else { + ret_type = Type::GetInt32Type(); // 默认 + } } else { ret_type = Type::GetInt32Type(); // 默认 } @@ -136,12 +146,28 @@ std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext std::vector> param_types; if (ctx->paramList()) { for (auto param : ctx->paramList()->param()) { - // 假设 param 包含类型信息 - // 这里简单构建 int 类型,实际需根据参数声明解析 - param_types.push_back(Type::GetInt32Type()); + // 根据参数声明构建类型 + // 这里假设每个参数有类型节点,并且可能包含数组维度 + std::shared_ptr param_type; + if (param->type()) { + if (param->type()->INT()) { + param_type = Type::GetInt32Type(); + } else if (param->type()->FLOAT()) { + param_type = Type::GetFloatType(); + } else { + param_type = Type::GetInt32Type(); + } + } else { + param_type = Type::GetInt32Type(); + } + + // 处理数组参数(如果存在维度) + // if (param->arraySpecifier()) { ... } + + param_types.push_back(param_type); } } // 创建函数类型 return Type::GetFunctionType(ret_type, param_types); -} +} \ No newline at end of file From c4479eaa1e072e417ba79c9091788f879c0b0926 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 15:56:37 +0800 Subject: [PATCH 07/39] =?UTF-8?q?fix(sem)=E4=BF=AE=E6=AD=A3=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E7=9A=84=E8=AF=AD=E6=B3=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 8 ++++---- src/sem/SymbolTable.cpp | 42 +++++++++++++++++++-------------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index b200642..df5399b 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -21,13 +21,13 @@ enum class SymbolKind { struct Symbol { std::string name; SymbolKind kind; - std::shared_ptr type; // 指向 Type 对象的智能指针 + std::shared_ptr type; // 指向 Type 对象的智能指针 int scope_level = 0; // 定义时的作用域深度 int stack_offset = -1; // 局部变量/参数栈偏移(全局变量为 -1) bool is_initialized = false; // 是否已初始化 // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) - std::vector> param_types; + std::vector> param_types; // 对于常量,存储常量值(这里支持 int32 和 float) union ConstantValue { @@ -62,8 +62,8 @@ class SymbolTable { SysYParser::VarDefContext* Lookup(const std::string& name) const; // ----- 辅助函数:从语法树节点构造 Type ----- - static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); - static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); + static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); + static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); private: // 作用域栈:每个元素是一个从名字到符号的映射 diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 18a28ad..e2b0da7 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -85,25 +85,25 @@ SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { } // ---------- 辅助函数:从语法树节点构造 Type ---------- -std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { +std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { // 这里需要根据实际的语法树结构来提取类型。 // 假设 ctx 中包含类型节点和数组维度信息。 // 以下代码为示意,具体实现需根据你的 SysY 语法定义调整。 // 1. 获取基本类型 - std::shared_ptr base_type; + std::shared_ptr base_type; // 假设 ctx 中有 type() 方法返回类型节点,且类型节点有 INT()、FLOAT() 等方法 if (ctx->type()) { if (ctx->type()->INT()) { - base_type = Type::GetInt32Type(); + base_type = ir::Type::GetInt32Type(); } else if (ctx->type()->FLOAT()) { - base_type = Type::GetFloatType(); + base_type = ir::Type::GetFloatType(); } else { // 默认为 int - base_type = Type::GetInt32Type(); + base_type = ir::Type::GetInt32Type(); } } else { - base_type = Type::GetInt32Type(); // 默认 + base_type = ir::Type::GetInt32Type(); // 默认 } // 2. 处理数组维度 @@ -121,44 +121,44 @@ std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* } else { // 数组类型:递归构建数组类型 // 注意:Type::GetArrayType 需要元素类型和维度列表 - return Type::GetArrayType(base_type, dims); + return ir::Type::GetArrayType(base_type, dims); } } -std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { +std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { // 提取返回类型 - std::shared_ptr ret_type; + std::shared_ptr ret_type; if (ctx->type()) { if (ctx->type()->VOID()) { - ret_type = Type::GetVoidType(); + ret_type = ir::Type::GetVoidType(); } else if (ctx->type()->INT()) { - ret_type = Type::GetInt32Type(); + ret_type = ir::Type::GetInt32Type(); } else if (ctx->type()->FLOAT()) { - ret_type = Type::GetFloatType(); + ret_type = ir::Type::GetFloatType(); } else { - ret_type = Type::GetInt32Type(); // 默认 + ret_type = ir::Type::GetInt32Type(); // 默认 } } else { - ret_type = Type::GetInt32Type(); // 默认 + ret_type = ir::Type::GetInt32Type(); // 默认 } // 提取参数类型列表 - std::vector> param_types; + std::vector> param_types; if (ctx->paramList()) { for (auto param : ctx->paramList()->param()) { // 根据参数声明构建类型 // 这里假设每个参数有类型节点,并且可能包含数组维度 - std::shared_ptr param_type; + std::shared_ptr param_type; if (param->type()) { if (param->type()->INT()) { - param_type = Type::GetInt32Type(); + param_type = ir::Type::GetInt32Type(); } else if (param->type()->FLOAT()) { - param_type = Type::GetFloatType(); + param_type = ir::Type::GetFloatType(); } else { - param_type = Type::GetInt32Type(); + param_type = ir::Type::GetInt32Type(); } } else { - param_type = Type::GetInt32Type(); + param_type = ir::Type::GetInt32Type(); } // 处理数组参数(如果存在维度) @@ -169,5 +169,5 @@ std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext } // 创建函数类型 - return Type::GetFunctionType(ret_type, param_types); + return ir::Type::GetFunctionType(ret_type, param_types); } \ No newline at end of file From a015a4bc306350fa88611ae4db53cb1b93b22dd8 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Tue, 24 Mar 2026 16:30:39 +0800 Subject: [PATCH 08/39] =?UTF-8?q?fix(sem)=E4=BF=AE=E6=AD=A3=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E9=83=A8=E5=88=86=E7=9A=84=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 2 +- src/sem/SymbolTable.cpp | 145 +++++++++++++++++++++++--------------- 2 files changed, 88 insertions(+), 59 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index df5399b..360126d 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -7,7 +7,7 @@ #include #include "SysYParser.h" -#include "../ir/IR.h" +#include "ir/IR.h" // 符号种类 enum class SymbolKind { diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index e2b0da7..1b29f7f 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -1,4 +1,5 @@ #include "sem/SymbolTable.h" +#include // 用于访问父节点 // ---------- 构造函数 ---------- SymbolTable::SymbolTable() { @@ -84,90 +85,118 @@ SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { return nullptr; } -// ---------- 辅助函数:从语法树节点构造 Type ---------- +// ---------- 辅助函数:从 VarDefContext 获取外层 VarDeclContext ---------- +static SysYParser::VarDeclContext* getOuterVarDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto varDecl = dynamic_cast(parent)) { + return varDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// ---------- 辅助函数:从 VarDefContext 获取外层 ConstDeclContext(常量定义)---------- +static SysYParser::ConstDeclContext* getOuterConstDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto constDecl = dynamic_cast(parent)) { + return constDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// 常量表达式求值(占位,需实现真正的常量折叠) +static int evaluateConstExp(SysYParser::ConstExpContext* ctx) { + // TODO: 实现常量折叠,目前返回0 + return 0; +} + +// 从 VarDefContext 构造类型 std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { - // 这里需要根据实际的语法树结构来提取类型。 - // 假设 ctx 中包含类型节点和数组维度信息。 - // 以下代码为示意,具体实现需根据你的 SysY 语法定义调整。 - - // 1. 获取基本类型 - std::shared_ptr base_type; - // 假设 ctx 中有 type() 方法返回类型节点,且类型节点有 INT()、FLOAT() 等方法 - if (ctx->type()) { - if (ctx->type()->INT()) { + // 1. 获取基本类型(int/float) + std::shared_ptr base_type = nullptr; + auto varDecl = getOuterVarDecl(ctx); + if (varDecl) { + auto bType = varDecl->bType(); + if (bType->Int()) { base_type = ir::Type::GetInt32Type(); - } else if (ctx->type()->FLOAT()) { + } else if (bType->Float()) { base_type = ir::Type::GetFloatType(); - } else { - // 默认为 int - base_type = ir::Type::GetInt32Type(); } } else { - base_type = ir::Type::GetInt32Type(); // 默认 + auto constDecl = getOuterConstDecl(ctx); + if (constDecl) { + auto bType = constDecl->bType(); + if (bType->Int()) { + base_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + base_type = ir::Type::GetFloatType(); + } + } + } + + if (!base_type) { + base_type = ir::Type::GetInt32Type(); // 默认 int } - // 2. 处理数组维度 - // 假设 ctx 中有 arraySpecifier() 返回维度列表,每个维度是一个表达式节点 - // 这里简单假设维度值在语法树中已经计算好,并存储在某个 vector 中 + // 2. 解析数组维度(从 varDef 的 constExp 列表获取) std::vector dims; - // 示意:遍历数组维度节点,将常量值推入 dims - // for (auto dimNode : ctx->arraySpecifier()) { - // dims.push_back(parseConstExpr(dimNode)); - // } - - if (dims.empty()) { - // 非数组,直接返回基本类型 - return base_type; - } else { - // 数组类型:递归构建数组类型 - // 注意:Type::GetArrayType 需要元素类型和维度列表 + for (auto constExp : ctx->constExp()) { + int dimVal = evaluateConstExp(constExp); + dims.push_back(dimVal); + } + + if (!dims.empty()) { return ir::Type::GetArrayType(base_type, dims); } + return base_type; } +// 从 FuncDefContext 构造函数类型 std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { - // 提取返回类型 + // 1. 返回类型 std::shared_ptr ret_type; - if (ctx->type()) { - if (ctx->type()->VOID()) { - ret_type = ir::Type::GetVoidType(); - } else if (ctx->type()->INT()) { - ret_type = ir::Type::GetInt32Type(); - } else if (ctx->type()->FLOAT()) { - ret_type = ir::Type::GetFloatType(); - } else { - ret_type = ir::Type::GetInt32Type(); // 默认 - } + auto funcType = ctx->funcType(); + if (funcType->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (funcType->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (funcType->Float()) { + ret_type = ir::Type::GetFloatType(); } else { - ret_type = ir::Type::GetInt32Type(); // 默认 + ret_type = ir::Type::GetInt32Type(); // fallback } - // 提取参数类型列表 + // 2. 参数类型 std::vector> param_types; - if (ctx->paramList()) { - for (auto param : ctx->paramList()->param()) { - // 根据参数声明构建类型 - // 这里假设每个参数有类型节点,并且可能包含数组维度 + auto fParams = ctx->funcFParams(); + if (fParams) { + for (auto param : fParams->funcFParam()) { std::shared_ptr param_type; - if (param->type()) { - if (param->type()->INT()) { - param_type = ir::Type::GetInt32Type(); - } else if (param->type()->FLOAT()) { - param_type = ir::Type::GetFloatType(); - } else { - param_type = ir::Type::GetInt32Type(); - } + auto bType = param->bType(); + if (bType->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + param_type = ir::Type::GetFloatType(); } else { param_type = ir::Type::GetInt32Type(); } - // 处理数组参数(如果存在维度) - // if (param->arraySpecifier()) { ... } - + // 处理数组参数:如果存在 [ ] 或 [ exp ],退化为指针 + if (param->L_BRACK().size() > 0) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } param_types.push_back(param_type); } } - // 创建函数类型 return ir::Type::GetFunctionType(ret_type, param_types); } \ No newline at end of file From d1f2efa4ae44ceb62aeb01fe330d748640fcb307 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 18:59:47 +0800 Subject: [PATCH 09/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E5=AF=B9=E5=BA=93=E5=87=BD=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 3 ++ src/sem/SymbolTable.cpp | 98 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index 360126d..29b4fae 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -25,6 +25,7 @@ struct Symbol { int scope_level = 0; // 定义时的作用域深度 int stack_offset = -1; // 局部变量/参数栈偏移(全局变量为 -1) bool is_initialized = false; // 是否已初始化 + bool is_builtin = false; // 是否为库函数 // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) std::vector> param_types; @@ -64,6 +65,8 @@ class SymbolTable { // ----- 辅助函数:从语法树节点构造 Type ----- static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); + + void registerBuiltinFunctions(); private: // 作用域栈:每个元素是一个从名字到符号的映射 diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 1b29f7f..bd33f48 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -3,8 +3,8 @@ // ---------- 构造函数 ---------- SymbolTable::SymbolTable() { - // 初始化全局作用域 - scopes_.emplace_back(); + scopes_.emplace_back(); // 初始化全局作用域 + registerBuiltinFunctions(); // 注册内置库函数 } // ---------- 作用域管理 ---------- @@ -199,4 +199,98 @@ std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefCon } return ir::Type::GetFunctionType(ret_type, param_types); +} + +// ----- 注册内置库函数----- +void SymbolTable::registerBuiltinFunctions() { + // 确保当前处于全局作用域(scopes_ 只有一层) + // 1. getint: int getint() + Symbol getint; + getint.name = "getint"; + getint.kind = SymbolKind::Function; + getint.type = Type::GetFunctionType(Type::GetInt32Type(), {}); // 无参数 + getint.param_types = {}; + getint.scope_level = 0; + getint.is_builtin = true; + addSymbol(getint); + + // 2. getfloat: float getfloat() + Symbol getfloat; + getfloat.name = "getfloat"; + getfloat.kind = SymbolKind::Function; + getfloat.type = Type::GetFunctionType(Type::GetFloatType(), {}); + getfloat.param_types = {}; + getfloat.scope_level = 0; + getfloat.is_builtin = true; + addSymbol(getfloat); + + // 3. getch: int getch() + Symbol getch; + getch.name = "getch"; + getch.kind = SymbolKind::Function; + getch.type = Type::GetFunctionType(Type::GetInt32Type(), {}); + getch.param_types = {}; + getch.scope_level = 0; + getch.is_builtin = true; + addSymbol(getch); + + // 4. putint: void putint(int) + std::vector> putint_params = { Type::GetInt32Type() }; + Symbol putint; + putint.name = "putint"; + putint.kind = SymbolKind::Function; + putint.type = Type::GetFunctionType(Type::GetVoidType(), putint_params); + putint.param_types = putint_params; + putint.scope_level = 0; + putint.is_builtin = true; + addSymbol(putint); + + // 5. putfloat: void putfloat(float) + std::vector> putfloat_params = { Type::GetFloatType() }; + Symbol putfloat; + putfloat.name = "putfloat"; + putfloat.kind = SymbolKind::Function; + putfloat.type = Type::GetFunctionType(Type::GetVoidType(), putfloat_params); + putfloat.param_types = putfloat_params; + putfloat.scope_level = 0; + putfloat.is_builtin = true; + addSymbol(putfloat); + + // 6. putch: void putch(int) + std::vector> putch_params = { Type::GetInt32Type() }; + Symbol putch; + putch.name = "putch"; + putch.kind = SymbolKind::Function; + putch.type = Type::GetFunctionType(Type::GetVoidType(), putch_params); + putch.param_types = putch_params; + putch.scope_level = 0; + putch.is_builtin = true; + addSymbol(putch); + + // 7. getarray: int getarray(int a[]) + // 参数类型: int a[] 退化为 int* 即 PtrInt32 + std::vector> getarray_params = { Type::GetPtrInt32Type() }; + Symbol getarray; + getarray.name = "getarray"; + getarray.kind = SymbolKind::Function; + getarray.type = Type::GetFunctionType(Type::GetInt32Type(), getarray_params); + getarray.param_types = getarray_params; + getarray.scope_level = 0; + getarray.is_builtin = true; + addSymbol(getarray); + + // 8. putarray: void putarray(int n, int a[]) + // 参数: int n, int a[] -> 实际类型: int, int* + std::vector> putarray_params = { Type::GetInt32Type(), Type::GetPtrInt32Type() }; + Symbol putarray; + putarray.name = "putarray"; + putarray.kind = SymbolKind::Function; + putarray.type = Type::GetFunctionType(Type::GetVoidType(), putarray_params); + putarray.param_types = putarray_params; + putarray.scope_level = 0; + putarray.is_builtin = true; + addSymbol(putarray); + + // 9. putf: void putf(char fmt[], ...) —— 可选,但为了完整性 + // 参数: char fmt[] 退化为 char*,但 SysY 中没有 char 类型,可能使用 int 数组或特殊处理,此处略过 } \ No newline at end of file From d1751891930eb8aff1025dc021759527864ceedc Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 19:35:05 +0800 Subject: [PATCH 10/39] =?UTF-8?q?fix(sem)=E4=BF=AE=E6=AD=A3=E4=B8=8A?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4=E7=9A=84=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/SymbolTable.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index bd33f48..421f9d4 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -208,7 +208,7 @@ void SymbolTable::registerBuiltinFunctions() { Symbol getint; getint.name = "getint"; getint.kind = SymbolKind::Function; - getint.type = Type::GetFunctionType(Type::GetInt32Type(), {}); // 无参数 + getint.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); // 无参数 getint.param_types = {}; getint.scope_level = 0; getint.is_builtin = true; @@ -218,7 +218,7 @@ void SymbolTable::registerBuiltinFunctions() { Symbol getfloat; getfloat.name = "getfloat"; getfloat.kind = SymbolKind::Function; - getfloat.type = Type::GetFunctionType(Type::GetFloatType(), {}); + getfloat.type = ir::Type::GetFunctionType(ir::Type::GetFloatType(), {}); getfloat.param_types = {}; getfloat.scope_level = 0; getfloat.is_builtin = true; @@ -228,40 +228,40 @@ void SymbolTable::registerBuiltinFunctions() { Symbol getch; getch.name = "getch"; getch.kind = SymbolKind::Function; - getch.type = Type::GetFunctionType(Type::GetInt32Type(), {}); + getch.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); getch.param_types = {}; getch.scope_level = 0; getch.is_builtin = true; addSymbol(getch); // 4. putint: void putint(int) - std::vector> putint_params = { Type::GetInt32Type() }; + std::vector> putint_params = { ir::Type::GetInt32Type() }; Symbol putint; putint.name = "putint"; putint.kind = SymbolKind::Function; - putint.type = Type::GetFunctionType(Type::GetVoidType(), putint_params); + putint.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putint_params); putint.param_types = putint_params; putint.scope_level = 0; putint.is_builtin = true; addSymbol(putint); // 5. putfloat: void putfloat(float) - std::vector> putfloat_params = { Type::GetFloatType() }; + std::vector> putfloat_params = { ir::Type::GetFloatType() }; Symbol putfloat; putfloat.name = "putfloat"; putfloat.kind = SymbolKind::Function; - putfloat.type = Type::GetFunctionType(Type::GetVoidType(), putfloat_params); + putfloat.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfloat_params); putfloat.param_types = putfloat_params; putfloat.scope_level = 0; putfloat.is_builtin = true; addSymbol(putfloat); // 6. putch: void putch(int) - std::vector> putch_params = { Type::GetInt32Type() }; + std::vector> putch_params = { ir::Type::GetInt32Type() }; Symbol putch; putch.name = "putch"; putch.kind = SymbolKind::Function; - putch.type = Type::GetFunctionType(Type::GetVoidType(), putch_params); + putch.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putch_params); putch.param_types = putch_params; putch.scope_level = 0; putch.is_builtin = true; @@ -269,11 +269,11 @@ void SymbolTable::registerBuiltinFunctions() { // 7. getarray: int getarray(int a[]) // 参数类型: int a[] 退化为 int* 即 PtrInt32 - std::vector> getarray_params = { Type::GetPtrInt32Type() }; + std::vector> getarray_params = { ir::Type::GetPtrInt32Type() }; Symbol getarray; getarray.name = "getarray"; getarray.kind = SymbolKind::Function; - getarray.type = Type::GetFunctionType(Type::GetInt32Type(), getarray_params); + getarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getarray_params); getarray.param_types = getarray_params; getarray.scope_level = 0; getarray.is_builtin = true; @@ -281,11 +281,11 @@ void SymbolTable::registerBuiltinFunctions() { // 8. putarray: void putarray(int n, int a[]) // 参数: int n, int a[] -> 实际类型: int, int* - std::vector> putarray_params = { Type::GetInt32Type(), Type::GetPtrInt32Type() }; + std::vector> putarray_params = { ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type() }; Symbol putarray; putarray.name = "putarray"; putarray.kind = SymbolKind::Function; - putarray.type = Type::GetFunctionType(Type::GetVoidType(), putarray_params); + putarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putarray_params); putarray.param_types = putarray_params; putarray.scope_level = 0; putarray.is_builtin = true; From f3fe34801e7457409bf7fe50217061c75c727125 Mon Sep 17 00:00:00 2001 From: ftt <> Date: Wed, 25 Mar 2026 19:40:06 +0800 Subject: [PATCH 11/39] =?UTF-8?q?feat(sem)=E6=8F=90=E4=BA=A4=E8=AF=AD?= =?UTF-8?q?=E4=B9=89=E5=88=86=E6=9E=90B=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/irgen/IRGen.h | 58 -- include/sem/Sema.h | 88 ++- src/CMakeLists.txt | 2 - src/irgen/CMakeLists.txt | 14 +- src/irgen/IRGenDecl.cpp | 107 --- src/irgen/IRGenDriver.cpp | 15 - src/irgen/IRGenExp.cpp | 80 --- src/irgen/IRGenFunc.cpp | 87 --- src/irgen/IRGenStmt.cpp | 39 - src/main.cpp | 6 +- src/sem/Sema.cpp | 1427 ++++++++++++++++++++++++++++++++----- 11 files changed, 1325 insertions(+), 598 deletions(-) delete mode 100644 include/irgen/IRGen.h delete mode 100644 src/irgen/IRGenDecl.cpp delete mode 100644 src/irgen/IRGenDriver.cpp delete mode 100644 src/irgen/IRGenExp.cpp delete mode 100644 src/irgen/IRGenFunc.cpp delete mode 100644 src/irgen/IRGenStmt.cpp diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h deleted file mode 100644 index 231ba90..0000000 --- a/include/irgen/IRGen.h +++ /dev/null @@ -1,58 +0,0 @@ -// 将语法树翻译为 IR。 -// 实现拆分在 IRGenFunc/IRGenStmt/IRGenExp/IRGenDecl。 - -#pragma once - -#include -#include -#include -#include - -#include "SysYBaseVisitor.h" -#include "SysYParser.h" -#include "ir/IR.h" -#include "sem/Sema.h" - -namespace ir { -class Module; -class Function; -class IRBuilder; -class Value; -} - -class IRGenImpl final : public SysYBaseVisitor { - public: - IRGenImpl(ir::Module& module, const SemanticContext& sema); - - std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override; - std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override; - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override; - std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override; - std::any visitDecl(SysYParser::DeclContext* ctx) override; - std::any visitStmt(SysYParser::StmtContext* ctx) override; - std::any visitVarDef(SysYParser::VarDefContext* ctx) override; - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override; - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override; - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override; - std::any visitVarExp(SysYParser::VarExpContext* ctx) override; - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override; - - private: - enum class BlockFlow { - Continue, - Terminated, - }; - - BlockFlow VisitBlockItemResult(SysYParser::BlockItemContext& item); - ir::Value* EvalExpr(SysYParser::ExpContext& expr); - - ir::Module& module_; - const SemanticContext& sema_; - ir::Function* func_; - ir::IRBuilder builder_; - // 名称绑定由 Sema 负责;IRGen 只维护“声明 -> 存储槽位”的代码生成状态。 - std::unordered_map storage_map_; -}; - -std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema); diff --git a/include/sem/Sema.h b/include/sem/Sema.h index 9ac057b..c79c401 100644 --- a/include/sem/Sema.h +++ b/include/sem/Sema.h @@ -2,29 +2,83 @@ #pragma once #include +#include +#include #include "SysYParser.h" +#include "ir/IR.h" +// 表达式信息结构 +struct ExprInfo { + std::shared_ptr type = nullptr; + bool is_lvalue = false; + bool is_const = false; + bool is_const_int = false; // 是否是整型常量 + int const_int_value = 0; + float const_float_value = 0.0f; + antlr4::ParserRuleContext* node = nullptr; // 对应的语法树节点 +}; + +// 语义分析上下文:存储分析过程中产生的信息 class SemanticContext { - public: - void BindVarUse(SysYParser::VarContext* use, - SysYParser::VarDefContext* decl) { - var_uses_[use] = decl; - } - - SysYParser::VarDefContext* ResolveVarUse( - const SysYParser::VarContext* use) const { - auto it = var_uses_.find(use); - return it == var_uses_.end() ? nullptr : it->second; - } - - private: - std::unordered_map - var_uses_; +public: + // ----- 变量使用绑定(使用 LValContext 而不是 VarContext)----- + void BindVarUse(SysYParser::LValContext* use, + SysYParser::VarDefContext* decl) { + var_uses_[use] = decl; + } + + SysYParser::VarDefContext* ResolveVarUse( + const SysYParser::LValContext* use) const { + auto it = var_uses_.find(use); + return it == var_uses_.end() ? nullptr : it->second; + } + + // ----- 表达式类型信息存储 ----- + void SetExprType(antlr4::ParserRuleContext* node, const ExprInfo& info) { + ExprInfo copy = info; + copy.node = node; + expr_types_[node] = copy; + } + + ExprInfo* GetExprType(antlr4::ParserRuleContext* node) { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + const ExprInfo* GetExprType(antlr4::ParserRuleContext* node) const { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + // ----- 隐式转换标记(供 IR 生成使用)----- + struct ConversionInfo { + antlr4::ParserRuleContext* node; + std::shared_ptr from_type; + std::shared_ptr to_type; + }; + + void AddConversion(antlr4::ParserRuleContext* node, + std::shared_ptr from, + std::shared_ptr to) { + conversions_.push_back({node, from, to}); + } + + const std::vector& GetConversions() const { return conversions_; } + +private: + // 变量使用映射 - 使用 LValContext 作为键 + std::unordered_map var_uses_; + + // 表达式类型映射 + std::unordered_map expr_types_; + + // 隐式转换列表 + std::vector conversions_; }; // 目前仅检查: // - 变量先声明后使用 // - 局部变量不允许重复定义 -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); +SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acb9400..c4ec6d9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,6 @@ add_subdirectory(ir) add_subdirectory(frontend) if(NOT COMPILER_PARSE_ONLY) add_subdirectory(sem) - add_subdirectory(irgen) add_subdirectory(mir) endif() @@ -20,7 +19,6 @@ target_link_libraries(compiler PRIVATE if(NOT COMPILER_PARSE_ONLY) target_link_libraries(compiler PRIVATE sem - irgen mir ) target_compile_definitions(compiler PRIVATE COMPILER_PARSE_ONLY=0) diff --git a/src/irgen/CMakeLists.txt b/src/irgen/CMakeLists.txt index d440bde..b28b04f 100644 --- a/src/irgen/CMakeLists.txt +++ b/src/irgen/CMakeLists.txt @@ -1,13 +1,3 @@ -add_library(irgen STATIC - IRGenDriver.cpp - IRGenFunc.cpp - IRGenStmt.cpp - IRGenExp.cpp - IRGenDecl.cpp -) -target_link_libraries(irgen PUBLIC - build_options - ${ANTLR4_RUNTIME_TARGET} - ir -) + + diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp deleted file mode 100644 index 0eb62ae..0000000 --- a/src/irgen/IRGenDecl.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "irgen/IRGen.h" - -#include - -#include "SysYParser.h" -#include "ir/IR.h" -#include "utils/Log.h" - -namespace { - -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { - throw std::runtime_error(FormatError("irgen", "非法左值")); - } - return lvalue.ID()->getText(); -} - -} // namespace - -std::any IRGenImpl::visitBlockStmt(SysYParser::BlockStmtContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少语句块")); - } - for (auto* item : ctx->blockItem()) { - if (item) { - if (VisitBlockItemResult(*item) == BlockFlow::Terminated) { - // 当前语法要求 return 为块内最后一条语句;命中后可停止生成。 - break; - } - } - } - return {}; -} - -IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( - SysYParser::BlockItemContext& item) { - return std::any_cast(item.accept(this)); -} - -std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少块内项")); - } - if (ctx->decl()) { - ctx->decl()->accept(this); - return BlockFlow::Continue; - } - if (ctx->stmt()) { - return ctx->stmt()->accept(this); - } - throw std::runtime_error(FormatError("irgen", "暂不支持的语句或声明")); -} - -// 变量声明的 IR 生成目前也是最小实现: -// - 先检查声明的基础类型,当前仅支持局部 int; -// - 再把 Decl 中的变量定义交给 visitVarDef 继续处理。 -// -// 和更完整的版本相比,这里还没有: -// - 一个 Decl 中多个变量定义的顺序处理; -// - const、数组、全局变量等不同声明形态; -// - 更丰富的类型系统。 -std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少变量声明")); - } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持局部 int 变量声明")); - } - auto* var_def = ctx->varDef(); - if (!var_def) { - throw std::runtime_error(FormatError("irgen", "非法变量声明")); - } - var_def->accept(this); - return {}; -} - - -// 当前仍是教学用的最小版本,因此这里只支持: -// - 局部 int 变量; -// - 标量初始化; -// - 一个 VarDef 对应一个槽位。 -std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少变量定义")); - } - if (!ctx->lValue()) { - throw std::runtime_error(FormatError("irgen", "变量声明缺少名称")); - } - GetLValueName(*ctx->lValue()); - if (storage_map_.find(ctx) != storage_map_.end()) { - throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位")); - } - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); - storage_map_[ctx] = slot; - - ir::Value* init = nullptr; - if (auto* init_value = ctx->initValue()) { - if (!init_value->exp()) { - throw std::runtime_error(FormatError("irgen", "当前不支持聚合初始化")); - } - init = EvalExpr(*init_value->exp()); - } else { - init = builder_.CreateConstInt(0); - } - builder_.CreateStore(init, slot); - return {}; -} diff --git a/src/irgen/IRGenDriver.cpp b/src/irgen/IRGenDriver.cpp deleted file mode 100644 index ff94412..0000000 --- a/src/irgen/IRGenDriver.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "irgen/IRGen.h" - -#include - -#include "SysYParser.h" -#include "ir/IR.h" -#include "utils/Log.h" - -std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema) { - auto module = std::make_unique(); - IRGenImpl gen(*module, sema); - tree.accept(&gen); - return module; -} diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp deleted file mode 100644 index cf4797c..0000000 --- a/src/irgen/IRGenExp.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "irgen/IRGen.h" - -#include - -#include "SysYParser.h" -#include "ir/IR.h" -#include "utils/Log.h" - -// 表达式生成当前也只实现了很小的一个子集。 -// 目前支持: -// - 整数字面量 -// - 普通局部变量读取 -// - 括号表达式 -// - 二元加法 -// -// 还未支持: -// - 减乘除与一元运算 -// - 赋值表达式 -// - 函数调用 -// - 数组、指针、下标访问 -// - 条件与比较表达式 -// - ... -ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { - return std::any_cast(expr.accept(this)); -} - - -std::any IRGenImpl::visitParenExp(SysYParser::ParenExpContext* ctx) { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "非法括号表达式")); - } - return EvalExpr(*ctx->exp()); -} - - -std::any IRGenImpl::visitNumberExp(SysYParser::NumberExpContext* ctx) { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持整数字面量")); - } - return static_cast( - builder_.CreateConstInt(std::stoi(ctx->number()->getText()))); -} - -// 变量使用的处理流程: -// 1. 先通过语义分析结果把变量使用绑定回声明; -// 2. 再通过 storage_map_ 找到该声明对应的栈槽位; -// 3. 最后生成 load,把内存中的值读出来。 -// -// 因此当前 IRGen 自己不再做名字查找,而是直接消费 Sema 的绑定结果。 -std::any IRGenImpl::visitVarExp(SysYParser::VarExpContext* ctx) { - if (!ctx || !ctx->var() || !ctx->var()->ID()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持普通整型变量")); - } - auto* decl = sema_.ResolveVarUse(ctx->var()); - if (!decl) { - throw std::runtime_error( - FormatError("irgen", - "变量使用缺少语义绑定: " + ctx->var()->ID()->getText())); - } - auto it = storage_map_.find(decl); - if (it == storage_map_.end()) { - throw std::runtime_error( - FormatError("irgen", - "变量声明缺少存储槽位: " + ctx->var()->ID()->getText())); - } - return static_cast( - builder_.CreateLoad(it->second, module_.GetContext().NextTemp())); -} - - -std::any IRGenImpl::visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { - throw std::runtime_error(FormatError("irgen", "非法加法表达式")); - } - ir::Value* lhs = EvalExpr(*ctx->exp(0)); - ir::Value* rhs = EvalExpr(*ctx->exp(1)); - return static_cast( - builder_.CreateBinary(ir::Opcode::Add, lhs, rhs, - module_.GetContext().NextTemp())); -} diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp deleted file mode 100644 index 4912d03..0000000 --- a/src/irgen/IRGenFunc.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "irgen/IRGen.h" - -#include - -#include "SysYParser.h" -#include "ir/IR.h" -#include "utils/Log.h" - -namespace { - -void VerifyFunctionStructure(const ir::Function& func) { - // 当前 IRGen 仍是单入口、顺序生成;这里在生成结束后补一层块终结校验。 - for (const auto& bb : func.GetBlocks()) { - if (!bb || !bb->HasTerminator()) { - throw std::runtime_error( - FormatError("irgen", "基本块未正确终结: " + - (bb ? bb->GetName() : std::string("")))); - } - } -} - -} // namespace - -IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) - : module_(module), - sema_(sema), - func_(nullptr), - builder_(module.GetContext(), nullptr) {} - -// 编译单元的 IR 生成当前只实现了最小功能: -// - Module 已在 GenerateIR 中创建,这里只负责继续生成其中的内容; -// - 当前会读取编译单元中的函数定义,并交给 visitFuncDef 生成函数 IR; -// -// 当前还没有实现: -// - 多个函数定义的遍历与生成; -// - 全局变量、全局常量的 IR 生成。 -std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少编译单元")); - } - auto* func = ctx->funcDef(); - if (!func) { - throw std::runtime_error(FormatError("irgen", "缺少函数定义")); - } - func->accept(this); - return {}; -} - -// 函数 IR 生成当前实现了: -// 1. 获取函数名; -// 2. 检查函数返回类型; -// 3. 在 Module 中创建 Function; -// 4. 将 builder 插入点设置到入口基本块; -// 5. 继续生成函数体。 -// -// 当前还没有实现: -// - 通用函数返回类型处理; -// - 形参列表遍历与参数类型收集; -// - FunctionType 这样的函数类型对象; -// - Argument/形式参数 IR 对象; -// - 入口块中的参数初始化逻辑。 -// ... - -// 因此这里目前只支持最小的“无参 int 函数”生成。 -std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少函数定义")); - } - if (!ctx->blockStmt()) { - throw std::runtime_error(FormatError("irgen", "函数体为空")); - } - if (!ctx->ID()) { - throw std::runtime_error(FormatError("irgen", "缺少函数名")); - } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持无参 int 函数")); - } - - func_ = module_.CreateFunction(ctx->ID()->getText(), ir::Type::GetInt32Type()); - builder_.SetInsertPoint(func_->GetEntry()); - storage_map_.clear(); - - ctx->blockStmt()->accept(this); - // 语义正确性主要由 sema 保证,这里只兜底检查 IR 结构是否合法。 - VerifyFunctionStructure(*func_); - return {}; -} diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp deleted file mode 100644 index 751550c..0000000 --- a/src/irgen/IRGenStmt.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "irgen/IRGen.h" - -#include - -#include "SysYParser.h" -#include "ir/IR.h" -#include "utils/Log.h" - -// 语句生成当前只实现了最小子集。 -// 目前支持: -// - return ; -// -// 还未支持: -// - 赋值语句 -// - if / while 等控制流 -// - 空语句、块语句嵌套分发之外的更多语句形态 - -std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少语句")); - } - if (ctx->returnStmt()) { - return ctx->returnStmt()->accept(this); - } - throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); -} - - -std::any IRGenImpl::visitReturnStmt(SysYParser::ReturnStmtContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); - } - if (!ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "return 缺少表达式")); - } - ir::Value* v = EvalExpr(*ctx->exp()); - builder_.CreateRet(v); - return BlockFlow::Terminated; -} diff --git a/src/main.cpp b/src/main.cpp index 88ed747..fc40f04 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,7 +6,7 @@ #include "frontend/SyntaxTreePrinter.h" #if !COMPILER_PARSE_ONLY #include "ir/IR.h" -#include "irgen/IRGen.h" +//#include "irgen/IRGen.h" #include "mir/MIR.h" #include "sem/Sema.h" #endif @@ -35,7 +35,7 @@ int main(int argc, char** argv) { } auto sema = RunSema(*comp_unit); - auto module = GenerateIR(*comp_unit, sema); + /*auto module = GenerateIR(*comp_unit, sema); if (opts.emit_ir) { ir::IRPrinter printer; if (need_blank_line) { @@ -53,7 +53,7 @@ int main(int argc, char** argv) { std::cout << "\n"; } mir::PrintAsm(*machine_func, std::cout); - } + }*/ #else if (opts.emit_ir || opts.emit_asm) { throw std::runtime_error( diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 745374c..68f9b0d 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "SysYBaseVisitor.h" #include "sem/SymbolTable.h" @@ -10,191 +11,1261 @@ namespace { -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { - throw std::runtime_error(FormatError("sema", "非法左值")); - } - return lvalue.ID()->getText(); +// 获取左值名称的辅助函数 +std::string GetLValueName(SysYParser::LValContext& lval) { + if (!lval.Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + return lval.Ident()->getText(); +} + +// 从 BTypeContext 获取类型 +std::shared_ptr GetTypeFromBType(SysYParser::BTypeContext* ctx) { + if (!ctx) return ir::Type::GetInt32Type(); + if (ctx->Int()) return ir::Type::GetInt32Type(); + if (ctx->Float()) return ir::Type::GetFloatType(); + return ir::Type::GetInt32Type(); } +// 语义分析 Visitor class SemaVisitor final : public SysYBaseVisitor { - public: - std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少编译单元")); - } - auto* func = ctx->funcDef(); - if (!func || !func->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!func->ID() || func->ID()->getText() != "main") { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - func->accept(this); - if (!seen_return_) { - throw std::runtime_error( - FormatError("sema", "main 函数必须包含 return 语句")); - } - return {}; - } - - std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { - if (!ctx || !ctx->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持 int main")); - } - const auto& items = ctx->blockStmt()->blockItem(); - if (items.empty()) { - throw std::runtime_error( - FormatError("sema", "main 函数不能为空,且必须以 return 结束")); - } - ctx->blockStmt()->accept(this); - return {}; - } - - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少语句块")); - } - const auto& items = ctx->blockItem(); - for (size_t i = 0; i < items.size(); ++i) { - auto* item = items[i]; - if (!item) { - continue; - } - if (seen_return_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - current_item_index_ = i; - total_items_ = items.size(); - item->accept(this); - } - return {}; - } - - std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - if (ctx->decl()) { - ctx->decl()->accept(this); - return {}; - } - if (ctx->stmt()) { - ctx->stmt()->accept(this); - return {}; - } - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - - std::any visitDecl(SysYParser::DeclContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持局部 int 变量声明")); - } - auto* var_def = ctx->varDef(); - if (!var_def || !var_def->lValue()) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - const std::string name = GetLValueName(*var_def->lValue()); - if (table_.Contains(name)) { - throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); - } - if (auto* init = var_def->initValue()) { - if (!init->exp()) { - throw std::runtime_error(FormatError("sema", "当前不支持聚合初始化")); - } - init->exp()->accept(this); - } - table_.Add(name, var_def); - return {}; - } - - std::any visitStmt(SysYParser::StmtContext* ctx) override { - if (!ctx || !ctx->returnStmt()) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - ctx->returnStmt()->accept(this); - return {}; - } - - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "return 缺少表达式")); - } - ctx->exp()->accept(this); - seen_return_ = true; - if (current_item_index_ + 1 != total_items_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - return {}; - } - - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "非法括号表达式")); - } - ctx->exp()->accept(this); - return {}; - } - - std::any visitVarExp(SysYParser::VarExpContext* ctx) override { - if (!ctx || !ctx->var()) { - throw std::runtime_error(FormatError("sema", "非法变量表达式")); - } - ctx->var()->accept(this); - return {}; - } - - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("sema", "当前仅支持整数字面量")); - } - return {}; - } - - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { - throw std::runtime_error(FormatError("sema", "暂不支持的表达式形式")); - } - ctx->exp(0)->accept(this); - ctx->exp(1)->accept(this); - return {}; - } - - std::any visitVar(SysYParser::VarContext* ctx) override { - if (!ctx || !ctx->ID()) { - throw std::runtime_error(FormatError("sema", "非法变量引用")); +public: + SemaVisitor() : table_() {} + + std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少编译单元")); + } + table_.enterScope(); // 创建全局作用域 + for (auto* func : ctx->funcDef()) { // 收集所有函数声明(处理互相调用) + CollectFunctionDeclaration(func); + } + for (auto* decl : ctx->decl()) { // 处理所有声明和定义 + if (decl) decl->accept(this); + } + for (auto* func : ctx->funcDef()) { + if (func) func->accept(this); + } + CheckMainFunction(); // 检查 main 函数存在且正确 + table_.exitScope(); // 退出全局作用域 + return {}; + } + + std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "函数定义缺少标识符")); + } + std::string name = ctx->Ident()->getText(); + std::shared_ptr return_type; // 获取返回类型 + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + return_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + return_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + return_type = ir::Type::GetFloatType(); + } else { + return_type = ir::Type::GetInt32Type(); + } + } else { + return_type = ir::Type::GetInt32Type(); + } + std::cout << "[DEBUG] 进入函数: " << name + << " 返回类型: " << (return_type->IsInt32() ? "int" : + return_type->IsFloat() ? "float" : "void") + << std::endl; + + // 记录当前函数返回类型(用于 return 检查) + current_func_return_type_ = return_type; + current_func_has_return_ = false; + + table_.enterScope(); + if (ctx->funcFParams()) { // 处理参数 + CollectFunctionParams(ctx->funcFParams()); + } + if (ctx->block()) { // 处理函数体 + ctx->block()->accept(this); + } + std::cout << "[DEBUG] 函数 " << name + << " has_return: " << current_func_has_return_ + << " return_type_is_void: " << return_type->IsVoid() + << std::endl; + if (!return_type->IsVoid() && !current_func_has_return_) { // 检查非 void 函数是否有 return + throw std::runtime_error(FormatError("sema", "非 void 函数 " + name + " 缺少 return 语句")); + } + table_.exitScope(); + + current_func_return_type_ = nullptr; + current_func_has_return_ = false; + return {}; + } + + std::any visitBlock(SysYParser::BlockContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少语句块")); + } + table_.enterScope(); + for (auto* item : ctx->blockItem()) { // 处理所有 blockItem + if (item) { + item->accept(this); + // 如果已经有 return,可以继续(但 return 必须是最后一条) + // 注意:这里不需要跳出,因为 return 语句本身已经标记了 + } + } + table_.exitScope(); + return {}; + } + + std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + if (ctx->decl()) { + ctx->decl()->accept(this); + return {}; + } + if (ctx->stmt()) { + ctx->stmt()->accept(this); + return {}; + } + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + + std::any visitDecl(SysYParser::DeclContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + if (ctx->constDecl()) { + ctx->constDecl()->accept(this); + } else if (ctx->varDecl()) { + ctx->varDecl()->accept(this); + } + return {}; + } + + // ==================== 变量声明 ==================== + std::any visitVarDecl(SysYParser::VarDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + bool is_global = (table_.currentScopeLevel() == 0); + for (auto* var_def : ctx->varDef()) { + if (var_def) { + CheckVarDef(var_def, base_type, is_global); + } + } + return {}; + } + + void CheckVarDef(SysYParser::VarDefContext* ctx, + std::shared_ptr base_type, + bool is_global) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { // 检查重复定义 + throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); + } + // 确定类型(处理数组维度) + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + // 调试输出 + std::cout << "[DEBUG] CheckVarDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + if (is_array) { + // 处理数组维度 + for (auto* dim_exp : ctx->constExp()) { + int dim = EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + // 创建数组类型 + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成" << std::endl; + std::cout << "[DEBUG] type->IsArray(): " << type->IsArray() << std::endl; + std::cout << "[DEBUG] type->GetKind(): " << (int)type->GetKind() << std::endl; + // 验证数组类型 + if (type->IsArray()) { + auto* arr_type = dynamic_cast(type.get()); + if (arr_type) { + std::cout << "[DEBUG] ArrayType dimensions: "; + for (int d : arr_type->GetDimensions()) { + std::cout << d << " "; + } + std::cout << std::endl; + std::cout << "[DEBUG] Element type: " + << (arr_type->GetElementType()->IsInt32() ? "int" : + arr_type->GetElementType()->IsFloat() ? "float" : "unknown") + << std::endl; + } + } + } + bool has_init = (ctx->initVal() != nullptr); // 处理初始化 + if (is_global && has_init) { + CheckGlobalInitIsConst(ctx->initVal()); // 全局变量初始化必须是常量表达式 + } + // 创建符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = has_init; + sym.var_def_ctx = ctx; + if (is_array) { + // 存储维度信息,但 param_types 通常用于函数参数 + // 数组变量的维度信息已经包含在 type 中 + sym.param_types.clear(); // 确保不混淆 + } + table_.addSymbol(sym); // 添加到符号表 + std::cout << "[DEBUG] 符号添加完成: " << name + << " type_kind: " << (int)sym.type->GetKind() + << " is_array: " << sym.type->IsArray() + << std::endl; + } + + // ==================== 常量声明 ==================== + std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法常量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + for (auto* const_def : ctx->constDef()) { + if (const_def) { + CheckConstDef(const_def, base_type); + } + } + return {}; + } + + void CheckConstDef(SysYParser::ConstDefContext* ctx, + std::shared_ptr base_type) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法常量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义常量: " + name)); + } + // 确定类型 + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + std::cout << "[DEBUG] CheckConstDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + if (is_array) { + for (auto* dim_exp : ctx->constExp()) { + int dim = EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; + } + // 求值初始化器 + std::vector init_values; + if (ctx->constInitVal()) { + init_values = EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); + std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; + } + // 检查初始化值数量 + size_t expected_count = 1; + if (is_array) { + expected_count = 1; + for (int d : dims) expected_count *= d; + std::cout << "[DEBUG] 期望元素数量: " << expected_count << std::endl; + } + if (init_values.size() > expected_count) { + throw std::runtime_error(FormatError("sema", "初始化值过多")); + } + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Constant; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + // 存储常量值(仅对非数组有效) + if (!is_array && !init_values.empty()) { + if (base_type->IsInt32() && init_values[0].is_int) { + sym.is_int_const = true; + sym.const_value.i32 = init_values[0].int_val; + std::cout << "[DEBUG] 存储整型常量值: " << init_values[0].int_val << std::endl; + } else if (base_type->IsFloat() && !init_values[0].is_int) { + sym.is_int_const = false; + sym.const_value.f32 = init_values[0].float_val; + std::cout << "[DEBUG] 存储浮点常量值: " << init_values[0].float_val << std::endl; + } + } else if (is_array) { + std::cout << "[DEBUG] 数组常量,不存储单个常量值" << std::endl; + } + table_.addSymbol(sym); + std::cout << "[DEBUG] 常量符号添加完成" << std::endl; + } + + // ==================== 语句语义检查 ==================== + + // 处理所有语句 - 通过运行时类型判断 + std::any visitStmt(SysYParser::StmtContext* ctx) override { + if (!ctx) return {}; + // 调试输出 + std::cout << "[DEBUG] visitStmt: "; + if (ctx->Return()) std::cout << "Return "; + if (ctx->If()) std::cout << "If "; + if (ctx->While()) std::cout << "While "; + if (ctx->Break()) std::cout << "Break "; + if (ctx->Continue()) std::cout << "Continue "; + if (ctx->lVal() && ctx->Assign()) std::cout << "Assign "; + if (ctx->exp() && ctx->Semi()) std::cout << "ExpStmt "; + if (ctx->block()) std::cout << "Block "; + std::cout << std::endl; + // 判断语句类型 - 注意:Return() 返回的是 TerminalNode* + if (ctx->Return() != nullptr) { + // return 语句 + std::cout << "[DEBUG] 检测到 return 语句" << std::endl; + return visitReturnStmtInternal(ctx); + } else if (ctx->lVal() != nullptr && ctx->Assign() != nullptr) { + // 赋值语句 + return visitAssignStmt(ctx); + } else if (ctx->exp() != nullptr && ctx->Semi() != nullptr) { + // 表达式语句(可能有表达式) + return visitExpStmt(ctx); + } else if (ctx->block() != nullptr) { + // 块语句 + return ctx->block()->accept(this); + } else if (ctx->If() != nullptr) { + // if 语句 + return visitIfStmtInternal(ctx); + } else if (ctx->While() != nullptr) { + // while 语句 + return visitWhileStmtInternal(ctx); + } else if (ctx->Break() != nullptr) { + // break 语句 + return visitBreakStmtInternal(ctx); + } else if (ctx->Continue() != nullptr) { + // continue 语句 + return visitContinueStmtInternal(ctx); + } + return {}; + } + + // return 语句内部实现 + std::any visitReturnStmtInternal(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG] visitReturnStmtInternal 被调用" << std::endl; + std::shared_ptr expected = current_func_return_type_; + if (!expected) { + throw std::runtime_error(FormatError("sema", "return 语句不在函数体内")); + } + if (ctx->exp() != nullptr) { + // 有返回值的 return + std::cout << "[DEBUG] 有返回值的 return" << std::endl; + ExprInfo ret_val = CheckExp(ctx->exp()); + if (expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "void 函数不能返回值")); + } else if (!IsTypeCompatible(ret_val.type, expected)) { + throw std::runtime_error(FormatError("sema", "返回值类型不匹配")); + } + // 标记需要隐式转换 + if (ret_val.type != expected) { + sema_.AddConversion(ctx->exp(), ret_val.type, expected); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } else { + // 无返回值的 return + std::cout << "[DEBUG] 无返回值的 return" << std::endl; + if (!expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "非 void 函数必须返回值")); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } + return {}; + } + + // 左值表达式(变量引用) + std::any visitLVal(SysYParser::LValContext* ctx) override { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量引用")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); + } + // 检查数组访问 + bool is_array_access = !ctx->exp().empty(); + ExprInfo result; + // 判断是否为数组类型或指针类型(数组参数) + bool is_array_or_ptr = false; + if (sym->type) { + is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); + } + // 调试输出 + std::cout << "[DEBUG] visitLVal: " << name + << " kind: " << (int)sym->kind + << " type_kind: " << (sym->type ? (int)sym->type->GetKind() : -1) + << " is_array_or_ptr: " << is_array_or_ptr + << " subscript_count: " << ctx->exp().size() + << std::endl; + if (is_array_or_ptr) { + if (!is_array_access) { + throw std::runtime_error(FormatError("sema", "数组变量必须使用下标访问: " + name)); + } + // 获取维度信息 + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + if (sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dim_count = arr_type->GetDimensions().size(); + // 获取元素类型 + elem_type = arr_type->GetElementType(); + } + } else if (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { + // 指针类型,只接受一个下标 + dim_count = 1; + // 指针解引用后的类型 + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + } + if (ctx->exp().size() != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + result.type = elem_type; + result.is_lvalue = true; + result.is_const = false; + } else { + if (is_array_access) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); + if (result.is_const && sym->type && !sym->type->IsArray()) { + if (sym->is_int_const) { + result.is_const_int = true; + result.const_int_value = sym->const_value.i32; + } else { + result.const_float_value = sym->const_value.f32; + } + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // if 语句内部实现 + std::any visitIfStmtInternal(SysYParser::StmtContext* ctx) { + // 检查条件表达式 + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); + if (!cond.type || !cond.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "if 条件必须是 int 类型")); + } + } + // 处理 then 分支 + if (ctx->stmt().size() > 0) { + ctx->stmt()[0]->accept(this); + } + // 处理 else 分支 + if (ctx->stmt().size() > 1) { + ctx->stmt()[1]->accept(this); + } + return {}; + } + + // while 语句内部实现 + std::any visitWhileStmtInternal(SysYParser::StmtContext* ctx) { + if (ctx->cond()) { // 检查条件表达式 + ExprInfo cond = CheckCond(ctx->cond()); + if (!cond.type || !cond.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "while 条件必须是 int 类型")); + } + } + loop_stack_.push_back({true, ctx}); // 进入循环上下文 + if (ctx->stmt().size() > 0) { // 处理循环体 + ctx->stmt()[0]->accept(this); + } + loop_stack_.pop_back(); // 退出循环上下文 + return {}; + } + + // break 语句内部实现 + std::any visitBreakStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "break 语句必须在循环体内使用")); + } + return {}; } - const std::string name = ctx->ID()->getText(); - auto* decl = table_.Lookup(name); - if (!decl) { - throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); - } - sema_.BindVarUse(ctx, decl); - return {}; - } - - SemanticContext TakeSemanticContext() { return std::move(sema_); } + + // continue 语句内部实现 + std::any visitContinueStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "continue 语句必须在循环体内使用")); + } + return {}; + } + + // 赋值语句内部实现 + std::any visitAssignStmt(SysYParser::StmtContext* ctx) { + if (!ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("sema", "非法赋值语句")); + } + ExprInfo lvalue = CheckLValue(ctx->lVal()); // 检查左值 + if (lvalue.is_const) { + throw std::runtime_error(FormatError("sema", "不能给常量赋值")); + } + if (!lvalue.is_lvalue) { + throw std::runtime_error(FormatError("sema", "赋值左边必须是左值")); + } + ExprInfo rvalue = CheckExp(ctx->exp()); // 检查右值 + if (!IsTypeCompatible(rvalue.type, lvalue.type)) { + throw std::runtime_error(FormatError("sema", "赋值类型不匹配")); + } + if (rvalue.type != lvalue.type) { // 标记需要隐式转换 + sema_.AddConversion(ctx->exp(), rvalue.type, lvalue.type); + } + return {}; + } + + // 表达式语句内部实现 + std::any visitExpStmt(SysYParser::StmtContext* ctx) { + if (ctx->exp()) { + CheckExp(ctx->exp()); + } + return {}; + } + + // ==================== 表达式类型推导 ==================== + + // 主表达式 + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override { + ExprInfo result; + if (ctx->lVal()) { // 左值表达式 + result = CheckLValue(ctx->lVal()); + result.is_lvalue = true; + } else if (ctx->HEX_FLOAT() || ctx->DEC_FLOAT()) { // 浮点字面量 + result.type = ir::Type::GetFloatType(); + result.is_const = true; + result.is_const_int = false; + std::string text; + if (ctx->HEX_FLOAT()) text = ctx->HEX_FLOAT()->getText(); + else text = ctx->DEC_FLOAT()->getText(); + result.const_float_value = std::stof(text); + } else if (ctx->HEX_INT() || ctx->OCTAL_INT() || ctx->DECIMAL_INT() || ctx->ZERO()) { // 整数字面量 + result.type = ir::Type::GetInt32Type(); + result.is_const = true; + result.is_const_int = true; + std::string text; + if (ctx->HEX_INT()) text = ctx->HEX_INT()->getText(); + else if (ctx->OCTAL_INT()) text = ctx->OCTAL_INT()->getText(); + else if (ctx->DECIMAL_INT()) text = ctx->DECIMAL_INT()->getText(); + else text = ctx->ZERO()->getText(); + result.const_int_value = std::stoi(text, nullptr, 0); + } else if (ctx->exp()) { // 括号表达式 + result = CheckExp(ctx->exp()); + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 一元表达式 + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override { + ExprInfo result; + if (ctx->primaryExp()) { + ctx->primaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->primaryExp()); + if (info) result = *info; + } else if (ctx->Ident() && ctx->L_PAREN()) { // 函数调用 + result = CheckFuncCall(ctx); + } else if (ctx->unaryOp()) { // 一元运算 + ctx->unaryExp()->accept(this); + auto* operand = sema_.GetExprType(ctx->unaryExp()); + if (!operand) { + throw std::runtime_error(FormatError("sema", "一元操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op = ctx->unaryOp()->getText(); + if (op == "!") { + if (!operand->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑非操作数必须是 int 类型")); + } + result.type = ir::Type::GetInt32Type(); + result.is_const = operand->is_const; + if (operand->is_const && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = (operand->const_int_value == 0) ? 1 : 0; + } + } else { + if (!operand->type->IsInt32() && !operand->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "正负号操作数必须是算术类型")); + } + result.type = operand->type; + result.is_const = operand->is_const; + if (op == "-" && operand->is_const) { + if (operand->type->IsInt32() && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = -operand->const_int_value; + } else if (operand->type->IsFloat()) { + result.const_float_value = -operand->const_float_value; + } + } + } + result.is_lvalue = false; + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 乘除模表达式 + std::any visitMulExp(SysYParser::MulExpContext* ctx) override { + ExprInfo result; + if (ctx->mulExp()) { + ctx->mulExp()->accept(this); + ctx->unaryExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->mulExp()); + auto* right_info = sema_.GetExprType(ctx->unaryExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "乘除模操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->MulOp()) { + op = "*"; + } else if (ctx->DivOp()) { + op = "/"; + } else if (ctx->QuoOp()) { + op = "%"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->unaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->unaryExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 加减表达式 + std::any visitAddExp(SysYParser::AddExpContext* ctx) override { + ExprInfo result; + if (ctx->addExp()) { + ctx->addExp()->accept(this); + ctx->mulExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->addExp()); + auto* right_info = sema_.GetExprType(ctx->mulExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "加减操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->AddOp()) { + op = "+"; + } else if (ctx->SubOp()) { + op = "-"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->mulExp()->accept(this); + auto* info = sema_.GetExprType(ctx->mulExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 关系表达式 + std::any visitRelExp(SysYParser::RelExpContext* ctx) override { + ExprInfo result; + if (ctx->relExp()) { + ctx->relExp()->accept(this); + ctx->addExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->relExp()); + auto* right_info = sema_.GetExprType(ctx->addExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "关系操作数类型推导失败")); + } else { + if (!left_info->type->IsInt32() && !left_info->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "关系运算操作数必须是算术类型")); + } + std::string op; + if (ctx->LOp()) { + op = "<"; + } else if (ctx->GOp()) { + op = ">"; + } else if (ctx->LeOp()) { + op = "<="; + } else if (ctx->GeOp()) { + op = ">="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "<") result.const_int_value = (l < r) ? 1 : 0; + else if (op == ">") result.const_int_value = (l > r) ? 1 : 0; + else if (op == "<=") result.const_int_value = (l <= r) ? 1 : 0; + else if (op == ">=") result.const_int_value = (l >= r) ? 1 : 0; + } + } + } else { + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 相等性表达式 + std::any visitEqExp(SysYParser::EqExpContext* ctx) override { + ExprInfo result; + if (ctx->eqExp()) { + ctx->eqExp()->accept(this); + ctx->relExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->eqExp()); + auto* right_info = sema_.GetExprType(ctx->relExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "相等性操作数类型推导失败")); + } else { + std::string op; + if (ctx->EqOp()) { + op = "=="; + } else if (ctx->NeOp()) { + op = "!="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "==") result.const_int_value = (l == r) ? 1 : 0; + else if (op == "!=") result.const_int_value = (l != r) ? 1 : 0; + } + } + } else { + ctx->relExp()->accept(this); + auto* info = sema_.GetExprType(ctx->relExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑与表达式 + std::any visitLAndExp(SysYParser::LAndExpContext* ctx) override { + ExprInfo result; + if (ctx->lAndExp()) { + ctx->lAndExp()->accept(this); + ctx->eqExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lAndExp()); + auto* right_info = sema_.GetExprType(ctx->eqExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数类型推导失败")); + } else { + if (!left_info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑与左操作数必须是 int 类型")); + } + if (!right_info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑与右操作数必须是 int 类型")); + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value && right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->eqExp()->accept(this); + auto* info = sema_.GetExprType(ctx->eqExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑或表达式 + std::any visitLOrExp(SysYParser::LOrExpContext* ctx) override { + ExprInfo result; + if (ctx->lOrExp()) { + ctx->lOrExp()->accept(this); + ctx->lAndExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lOrExp()); + auto* right_info = sema_.GetExprType(ctx->lAndExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数类型推导失败")); + } else { + if (!left_info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑或左操作数必须是 int 类型")); + } + if (!right_info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑或右操作数必须是 int 类型")); + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value || right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->lAndExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lAndExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 获取语义上下文 + SemanticContext TakeSemanticContext() { return std::move(sema_); } + +private: + SymbolTable table_; + SemanticContext sema_; + struct LoopContext { + bool in_loop; + antlr4::ParserRuleContext* loop_node; + }; + std::vector loop_stack_; + std::shared_ptr current_func_return_type_ = nullptr; + bool current_func_has_return_ = false; - private: - SymbolTable table_; - SemanticContext sema_; - bool seen_return_ = false; - size_t current_item_index_ = 0; - size_t total_items_ = 0; + // ==================== 辅助函数 ==================== + + ExprInfo CheckExp(SysYParser::ExpContext* ctx) { + if (!ctx || !ctx->addExp()) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + ExprInfo result = *info; + sema_.SetExprType(ctx, result); + return result; + } + + // 专门用于检查 AddExp 的辅助函数(用于常量表达式) + ExprInfo CheckAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + ctx->accept(this); + auto* info = sema_.GetExprType(ctx); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + return *info; + } + + ExprInfo CheckCond(SysYParser::CondContext* ctx) { + if (!ctx || !ctx->lOrExp()) { + throw std::runtime_error(FormatError("sema", "无效条件表达式")); + } + ctx->lOrExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lOrExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "条件表达式类型推导失败")); + } + return *info; + } + + ExprInfo CheckLValue(SysYParser::LValContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); + } + bool is_const = (sym->kind == SymbolKind::Constant); + bool is_array_or_ptr = false; + if (sym->type) { + is_array_or_ptr = sym->type->IsArray() || + sym->type->IsPtrInt32() || + sym->type->IsPtrFloat(); + } + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + if (sym->type && sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dim_count = arr_type->GetDimensions().size(); + elem_type = arr_type->GetElementType(); + } + } else if (sym->type && (sym->type->IsPtrInt32() || sym->type->IsPtrFloat())) { + dim_count = 1; + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + } + size_t subscript_count = ctx->exp().size(); + if (is_array_or_ptr) { + if (subscript_count != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + return {elem_type, true, false}; + } else { + if (subscript_count > 0) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + return {sym->type, true, is_const}; + } + } + + ExprInfo CheckFuncCall(SysYParser::UnaryExpContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法函数调用")); + } + std::string func_name = ctx->Ident()->getText(); + auto* func_sym = table_.lookup(func_name); + if (!func_sym || func_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "未定义的函数: " + func_name)); + } + std::vector args; + if (ctx->funcRParams()) { + for (auto* exp : ctx->funcRParams()->exp()) { + if (exp) { + args.push_back(CheckExp(exp)); + } + } + } + if (args.size() != func_sym->param_types.size()) { + throw std::runtime_error(FormatError("sema", "参数个数不匹配")); + } + for (size_t i = 0; i < std::min(args.size(), func_sym->param_types.size()); ++i) { + if (!IsTypeCompatible(args[i].type, func_sym->param_types[i])) { + throw std::runtime_error(FormatError("sema", "参数类型不匹配")); + } + if (args[i].type != func_sym->param_types[i] && ctx->funcRParams() && + i < ctx->funcRParams()->exp().size()) { + sema_.AddConversion(ctx->funcRParams()->exp()[i], + args[i].type, func_sym->param_types[i]); + } + } + std::shared_ptr return_type; + if (func_sym->type && func_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(func_sym->type.get()); + if (func_type) { + return_type = func_type->GetReturnType(); + } + } + if (!return_type) { + return_type = ir::Type::GetInt32Type(); + } + ExprInfo result; + result.type = return_type; + result.is_lvalue = false; + result.is_const = false; + return result; + } + + ExprInfo CheckBinaryOp(const ExprInfo* left, const ExprInfo* right, + const std::string& op, antlr4::ParserRuleContext* ctx) { + ExprInfo result; + if (!left->type->IsInt32() && !left->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "左操作数必须是算术类型")); + } + if (!right->type->IsInt32() && !right->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "右操作数必须是算术类型")); + } + if (op == "%" && (!left->type->IsInt32() || !right->type->IsInt32())) { + throw std::runtime_error(FormatError("sema", "取模运算要求操作数为 int 类型")); + } + if (left->type->IsFloat() || right->type->IsFloat()) { + result.type = ir::Type::GetFloatType(); + } else { + result.type = ir::Type::GetInt32Type(); + } + result.is_lvalue = false; + if (left->is_const && right->is_const) { + result.is_const = true; + float l = GetFloatValue(*left); + float r = GetFloatValue(*right); + if (result.type->IsInt32()) { + result.is_const_int = true; + int li = (int)l, ri = (int)r; + if (op == "*") result.const_int_value = li * ri; + else if (op == "/") result.const_int_value = li / ri; + else if (op == "%") result.const_int_value = li % ri; + else if (op == "+") result.const_int_value = li + ri; + else if (op == "-") result.const_int_value = li - ri; + } else { + if (op == "*") result.const_float_value = l * r; + else if (op == "/") result.const_float_value = l / r; + else if (op == "+") result.const_float_value = l + r; + else if (op == "-") result.const_float_value = l - r; + } + } + return result; + } + + float GetFloatValue(const ExprInfo& info) { + if (info.type->IsInt32() && info.is_const_int) { + return (float)info.const_int_value; + } else { + return info.const_float_value; + } + } + + bool IsTypeCompatible(std::shared_ptr src, std::shared_ptr dst) { + if (src == dst) return true; + if (src->IsInt32() && dst->IsFloat()) return true; + if (src->IsFloat() && dst->IsInt32()) return true; + return false; + } + + void CollectFunctionDeclaration(SysYParser::FuncDefContext* ctx) { + if (!ctx || !ctx->Ident()) return; + std::string name = ctx->Ident()->getText(); + if (table_.lookup(name)) return; + std::shared_ptr ret_type; + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + ret_type = ir::Type::GetFloatType(); + } + } + if (!ret_type) ret_type = ir::Type::GetInt32Type(); + std::vector> param_types; + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param) continue; + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + if (!param->L_BRACK().empty()) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_type); + } + } + + // 创建函数类型 + std::shared_ptr func_type = ir::Type::GetFunctionType(ret_type, param_types); + + // 创建函数符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Function; + sym.type = func_type; + sym.param_types = param_types; + sym.scope_level = 0; + sym.is_initialized = true; + sym.func_def_ctx = ctx; + + table_.addSymbol(sym); + } + + void CollectFunctionParams(SysYParser::FuncFParamsContext* ctx) { + if (!ctx) return; + for (auto* param : ctx->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义参数: " + name)); + } + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + bool is_array = !param->L_BRACK().empty(); + if (is_array) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Parameter; + sym.type = param_type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + table_.addSymbol(sym); + } + } + + void CheckGlobalInitIsConst(SysYParser::InitValContext* ctx) { + if (!ctx) return; + if (ctx->exp()) { + ExprInfo info = CheckExp(ctx->exp()); + if (!info.is_const) { + throw std::runtime_error(FormatError("sema", "全局变量初始化必须是常量表达式")); + } + } else { + for (auto* init : ctx->initVal()) { + CheckGlobalInitIsConst(init); + } + } + } + + int EvaluateConstExp(SysYParser::ConstExpContext* ctx) { + if (!ctx || !ctx->addExp()) return 0; + ExprInfo info = CheckAddExp(ctx->addExp()); + if (info.is_const && info.is_const_int) { + return info.const_int_value; + } + throw std::runtime_error(FormatError("sema", "常量表达式求值失败")); + return 0; + } + + struct ConstValue { + bool is_int; + int int_val; + float float_val; + }; + + std::vector EvaluateConstInitVal(SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) { + std::vector result; + if (!ctx) return result; + if (ctx->constExp()) { + ExprInfo info = CheckAddExp(ctx->constExp()->addExp()); + ConstValue val; + if (info.type->IsInt32() && info.is_const_int) { + val.is_int = true; + val.int_val = info.const_int_value; + if (base_type->IsFloat()) { + val.is_int = false; + val.float_val = (float)info.const_int_value; + } + } else if (info.type->IsFloat() && info.is_const) { + val.is_int = false; + val.float_val = info.const_float_value; + if (base_type->IsInt32()) { + val.is_int = true; + val.int_val = (int)info.const_float_value; + } + } else { + val.is_int = base_type->IsInt32(); + val.int_val = 0; + val.float_val = 0.0f; + } + result.push_back(val); + } else { + for (auto* init : ctx->constInitVal()) { + std::vector sub_vals = EvaluateConstInitVal(init, dims, base_type); + result.insert(result.end(), sub_vals.begin(), sub_vals.end()); + } + } + return result; + } + + void CheckMainFunction() { + auto* main_sym = table_.lookup("main"); + if (!main_sym || main_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "缺少 main 函数")); + } + std::shared_ptr ret_type; + if (main_sym->type && main_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(main_sym->type.get()); + if (func_type) { + ret_type = func_type->GetReturnType(); + } + } + if (!ret_type || !ret_type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "main 函数必须返回 int")); + } + if (!main_sym->param_types.empty()) { + throw std::runtime_error(FormatError("sema", "main 函数不能有参数")); + } + } }; } // namespace SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit) { - SemaVisitor visitor; - comp_unit.accept(&visitor); - return visitor.TakeSemanticContext(); -} + SemaVisitor visitor; + comp_unit.accept(&visitor); + return visitor.TakeSemanticContext(); +} \ No newline at end of file From e1a4f30488d0912bfa38e05518f9757e9010335e Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 19:48:23 +0800 Subject: [PATCH 12/39] =?UTF-8?q?test(test)=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=84=9A=E6=9C=ACrun.sh=E7=94=A8=E4=BA=8E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=B5=8B=E8=AF=95=E8=AF=AD=E4=B9=89=E5=88=86=E6=9E=90?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/run.sh b/run.sh index cbd493f..c7dd5b1 100755 --- a/run.sh +++ b/run.sh @@ -59,10 +59,12 @@ for file in "${TEST_FILES[@]}"; do echo "========== $file ==========" >> "$RESULT_FILE" if [ $VERBOSE -eq 1 ]; then - "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + # "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + "$COMPILER" --emit-ir "$file" 2>&1 | tee -a "$RESULT_FILE" result=${PIPESTATUS[0]} else - "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + # "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + "$COMPILER" --emit-ir "$file" >> "$RESULT_FILE" 2>&1 result=$? fi From f6773274ddcc933482277df29af5da2cda3cc9b6 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 19:50:39 +0800 Subject: [PATCH 13/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E5=AF=B9=E5=BA=93=E5=87=BD=E6=95=B0starttime?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/SymbolTable.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 421f9d4..dee0284 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -291,6 +291,13 @@ void SymbolTable::registerBuiltinFunctions() { putarray.is_builtin = true; addSymbol(putarray); - // 9. putf: void putf(char fmt[], ...) —— 可选,但为了完整性 - // 参数: char fmt[] 退化为 char*,但 SysY 中没有 char 类型,可能使用 int 数组或特殊处理,此处略过 + // starttime: void starttime() + Symbol starttime; + starttime.name = "starttime"; + starttime.kind = SymbolKind::Function; + starttime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + starttime.param_types = {}; + starttime.scope_level = 0; + starttime.is_builtin = true; + addSymbol(starttime); } \ No newline at end of file From 40985450622d3c3641bda3dec7c52f260f80444e Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 19:52:49 +0800 Subject: [PATCH 14/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E5=AF=B9=E5=BA=93=E5=87=BD=E6=95=B0stoptime?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/SymbolTable.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index dee0284..280fc8c 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -300,4 +300,14 @@ void SymbolTable::registerBuiltinFunctions() { starttime.scope_level = 0; starttime.is_builtin = true; addSymbol(starttime); + + // stoptime: void stoptime() + Symbol stoptime; + stoptime.name = "stoptime"; + stoptime.kind = SymbolKind::Function; + stoptime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + stoptime.param_types = {}; + stoptime.scope_level = 0; + stoptime.is_builtin = true; + addSymbol(stoptime); } \ No newline at end of file From 7eed5fe6f6efaaa488402f58cb10c48b6d2803db Mon Sep 17 00:00:00 2001 From: ftt <> Date: Wed, 25 Mar 2026 21:07:32 +0800 Subject: [PATCH 15/39] =?UTF-8?q?[sema]=20=E6=95=B0=E7=BB=84=E4=B8=8B?= =?UTF-8?q?=E6=A0=87=E4=B8=AA=E6=95=B0=E4=B8=8D=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/Sema.cpp | 262 +++++++++++++++++++++++++++++++--------- src/sem/SymbolTable.cpp | 25 ++++ 2 files changed, 229 insertions(+), 58 deletions(-) diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 68f9b0d..a76437b 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -400,6 +400,7 @@ public: // 左值表达式(变量引用) std::any visitLVal(SysYParser::LValContext* ctx) override { + std::cout << "[DEBUG] visitLVal: " << ctx->getText() << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("sema", "非法变量引用")); } @@ -410,54 +411,77 @@ public: } // 检查数组访问 bool is_array_access = !ctx->exp().empty(); + std::cout << "[DEBUG] name: " << name + << ", is_array_access: " << is_array_access + << ", subscript_count: " << ctx->exp().size() << std::endl; ExprInfo result; // 判断是否为数组类型或指针类型(数组参数) bool is_array_or_ptr = false; if (sym->type) { is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); + std::cout << "[DEBUG] type_kind: " << (int)sym->type->GetKind() + << ", is_array: " << sym->type->IsArray() + << ", is_ptr: " << (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) << std::endl; } - // 调试输出 - std::cout << "[DEBUG] visitLVal: " << name - << " kind: " << (int)sym->kind - << " type_kind: " << (sym->type ? (int)sym->type->GetKind() : -1) - << " is_array_or_ptr: " << is_array_or_ptr - << " subscript_count: " << ctx->exp().size() - << std::endl; + if (is_array_or_ptr) { - if (!is_array_access) { - throw std::runtime_error(FormatError("sema", "数组变量必须使用下标访问: " + name)); - } // 获取维度信息 size_t dim_count = 0; std::shared_ptr elem_type = sym->type; if (sym->type->IsArray()) { if (auto* arr_type = dynamic_cast(sym->type.get())) { dim_count = arr_type->GetDimensions().size(); - // 获取元素类型 elem_type = arr_type->GetElementType(); + std::cout << "[DEBUG] 数组维度: " << dim_count << std::endl; } } else if (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { - // 指针类型,只接受一个下标 dim_count = 1; - // 指针解引用后的类型 if (sym->type->IsPtrInt32()) { elem_type = ir::Type::GetInt32Type(); } else if (sym->type->IsPtrFloat()) { elem_type = ir::Type::GetFloatType(); } + std::cout << "[DEBUG] 指针类型, dim_count: 1" << std::endl; } - if (ctx->exp().size() != dim_count) { - throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); - } - for (auto* idx_exp : ctx->exp()) { - ExprInfo idx = CheckExp(idx_exp); - if (!idx.type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + + if (is_array_access) { + std::cout << "[DEBUG] 有下标访问,期望维度: " << dim_count + << ", 实际下标数: " << ctx->exp().size() << std::endl; + if (ctx->exp().size() != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + result.type = elem_type; + result.is_lvalue = true; + result.is_const = false; + } else { + std::cout << "[DEBUG] 无下标访问" << std::endl; + if (sym->type->IsArray()) { + std::cout << "[DEBUG] 数组名作为地址,转换为指针" << std::endl; + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + result.type = ir::Type::GetPtrInt32Type(); + } else if (arr_type->GetElementType()->IsFloat()) { + result.type = ir::Type::GetPtrFloatType(); + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + result.is_lvalue = false; + result.is_const = true; + } else { + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); } } - result.type = elem_type; - result.is_lvalue = true; - result.is_const = false; } else { if (is_array_access) { throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); @@ -482,10 +506,8 @@ public: std::any visitIfStmtInternal(SysYParser::StmtContext* ctx) { // 检查条件表达式 if (ctx->cond()) { - ExprInfo cond = CheckCond(ctx->cond()); - if (!cond.type || !cond.type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "if 条件必须是 int 类型")); - } + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查,因为 CheckCond 已经确保类型正确 } // 处理 then 分支 if (ctx->stmt().size() > 0) { @@ -500,17 +522,15 @@ public: // while 语句内部实现 std::any visitWhileStmtInternal(SysYParser::StmtContext* ctx) { - if (ctx->cond()) { // 检查条件表达式 - ExprInfo cond = CheckCond(ctx->cond()); - if (!cond.type || !cond.type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "while 条件必须是 int 类型")); - } + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查 } - loop_stack_.push_back({true, ctx}); // 进入循环上下文 - if (ctx->stmt().size() > 0) { // 处理循环体 + loop_stack_.push_back({true, ctx}); + if (ctx->stmt().size() > 0) { ctx->stmt()[0]->accept(this); } - loop_stack_.pop_back(); // 退出循环上下文 + loop_stack_.pop_back(); return {}; } @@ -564,6 +584,7 @@ public: // 主表达式 std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override { + std::cout << "[DEBUG] visitPrimaryExp: " << ctx->getText() << std::endl; ExprInfo result; if (ctx->lVal()) { // 左值表达式 result = CheckLValue(ctx->lVal()); @@ -595,12 +616,14 @@ public: // 一元表达式 std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override { + std::cout << "[DEBUG] visitUnaryExp: " << ctx->getText() << std::endl; ExprInfo result; if (ctx->primaryExp()) { ctx->primaryExp()->accept(this); auto* info = sema_.GetExprType(ctx->primaryExp()); if (info) result = *info; } else if (ctx->Ident() && ctx->L_PAREN()) { // 函数调用 + std::cout << "[DEBUG] 函数调用: " << ctx->Ident()->getText() << std::endl; result = CheckFuncCall(ctx); } else if (ctx->unaryOp()) { // 一元运算 ctx->unaryExp()->accept(this); @@ -611,20 +634,37 @@ public: } else { std::string op = ctx->unaryOp()->getText(); if (op == "!") { - if (!operand->type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "逻辑非操作数必须是 int 类型")); + // 逻辑非:要求操作数是 int 类型,或者可以转换为 int 的 float + if (operand->type->IsInt32()) { + // 已经是 int,没问题 + } else if (operand->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->unaryExp(), operand->type, ir::Type::GetInt32Type()); + // 更新操作数类型为 int + operand->type = ir::Type::GetInt32Type(); + operand->is_const_int = true; + if (operand->is_const && !operand->is_const_int) { + // 如果原来是 float 常量,转换为 int 常量 + operand->const_int_value = (int)operand->const_float_value; + operand->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑非操作数必须是 int 类型或可以转换为 int 的 float 类型")); } result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; result.is_const = operand->is_const; if (operand->is_const && operand->is_const_int) { result.is_const_int = true; result.const_int_value = (operand->const_int_value == 0) ? 1 : 0; } } else { + // 正负号 if (!operand->type->IsInt32() && !operand->type->IsFloat()) { throw std::runtime_error(FormatError("sema", "正负号操作数必须是算术类型")); } result.type = operand->type; + result.is_lvalue = false; result.is_const = operand->is_const; if (op == "-" && operand->is_const) { if (operand->type->IsInt32() && operand->is_const_int) { @@ -635,7 +675,6 @@ public: } } } - result.is_lvalue = false; } } sema_.SetExprType(ctx, result); @@ -808,12 +847,36 @@ public: if (!left_info || !right_info) { throw std::runtime_error(FormatError("sema", "逻辑与操作数类型推导失败")); } else { - if (!left_info->type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "逻辑与左操作数必须是 int 类型")); + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与左操作数必须是 int 类型或可以转换为 int 的 float 类型")); } - if (!right_info->type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "逻辑与右操作数必须是 int 类型")); + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->eqExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与右操作数必须是 int 类型或可以转换为 int 的 float 类型")); } + result.type = ir::Type::GetInt32Type(); result.is_lvalue = false; if (left_info->is_const && right_info->is_const && @@ -828,6 +891,17 @@ public: ctx->eqExp()->accept(this); auto* info = sema_.GetExprType(ctx->eqExp()); if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->eqExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } sema_.SetExprType(ctx, *info); } return {}; @@ -847,12 +921,36 @@ public: if (!left_info || !right_info) { throw std::runtime_error(FormatError("sema", "逻辑或操作数类型推导失败")); } else { - if (!left_info->type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "逻辑或左操作数必须是 int 类型")); + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lOrExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或左操作数必须是 int 类型或可以转换为 int 的 float 类型")); } - if (!right_info->type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "逻辑或右操作数必须是 int 类型")); + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或右操作数必须是 int 类型或可以转换为 int 的 float 类型")); } + result.type = ir::Type::GetInt32Type(); result.is_lvalue = false; if (left_info->is_const && right_info->is_const && @@ -867,6 +965,17 @@ public: ctx->lAndExp()->accept(this); auto* info = sema_.GetExprType(ctx->lAndExp()); if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->lAndExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } sema_.SetExprType(ctx, *info); } return {}; @@ -895,6 +1004,7 @@ private: if (!ctx || !ctx->addExp()) { throw std::runtime_error(FormatError("sema", "无效表达式")); } + std::cout << "[DEBUG] CheckExp: " << ctx->getText() << std::endl; ctx->addExp()->accept(this); auto* info = sema_.GetExprType(ctx->addExp()); if (!info) { @@ -927,7 +1037,13 @@ private: if (!info) { throw std::runtime_error(FormatError("sema", "条件表达式类型推导失败")); } - return *info; + ExprInfo result = *info; + // 条件表达式的结果必须是 int,如果是 float 则需要转换 + // 注意:lOrExp 已经处理了类型转换,这里只是再检查一次 + if (!result.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "条件表达式必须是 int 类型")); + } + return result; } ExprInfo CheckLValue(SysYParser::LValContext* ctx) { @@ -939,15 +1055,18 @@ private: if (!sym) { throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); } + + bool is_array_access = !ctx->exp().empty(); bool is_const = (sym->kind == SymbolKind::Constant); bool is_array_or_ptr = false; + if (sym->type) { - is_array_or_ptr = sym->type->IsArray() || - sym->type->IsPtrInt32() || - sym->type->IsPtrFloat(); + is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); } + size_t dim_count = 0; std::shared_ptr elem_type = sym->type; + if (sym->type && sym->type->IsArray()) { if (auto* arr_type = dynamic_cast(sym->type.get())) { dim_count = arr_type->GetDimensions().size(); @@ -961,18 +1080,39 @@ private: elem_type = ir::Type::GetFloatType(); } } + size_t subscript_count = ctx->exp().size(); + if (is_array_or_ptr) { - if (subscript_count != dim_count) { - throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); - } - for (auto* idx_exp : ctx->exp()) { - ExprInfo idx = CheckExp(idx_exp); - if (!idx.type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + if (subscript_count > 0) { + // 有下标访问 + if (subscript_count != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + return {elem_type, true, false}; + } else { + // 没有下标访问 + if (sym->type->IsArray()) { + // 数组名作为地址(右值) + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, true}; + } else if (arr_type->GetElementType()->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, true}; + } + } + return {ir::Type::GetPtrInt32Type(), false, true}; + } else { + // 指针类型(如函数参数)可以不带下标使用 + return {sym->type, true, is_const}; } } - return {elem_type, true, false}; } else { if (subscript_count > 0) { throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); @@ -986,12 +1126,14 @@ private: throw std::runtime_error(FormatError("sema", "非法函数调用")); } std::string func_name = ctx->Ident()->getText(); + std::cout << "[DEBUG] CheckFuncCall: " << func_name << std::endl; auto* func_sym = table_.lookup(func_name); if (!func_sym || func_sym->kind != SymbolKind::Function) { throw std::runtime_error(FormatError("sema", "未定义的函数: " + func_name)); } std::vector args; if (ctx->funcRParams()) { + std::cout << "[DEBUG] 处理函数调用参数:" << std::endl; for (auto* exp : ctx->funcRParams()->exp()) { if (exp) { args.push_back(CheckExp(exp)); @@ -1002,6 +1144,8 @@ private: throw std::runtime_error(FormatError("sema", "参数个数不匹配")); } for (size_t i = 0; i < std::min(args.size(), func_sym->param_types.size()); ++i) { + std::cout << "[DEBUG] 检查参数 " << i << ": 实参类型 " << (int)args[i].type->GetKind() + << " 形参类型 " << (int)func_sym->param_types[i]->GetKind() << std::endl; if (!IsTypeCompatible(args[i].type, func_sym->param_types[i])) { throw std::runtime_error(FormatError("sema", "参数类型不匹配")); } @@ -1162,6 +1306,7 @@ private: } else if (param_type->IsFloat()) { param_type = ir::Type::GetPtrFloatType(); } + std::cout << "[DEBUG] 数组参数: " << name << " 类型转换为指针" << std::endl; } Symbol sym; sym.name = name; @@ -1171,6 +1316,7 @@ private: sym.is_initialized = true; sym.var_def_ctx = nullptr; table_.addSymbol(sym); + std::cout << "[DEBUG] 添加参数: " << name << " type_kind: " << (int)param_type->GetKind() << std::endl; } } diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 280fc8c..0f37e73 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -310,4 +310,29 @@ void SymbolTable::registerBuiltinFunctions() { stoptime.scope_level = 0; stoptime.is_builtin = true; addSymbol(stoptime); + + // getfarray: int getfarray(float arr[]) + std::vector> getfarray_params = { ir::Type::GetPtrFloatType() }; + Symbol getfarray; + getfarray.name = "getfarray"; + getfarray.kind = SymbolKind::Function; + getfarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getfarray_params); + getfarray.param_types = getfarray_params; + getfarray.scope_level = 0; + getfarray.is_builtin = true; + addSymbol(getfarray); + + // putfarray: void putfarray(int len, float arr[]) + std::vector> putfarray_params = { + ir::Type::GetInt32Type(), + ir::Type::GetPtrFloatType() + }; + Symbol putfarray; + putfarray.name = "putfarray"; + putfarray.kind = SymbolKind::Function; + putfarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfarray_params); + putfarray.param_types = putfarray_params; + putfarray.scope_level = 0; + putfarray.is_builtin = true; + addSymbol(putfarray); } \ No newline at end of file From 40403e955d44b4e577cb91f131e14a7f1b5f439f Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 21:34:54 +0800 Subject: [PATCH 16/39] =?UTF-8?q?feat(sem)=E8=A1=A5=E5=85=85=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E6=B1=82=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bug | 377 ++++++++++++++++++++++++++++++++++++++ include/sem/SymbolTable.h | 30 ++- src/sem/Sema.cpp | 14 +- src/sem/SymbolTable.cpp | 321 ++++++++++++++++++++++++++++---- 4 files changed, 701 insertions(+), 41 deletions(-) create mode 100644 bug diff --git a/bug b/bug new file mode 100644 index 0000000..7600796 --- /dev/null +++ b/bug @@ -0,0 +1,377 @@ +gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.69 s in the future +gmake[2]: Warning: File 'src/ir/CMakeFiles/ir_core.dir/flags.make' has modification time 0.67 s in the future +gmake[2]: Warning: File 'src/utils/CMakeFiles/utils.dir/flags.make' has modification time 0.66 s in the future +gmake[2]: Warning: File 'CMakeFiles/antlr4_runtime.dir/flags.make' has modification time 0.64 s in the future +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +gmake[2]: Warning: File 'src/utils/CMakeFiles/utils.dir/flags.make' has modification time 0.64 s in the future +gmake[2]: Warning: File 'src/ir/CMakeFiles/ir_core.dir/flags.make' has modification time 0.65 s in the future +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[ 0%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Context.cpp.o +[ 0%] Building CXX object src/ir/CMakeFiles/ir_core.dir/GlobalValue.cpp.o +[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/BasicBlock.cpp.o +[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Module.cpp.o +[ 2%] Building CXX object src/utils/CMakeFiles/utils.dir/Log.cpp.o +[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Value.cpp.o +[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Function.cpp.o +[ 3%] Building CXX object src/utils/CMakeFiles/utils.dir/CLI.cpp.o +[ 4%] Building CXX object src/ir/CMakeFiles/ir_core.dir/IRBuilder.cpp.o +[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Type.cpp.o +[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Instruction.cpp.o +gmake[2]: Warning: File 'CMakeFiles/antlr4_runtime.dir/flags.make' has modification time 0.61 s in the future +[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/IRPrinter.cpp.o +[ 6%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRFileStream.cpp.o +[ 7%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRErrorStrategy.cpp.o +[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRInputStream.cpp.o +[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRErrorListener.cpp.o +[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BailErrorStrategy.cpp.o +[ 9%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BaseErrorListener.cpp.o +[ 9%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BufferedTokenStream.cpp.o +[ 10%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CharStream.cpp.o +[ 11%] Linking CXX static library libutils.a +[ 11%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonToken.cpp.o +[ 12%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonTokenFactory.cpp.o +[ 12%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonTokenStream.cpp.o +[ 13%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ConsoleErrorListener.cpp.o +[ 13%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/DefaultErrorStrategy.cpp.o +[ 14%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/DiagnosticErrorListener.cpp.o +[ 14%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Exceptions.cpp.o +[ 15%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/FailedPredicateException.cpp.o +[ 16%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/InputMismatchException.cpp.o +[ 17%] Linking CXX static library libir_core.a +[ 17%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/IntStream.cpp.o +[ 18%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.cpp.o +[ 18%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Lexer.cpp.o +[ 19%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/LexerInterpreter.cpp.o +[ 19%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/LexerNoViableAltException.cpp.o +[ 20%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ListTokenSource.cpp.o +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[ 20%] Built target utils +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[ 20%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/NoViableAltException.cpp.o +[ 20%] Built target ir_core +[ 21%] Building CXX object src/ir/analysis/CMakeFiles/ir_analysis.dir/DominatorTree.cpp.o +[ 21%] Building CXX object src/ir/analysis/CMakeFiles/ir_analysis.dir/LoopInfo.cpp.o +[ 22%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Parser.cpp.o +[ 23%] Linking CXX static library libir_analysis.a +[ 23%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ParserInterpreter.cpp.o +[ 23%] Built target ir_analysis +[ 23%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/PassManager.cpp.o +[ 24%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.cpp.o +[ 25%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/Mem2Reg.cpp.o +[ 25%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/ConstFold.cpp.o +[ 25%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ProxyErrorListener.cpp.o +[ 26%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/ConstProp.cpp.o +[ 27%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RecognitionException.cpp.o +[ 27%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/CSE.cpp.o +[ 27%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Recognizer.cpp.o +[ 28%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/DCE.cpp.o +[ 29%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.cpp.o +[ 29%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/CFGSimplify.cpp.o +[ 30%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContextWithAltNum.cpp.o +[ 31%] Linking CXX static library libir_passes.a +[ 31%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuntimeMetaData.cpp.o +[ 31%] Built target ir_passes +[ 32%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Token.cpp.o +[ 32%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRContext.cpp.o +[ 32%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenSource.cpp.o +[ 33%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenStream.cpp.o +[ 33%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenStreamRewriter.cpp.o +[ 34%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/UnbufferedCharStream.cpp.o +[ 34%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/UnbufferedTokenStream.cpp.o +[ 35%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp.o +[ 35%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/WritableToken.cpp.o +[ 36%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRFunction.cpp.o +[ 37%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATN.cpp.o +[ 37%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNConfig.cpp.o +[ 38%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNConfigSet.cpp.o +[ 38%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNDeserializationOptions.cpp.o +[ 39%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNDeserializer.cpp.o +[ 40%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNSimulator.cpp.o +[ 40%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNState.cpp.o +[ 40%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRBasicBlock.cpp.o +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp: In static member function ‘static void antlr4::dfa::Vocabulary::__static_initialization_and_destruction_0()’: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp:12:18: warning: ‘antlr4::dfa::Vocabulary::EMPTY_VOCABULARY’ is deprecated: Use the default constructor of Vocabulary instead. [-Wdeprecated-declarations] + 12 | const Vocabulary Vocabulary::EMPTY_VOCABULARY; + | ^~~~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp:12:18: note: declared here +[ 41%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRInstr.cpp.o +[ 42%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNStateType.cpp.o +[ 42%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ActionTransition.cpp.o +[ 43%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/AmbiguityInfo.cpp.o +[ 43%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ArrayPredictionContext.cpp.o +[ 44%] Building CXX object src/mir/CMakeFiles/mir_core.dir/Register.cpp.o +[ 45%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/AtomTransition.cpp.o +[ 45%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ContextSensitivityInfo.cpp.o +[ 46%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionEventInfo.cpp.o +[ 46%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionInfo.cpp.o +[ 47%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionState.cpp.o +[ 47%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/EpsilonTransition.cpp.o +[ 47%] Building CXX object src/mir/CMakeFiles/mir_core.dir/Lowering.cpp.o +[ 48%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ErrorInfo.cpp.o +[ 48%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LL1Analyzer.cpp.o +[ 49%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerATNConfig.cpp.o +[ 49%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerATNSimulator.cpp.o +[ 50%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerAction.cpp.o +[ 51%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerActionExecutor.cpp.o +[ 51%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerChannelAction.cpp.o +[ 52%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerCustomAction.cpp.o +[ 52%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerIndexedCustomAction.cpp.o +[ 53%] Building CXX object src/mir/CMakeFiles/mir_core.dir/RegAlloc.cpp.o +[ 54%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerModeAction.cpp.o +[ 54%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerMoreAction.cpp.o +[ 55%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerPopModeAction.cpp.o +[ 55%] Building CXX object src/mir/CMakeFiles/mir_core.dir/FrameLowering.cpp.o +[ 55%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerPushModeAction.cpp.o +[ 56%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerSkipAction.cpp.o +[ 56%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerTypeAction.cpp.o +[ 57%] Building CXX object src/mir/CMakeFiles/mir_core.dir/AsmPrinter.cpp.o +[ 58%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LookaheadEventInfo.cpp.o +[ 58%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/NotSetTransition.cpp.o +[ 59%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/OrderedATNConfigSet.cpp.o +[ 60%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ParserATNSimulator.cpp.o +[ 60%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ParseInfo.cpp.o +[ 61%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PrecedencePredicateTransition.cpp.o +[ 61%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredicateEvalInfo.cpp.o +[ 62%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredicateTransition.cpp.o +[ 62%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContext.cpp.o +[ 63%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContextCache.cpp.o +[ 63%] Linking CXX static library libmir_core.a +[ 63%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContextMergeCache.cpp.o +[ 63%] Built target mir_core +[ 64%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionMode.cpp.o +[ 64%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ProfilingATNSimulator.cpp.o +[ 65%] Building CXX object src/mir/passes/CMakeFiles/mir_passes.dir/PassManager.cpp.o +[ 65%] Building CXX object src/mir/passes/CMakeFiles/mir_passes.dir/Peephole.cpp.o +[ 66%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/RangeTransition.cpp.o +[ 66%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/RuleTransition.cpp.o +[ 67%] Linking CXX static library libmir_passes.a +[ 67%] Built target mir_passes +[ 68%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SemanticContext.cpp.o +[ 68%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SetTransition.cpp.o +[ 69%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SingletonPredictionContext.cpp.o +[ 69%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/StarLoopbackState.cpp.o +[ 70%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/Transition.cpp.o +[ 71%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/TransitionType.cpp.o +[ 71%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/WildcardTransition.cpp.o +[ 72%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFA.cpp.o +[ 72%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFASerializer.cpp.o +[ 73%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFAState.cpp.o +[ 73%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/LexerDFASerializer.cpp.o +[ 74%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/internal/Synchronization.cpp.o +[ 74%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/InterpreterDataReader.cpp.o +[ 75%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/Interval.cpp.o +[ 75%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/IntervalSet.cpp.o +[ 76%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/MurmurHash.cpp.o +[ 76%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/Predicate.cpp.o +[ 77%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Any.cpp.o +[ 77%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Arrays.cpp.o +[ 78%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/CPPUtils.cpp.o +[ 78%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/StringUtils.cpp.o +[ 79%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Utf8.cpp.o +[ 80%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ErrorNodeImpl.cpp.o +[ 80%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/IterativeParseTreeWalker.cpp.o +[ 81%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.cpp.o +[ 81%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeListener.cpp.o +[ 82%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeVisitor.cpp.o +[ 82%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeWalker.cpp.o +[ 83%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/TerminalNodeImpl.cpp.o +[ 83%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/Trees.cpp.o +[ 84%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/Chunk.cpp.o +[ 84%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreeMatch.cpp.o +[ 85%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreePattern.cpp.o +[ 85%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp.o +[ 86%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/RuleTagToken.cpp.o +[ 86%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TagChunk.cpp.o +[ 87%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TextChunk.cpp.o +[ 88%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TokenTagToken.cpp.o +[ 88%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPath.cpp.o +[ 89%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathElement.cpp.o +[ 89%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathLexer.cpp.o +[ 90%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathLexerErrorListener.cpp.o +[ 90%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp.o +[ 91%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathRuleElement.cpp.o +[ 91%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp.o +[ 92%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathTokenElement.cpp.o +[ 92%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp.o +[ 93%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathWildcardElement.cpp.o +[ 93%] Linking CXX static library libantlr4_runtime.a +gmake[2]: warning: Clock skew detected. Your build may be incomplete. +[ 93%] Built target antlr4_runtime +[ 93%] Building CXX object src/sem/CMakeFiles/sem.dir/Sema.cpp.o +[ 93%] Building CXX object src/sem/CMakeFiles/sem.dir/ConstEval.cpp.o +[ 93%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYBaseVisitor.cpp.o +[ 95%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYLexer.cpp.o +[ 95%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYParser.cpp.o +[ 94%] Building CXX object src/sem/CMakeFiles/sem.dir/SymbolTable.cpp.o +[ 96%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYVisitor.cpp.o +[ 97%] Building CXX object src/frontend/CMakeFiles/frontend.dir/AntlrDriver.cpp.o +[ 98%] Building CXX object src/frontend/CMakeFiles/frontend.dir/SyntaxTreePrinter.cpp.o +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYParser.h:7, + from /home/mxr/compiler/include/sem/Sema.h:8, + from /home/mxr/compiler/src/sem/Sema.cpp:1: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, + from /home/mxr/compiler/include/frontend/AntlrDriver.h:7, + from /home/mxr/compiler/src/frontend/AntlrDriver.cpp:2: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.h:7, + from /home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:5: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/include/frontend/SyntaxTreePrinter.h:5, + from /home/mxr/compiler/src/frontend/SyntaxTreePrinter.cpp:1: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, + from /home/mxr/compiler/build/generated/antlr4/SysYLexer.cpp:5: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.h:7, + from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.cpp:5: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYParser.h:7, + from /home/mxr/compiler/include/sem/SymbolTable.h:9, + from /home/mxr/compiler/src/sem/SymbolTable.cpp:1: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYBaseVisitor.h:7, + from /home/mxr/compiler/build/generated/antlr4/SysYBaseVisitor.cpp:5: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +/home/mxr/compiler/src/sem/SymbolTable.cpp: In function ‘int evaluateConstExp(SysYParser::ConstExpContext*)’: +/home/mxr/compiler/src/sem/SymbolTable.cpp:113:58: warning: unused parameter ‘ctx’ [-Wunused-parameter] + 113 | static int evaluateConstExp(SysYParser::ConstExpContext* ctx) { + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ +/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘std::any {anonymous}::SemaVisitor::visitBreakStmtInternal(SysYParser::StmtContext*)’: +/home/mxr/compiler/src/sem/Sema.cpp:518:62: warning: unused parameter ‘ctx’ [-Wunused-parameter] + 518 | std::any visitBreakStmtInternal(SysYParser::StmtContext* ctx) { + | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~ +/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘std::any {anonymous}::SemaVisitor::visitContinueStmtInternal(SysYParser::StmtContext*)’: +/home/mxr/compiler/src/sem/Sema.cpp:526:65: warning: unused parameter ‘ctx’ [-Wunused-parameter] + 526 | std::any visitContinueStmtInternal(SysYParser::StmtContext* ctx) { + | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::mulExpSempred(MulExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3090:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3090 | bool SysYParser::mulExpSempred(MulExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::addExpSempred(AddExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3100:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3100 | bool SysYParser::addExpSempred(AddExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::relExpSempred(RelExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3110:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3110 | bool SysYParser::relExpSempred(RelExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::eqExpSempred(EqExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3120:45: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3120 | bool SysYParser::eqExpSempred(EqExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::lAndExpSempred(LAndExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3130:49: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3130 | bool SysYParser::lAndExpSempred(LAndExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::lOrExpSempred(LOrExpContext*, size_t)’: +/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3140:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] + 3140 | bool SysYParser::lOrExpSempred(LOrExpContext *_localctx, size_t predicateIndex) { + | ~~~~~~~~~~~~~~~^~~~~~~~~ +/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘ExprInfo {anonymous}::SemaVisitor::CheckBinaryOp(const ExprInfo*, const ExprInfo*, const std::string&, antlr4::ParserRuleContext*)’: +/home/mxr/compiler/src/sem/Sema.cpp:1032:78: warning: unused parameter ‘ctx’ [-Wunused-parameter] + 1032 | const std::string& op, antlr4::ParserRuleContext* ctx) { + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ +/home/mxr/compiler/src/sem/Sema.cpp: At global scope: +/home/mxr/compiler/src/sem/Sema.cpp:15:13: warning: ‘std::string {anonymous}::GetLValueName(SysYParser::LValContext&)’ defined but not used [-Wunused-function] + 15 | std::string GetLValueName(SysYParser::LValContext& lval) { + | ^~~~~~~~~~~~~ +[ 99%] Linking CXX static library libsem.a +[ 99%] Built target sem +[ 99%] Linking CXX static library libfrontend.a +[ 99%] Built target frontend +[100%] Building CXX object src/CMakeFiles/compiler.dir/main.cpp.o +In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, + from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, + from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, + from /home/mxr/compiler/include/frontend/AntlrDriver.h:7, + from /home/mxr/compiler/src/main.cpp:5: +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] + 50 | virtual bool operator == (const ParseTree &other) const; + | ^~~~~~~~ +/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ + 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. + | ^~~~~~~~ +/home/mxr/compiler/src/main.cpp: In function ‘int main(int, char**)’: +/home/mxr/compiler/src/main.cpp:25:10: warning: variable ‘need_blank_line’ set but not used [-Wunused-but-set-variable] + 25 | bool need_blank_line = false; + | ^~~~~~~~~~~~~~~ +[100%] Linking CXX executable ../bin/compiler +[100%] Built target compiler +gmake[1]: warning: Clock skew detected. Your build may be incomplete. diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index 29b4fae..c546960 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -56,6 +56,8 @@ class SymbolTable { bool addSymbol(const Symbol& sym); // 添加符号到当前作用域 Symbol* lookup(const std::string& name); // 从当前作用域向外查找 Symbol* lookupCurrent(const std::string& name); // 仅在当前作用域查找 + const Symbol* lookup(const std::string& name) const; + const Symbol* lookupCurrent(const std::string& name) const; // ----- 与原接口兼容(保留原有功能)----- void Add(const std::string& name, SysYParser::VarDefContext* decl); @@ -63,14 +65,40 @@ class SymbolTable { SysYParser::VarDefContext* Lookup(const std::string& name) const; // ----- 辅助函数:从语法树节点构造 Type ----- - static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); void registerBuiltinFunctions(); + // 对常量表达式求值(返回整数值,用于数组维度等) + int EvaluateConstExp(SysYParser::ConstExpContext* ctx) const; + + // 对常量表达式求值(返回浮点值,用于全局初始化) + float EvaluateConstExpFloat(SysYParser::ConstExpContext* ctx) const; + + // 对常量初始化列表求值,返回一系列常量值(扁平化) + struct ConstValue { + enum Kind { INT, FLOAT }; + Kind kind; + union { + int int_val; + float float_val; + }; + }; + std::vector EvaluateConstInitVal( + SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) const; + private: // 作用域栈:每个元素是一个从名字到符号的映射 std::vector> scopes_; static constexpr int GLOBAL_SCOPE = 0; // 全局作用域索引 + + ConstValue EvaluateAddExp(SysYParser::AddExpContext* ctx) const; + ConstValue EvaluateMulExp(SysYParser::MulExpContext* ctx) const; + ConstValue EvaluateUnaryExp(SysYParser::UnaryExpContext* ctx) const; + ConstValue EvaluatePrimaryExp(SysYParser::PrimaryExpContext* ctx) const; + + std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx) const; }; diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index a76437b..861caf3 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -180,7 +180,7 @@ public: if (is_array) { // 处理数组维度 for (auto* dim_exp : ctx->constExp()) { - int dim = EvaluateConstExp(dim_exp); + int dim = table_.EvaluateConstExp(dim_exp); if (dim <= 0) { throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); } @@ -265,7 +265,7 @@ public: << " dim_count: " << ctx->constExp().size() << std::endl; if (is_array) { for (auto* dim_exp : ctx->constExp()) { - int dim = EvaluateConstExp(dim_exp); + int dim = table_.EvaluateConstExp(dim_exp); if (dim <= 0) { throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); } @@ -276,9 +276,9 @@ public: std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; } // 求值初始化器 - std::vector init_values; + std::vector init_values; if (ctx->constInitVal()) { - init_values = EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); + init_values = table_.EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; } // 检查初始化值数量 @@ -300,14 +300,12 @@ public: sym.var_def_ctx = nullptr; // 存储常量值(仅对非数组有效) if (!is_array && !init_values.empty()) { - if (base_type->IsInt32() && init_values[0].is_int) { + if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::INT) { sym.is_int_const = true; sym.const_value.i32 = init_values[0].int_val; - std::cout << "[DEBUG] 存储整型常量值: " << init_values[0].int_val << std::endl; - } else if (base_type->IsFloat() && !init_values[0].is_int) { + } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { sym.is_int_const = false; sym.const_value.f32 = init_values[0].float_val; - std::cout << "[DEBUG] 存储浮点常量值: " << init_values[0].float_val << std::endl; } } else if (is_array) { std::cout << "[DEBUG] 数组常量,不存储单个常量值" << std::endl; diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 0f37e73..976ce87 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -1,5 +1,9 @@ #include "sem/SymbolTable.h" #include // 用于访问父节点 +#include +#include +#include +#include // ---------- 构造函数 ---------- SymbolTable::SymbolTable() { @@ -30,9 +34,16 @@ bool SymbolTable::addSymbol(const Symbol& sym) { } Symbol* SymbolTable::lookup(const std::string& name) { - // 从当前作用域向外层查找 + return const_cast(static_cast(this)->lookup(name)); +} + +Symbol* SymbolTable::lookupCurrent(const std::string& name) { + return const_cast(static_cast(this)->lookupCurrent(name)); +} + +const Symbol* SymbolTable::lookup(const std::string& name) const { for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { - auto& scope = *it; + const auto& scope = *it; auto found = scope.find(name); if (found != scope.end()) { return &found->second; @@ -41,8 +52,8 @@ Symbol* SymbolTable::lookup(const std::string& name) { return nullptr; } -Symbol* SymbolTable::lookupCurrent(const std::string& name) { - auto& current_scope = scopes_.back(); +const Symbol* SymbolTable::lookupCurrent(const std::string& name) const { + const auto& current_scope = scopes_.back(); auto it = current_scope.find(name); if (it != current_scope.end()) { return &it->second; @@ -109,45 +120,34 @@ static SysYParser::ConstDeclContext* getOuterConstDecl(SysYParser::VarDefContext return nullptr; } -// 常量表达式求值(占位,需实现真正的常量折叠) -static int evaluateConstExp(SysYParser::ConstExpContext* ctx) { - // TODO: 实现常量折叠,目前返回0 - return 0; -} - // 从 VarDefContext 构造类型 -std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { - // 1. 获取基本类型(int/float) +// 原静态函数改为成员函数,并调用成员 EvaluateConstExp +std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) const { + // 获取基本类型(同原代码,但通过外层 Decl 确定) std::shared_ptr base_type = nullptr; auto varDecl = getOuterVarDecl(ctx); if (varDecl) { auto bType = varDecl->bType(); - if (bType->Int()) { - base_type = ir::Type::GetInt32Type(); - } else if (bType->Float()) { - base_type = ir::Type::GetFloatType(); - } + if (bType->Int()) base_type = ir::Type::GetInt32Type(); + else if (bType->Float()) base_type = ir::Type::GetFloatType(); } else { auto constDecl = getOuterConstDecl(ctx); if (constDecl) { auto bType = constDecl->bType(); - if (bType->Int()) { - base_type = ir::Type::GetInt32Type(); - } else if (bType->Float()) { - base_type = ir::Type::GetFloatType(); - } + if (bType->Int()) base_type = ir::Type::GetInt32Type(); + else if (bType->Float()) base_type = ir::Type::GetFloatType(); } } + if (!base_type) base_type = ir::Type::GetInt32Type(); - if (!base_type) { - base_type = ir::Type::GetInt32Type(); // 默认 int - } - - // 2. 解析数组维度(从 varDef 的 constExp 列表获取) + // 解析维度 std::vector dims; - for (auto constExp : ctx->constExp()) { - int dimVal = evaluateConstExp(constExp); - dims.push_back(dimVal); + for (auto* dimExp : ctx->constExp()) { + int dim = EvaluateConstExp(dimExp); // 调用成员函数 + if (dim <= 0) { + throw std::runtime_error("数组维度必须为正整数"); + } + dims.push_back(dim); } if (!dims.empty()) { @@ -155,7 +155,6 @@ std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefConte } return base_type; } - // 从 FuncDefContext 构造函数类型 std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { // 1. 返回类型 @@ -310,7 +309,7 @@ void SymbolTable::registerBuiltinFunctions() { stoptime.scope_level = 0; stoptime.is_builtin = true; addSymbol(stoptime); - + // getfarray: int getfarray(float arr[]) std::vector> getfarray_params = { ir::Type::GetPtrFloatType() }; Symbol getfarray; @@ -335,4 +334,262 @@ void SymbolTable::registerBuiltinFunctions() { putfarray.scope_level = 0; putfarray.is_builtin = true; addSymbol(putfarray); +} + +// ==================== 常量表达式求值实现 ==================== + +static long long ParseIntegerLiteral(const std::string& text) { + // 处理前缀:0x/0X 十六进制,0 八进制,否则十进制 + if (text.size() > 2 && (text[0] == '0' && (text[1] == 'x' || text[1] == 'X'))) { + return std::stoll(text.substr(2), nullptr, 16); + } else if (text.size() > 1 && text[0] == '0') { + return std::stoll(text, nullptr, 8); + } else { + return std::stoll(text, nullptr, 10); + } +} + +static float ParseFloatLiteral(const std::string& text) { + return std::stof(text); +} + +SymbolTable::ConstValue SymbolTable::EvaluatePrimaryExp(SysYParser::PrimaryExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 PrimaryExp"); + + if (ctx->lVal()) { + auto lval = ctx->lVal(); + if (!lval->Ident()) throw std::runtime_error("常量表达式求值:无效左值"); + std::string name = lval->Ident()->getText(); + const Symbol* sym = lookup(name); + if (!sym) throw std::runtime_error("常量表达式求值:未定义的标识符 " + name); + if (sym->kind != SymbolKind::Constant) + throw std::runtime_error("常量表达式求值:标识符 " + name + " 不是常量"); + + ConstValue val; + if (sym->is_int_const) { + val.kind = ConstValue::INT; + val.int_val = sym->const_value.i32; + } else { + val.kind = ConstValue::FLOAT; + val.float_val = sym->const_value.f32; + } + return val; + } + else if (ctx->HEX_FLOAT() || ctx->DEC_FLOAT()) { + std::string text; + if (ctx->HEX_FLOAT()) text = ctx->HEX_FLOAT()->getText(); + else text = ctx->DEC_FLOAT()->getText(); + ConstValue val; + val.kind = ConstValue::FLOAT; + val.float_val = ParseFloatLiteral(text); + return val; + } + else if (ctx->HEX_INT() || ctx->OCTAL_INT() || ctx->DECIMAL_INT() || ctx->ZERO()) { + std::string text; + if (ctx->HEX_INT()) text = ctx->HEX_INT()->getText(); + else if (ctx->OCTAL_INT()) text = ctx->OCTAL_INT()->getText(); + else if (ctx->DECIMAL_INT()) text = ctx->DECIMAL_INT()->getText(); + else text = ctx->ZERO()->getText(); + ConstValue val; + val.kind = ConstValue::INT; + val.int_val = static_cast(ParseIntegerLiteral(text)); + return val; + } + else if (ctx->exp()) { + return EvaluateAddExp(ctx->exp()->addExp()); + } + else { + throw std::runtime_error("常量表达式求值:不支持的 PrimaryExp 类型"); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateUnaryExp(SysYParser::UnaryExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 UnaryExp"); + + if (ctx->primaryExp()) { + return EvaluatePrimaryExp(ctx->primaryExp()); + } + else if (ctx->unaryOp()) { + ConstValue operand = EvaluateUnaryExp(ctx->unaryExp()); + std::string op = ctx->unaryOp()->getText(); + + if (op == "+") { + return operand; + } + else if (op == "-") { + if (operand.kind == ConstValue::INT) { + operand.int_val = -operand.int_val; + } else { + operand.float_val = -operand.float_val; + } + return operand; + } + else if (op == "!") { + if (operand.kind != ConstValue::INT) { + throw std::runtime_error("常量表达式求值:逻辑非操作数必须是整数"); + } + ConstValue res; + res.kind = ConstValue::INT; + res.int_val = (operand.int_val == 0) ? 1 : 0; + return res; + } + else { + throw std::runtime_error("常量表达式求值:未知一元运算符 " + op); + } + } + else { + // 函数调用在常量表达式中不允许 + throw std::runtime_error("常量表达式求值:不允许函数调用"); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateMulExp(SysYParser::MulExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 MulExp"); + + if (ctx->mulExp()) { + ConstValue left = EvaluateMulExp(ctx->mulExp()); + ConstValue right = EvaluateUnaryExp(ctx->unaryExp()); + + std::string op; + if (ctx->MulOp()) op = "*"; + else if (ctx->DivOp()) op = "/"; + else if (ctx->QuoOp()) op = "%"; + else throw std::runtime_error("常量表达式求值:未知乘法运算符"); + + bool is_float = (left.kind == ConstValue::FLOAT || right.kind == ConstValue::FLOAT); + if (is_float) { + float l = (left.kind == ConstValue::INT) ? static_cast(left.int_val) : left.float_val; + float r = (right.kind == ConstValue::INT) ? static_cast(right.int_val) : right.float_val; + ConstValue res; + res.kind = ConstValue::FLOAT; + if (op == "*") res.float_val = l * r; + else if (op == "/") res.float_val = l / r; + else if (op == "%") throw std::runtime_error("常量表达式求值:浮点数不支持取模运算"); + return res; + } else { + int l = left.int_val; + int r = right.int_val; + ConstValue res; + res.kind = ConstValue::INT; + if (op == "*") res.int_val = l * r; + else if (op == "/") { + if (r == 0) throw std::runtime_error("常量表达式求值:除零错误"); + res.int_val = l / r; + } + else if (op == "%") { + if (r == 0) throw std::runtime_error("常量表达式求值:模零错误"); + res.int_val = l % r; + } + return res; + } + } + else { + return EvaluateUnaryExp(ctx->unaryExp()); + } +} + +SymbolTable::ConstValue SymbolTable::EvaluateAddExp(SysYParser::AddExpContext* ctx) const { + if (!ctx) throw std::runtime_error("常量表达式求值:无效 AddExp"); + + if (ctx->addExp()) { + ConstValue left = EvaluateAddExp(ctx->addExp()); + ConstValue right = EvaluateMulExp(ctx->mulExp()); + + std::string op; + if (ctx->AddOp()) op = "+"; + else if (ctx->SubOp()) op = "-"; + else throw std::runtime_error("常量表达式求值:未知加法运算符"); + + bool is_float = (left.kind == ConstValue::FLOAT || right.kind == ConstValue::FLOAT); + if (is_float) { + float l = (left.kind == ConstValue::INT) ? static_cast(left.int_val) : left.float_val; + float r = (right.kind == ConstValue::INT) ? static_cast(right.int_val) : right.float_val; + ConstValue res; + res.kind = ConstValue::FLOAT; + if (op == "+") res.float_val = l + r; + else res.float_val = l - r; + return res; + } else { + int l = left.int_val; + int r = right.int_val; + ConstValue res; + res.kind = ConstValue::INT; + if (op == "+") res.int_val = l + r; + else res.int_val = l - r; + return res; + } + } + else { + return EvaluateMulExp(ctx->mulExp()); + } +} + +int SymbolTable::EvaluateConstExp(SysYParser::ConstExpContext* ctx) const { + if (!ctx || !ctx->addExp()) + throw std::runtime_error("常量表达式求值:无效 ConstExp"); + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return val.int_val; + } else { + float f = val.float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error("常量表达式求值:浮点常量不能隐式转换为整数"); + } + return i; + } +} + +float SymbolTable::EvaluateConstExpFloat(SysYParser::ConstExpContext* ctx) const { + if (!ctx || !ctx->addExp()) + throw std::runtime_error("常量表达式求值:无效 ConstExp"); + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return static_cast(val.int_val); + } else { + return val.float_val; + } +} + +std::vector SymbolTable::EvaluateConstInitVal( + SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) const +{ + std::vector result; + if (!ctx) return result; + + if (ctx->constExp()) { + ConstValue val = EvaluateAddExp(ctx->constExp()->addExp()); + // 根据基础类型进行可能的隐式转换 + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + int i = static_cast(val.float_val); + if (std::abs(val.float_val - i) > 1e-6) { + throw std::runtime_error("常量初始化:浮点常量不能隐式转换为整数"); + } + val.kind = ConstValue::INT; + val.int_val = i; + } else if (base_type->IsFloat() && val.kind == ConstValue::INT) { + val.kind = ConstValue::FLOAT; + val.float_val = static_cast(val.int_val); + } + result.push_back(val); + } else { + // 嵌套初始化列表 + if (dims.empty()) { + throw std::runtime_error("常量初始化:非数组使用初始化列表"); + } + std::vector sub_dims(dims.begin() + 1, dims.end()); + int expected_count = 1; + for (int d : sub_dims) expected_count *= d; + + for (auto* sub_init : ctx->constInitVal()) { + auto sub_vals = EvaluateConstInitVal(sub_init, sub_dims, base_type); + if (sub_vals.size() != static_cast(expected_count)) { + throw std::runtime_error("常量初始化:子列表元素数量不匹配"); + } + result.insert(result.end(), sub_vals.begin(), sub_vals.end()); + } + } + return result; } \ No newline at end of file From 066db23e40a3e87e88a1e30d97e05769c755f220 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Wed, 25 Mar 2026 21:37:58 +0800 Subject: [PATCH 17/39] =?UTF-8?q?chore(sem)=E5=88=A0=E9=99=A4=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=B8=8A=E4=BC=A0=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bug | 377 ------------------------------------------------------------ 1 file changed, 377 deletions(-) delete mode 100644 bug diff --git a/bug b/bug deleted file mode 100644 index 7600796..0000000 --- a/bug +++ /dev/null @@ -1,377 +0,0 @@ -gmake[1]: Warning: File 'CMakeFiles/Makefile2' has modification time 0.69 s in the future -gmake[2]: Warning: File 'src/ir/CMakeFiles/ir_core.dir/flags.make' has modification time 0.67 s in the future -gmake[2]: Warning: File 'src/utils/CMakeFiles/utils.dir/flags.make' has modification time 0.66 s in the future -gmake[2]: Warning: File 'CMakeFiles/antlr4_runtime.dir/flags.make' has modification time 0.64 s in the future -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -gmake[2]: Warning: File 'src/utils/CMakeFiles/utils.dir/flags.make' has modification time 0.64 s in the future -gmake[2]: Warning: File 'src/ir/CMakeFiles/ir_core.dir/flags.make' has modification time 0.65 s in the future -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -[ 0%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Context.cpp.o -[ 0%] Building CXX object src/ir/CMakeFiles/ir_core.dir/GlobalValue.cpp.o -[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/BasicBlock.cpp.o -[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Module.cpp.o -[ 2%] Building CXX object src/utils/CMakeFiles/utils.dir/Log.cpp.o -[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Value.cpp.o -[ 2%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Function.cpp.o -[ 3%] Building CXX object src/utils/CMakeFiles/utils.dir/CLI.cpp.o -[ 4%] Building CXX object src/ir/CMakeFiles/ir_core.dir/IRBuilder.cpp.o -[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Type.cpp.o -[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/Instruction.cpp.o -gmake[2]: Warning: File 'CMakeFiles/antlr4_runtime.dir/flags.make' has modification time 0.61 s in the future -[ 6%] Building CXX object src/ir/CMakeFiles/ir_core.dir/IRPrinter.cpp.o -[ 6%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRFileStream.cpp.o -[ 7%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRErrorStrategy.cpp.o -[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRInputStream.cpp.o -[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ANTLRErrorListener.cpp.o -[ 8%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BailErrorStrategy.cpp.o -[ 9%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BaseErrorListener.cpp.o -[ 9%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/BufferedTokenStream.cpp.o -[ 10%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CharStream.cpp.o -[ 11%] Linking CXX static library libutils.a -[ 11%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonToken.cpp.o -[ 12%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonTokenFactory.cpp.o -[ 12%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/CommonTokenStream.cpp.o -[ 13%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ConsoleErrorListener.cpp.o -[ 13%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/DefaultErrorStrategy.cpp.o -[ 14%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/DiagnosticErrorListener.cpp.o -[ 14%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Exceptions.cpp.o -[ 15%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/FailedPredicateException.cpp.o -[ 16%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/InputMismatchException.cpp.o -[ 17%] Linking CXX static library libir_core.a -[ 17%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/IntStream.cpp.o -[ 18%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.cpp.o -[ 18%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Lexer.cpp.o -[ 19%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/LexerInterpreter.cpp.o -[ 19%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/LexerNoViableAltException.cpp.o -[ 20%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ListTokenSource.cpp.o -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -[ 20%] Built target utils -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -[ 20%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/NoViableAltException.cpp.o -[ 20%] Built target ir_core -[ 21%] Building CXX object src/ir/analysis/CMakeFiles/ir_analysis.dir/DominatorTree.cpp.o -[ 21%] Building CXX object src/ir/analysis/CMakeFiles/ir_analysis.dir/LoopInfo.cpp.o -[ 22%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Parser.cpp.o -[ 23%] Linking CXX static library libir_analysis.a -[ 23%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ParserInterpreter.cpp.o -[ 23%] Built target ir_analysis -[ 23%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/PassManager.cpp.o -[ 24%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.cpp.o -[ 25%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/Mem2Reg.cpp.o -[ 25%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/ConstFold.cpp.o -[ 25%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/ProxyErrorListener.cpp.o -[ 26%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/ConstProp.cpp.o -[ 27%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RecognitionException.cpp.o -[ 27%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/CSE.cpp.o -[ 27%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Recognizer.cpp.o -[ 28%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/DCE.cpp.o -[ 29%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.cpp.o -[ 29%] Building CXX object src/ir/passes/CMakeFiles/ir_passes.dir/CFGSimplify.cpp.o -[ 30%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContextWithAltNum.cpp.o -[ 31%] Linking CXX static library libir_passes.a -[ 31%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/RuntimeMetaData.cpp.o -[ 31%] Built target ir_passes -[ 32%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Token.cpp.o -[ 32%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRContext.cpp.o -[ 32%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenSource.cpp.o -[ 33%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenStream.cpp.o -[ 33%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/TokenStreamRewriter.cpp.o -[ 34%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/UnbufferedCharStream.cpp.o -[ 34%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/UnbufferedTokenStream.cpp.o -[ 35%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp.o -[ 35%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/WritableToken.cpp.o -[ 36%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRFunction.cpp.o -[ 37%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATN.cpp.o -[ 37%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNConfig.cpp.o -[ 38%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNConfigSet.cpp.o -[ 38%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNDeserializationOptions.cpp.o -[ 39%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNDeserializer.cpp.o -[ 40%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNSimulator.cpp.o -[ 40%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNState.cpp.o -[ 40%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRBasicBlock.cpp.o -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp: In static member function ‘static void antlr4::dfa::Vocabulary::__static_initialization_and_destruction_0()’: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp:12:18: warning: ‘antlr4::dfa::Vocabulary::EMPTY_VOCABULARY’ is deprecated: Use the default constructor of Vocabulary instead. [-Wdeprecated-declarations] - 12 | const Vocabulary Vocabulary::EMPTY_VOCABULARY; - | ^~~~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/Vocabulary.cpp:12:18: note: declared here -[ 41%] Building CXX object src/mir/CMakeFiles/mir_core.dir/MIRInstr.cpp.o -[ 42%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ATNStateType.cpp.o -[ 42%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ActionTransition.cpp.o -[ 43%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/AmbiguityInfo.cpp.o -[ 43%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ArrayPredictionContext.cpp.o -[ 44%] Building CXX object src/mir/CMakeFiles/mir_core.dir/Register.cpp.o -[ 45%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/AtomTransition.cpp.o -[ 45%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ContextSensitivityInfo.cpp.o -[ 46%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionEventInfo.cpp.o -[ 46%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionInfo.cpp.o -[ 47%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/DecisionState.cpp.o -[ 47%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/EpsilonTransition.cpp.o -[ 47%] Building CXX object src/mir/CMakeFiles/mir_core.dir/Lowering.cpp.o -[ 48%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ErrorInfo.cpp.o -[ 48%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LL1Analyzer.cpp.o -[ 49%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerATNConfig.cpp.o -[ 49%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerATNSimulator.cpp.o -[ 50%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerAction.cpp.o -[ 51%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerActionExecutor.cpp.o -[ 51%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerChannelAction.cpp.o -[ 52%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerCustomAction.cpp.o -[ 52%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerIndexedCustomAction.cpp.o -[ 53%] Building CXX object src/mir/CMakeFiles/mir_core.dir/RegAlloc.cpp.o -[ 54%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerModeAction.cpp.o -[ 54%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerMoreAction.cpp.o -[ 55%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerPopModeAction.cpp.o -[ 55%] Building CXX object src/mir/CMakeFiles/mir_core.dir/FrameLowering.cpp.o -[ 55%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerPushModeAction.cpp.o -[ 56%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerSkipAction.cpp.o -[ 56%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LexerTypeAction.cpp.o -[ 57%] Building CXX object src/mir/CMakeFiles/mir_core.dir/AsmPrinter.cpp.o -[ 58%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/LookaheadEventInfo.cpp.o -[ 58%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/NotSetTransition.cpp.o -[ 59%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/OrderedATNConfigSet.cpp.o -[ 60%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ParserATNSimulator.cpp.o -[ 60%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ParseInfo.cpp.o -[ 61%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PrecedencePredicateTransition.cpp.o -[ 61%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredicateEvalInfo.cpp.o -[ 62%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredicateTransition.cpp.o -[ 62%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContext.cpp.o -[ 63%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContextCache.cpp.o -[ 63%] Linking CXX static library libmir_core.a -[ 63%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionContextMergeCache.cpp.o -[ 63%] Built target mir_core -[ 64%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/PredictionMode.cpp.o -[ 64%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/ProfilingATNSimulator.cpp.o -[ 65%] Building CXX object src/mir/passes/CMakeFiles/mir_passes.dir/PassManager.cpp.o -[ 65%] Building CXX object src/mir/passes/CMakeFiles/mir_passes.dir/Peephole.cpp.o -[ 66%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/RangeTransition.cpp.o -[ 66%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/RuleTransition.cpp.o -[ 67%] Linking CXX static library libmir_passes.a -[ 67%] Built target mir_passes -[ 68%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SemanticContext.cpp.o -[ 68%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SetTransition.cpp.o -[ 69%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/SingletonPredictionContext.cpp.o -[ 69%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/StarLoopbackState.cpp.o -[ 70%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/Transition.cpp.o -[ 71%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/TransitionType.cpp.o -[ 71%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/atn/WildcardTransition.cpp.o -[ 72%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFA.cpp.o -[ 72%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFASerializer.cpp.o -[ 73%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/DFAState.cpp.o -[ 73%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/dfa/LexerDFASerializer.cpp.o -[ 74%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/internal/Synchronization.cpp.o -[ 74%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/InterpreterDataReader.cpp.o -[ 75%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/Interval.cpp.o -[ 75%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/IntervalSet.cpp.o -[ 76%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/MurmurHash.cpp.o -[ 76%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/misc/Predicate.cpp.o -[ 77%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Any.cpp.o -[ 77%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Arrays.cpp.o -[ 78%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/CPPUtils.cpp.o -[ 78%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/StringUtils.cpp.o -[ 79%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/support/Utf8.cpp.o -[ 80%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ErrorNodeImpl.cpp.o -[ 80%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/IterativeParseTreeWalker.cpp.o -[ 81%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.cpp.o -[ 81%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeListener.cpp.o -[ 82%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeVisitor.cpp.o -[ 82%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTreeWalker.cpp.o -[ 83%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/TerminalNodeImpl.cpp.o -[ 83%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/Trees.cpp.o -[ 84%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/Chunk.cpp.o -[ 84%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreeMatch.cpp.o -[ 85%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreePattern.cpp.o -[ 85%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp.o -[ 86%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/RuleTagToken.cpp.o -[ 86%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TagChunk.cpp.o -[ 87%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TextChunk.cpp.o -[ 88%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/pattern/TokenTagToken.cpp.o -[ 88%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPath.cpp.o -[ 89%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathElement.cpp.o -[ 89%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathLexer.cpp.o -[ 90%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathLexerErrorListener.cpp.o -[ 90%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp.o -[ 91%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathRuleElement.cpp.o -[ 91%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp.o -[ 92%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathTokenElement.cpp.o -[ 92%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp.o -[ 93%] Building CXX object CMakeFiles/antlr4_runtime.dir/third_party/antlr4-runtime-4.13.2/runtime/src/tree/xpath/XPathWildcardElement.cpp.o -[ 93%] Linking CXX static library libantlr4_runtime.a -gmake[2]: warning: Clock skew detected. Your build may be incomplete. -[ 93%] Built target antlr4_runtime -[ 93%] Building CXX object src/sem/CMakeFiles/sem.dir/Sema.cpp.o -[ 93%] Building CXX object src/sem/CMakeFiles/sem.dir/ConstEval.cpp.o -[ 93%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYBaseVisitor.cpp.o -[ 95%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYLexer.cpp.o -[ 95%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYParser.cpp.o -[ 94%] Building CXX object src/sem/CMakeFiles/sem.dir/SymbolTable.cpp.o -[ 96%] Building CXX object src/frontend/CMakeFiles/frontend.dir/__/__/generated/antlr4/SysYVisitor.cpp.o -[ 97%] Building CXX object src/frontend/CMakeFiles/frontend.dir/AntlrDriver.cpp.o -[ 98%] Building CXX object src/frontend/CMakeFiles/frontend.dir/SyntaxTreePrinter.cpp.o -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYParser.h:7, - from /home/mxr/compiler/include/sem/Sema.h:8, - from /home/mxr/compiler/src/sem/Sema.cpp:1: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, - from /home/mxr/compiler/include/frontend/AntlrDriver.h:7, - from /home/mxr/compiler/src/frontend/AntlrDriver.cpp:2: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.h:7, - from /home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:5: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/include/frontend/SyntaxTreePrinter.h:5, - from /home/mxr/compiler/src/frontend/SyntaxTreePrinter.cpp:1: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, - from /home/mxr/compiler/build/generated/antlr4/SysYLexer.cpp:5: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.h:7, - from /home/mxr/compiler/build/generated/antlr4/SysYVisitor.cpp:5: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYParser.h:7, - from /home/mxr/compiler/include/sem/SymbolTable.h:9, - from /home/mxr/compiler/src/sem/SymbolTable.cpp:1: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYBaseVisitor.h:7, - from /home/mxr/compiler/build/generated/antlr4/SysYBaseVisitor.cpp:5: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -/home/mxr/compiler/src/sem/SymbolTable.cpp: In function ‘int evaluateConstExp(SysYParser::ConstExpContext*)’: -/home/mxr/compiler/src/sem/SymbolTable.cpp:113:58: warning: unused parameter ‘ctx’ [-Wunused-parameter] - 113 | static int evaluateConstExp(SysYParser::ConstExpContext* ctx) { - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ -/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘std::any {anonymous}::SemaVisitor::visitBreakStmtInternal(SysYParser::StmtContext*)’: -/home/mxr/compiler/src/sem/Sema.cpp:518:62: warning: unused parameter ‘ctx’ [-Wunused-parameter] - 518 | std::any visitBreakStmtInternal(SysYParser::StmtContext* ctx) { - | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~ -/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘std::any {anonymous}::SemaVisitor::visitContinueStmtInternal(SysYParser::StmtContext*)’: -/home/mxr/compiler/src/sem/Sema.cpp:526:65: warning: unused parameter ‘ctx’ [-Wunused-parameter] - 526 | std::any visitContinueStmtInternal(SysYParser::StmtContext* ctx) { - | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::mulExpSempred(MulExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3090:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3090 | bool SysYParser::mulExpSempred(MulExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::addExpSempred(AddExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3100:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3100 | bool SysYParser::addExpSempred(AddExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::relExpSempred(RelExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3110:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3110 | bool SysYParser::relExpSempred(RelExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::eqExpSempred(EqExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3120:45: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3120 | bool SysYParser::eqExpSempred(EqExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::lAndExpSempred(LAndExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3130:49: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3130 | bool SysYParser::lAndExpSempred(LAndExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp: In member function ‘bool SysYParser::lOrExpSempred(LOrExpContext*, size_t)’: -/home/mxr/compiler/build/generated/antlr4/SysYParser.cpp:3140:47: warning: unused parameter ‘_localctx’ [-Wunused-parameter] - 3140 | bool SysYParser::lOrExpSempred(LOrExpContext *_localctx, size_t predicateIndex) { - | ~~~~~~~~~~~~~~~^~~~~~~~~ -/home/mxr/compiler/src/sem/Sema.cpp: In member function ‘ExprInfo {anonymous}::SemaVisitor::CheckBinaryOp(const ExprInfo*, const ExprInfo*, const std::string&, antlr4::ParserRuleContext*)’: -/home/mxr/compiler/src/sem/Sema.cpp:1032:78: warning: unused parameter ‘ctx’ [-Wunused-parameter] - 1032 | const std::string& op, antlr4::ParserRuleContext* ctx) { - | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ -/home/mxr/compiler/src/sem/Sema.cpp: At global scope: -/home/mxr/compiler/src/sem/Sema.cpp:15:13: warning: ‘std::string {anonymous}::GetLValueName(SysYParser::LValContext&)’ defined but not used [-Wunused-function] - 15 | std::string GetLValueName(SysYParser::LValContext& lval) { - | ^~~~~~~~~~~~~ -[ 99%] Linking CXX static library libsem.a -[ 99%] Built target sem -[ 99%] Linking CXX static library libfrontend.a -[ 99%] Built target frontend -[100%] Building CXX object src/CMakeFiles/compiler.dir/main.cpp.o -In file included from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/ParserRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/InterpreterRuleContext.h:8, - from /home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/antlr4-runtime.h:30, - from /home/mxr/compiler/build/generated/antlr4/SysYLexer.h:7, - from /home/mxr/compiler/include/frontend/AntlrDriver.h:7, - from /home/mxr/compiler/src/main.cpp:5: -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/tree/ParseTree.h:50:18: warning: ‘virtual bool antlr4::tree::ParseTree::operator==(const antlr4::tree::ParseTree&) const’ was hidden [-Woverloaded-virtual=] - 50 | virtual bool operator == (const ParseTree &other) const; - | ^~~~~~~~ -/home/mxr/compiler/third_party/antlr4-runtime-4.13.2/runtime/src/RuleContext.h:135:10: note: by ‘bool antlr4::RuleContext::operator==(const antlr4::RuleContext&)’ - 135 | bool operator == (const RuleContext &other) { return this == &other; } // Simple address comparison. - | ^~~~~~~~ -/home/mxr/compiler/src/main.cpp: In function ‘int main(int, char**)’: -/home/mxr/compiler/src/main.cpp:25:10: warning: variable ‘need_blank_line’ set but not used [-Wunused-but-set-variable] - 25 | bool need_blank_line = false; - | ^~~~~~~~~~~~~~~ -[100%] Linking CXX executable ../bin/compiler -[100%] Built target compiler -gmake[1]: warning: Clock skew detected. Your build may be incomplete. From 310c93feac8480a74f467e9a4c71fb9062344c4a Mon Sep 17 00:00:00 2001 From: LuoHello <2901023943@qq.com> Date: Wed, 25 Mar 2026 23:48:58 +0800 Subject: [PATCH 18/39] IRGen,IR fit our antrl4,full make passed --- include/ir/IR.h | 76 +- include/irgen/IRGen.h | 42 +- include/sem/Sema.h | 88 +- include/sem/SymbolTable.h | 71 +- src/ir/IRPrinter.cpp | 15 +- src/ir/Type.cpp | 191 ++++- src/irgen/IRGenDecl.cpp | 102 +-- src/irgen/IRGenExp.cpp | 178 ++++- src/irgen/IRGenFunc.cpp | 123 ++- src/irgen/IRGenStmt.cpp | 65 +- src/sem/Sema.cpp | 1595 +++++++++++++++++++++++++++++++++---- src/sem/SymbolTable.cpp | 337 +++++++- 12 files changed, 2511 insertions(+), 372 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index b961192..4ea12dc 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -41,6 +41,8 @@ namespace ir { class Type; +class ArrayType; +class FunctionType; class Value; class User; class ConstantValue; @@ -93,23 +95,85 @@ class Context { class Type { public: - enum class Kind { Void, Int32, PtrInt32 }; - explicit Type(Kind k); + enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Label, Array, Function }; + + virtual ~Type() = default; + // 使用静态共享对象获取类型。 // 同一类型可直接比较返回值是否相等,例如: // Type::GetInt32Type() == Type::GetInt32Type() static const std::shared_ptr& GetVoidType(); static const std::shared_ptr& GetInt32Type(); + static const std::shared_ptr& GetFloatType(); static const std::shared_ptr& GetPtrInt32Type(); - Kind GetKind() const; - bool IsVoid() const; - bool IsInt32() const; - bool IsPtrInt32() const; + static const std::shared_ptr& GetPtrFloatType(); + static const std::shared_ptr& GetLabelType(); + static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); + static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); + + // 类型判断 + Kind GetKind() const { return kind_; } + bool IsVoid() const { return kind_ == Kind::Void; } + bool IsInt32() const { return kind_ == Kind::Int32; } + bool IsFloat() const { return kind_ == Kind::Float; } + bool IsPtrInt32() const { return kind_ == Kind::PtrInt32; } + bool IsPtrFloat() const { return kind_ == Kind::PtrFloat; } + bool IsLabel() const { return kind_ == Kind::Label; } + bool IsArray() const { return kind_ == Kind::Array; } + bool IsFunction() const { return kind_ == Kind::Function; } + + // 类型属性 + virtual size_t Size() const; // 字节大小 + virtual size_t Alignment() const; // 对齐要求 + virtual bool IsComplete() const; // 是否为完整类型(非 void,数组维度已知等) + +protected: + explicit Type(Kind k); // 构造函数 protected,只能由工厂和派生类调用 private: Kind kind_; }; +// 数组类型 +class ArrayType : public Type { +public: + // 获取元素类型和维度 + const std::shared_ptr& GetElementType() const { return elem_type_; } + const std::vector& GetDimensions() const { return dims_; } + size_t GetElementCount() const; // 总元素个数 + + size_t Size() const override; + size_t Alignment() const override; + bool IsComplete() const override; + +protected: + ArrayType(std::shared_ptr elem, std::vector dims); + friend class Type; // 允许 Type::GetArrayType 构造 + +private: + std::shared_ptr elem_type_; + std::vector dims_; +}; + +// 函数类型 +class FunctionType : public Type { +public: + const std::shared_ptr& GetReturnType() const { return return_type_; } + const std::vector>& GetParamTypes() const { return param_types_; } + + size_t Size() const override; // 函数类型没有大小,通常返回 0 + size_t Alignment() const override; // 无对齐要求 + bool IsComplete() const override; // 函数类型视为完整 + +protected: + FunctionType(std::shared_ptr ret, std::vector> params); + friend class Type; + +private: + std::shared_ptr return_type_; + std::vector> param_types_; +}; + class Value { public: Value(std::shared_ptr ty, std::string name); diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 231ba90..30b71c7 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -24,18 +24,29 @@ class IRGenImpl final : public SysYBaseVisitor { public: IRGenImpl(ir::Module& module, const SemanticContext& sema); + // 顶层 std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override; std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override; - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override; + + // 块 + std::any visitBlock(SysYParser::BlockContext* ctx) override; std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override; + + // 声明 std::any visitDecl(SysYParser::DeclContext* ctx) override; - std::any visitStmt(SysYParser::StmtContext* ctx) override; std::any visitVarDef(SysYParser::VarDefContext* ctx) override; - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override; - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override; - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override; - std::any visitVarExp(SysYParser::VarExpContext* ctx) override; - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override; + + // 语句 + std::any visitStmt(SysYParser::StmtContext* ctx) override; + + // 表达式 + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; + std::any visitLVal(SysYParser::LValContext* ctx) override; + std::any visitAddExp(SysYParser::AddExpContext* ctx) override; + std::any visitMulExp(SysYParser::MulExpContext* ctx) override; + std::any visitRelExp(SysYParser::RelExpContext* ctx) override; + std::any visitEqExp(SysYParser::EqExpContext* ctx) override; + std::any visitCond(SysYParser::CondContext* ctx) override; private: enum class BlockFlow { @@ -45,6 +56,15 @@ class IRGenImpl final : public SysYBaseVisitor { BlockFlow VisitBlockItemResult(SysYParser::BlockItemContext& item); ir::Value* EvalExpr(SysYParser::ExpContext& expr); + ir::Value* EvalCond(SysYParser::CondContext& cond); + + // 辅助函数 + BlockFlow HandleReturnStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleIfStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleWhileStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleBreakStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleContinueStmt(SysYParser::StmtContext* ctx); + BlockFlow HandleAssignStmt(SysYParser::StmtContext* ctx); ir::Module& module_; const SemanticContext& sema_; @@ -52,6 +72,14 @@ class IRGenImpl final : public SysYBaseVisitor { ir::IRBuilder builder_; // 名称绑定由 Sema 负责;IRGen 只维护“声明 -> 存储槽位”的代码生成状态。 std::unordered_map storage_map_; + + // 循环栈,用于 break/continue + struct LoopContext { + ir::BasicBlock* condBlock; + ir::BasicBlock* bodyBlock; + ir::BasicBlock* exitBlock; + }; + std::vector loopStack_; }; std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, diff --git a/include/sem/Sema.h b/include/sem/Sema.h index 9ac057b..c79c401 100644 --- a/include/sem/Sema.h +++ b/include/sem/Sema.h @@ -2,29 +2,83 @@ #pragma once #include +#include +#include #include "SysYParser.h" +#include "ir/IR.h" +// 表达式信息结构 +struct ExprInfo { + std::shared_ptr type = nullptr; + bool is_lvalue = false; + bool is_const = false; + bool is_const_int = false; // 是否是整型常量 + int const_int_value = 0; + float const_float_value = 0.0f; + antlr4::ParserRuleContext* node = nullptr; // 对应的语法树节点 +}; + +// 语义分析上下文:存储分析过程中产生的信息 class SemanticContext { - public: - void BindVarUse(SysYParser::VarContext* use, - SysYParser::VarDefContext* decl) { - var_uses_[use] = decl; - } - - SysYParser::VarDefContext* ResolveVarUse( - const SysYParser::VarContext* use) const { - auto it = var_uses_.find(use); - return it == var_uses_.end() ? nullptr : it->second; - } - - private: - std::unordered_map - var_uses_; +public: + // ----- 变量使用绑定(使用 LValContext 而不是 VarContext)----- + void BindVarUse(SysYParser::LValContext* use, + SysYParser::VarDefContext* decl) { + var_uses_[use] = decl; + } + + SysYParser::VarDefContext* ResolveVarUse( + const SysYParser::LValContext* use) const { + auto it = var_uses_.find(use); + return it == var_uses_.end() ? nullptr : it->second; + } + + // ----- 表达式类型信息存储 ----- + void SetExprType(antlr4::ParserRuleContext* node, const ExprInfo& info) { + ExprInfo copy = info; + copy.node = node; + expr_types_[node] = copy; + } + + ExprInfo* GetExprType(antlr4::ParserRuleContext* node) { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + const ExprInfo* GetExprType(antlr4::ParserRuleContext* node) const { + auto it = expr_types_.find(node); + return it == expr_types_.end() ? nullptr : &it->second; + } + + // ----- 隐式转换标记(供 IR 生成使用)----- + struct ConversionInfo { + antlr4::ParserRuleContext* node; + std::shared_ptr from_type; + std::shared_ptr to_type; + }; + + void AddConversion(antlr4::ParserRuleContext* node, + std::shared_ptr from, + std::shared_ptr to) { + conversions_.push_back({node, from, to}); + } + + const std::vector& GetConversions() const { return conversions_; } + +private: + // 变量使用映射 - 使用 LValContext 作为键 + std::unordered_map var_uses_; + + // 表达式类型映射 + std::unordered_map expr_types_; + + // 隐式转换列表 + std::vector conversions_; }; // 目前仅检查: // - 变量先声明后使用 // - 局部变量不允许重复定义 -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); +SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); \ No newline at end of file diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index c9396dd..29b4fae 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -3,15 +3,74 @@ #include #include +#include +#include #include "SysYParser.h" +#include "ir/IR.h" + +// 符号种类 +enum class SymbolKind { + Variable, + Function, + Parameter, + Constant +}; + +// 符号条目 +struct Symbol { + std::string name; + SymbolKind kind; + std::shared_ptr type; // 指向 Type 对象的智能指针 + int scope_level = 0; // 定义时的作用域深度 + int stack_offset = -1; // 局部变量/参数栈偏移(全局变量为 -1) + bool is_initialized = false; // 是否已初始化 + bool is_builtin = false; // 是否为库函数 + + // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) + std::vector> param_types; + + // 对于常量,存储常量值(这里支持 int32 和 float) + union ConstantValue { + int i32; + float f32; + } const_value; + bool is_int_const = true; // 标记常量类型,用于区分 int 和 float + + // 关联的语法树节点(用于报错位置或进一步分析) + SysYParser::VarDefContext* var_def_ctx = nullptr; + SysYParser::FuncDefContext* func_def_ctx = nullptr; +}; class SymbolTable { - public: - void Add(const std::string& name, SysYParser::VarDefContext* decl); - bool Contains(const std::string& name) const; - SysYParser::VarDefContext* Lookup(const std::string& name) const; + public: + SymbolTable(); + ~SymbolTable() = default; + + // ----- 作用域管理 ----- + void enterScope(); // 进入新作用域 + void exitScope(); // 退出当前作用域 + int currentScopeLevel() const { return static_cast(scopes_.size()) - 1; } + + // ----- 符号操作(推荐使用)----- + bool addSymbol(const Symbol& sym); // 添加符号到当前作用域 + Symbol* lookup(const std::string& name); // 从当前作用域向外查找 + Symbol* lookupCurrent(const std::string& name); // 仅在当前作用域查找 + + // ----- 与原接口兼容(保留原有功能)----- + void Add(const std::string& name, SysYParser::VarDefContext* decl); + bool Contains(const std::string& name) const; + SysYParser::VarDefContext* Lookup(const std::string& name) const; + + // ----- 辅助函数:从语法树节点构造 Type ----- + static std::shared_ptr getTypeFromVarDef(SysYParser::VarDefContext* ctx); + static std::shared_ptr getTypeFromFuncDef(SysYParser::FuncDefContext* ctx); + + void registerBuiltinFunctions(); + + private: + // 作用域栈:每个元素是一个从名字到符号的映射 + std::vector> scopes_; - private: - std::unordered_map table_; + static constexpr int GLOBAL_SCOPE = 0; // 全局作用域索引 }; diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 30efbb6..5b11d63 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -14,12 +14,15 @@ namespace ir { static const char* TypeToString(const Type& ty) { switch (ty.GetKind()) { - case Type::Kind::Void: - return "void"; - case Type::Kind::Int32: - return "i32"; - case Type::Kind::PtrInt32: - return "i32*"; + case Type::Kind::Void: return "void"; + case Type::Kind::Int32: return "i32"; + case Type::Kind::Float: return "float"; + case Type::Kind::PtrInt32: return "i32*"; + case Type::Kind::PtrFloat: return "float*"; + case Type::Kind::Label: return "label"; + case Type::Kind::Array: return "array"; + case Type::Kind::Function: return "function"; + default: return "unknown"; } throw std::runtime_error(FormatError("ir", "未知类型")); } diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 3e1684d..8d0f5b9 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -1,31 +1,208 @@ // 当前仅支持 void、i32 和 i32*。 #include "ir/IR.h" +#include namespace ir { Type::Type(Kind k) : kind_(k) {} +size_t Type::Size() const { + switch (kind_) { + case Kind::Void: return 0; + case Kind::Int32: return 4; + case Kind::Float: return 4; // 单精度浮点 4 字节 + case Kind::PtrInt32: return 8; // 假设 64 位指针 + case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 标签地址大小(指针大小) + default: return 0; // 派生类应重写 + } +} + +size_t Type::Alignment() const { + switch (kind_) { + case Kind::Int32: return 4; + case Kind::Float: return 4; + case Kind::PtrInt32: return 8; + case Kind::PtrFloat: return 8; + case Kind::Label: return 8; // 与指针相同 + default: return 1; + } +} + +bool Type::IsComplete() const { + return kind_ != Kind::Void; +} const std::shared_ptr& Type::GetVoidType() { - static const std::shared_ptr type = std::make_shared(Kind::Void); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Void)); return type; } const std::shared_ptr& Type::GetInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::Int32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Int32)); return type; } +const std::shared_ptr& Type::GetFloatType() { + static const std::shared_ptr type(new Type(Kind::Float)); + return type; +} + const std::shared_ptr& Type::GetPtrInt32Type() { - static const std::shared_ptr type = std::make_shared(Kind::PtrInt32); + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt32)); return type; } -Type::Kind Type::GetKind() const { return kind_; } +const std::shared_ptr& Type::GetPtrFloatType() { + static const std::shared_ptr type(new Type(Kind::PtrFloat)); + return type; +} + +const std::shared_ptr& Type::GetLabelType() { + static const std::shared_ptr type(new Type(Kind::Label)); + return type; +} + +// ---------- 数组类型缓存 ---------- +// 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 +struct ArrayKey { + const Type* elem_type; + std::vector dims; + + bool operator==(const ArrayKey& other) const { + return elem_type == other.elem_type && dims == other.dims; + } +}; + +struct ArrayKeyHash { + std::size_t operator()(const ArrayKey& key) const { + std::size_t h = std::hash{}(key.elem_type); + for (int d : key.dims) { + h ^= std::hash{}(d) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, ArrayKeyHash>& GetArrayCache() { + static std::unordered_map, ArrayKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetArrayType(std::shared_ptr elem, + std::vector dims) { + // 检查维度合法性 + for (int d : dims) { + if (d <= 0) { + // SysY 数组维度必须为正整数常量表达式,这里假设已检查 + return nullptr; + } + } + + ArrayKey key{elem.get(), dims}; + auto& cache = GetArrayCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } + + auto arr = std::shared_ptr(new ArrayType(std::move(elem), std::move(dims))); + cache[key] = arr; + return arr; +} + +// ---------- 函数类型缓存 ---------- +struct FunctionKey { + const Type* return_type; + std::vector param_types; + + bool operator==(const FunctionKey& other) const { + return return_type == other.return_type && param_types == other.param_types; + } +}; + +struct FunctionKeyHash { + std::size_t operator()(const FunctionKey& key) const { + std::size_t h = std::hash{}(key.return_type); + for (const Type* t : key.param_types) { + h ^= std::hash{}(t) + 0x9e3779b9 + (h << 6) + (h >> 2); + } + return h; + } +}; + +static std::unordered_map, FunctionKeyHash>& GetFunctionCache() { + static std::unordered_map, FunctionKeyHash> cache; + return cache; +} + +std::shared_ptr Type::GetFunctionType(std::shared_ptr ret, + std::vector> params) { + // 提取裸指针用于键(保证唯一性,因为 shared_ptr 指向同一对象) + std::vector param_ptrs; + param_ptrs.reserve(params.size()); + for (const auto& p : params) { + param_ptrs.push_back(p.get()); + } + + FunctionKey key{ret.get(), std::move(param_ptrs)}; + auto& cache = GetFunctionCache(); + auto it = cache.find(key); + if (it != cache.end()) { + auto ptr = it->second.lock(); + if (ptr) return ptr; + } -bool Type::IsVoid() const { return kind_ == Kind::Void; } + auto func = std::shared_ptr(new FunctionType(std::move(ret), std::move(params))); + cache[key] = func; + return func; +} -bool Type::IsInt32() const { return kind_ == Kind::Int32; } +// ---------- ArrayType 实现 ---------- +ArrayType::ArrayType(std::shared_ptr elem, std::vector dims) + : Type(Kind::Array), elem_type_(std::move(elem)), dims_(std::move(dims)) { + // 数组元素类型必须是完整类型 + assert(elem_type_ && elem_type_->IsComplete()); +} + +size_t ArrayType::GetElementCount() const { + size_t count = 1; + for (int d : dims_) count *= d; + return count; +} + +size_t ArrayType::Size() const { + return GetElementCount() * elem_type_->Size(); +} -bool Type::IsPtrInt32() const { return kind_ == Kind::PtrInt32; } +size_t ArrayType::Alignment() const { + // 数组对齐等于其元素对齐 + return elem_type_->Alignment(); +} + +bool ArrayType::IsComplete() const { + // 维度已确定且元素类型完整,则数组完整 + return !dims_.empty() && elem_type_->IsComplete(); +} + +// ---------- FunctionType 实现 ---------- +FunctionType::FunctionType(std::shared_ptr ret, + std::vector> params) + : Type(Kind::Function), return_type_(std::move(ret)), param_types_(std::move(params)) {} + +size_t FunctionType::Size() const { + // 函数类型没有运行时大小,通常用于类型检查,返回 0 + return 0; +} + +size_t FunctionType::Alignment() const { + // 不对齐 + return 1; +} + +bool FunctionType::IsComplete() const { + // 函数类型总是完整的(只要返回类型完整,但 SysY 中 void 也视为完整) + return true; +} } // namespace ir diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 0eb62ae..7ca55d0 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -8,100 +8,76 @@ namespace { -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { +// 使用 LValContext 而不是 LValueContext +std::string GetLValueName(SysYParser::LValContext& lvalue) { + if (!lvalue.Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); } - return lvalue.ID()->getText(); + return lvalue.Ident()->getText(); } } // namespace -std::any IRGenImpl::visitBlockStmt(SysYParser::BlockStmtContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少语句块")); - } - for (auto* item : ctx->blockItem()) { - if (item) { - if (VisitBlockItemResult(*item) == BlockFlow::Terminated) { - // 当前语法要求 return 为块内最后一条语句;命中后可停止生成。 - break; - } - } - } - return {}; -} +// 注意:visitBlock 已经在 IRGenFunc.cpp 中实现,这里不要重复定义 -IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( - SysYParser::BlockItemContext& item) { - return std::any_cast(item.accept(this)); -} - -std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少块内项")); - } - if (ctx->decl()) { - ctx->decl()->accept(this); - return BlockFlow::Continue; - } - if (ctx->stmt()) { - return ctx->stmt()->accept(this); - } - throw std::runtime_error(FormatError("irgen", "暂不支持的语句或声明")); -} - -// 变量声明的 IR 生成目前也是最小实现: -// - 先检查声明的基础类型,当前仅支持局部 int; -// - 再把 Decl 中的变量定义交给 visitVarDef 继续处理。 -// -// 和更完整的版本相比,这里还没有: -// - 一个 Decl 中多个变量定义的顺序处理; -// - const、数组、全局变量等不同声明形态; -// - 更丰富的类型系统。 std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量声明")); } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持局部 int 变量声明")); + + // 处理 varDecl + if (auto* varDecl = ctx->varDecl()) { + // 检查类型 + if (varDecl->bType() && varDecl->bType()->Int()) { + for (auto* varDef : varDecl->varDef()) { + varDef->accept(this); + } + } else { + throw std::runtime_error(FormatError("irgen", "当前仅支持 int 类型变量")); + } } - auto* var_def = ctx->varDef(); - if (!var_def) { - throw std::runtime_error(FormatError("irgen", "非法变量声明")); + + // 处理 constDecl(暂不支持) + if (ctx->constDecl()) { + throw std::runtime_error(FormatError("irgen", "常量声明暂未实现")); } - var_def->accept(this); + return {}; } - -// 当前仍是教学用的最小版本,因此这里只支持: -// - 局部 int 变量; -// - 标量初始化; -// - 一个 VarDef 对应一个槽位。 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量定义")); } - if (!ctx->lValue()) { + + // 使用 Ident() 而不是 lValue() + if (!ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "变量声明缺少名称")); } - GetLValueName(*ctx->lValue()); + + std::string varName = ctx->Ident()->getText(); + if (storage_map_.find(ctx) != storage_map_.end()) { - throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位")); + throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); } + + // 分配存储 auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); storage_map_[ctx] = slot; - + ir::Value* init = nullptr; - if (auto* init_value = ctx->initValue()) { - if (!init_value->exp()) { - throw std::runtime_error(FormatError("irgen", "当前不支持聚合初始化")); + // 使用 initVal() 而不是 initValue() + if (auto* initVal = ctx->initVal()) { + if (initVal->exp()) { + init = EvalExpr(*initVal->exp()); + } else { + // 数组初始化暂不支持 + init = builder_.CreateConstInt(0); } - init = EvalExpr(*init_value->exp()); } else { init = builder_.CreateConstInt(0); } + builder_.CreateStore(init, slot); return {}; } diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index cf4797c..90d07b1 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -20,61 +20,183 @@ // - 数组、指针、下标访问 // - 条件与比较表达式 // - ... + ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { return std::any_cast(expr.accept(this)); } - -std::any IRGenImpl::visitParenExp(SysYParser::ParenExpContext* ctx) { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "非法括号表达式")); - } - return EvalExpr(*ctx->exp()); +ir::Value* IRGenImpl::EvalCond(SysYParser::CondContext& cond) { + return std::any_cast(cond.accept(this)); } - -std::any IRGenImpl::visitNumberExp(SysYParser::NumberExpContext* ctx) { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持整数字面量")); +// 基本表达式:数字、变量、括号表达式 +std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少基本表达式")); } - return static_cast( - builder_.CreateConstInt(std::stoi(ctx->number()->getText()))); + + // 处理数字字面量 + if (ctx->DECIMAL_INT()) { + int value = std::stoi(ctx->DECIMAL_INT()->getText()); + return static_cast(builder_.CreateConstInt(value)); + } + + if (ctx->HEX_INT()) { + std::string hex = ctx->HEX_INT()->getText(); + int value = std::stoi(hex, nullptr, 16); + return static_cast(builder_.CreateConstInt(value)); + } + + if (ctx->OCTAL_INT()) { + std::string oct = ctx->OCTAL_INT()->getText(); + int value = std::stoi(oct, nullptr, 8); + return static_cast(builder_.CreateConstInt(value)); + } + + if (ctx->ZERO()) { + return static_cast(builder_.CreateConstInt(0)); + } + + // 处理变量 + if (ctx->lVal()) { + return ctx->lVal()->accept(this); + } + + // 处理括号表达式 + if (ctx->L_PAREN() && ctx->exp()) { + return EvalExpr(*ctx->exp()); + } + + throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } -// 变量使用的处理流程: +// 左值(变量)处理 // 1. 先通过语义分析结果把变量使用绑定回声明; // 2. 再通过 storage_map_ 找到该声明对应的栈槽位; // 3. 最后生成 load,把内存中的值读出来。 -// -// 因此当前 IRGen 自己不再做名字查找,而是直接消费 Sema 的绑定结果。 -std::any IRGenImpl::visitVarExp(SysYParser::VarExpContext* ctx) { - if (!ctx || !ctx->var() || !ctx->var()->ID()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持普通整型变量")); +std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法左值")); } - auto* decl = sema_.ResolveVarUse(ctx->var()); + + std::string varName = ctx->Ident()->getText(); + + // 从语义分析获取变量定义 + auto* decl = sema_.ResolveVarUse(ctx); if (!decl) { throw std::runtime_error( FormatError("irgen", - "变量使用缺少语义绑定: " + ctx->var()->ID()->getText())); + "变量使用缺少语义绑定: " + varName)); } + auto it = storage_map_.find(decl); if (it == storage_map_.end()) { throw std::runtime_error( FormatError("irgen", - "变量声明缺少存储槽位: " + ctx->var()->ID()->getText())); + "变量声明缺少存储槽位: " + varName)); } + return static_cast( builder_.CreateLoad(it->second, module_.GetContext().NextTemp())); } -std::any IRGenImpl::visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { +// 加法表达式 +std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法加法表达式")); } - ir::Value* lhs = EvalExpr(*ctx->exp(0)); - ir::Value* rhs = EvalExpr(*ctx->exp(1)); - return static_cast( - builder_.CreateBinary(ir::Opcode::Add, lhs, rhs, - module_.GetContext().NextTemp())); + + // 注意:mulExp() 返回的是 MulExpContext*,不是 vector + // 需要递归处理 AddExp 的左结合性 + // AddExp : MulExp | AddExp ('+' | '-') MulExp + + // 先处理左操作数 + ir::Value* result = nullptr; + + // 如果有左子节点(AddExp),递归处理 + if (ctx->addExp()) { + result = std::any_cast(ctx->addExp()->accept(this)); + } else { + // 否则是 MulExp + result = std::any_cast(ctx->mulExp()->accept(this)); + } + + // 如果有运算符和右操作数 + if (ctx->AddOp() || ctx->SubOp()) { + ir::Value* rhs = std::any_cast(ctx->mulExp()->accept(this)); + + if (ctx->AddOp()) { + result = builder_.CreateAdd(result, rhs, module_.GetContext().NextTemp()); + } else if (ctx->SubOp()) { + // 减法:a - b = a + (-b) + // 暂时用加法,后续需要实现真正的减法 + result = builder_.CreateAdd(result, rhs, module_.GetContext().NextTemp()); + } + } + + return static_cast(result); +} + +// 在 IRGenExp.cpp 中添加 + +// 简化版 visitMulExp +std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); + } + + // 暂时只返回 unaryExp 的值 + if (ctx->unaryExp()) { + return ctx->unaryExp()->accept(this); + } + + // 如果有 mulExp 子节点,递归处理 + if (ctx->mulExp()) { + return ctx->mulExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "乘法表达式暂未实现")); +} + +// 关系表达式(暂未完整实现) +std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法关系表达式")); + } + + // 简化:返回 addExp 的值 + if (ctx->addExp()) { + return ctx->addExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "关系表达式暂未实现")); +} + +// 相等表达式(暂未完整实现) +std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法相等表达式")); + } + + // 简化:返回 relExp 的值 + if (ctx->relExp()) { + return ctx->relExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "相等表达式暂未实现")); +} + +// 条件表达式 +std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法条件表达式")); + } + + // 简化:返回 lOrExp 的值 + if (ctx->lOrExp()) { + return ctx->lOrExp()->accept(this); + } + + throw std::runtime_error(FormatError("irgen", "条件表达式暂未实现")); } diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index 4912d03..87f3ac8 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -1,6 +1,8 @@ #include "irgen/IRGen.h" +#include #include +#include #include "SysYParser.h" #include "ir/IR.h" @@ -9,7 +11,6 @@ namespace { void VerifyFunctionStructure(const ir::Function& func) { - // 当前 IRGen 仍是单入口、顺序生成;这里在生成结束后补一层块终结校验。 for (const auto& bb : func.GetBlocks()) { if (!bb || !bb->HasTerminator()) { throw std::runtime_error( @@ -27,61 +28,105 @@ IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) func_(nullptr), builder_(module.GetContext(), nullptr) {} -// 编译单元的 IR 生成当前只实现了最小功能: -// - Module 已在 GenerateIR 中创建,这里只负责继续生成其中的内容; -// - 当前会读取编译单元中的函数定义,并交给 visitFuncDef 生成函数 IR; -// -// 当前还没有实现: -// - 多个函数定义的遍历与生成; -// - 全局变量、全局常量的 IR 生成。 +// 修正:没有 mainFuncDef,通过函数名找到 main std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少编译单元")); } - auto* func = ctx->funcDef(); - if (!func) { - throw std::runtime_error(FormatError("irgen", "缺少函数定义")); + + // 获取所有函数定义 + auto funcDefs = ctx->funcDef(); + + // 找到 main 函数 + SysYParser::FuncDefContext* mainFunc = nullptr; + for (auto* funcDef : funcDefs) { + if (funcDef->Ident() && funcDef->Ident()->getText() == "main") { + mainFunc = funcDef; + break; + } } - func->accept(this); + + if (!mainFunc) { + throw std::runtime_error(FormatError("irgen", "缺少main函数")); + } + + // 生成 main 函数 + mainFunc->accept(this); + return {}; } -// 函数 IR 生成当前实现了: -// 1. 获取函数名; -// 2. 检查函数返回类型; -// 3. 在 Module 中创建 Function; -// 4. 将 builder 插入点设置到入口基本块; -// 5. 继续生成函数体。 -// -// 当前还没有实现: -// - 通用函数返回类型处理; -// - 形参列表遍历与参数类型收集; -// - FunctionType 这样的函数类型对象; -// - Argument/形式参数 IR 对象; -// - 入口块中的参数初始化逻辑。 -// ... - -// 因此这里目前只支持最小的“无参 int 函数”生成。 std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少函数定义")); } - if (!ctx->blockStmt()) { - throw std::runtime_error(FormatError("irgen", "函数体为空")); - } - if (!ctx->ID()) { + + // 使用 Ident() 而不是 ID() + if (!ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "缺少函数名")); } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持无参 int 函数")); + + std::string funcName = ctx->Ident()->getText(); + + // 检查函数体 - 使用 block() 而不是 blockStmt() + if (!ctx->block()) { + throw std::runtime_error(FormatError("irgen", "函数体为空")); } - - func_ = module_.CreateFunction(ctx->ID()->getText(), ir::Type::GetInt32Type()); + + // 检查返回类型 - 使用 Int() 而不是 INT() + if (!ctx->funcType() || !ctx->funcType()->Int()) { + throw std::runtime_error(FormatError("irgen", "当前仅支持int函数")); + } + + // 创建函数 + func_ = module_.CreateFunction(funcName, ir::Type::GetInt32Type()); builder_.SetInsertPoint(func_->GetEntry()); storage_map_.clear(); - - ctx->blockStmt()->accept(this); - // 语义正确性主要由 sema 保证,这里只兜底检查 IR 结构是否合法。 + + // 生成函数体 - 使用 block() 而不是 blockStmt() + ctx->block()->accept(this); + + // 确保函数有返回值 + if (!func_->GetEntry()->HasTerminator()) { + auto retVal = builder_.CreateConstInt(0); + builder_.CreateRet(retVal); + } + VerifyFunctionStructure(*func_); return {}; } + +std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少语句块")); + } + + for (auto* item : ctx->blockItem()) { + if (item) { + if (VisitBlockItemResult(*item) == BlockFlow::Terminated) { + break; + } + } + } + + return {}; +} + +IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( + SysYParser::BlockItemContext& item) { + return std::any_cast(item.accept(this)); +} + +std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少块内项")); + } + if (ctx->stmt()) { + return ctx->stmt()->accept(this); + } + if (ctx->decl()) { + ctx->decl()->accept(this); + return BlockFlow::Continue; + } + throw std::runtime_error(FormatError("irgen", "暂不支持的块内项")); +} diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index 751550c..fef78ea 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -19,21 +19,70 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句")); } - if (ctx->returnStmt()) { - return ctx->returnStmt()->accept(this); + + // return 语句 - 通过 Return() 关键字判断 + if (ctx->Return()) { + return HandleReturnStmt(ctx); } + + // 块语句 + if (ctx->block()) { + return ctx->block()->accept(this); + } + + // 空语句或表达式语句(先计算表达式) + if (ctx->exp()) { + EvalExpr(*ctx->exp()); + return BlockFlow::Continue; + } + throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); } - -std::any IRGenImpl::visitReturnStmt(SysYParser::ReturnStmtContext* ctx) { +IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); } - if (!ctx->exp()) { - throw std::runtime_error(FormatError("irgen", "return 缺少表达式")); + + ir::Value* retValue = nullptr; + if (ctx->exp()) { + retValue = EvalExpr(*ctx->exp()); + } + // 如果没有表达式,返回0(对于int main) + if (!retValue) { + retValue = builder_.CreateConstInt(0); } - ir::Value* v = EvalExpr(*ctx->exp()); - builder_.CreateRet(v); + + builder_.CreateRet(retValue); return BlockFlow::Terminated; } + +// if语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { + // TODO: 实现if语句 + throw std::runtime_error(FormatError("irgen", "if语句暂未实现")); +} + +// while语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { + // TODO: 实现while语句 + throw std::runtime_error(FormatError("irgen", "while语句暂未实现")); +} + +// break语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleBreakStmt(SysYParser::StmtContext* ctx) { + // TODO: 实现break + throw std::runtime_error(FormatError("irgen", "break语句暂未实现")); +} + +// continue语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleContinueStmt(SysYParser::StmtContext* ctx) { + // TODO: 实现continue + throw std::runtime_error(FormatError("irgen", "continue语句暂未实现")); +} + +// 赋值语句(待实现) +IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { + // TODO: 实现赋值 + throw std::runtime_error(FormatError("irgen", "赋值语句暂未实现")); +} diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 745374c..11bf336 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "SysYBaseVisitor.h" #include "sem/SymbolTable.h" @@ -10,191 +11,1431 @@ namespace { -std::string GetLValueName(SysYParser::LValueContext& lvalue) { - if (!lvalue.ID()) { - throw std::runtime_error(FormatError("sema", "非法左值")); - } - return lvalue.ID()->getText(); +// 获取左值名称的辅助函数 +std::string GetLValueName(SysYParser::LValContext& lval) { + if (!lval.Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + return lval.Ident()->getText(); +} + +// 从 BTypeContext 获取类型 +std::shared_ptr GetTypeFromBType(SysYParser::BTypeContext* ctx) { + if (!ctx) return ir::Type::GetInt32Type(); + if (ctx->Int()) return ir::Type::GetInt32Type(); + if (ctx->Float()) return ir::Type::GetFloatType(); + return ir::Type::GetInt32Type(); } +// 语义分析 Visitor class SemaVisitor final : public SysYBaseVisitor { - public: - std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少编译单元")); - } - auto* func = ctx->funcDef(); - if (!func || !func->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!func->ID() || func->ID()->getText() != "main") { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - func->accept(this); - if (!seen_return_) { - throw std::runtime_error( - FormatError("sema", "main 函数必须包含 return 语句")); - } - return {}; - } - - std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { - if (!ctx || !ctx->blockStmt()) { - throw std::runtime_error(FormatError("sema", "缺少 main 函数定义")); - } - if (!ctx->funcType() || !ctx->funcType()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持 int main")); - } - const auto& items = ctx->blockStmt()->blockItem(); - if (items.empty()) { - throw std::runtime_error( - FormatError("sema", "main 函数不能为空,且必须以 return 结束")); - } - ctx->blockStmt()->accept(this); - return {}; - } - - std::any visitBlockStmt(SysYParser::BlockStmtContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "缺少语句块")); - } - const auto& items = ctx->blockItem(); - for (size_t i = 0; i < items.size(); ++i) { - auto* item = items[i]; - if (!item) { - continue; - } - if (seen_return_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - current_item_index_ = i; - total_items_ = items.size(); - item->accept(this); - } - return {}; - } - - std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - if (ctx->decl()) { - ctx->decl()->accept(this); - return {}; - } - if (ctx->stmt()) { - ctx->stmt()->accept(this); - return {}; - } - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - - std::any visitDecl(SysYParser::DeclContext* ctx) override { - if (!ctx) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - if (!ctx->btype() || !ctx->btype()->INT()) { - throw std::runtime_error(FormatError("sema", "当前仅支持局部 int 变量声明")); - } - auto* var_def = ctx->varDef(); - if (!var_def || !var_def->lValue()) { - throw std::runtime_error(FormatError("sema", "非法变量声明")); - } - const std::string name = GetLValueName(*var_def->lValue()); - if (table_.Contains(name)) { - throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); - } - if (auto* init = var_def->initValue()) { - if (!init->exp()) { - throw std::runtime_error(FormatError("sema", "当前不支持聚合初始化")); - } - init->exp()->accept(this); - } - table_.Add(name, var_def); - return {}; - } - - std::any visitStmt(SysYParser::StmtContext* ctx) override { - if (!ctx || !ctx->returnStmt()) { - throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); - } - ctx->returnStmt()->accept(this); - return {}; - } - - std::any visitReturnStmt(SysYParser::ReturnStmtContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "return 缺少表达式")); - } - ctx->exp()->accept(this); - seen_return_ = true; - if (current_item_index_ + 1 != total_items_) { - throw std::runtime_error( - FormatError("sema", "return 必须是 main 函数中的最后一条语句")); - } - return {}; - } - - std::any visitParenExp(SysYParser::ParenExpContext* ctx) override { - if (!ctx || !ctx->exp()) { - throw std::runtime_error(FormatError("sema", "非法括号表达式")); - } - ctx->exp()->accept(this); - return {}; - } - - std::any visitVarExp(SysYParser::VarExpContext* ctx) override { - if (!ctx || !ctx->var()) { - throw std::runtime_error(FormatError("sema", "非法变量表达式")); - } - ctx->var()->accept(this); - return {}; - } - - std::any visitNumberExp(SysYParser::NumberExpContext* ctx) override { - if (!ctx || !ctx->number() || !ctx->number()->ILITERAL()) { - throw std::runtime_error(FormatError("sema", "当前仅支持整数字面量")); - } - return {}; - } - - std::any visitAdditiveExp(SysYParser::AdditiveExpContext* ctx) override { - if (!ctx || !ctx->exp(0) || !ctx->exp(1)) { - throw std::runtime_error(FormatError("sema", "暂不支持的表达式形式")); - } - ctx->exp(0)->accept(this); - ctx->exp(1)->accept(this); - return {}; - } - - std::any visitVar(SysYParser::VarContext* ctx) override { - if (!ctx || !ctx->ID()) { - throw std::runtime_error(FormatError("sema", "非法变量引用")); +public: + SemaVisitor() : table_() {} + + std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少编译单元")); + } + table_.enterScope(); // 创建全局作用域 + for (auto* func : ctx->funcDef()) { // 收集所有函数声明(处理互相调用) + CollectFunctionDeclaration(func); + } + for (auto* decl : ctx->decl()) { // 处理所有声明和定义 + if (decl) decl->accept(this); + } + for (auto* func : ctx->funcDef()) { + if (func) func->accept(this); + } + CheckMainFunction(); // 检查 main 函数存在且正确 + table_.exitScope(); // 退出全局作用域 + return {}; + } + + std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "函数定义缺少标识符")); + } + std::string name = ctx->Ident()->getText(); + std::shared_ptr return_type; // 获取返回类型 + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + return_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + return_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + return_type = ir::Type::GetFloatType(); + } else { + return_type = ir::Type::GetInt32Type(); + } + } else { + return_type = ir::Type::GetInt32Type(); + } + std::cout << "[DEBUG] 进入函数: " << name + << " 返回类型: " << (return_type->IsInt32() ? "int" : + return_type->IsFloat() ? "float" : "void") + << std::endl; + + // 记录当前函数返回类型(用于 return 检查) + current_func_return_type_ = return_type; + current_func_has_return_ = false; + + table_.enterScope(); + if (ctx->funcFParams()) { // 处理参数 + CollectFunctionParams(ctx->funcFParams()); + } + if (ctx->block()) { // 处理函数体 + ctx->block()->accept(this); + } + std::cout << "[DEBUG] 函数 " << name + << " has_return: " << current_func_has_return_ + << " return_type_is_void: " << return_type->IsVoid() + << std::endl; + if (!return_type->IsVoid() && !current_func_has_return_) { // 检查非 void 函数是否有 return + throw std::runtime_error(FormatError("sema", "非 void 函数 " + name + " 缺少 return 语句")); + } + table_.exitScope(); + + current_func_return_type_ = nullptr; + current_func_has_return_ = false; + return {}; + } + + std::any visitBlock(SysYParser::BlockContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "缺少语句块")); + } + table_.enterScope(); + for (auto* item : ctx->blockItem()) { // 处理所有 blockItem + if (item) { + item->accept(this); + // 如果已经有 return,可以继续(但 return 必须是最后一条) + // 注意:这里不需要跳出,因为 return 语句本身已经标记了 + } + } + table_.exitScope(); + return {}; + } + + std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + if (ctx->decl()) { + ctx->decl()->accept(this); + return {}; + } + if (ctx->stmt()) { + ctx->stmt()->accept(this); + return {}; + } + throw std::runtime_error(FormatError("sema", "暂不支持的语句或声明")); + } + + std::any visitDecl(SysYParser::DeclContext* ctx) override { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + if (ctx->constDecl()) { + ctx->constDecl()->accept(this); + } else if (ctx->varDecl()) { + ctx->varDecl()->accept(this); + } + return {}; + } + + // ==================== 变量声明 ==================== + std::any visitVarDecl(SysYParser::VarDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法变量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + bool is_global = (table_.currentScopeLevel() == 0); + for (auto* var_def : ctx->varDef()) { + if (var_def) { + CheckVarDef(var_def, base_type, is_global); + } + } + return {}; } - const std::string name = ctx->ID()->getText(); - auto* decl = table_.Lookup(name); - if (!decl) { - throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); - } - sema_.BindVarUse(ctx, decl); - return {}; - } - - SemanticContext TakeSemanticContext() { return std::move(sema_); } - private: - SymbolTable table_; - SemanticContext sema_; - bool seen_return_ = false; - size_t current_item_index_ = 0; - size_t total_items_ = 0; + void CheckVarDef(SysYParser::VarDefContext* ctx, + std::shared_ptr base_type, + bool is_global) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { // 检查重复定义 + throw std::runtime_error(FormatError("sema", "重复定义变量: " + name)); + } + // 确定类型(处理数组维度) + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + // 调试输出 + std::cout << "[DEBUG] CheckVarDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + if (is_array) { + // 处理数组维度 + for (auto* dim_exp : ctx->constExp()) { + int dim = EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + // 创建数组类型 + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成" << std::endl; + std::cout << "[DEBUG] type->IsArray(): " << type->IsArray() << std::endl; + std::cout << "[DEBUG] type->GetKind(): " << (int)type->GetKind() << std::endl; + // 验证数组类型 + if (type->IsArray()) { + auto* arr_type = dynamic_cast(type.get()); + if (arr_type) { + std::cout << "[DEBUG] ArrayType dimensions: "; + for (int d : arr_type->GetDimensions()) { + std::cout << d << " "; + } + std::cout << std::endl; + std::cout << "[DEBUG] Element type: " + << (arr_type->GetElementType()->IsInt32() ? "int" : + arr_type->GetElementType()->IsFloat() ? "float" : "unknown") + << std::endl; + } + } + } + bool has_init = (ctx->initVal() != nullptr); // 处理初始化 + if (is_global && has_init) { + CheckGlobalInitIsConst(ctx->initVal()); // 全局变量初始化必须是常量表达式 + } + // 创建符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = has_init; + sym.var_def_ctx = ctx; + if (is_array) { + // 存储维度信息,但 param_types 通常用于函数参数 + // 数组变量的维度信息已经包含在 type 中 + sym.param_types.clear(); // 确保不混淆 + } + table_.addSymbol(sym); // 添加到符号表 + std::cout << "[DEBUG] 符号添加完成: " << name + << " type_kind: " << (int)sym.type->GetKind() + << " is_array: " << sym.type->IsArray() + << std::endl; + } + + // ==================== 常量声明 ==================== + std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override { + if (!ctx || !ctx->bType()) { + throw std::runtime_error(FormatError("sema", "非法常量声明")); + } + std::shared_ptr base_type = GetTypeFromBType(ctx->bType()); + for (auto* const_def : ctx->constDef()) { + if (const_def) { + CheckConstDef(const_def, base_type); + } + } + return {}; + } + + void CheckConstDef(SysYParser::ConstDefContext* ctx, + std::shared_ptr base_type) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法常量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义常量: " + name)); + } + // 确定类型 + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + std::cout << "[DEBUG] CheckConstDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + if (is_array) { + for (auto* dim_exp : ctx->constExp()) { + int dim = EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; + } + // 求值初始化器 + std::vector init_values; + if (ctx->constInitVal()) { + init_values = EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); + std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; + } + // 检查初始化值数量 + size_t expected_count = 1; + if (is_array) { + expected_count = 1; + for (int d : dims) expected_count *= d; + std::cout << "[DEBUG] 期望元素数量: " << expected_count << std::endl; + } + if (init_values.size() > expected_count) { + throw std::runtime_error(FormatError("sema", "初始化值过多")); + } + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Constant; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + // 存储常量值(仅对非数组有效) + if (!is_array && !init_values.empty()) { + if (base_type->IsInt32() && init_values[0].is_int) { + sym.is_int_const = true; + sym.const_value.i32 = init_values[0].int_val; + std::cout << "[DEBUG] 存储整型常量值: " << init_values[0].int_val << std::endl; + } else if (base_type->IsFloat() && !init_values[0].is_int) { + sym.is_int_const = false; + sym.const_value.f32 = init_values[0].float_val; + std::cout << "[DEBUG] 存储浮点常量值: " << init_values[0].float_val << std::endl; + } + } else if (is_array) { + std::cout << "[DEBUG] 数组常量,不存储单个常量值" << std::endl; + } + table_.addSymbol(sym); + std::cout << "[DEBUG] 常量符号添加完成" << std::endl; + } + + // ==================== 语句语义检查 ==================== + + // 处理所有语句 - 通过运行时类型判断 + std::any visitStmt(SysYParser::StmtContext* ctx) override { + if (!ctx) return {}; + // 调试输出 + std::cout << "[DEBUG] visitStmt: "; + if (ctx->Return()) std::cout << "Return "; + if (ctx->If()) std::cout << "If "; + if (ctx->While()) std::cout << "While "; + if (ctx->Break()) std::cout << "Break "; + if (ctx->Continue()) std::cout << "Continue "; + if (ctx->lVal() && ctx->Assign()) std::cout << "Assign "; + if (ctx->exp() && ctx->Semi()) std::cout << "ExpStmt "; + if (ctx->block()) std::cout << "Block "; + std::cout << std::endl; + // 判断语句类型 - 注意:Return() 返回的是 TerminalNode* + if (ctx->Return() != nullptr) { + // return 语句 + std::cout << "[DEBUG] 检测到 return 语句" << std::endl; + return visitReturnStmtInternal(ctx); + } else if (ctx->lVal() != nullptr && ctx->Assign() != nullptr) { + // 赋值语句 + return visitAssignStmt(ctx); + } else if (ctx->exp() != nullptr && ctx->Semi() != nullptr) { + // 表达式语句(可能有表达式) + return visitExpStmt(ctx); + } else if (ctx->block() != nullptr) { + // 块语句 + return ctx->block()->accept(this); + } else if (ctx->If() != nullptr) { + // if 语句 + return visitIfStmtInternal(ctx); + } else if (ctx->While() != nullptr) { + // while 语句 + return visitWhileStmtInternal(ctx); + } else if (ctx->Break() != nullptr) { + // break 语句 + return visitBreakStmtInternal(ctx); + } else if (ctx->Continue() != nullptr) { + // continue 语句 + return visitContinueStmtInternal(ctx); + } + return {}; + } + + // return 语句内部实现 + std::any visitReturnStmtInternal(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG] visitReturnStmtInternal 被调用" << std::endl; + std::shared_ptr expected = current_func_return_type_; + if (!expected) { + throw std::runtime_error(FormatError("sema", "return 语句不在函数体内")); + } + if (ctx->exp() != nullptr) { + // 有返回值的 return + std::cout << "[DEBUG] 有返回值的 return" << std::endl; + ExprInfo ret_val = CheckExp(ctx->exp()); + if (expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "void 函数不能返回值")); + } else if (!IsTypeCompatible(ret_val.type, expected)) { + throw std::runtime_error(FormatError("sema", "返回值类型不匹配")); + } + // 标记需要隐式转换 + if (ret_val.type != expected) { + sema_.AddConversion(ctx->exp(), ret_val.type, expected); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } else { + // 无返回值的 return + std::cout << "[DEBUG] 无返回值的 return" << std::endl; + if (!expected->IsVoid()) { + throw std::runtime_error(FormatError("sema", "非 void 函数必须返回值")); + } + // 设置 has_return 标志 + current_func_has_return_ = true; + std::cout << "[DEBUG] 设置 current_func_has_return_ = true" << std::endl; + } + return {}; + } + + // 左值表达式(变量引用) + std::any visitLVal(SysYParser::LValContext* ctx) override { + std::cout << "[DEBUG] visitLVal: " << ctx->getText() << std::endl; + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法变量引用")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); + } + // ========== 关键修复:绑定变量使用到定义 ========== + if (sym) { + std::cerr << "[DEBUG] 找到符号: " << sym->name + << ", kind: " << (int)sym->kind + << ", var_def_ctx: " << sym->var_def_ctx << std::endl; + if (sym->var_def_ctx) { + std::cout << "[DEBUG] 绑定变量使用" << std::endl; + sema_.BindVarUse(ctx, sym->var_def_ctx); + } + } + else if (sym->kind == SymbolKind::Parameter) { + // 对于函数参数,需要特殊处理 + // 参数可能没有对应的 VarDefContext,需要创建一个 + // 或者通过其他方式标识 + std::cout << "[DEBUG] 参数变量: " << name << " (无法绑定到 VarDefContext)" << std::endl; + // 可以创建一个临时标识,但这里先不处理 + } + // ============================================ + // 检查数组访问 + bool is_array_access = !ctx->exp().empty(); + std::cout << "[DEBUG] name: " << name + << ", is_array_access: " << is_array_access + << ", subscript_count: " << ctx->exp().size() << std::endl; + ExprInfo result; + // 判断是否为数组类型或指针类型(数组参数) + bool is_array_or_ptr = false; + if (sym->type) { + is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); + std::cout << "[DEBUG] type_kind: " << (int)sym->type->GetKind() + << ", is_array: " << sym->type->IsArray() + << ", is_ptr: " << (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) << std::endl; + } + + if (is_array_or_ptr) { + // 获取维度信息 + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + if (sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dim_count = arr_type->GetDimensions().size(); + elem_type = arr_type->GetElementType(); + std::cout << "[DEBUG] 数组维度: " << dim_count << std::endl; + } + } else if (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { + dim_count = 1; + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + std::cout << "[DEBUG] 指针类型, dim_count: 1" << std::endl; + } + + if (is_array_access) { + std::cout << "[DEBUG] 有下标访问,期望维度: " << dim_count + << ", 实际下标数: " << ctx->exp().size() << std::endl; + if (ctx->exp().size() != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + result.type = elem_type; + result.is_lvalue = true; + result.is_const = false; + } else { + std::cout << "[DEBUG] 无下标访问" << std::endl; + if (sym->type->IsArray()) { + std::cout << "[DEBUG] 数组名作为地址,转换为指针" << std::endl; + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + result.type = ir::Type::GetPtrInt32Type(); + } else if (arr_type->GetElementType()->IsFloat()) { + result.type = ir::Type::GetPtrFloatType(); + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + } else { + result.type = ir::Type::GetPtrInt32Type(); + } + result.is_lvalue = false; + result.is_const = true; + } else { + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); + } + } + } else { + if (is_array_access) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + result.type = sym->type; + result.is_lvalue = true; + result.is_const = (sym->kind == SymbolKind::Constant); + if (result.is_const && sym->type && !sym->type->IsArray()) { + if (sym->is_int_const) { + result.is_const_int = true; + result.const_int_value = sym->const_value.i32; + } else { + result.const_float_value = sym->const_value.f32; + } + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // if 语句内部实现 + std::any visitIfStmtInternal(SysYParser::StmtContext* ctx) { + // 检查条件表达式 + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查,因为 CheckCond 已经确保类型正确 + } + // 处理 then 分支 + if (ctx->stmt().size() > 0) { + ctx->stmt()[0]->accept(this); + } + // 处理 else 分支 + if (ctx->stmt().size() > 1) { + ctx->stmt()[1]->accept(this); + } + return {}; + } + + // while 语句内部实现 + std::any visitWhileStmtInternal(SysYParser::StmtContext* ctx) { + if (ctx->cond()) { + ExprInfo cond = CheckCond(ctx->cond()); // CheckCond 已经处理了类型转换 + // 不需要额外检查 + } + loop_stack_.push_back({true, ctx}); + if (ctx->stmt().size() > 0) { + ctx->stmt()[0]->accept(this); + } + loop_stack_.pop_back(); + return {}; + } + + // break 语句内部实现 + std::any visitBreakStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "break 语句必须在循环体内使用")); + } + return {}; + } + + // continue 语句内部实现 + std::any visitContinueStmtInternal(SysYParser::StmtContext* ctx) { + if (loop_stack_.empty() || !loop_stack_.back().in_loop) { + throw std::runtime_error(FormatError("sema", "continue 语句必须在循环体内使用")); + } + return {}; + } + + // 赋值语句内部实现 + std::any visitAssignStmt(SysYParser::StmtContext* ctx) { + if (!ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("sema", "非法赋值语句")); + } + ExprInfo lvalue = CheckLValue(ctx->lVal()); // 检查左值 + if (lvalue.is_const) { + throw std::runtime_error(FormatError("sema", "不能给常量赋值")); + } + if (!lvalue.is_lvalue) { + throw std::runtime_error(FormatError("sema", "赋值左边必须是左值")); + } + ExprInfo rvalue = CheckExp(ctx->exp()); // 检查右值 + if (!IsTypeCompatible(rvalue.type, lvalue.type)) { + throw std::runtime_error(FormatError("sema", "赋值类型不匹配")); + } + if (rvalue.type != lvalue.type) { // 标记需要隐式转换 + sema_.AddConversion(ctx->exp(), rvalue.type, lvalue.type); + } + return {}; + } + + // 表达式语句内部实现 + std::any visitExpStmt(SysYParser::StmtContext* ctx) { + if (ctx->exp()) { + CheckExp(ctx->exp()); + } + return {}; + } + + // ==================== 表达式类型推导 ==================== + + // 主表达式 + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override { + std::cout << "[DEBUG] visitPrimaryExp: " << ctx->getText() << std::endl; + ExprInfo result; + if (ctx->lVal()) { // 左值表达式 + result = CheckLValue(ctx->lVal()); + result.is_lvalue = true; + } else if (ctx->HEX_FLOAT() || ctx->DEC_FLOAT()) { // 浮点字面量 + result.type = ir::Type::GetFloatType(); + result.is_const = true; + result.is_const_int = false; + std::string text; + if (ctx->HEX_FLOAT()) text = ctx->HEX_FLOAT()->getText(); + else text = ctx->DEC_FLOAT()->getText(); + result.const_float_value = std::stof(text); + } else if (ctx->HEX_INT() || ctx->OCTAL_INT() || ctx->DECIMAL_INT() || ctx->ZERO()) { // 整数字面量 + result.type = ir::Type::GetInt32Type(); + result.is_const = true; + result.is_const_int = true; + std::string text; + if (ctx->HEX_INT()) text = ctx->HEX_INT()->getText(); + else if (ctx->OCTAL_INT()) text = ctx->OCTAL_INT()->getText(); + else if (ctx->DECIMAL_INT()) text = ctx->DECIMAL_INT()->getText(); + else text = ctx->ZERO()->getText(); + result.const_int_value = std::stoi(text, nullptr, 0); + } else if (ctx->exp()) { // 括号表达式 + result = CheckExp(ctx->exp()); + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 一元表达式 + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override { + std::cout << "[DEBUG] visitUnaryExp: " << ctx->getText() << std::endl; + ExprInfo result; + if (ctx->primaryExp()) { + ctx->primaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->primaryExp()); + if (info) result = *info; + } else if (ctx->Ident() && ctx->L_PAREN()) { // 函数调用 + std::cout << "[DEBUG] 函数调用: " << ctx->Ident()->getText() << std::endl; + result = CheckFuncCall(ctx); + } else if (ctx->unaryOp()) { // 一元运算 + ctx->unaryExp()->accept(this); + auto* operand = sema_.GetExprType(ctx->unaryExp()); + if (!operand) { + throw std::runtime_error(FormatError("sema", "一元操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op = ctx->unaryOp()->getText(); + if (op == "!") { + // 逻辑非:要求操作数是 int 类型,或者可以转换为 int 的 float + if (operand->type->IsInt32()) { + // 已经是 int,没问题 + } else if (operand->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->unaryExp(), operand->type, ir::Type::GetInt32Type()); + // 更新操作数类型为 int + operand->type = ir::Type::GetInt32Type(); + operand->is_const_int = true; + if (operand->is_const && !operand->is_const_int) { + // 如果原来是 float 常量,转换为 int 常量 + operand->const_int_value = (int)operand->const_float_value; + operand->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑非操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + result.is_const = operand->is_const; + if (operand->is_const && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = (operand->const_int_value == 0) ? 1 : 0; + } + } else { + // 正负号 + if (!operand->type->IsInt32() && !operand->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "正负号操作数必须是算术类型")); + } + result.type = operand->type; + result.is_lvalue = false; + result.is_const = operand->is_const; + if (op == "-" && operand->is_const) { + if (operand->type->IsInt32() && operand->is_const_int) { + result.is_const_int = true; + result.const_int_value = -operand->const_int_value; + } else if (operand->type->IsFloat()) { + result.const_float_value = -operand->const_float_value; + } + } + } + } + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 乘除模表达式 + std::any visitMulExp(SysYParser::MulExpContext* ctx) override { + ExprInfo result; + if (ctx->mulExp()) { + ctx->mulExp()->accept(this); + ctx->unaryExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->mulExp()); + auto* right_info = sema_.GetExprType(ctx->unaryExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "乘除模操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->MulOp()) { + op = "*"; + } else if (ctx->DivOp()) { + op = "/"; + } else if (ctx->QuoOp()) { + op = "%"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->unaryExp()->accept(this); + auto* info = sema_.GetExprType(ctx->unaryExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 加减表达式 + std::any visitAddExp(SysYParser::AddExpContext* ctx) override { + ExprInfo result; + if (ctx->addExp()) { + ctx->addExp()->accept(this); + ctx->mulExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->addExp()); + auto* right_info = sema_.GetExprType(ctx->mulExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "加减操作数类型推导失败")); + result.type = ir::Type::GetInt32Type(); + } else { + std::string op; + if (ctx->AddOp()) { + op = "+"; + } else if (ctx->SubOp()) { + op = "-"; + } + result = CheckBinaryOp(left_info, right_info, op, ctx); + } + } else { + ctx->mulExp()->accept(this); + auto* info = sema_.GetExprType(ctx->mulExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 关系表达式 + std::any visitRelExp(SysYParser::RelExpContext* ctx) override { + ExprInfo result; + if (ctx->relExp()) { + ctx->relExp()->accept(this); + ctx->addExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->relExp()); + auto* right_info = sema_.GetExprType(ctx->addExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "关系操作数类型推导失败")); + } else { + if (!left_info->type->IsInt32() && !left_info->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "关系运算操作数必须是算术类型")); + } + std::string op; + if (ctx->LOp()) { + op = "<"; + } else if (ctx->GOp()) { + op = ">"; + } else if (ctx->LeOp()) { + op = "<="; + } else if (ctx->GeOp()) { + op = ">="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "<") result.const_int_value = (l < r) ? 1 : 0; + else if (op == ">") result.const_int_value = (l > r) ? 1 : 0; + else if (op == "<=") result.const_int_value = (l <= r) ? 1 : 0; + else if (op == ">=") result.const_int_value = (l >= r) ? 1 : 0; + } + } + } else { + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 相等性表达式 + std::any visitEqExp(SysYParser::EqExpContext* ctx) override { + ExprInfo result; + if (ctx->eqExp()) { + ctx->eqExp()->accept(this); + ctx->relExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->eqExp()); + auto* right_info = sema_.GetExprType(ctx->relExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "相等性操作数类型推导失败")); + } else { + std::string op; + if (ctx->EqOp()) { + op = "=="; + } else if (ctx->NeOp()) { + op = "!="; + } + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const) { + result.is_const = true; + result.is_const_int = true; + float l = GetFloatValue(*left_info); + float r = GetFloatValue(*right_info); + if (op == "==") result.const_int_value = (l == r) ? 1 : 0; + else if (op == "!=") result.const_int_value = (l != r) ? 1 : 0; + } + } + } else { + ctx->relExp()->accept(this); + auto* info = sema_.GetExprType(ctx->relExp()); + if (info) { + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑与表达式 + std::any visitLAndExp(SysYParser::LAndExpContext* ctx) override { + ExprInfo result; + if (ctx->lAndExp()) { + ctx->lAndExp()->accept(this); + ctx->eqExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lAndExp()); + auto* right_info = sema_.GetExprType(ctx->eqExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数类型推导失败")); + } else { + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与左操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->eqExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑与右操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value && right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->eqExp()->accept(this); + auto* info = sema_.GetExprType(ctx->eqExp()); + if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->eqExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑与操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 逻辑或表达式 + std::any visitLOrExp(SysYParser::LOrExpContext* ctx) override { + ExprInfo result; + if (ctx->lOrExp()) { + ctx->lOrExp()->accept(this); + ctx->lAndExp()->accept(this); + auto* left_info = sema_.GetExprType(ctx->lOrExp()); + auto* right_info = sema_.GetExprType(ctx->lAndExp()); + if (!left_info || !right_info) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数类型推导失败")); + } else { + // 处理左操作数 + if (left_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (left_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lOrExp(), left_info->type, ir::Type::GetInt32Type()); + left_info->type = ir::Type::GetInt32Type(); + if (left_info->is_const && !left_info->is_const_int) { + left_info->const_int_value = (int)left_info->const_float_value; + left_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或左操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + // 处理右操作数 + if (right_info->type->IsInt32()) { + // 已经是 int,没问题 + } else if (right_info->type->IsFloat()) { + // float 可以隐式转换为 int + sema_.AddConversion(ctx->lAndExp(), right_info->type, ir::Type::GetInt32Type()); + right_info->type = ir::Type::GetInt32Type(); + if (right_info->is_const && !right_info->is_const_int) { + right_info->const_int_value = (int)right_info->const_float_value; + right_info->is_const_int = true; + } + } else { + throw std::runtime_error(FormatError("sema", "逻辑或右操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + + result.type = ir::Type::GetInt32Type(); + result.is_lvalue = false; + if (left_info->is_const && right_info->is_const && + left_info->is_const_int && right_info->is_const_int) { + result.is_const = true; + result.is_const_int = true; + result.const_int_value = + (left_info->const_int_value || right_info->const_int_value) ? 1 : 0; + } + } + } else { + ctx->lAndExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lAndExp()); + if (info) { + // 对于单个操作数,也需要确保类型是 int(用于条件表达式) + if (info->type->IsFloat()) { + sema_.AddConversion(ctx->lAndExp(), info->type, ir::Type::GetInt32Type()); + info->type = ir::Type::GetInt32Type(); + if (info->is_const && !info->is_const_int) { + info->const_int_value = (int)info->const_float_value; + info->is_const_int = true; + } + } else if (!info->type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "逻辑或操作数必须是 int 类型或可以转换为 int 的 float 类型")); + } + sema_.SetExprType(ctx, *info); + } + return {}; + } + sema_.SetExprType(ctx, result); + return {}; + } + + // 获取语义上下文 + SemanticContext TakeSemanticContext() { return std::move(sema_); } + +private: + SymbolTable table_; + SemanticContext sema_; + struct LoopContext { + bool in_loop; + antlr4::ParserRuleContext* loop_node; + }; + std::vector loop_stack_; + std::shared_ptr current_func_return_type_ = nullptr; + bool current_func_has_return_ = false; + + // ==================== 辅助函数 ==================== + + ExprInfo CheckExp(SysYParser::ExpContext* ctx) { + if (!ctx || !ctx->addExp()) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + std::cout << "[DEBUG] CheckExp: " << ctx->getText() << std::endl; + ctx->addExp()->accept(this); + auto* info = sema_.GetExprType(ctx->addExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + ExprInfo result = *info; + sema_.SetExprType(ctx, result); + return result; + } + + // 专门用于检查 AddExp 的辅助函数(用于常量表达式) + ExprInfo CheckAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("sema", "无效表达式")); + } + ctx->accept(this); + auto* info = sema_.GetExprType(ctx); + if (!info) { + throw std::runtime_error(FormatError("sema", "表达式类型推导失败")); + } + return *info; + } + + ExprInfo CheckCond(SysYParser::CondContext* ctx) { + if (!ctx || !ctx->lOrExp()) { + throw std::runtime_error(FormatError("sema", "无效条件表达式")); + } + ctx->lOrExp()->accept(this); + auto* info = sema_.GetExprType(ctx->lOrExp()); + if (!info) { + throw std::runtime_error(FormatError("sema", "条件表达式类型推导失败")); + } + ExprInfo result = *info; + // 条件表达式的结果必须是 int,如果是 float 则需要转换 + // 注意:lOrExp 已经处理了类型转换,这里只是再检查一次 + if (!result.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "条件表达式必须是 int 类型")); + } + return result; + } + + ExprInfo CheckLValue(SysYParser::LValContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法左值")); + } + std::string name = ctx->Ident()->getText(); + auto* sym = table_.lookup(name); + if (!sym) { + throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); + } + // ========== 添加绑定 ========== + if (sym->var_def_ctx) { + std::cout << "[DEBUG] CheckLValue 绑定变量: " << name << std::endl; + sema_.BindVarUse(ctx, sym->var_def_ctx); + } + // ============================ + + bool is_array_access = !ctx->exp().empty(); + bool is_const = (sym->kind == SymbolKind::Constant); + bool is_array_or_ptr = false; + + if (sym->type) { + is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); + } + + size_t dim_count = 0; + std::shared_ptr elem_type = sym->type; + + if (sym->type && sym->type->IsArray()) { + if (auto* arr_type = dynamic_cast(sym->type.get())) { + dim_count = arr_type->GetDimensions().size(); + elem_type = arr_type->GetElementType(); + } + } else if (sym->type && (sym->type->IsPtrInt32() || sym->type->IsPtrFloat())) { + dim_count = 1; + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } + } + + size_t subscript_count = ctx->exp().size(); + + if (is_array_or_ptr) { + if (subscript_count > 0) { + // 有下标访问 + if (subscript_count != dim_count) { + throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + } + for (auto* idx_exp : ctx->exp()) { + ExprInfo idx = CheckExp(idx_exp); + if (!idx.type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); + } + } + return {elem_type, true, false}; + } else { + // 没有下标访问 + if (sym->type->IsArray()) { + // 数组名作为地址(右值) + if (auto* arr_type = dynamic_cast(sym->type.get())) { + if (arr_type->GetElementType()->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, true}; + } else if (arr_type->GetElementType()->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, true}; + } + } + return {ir::Type::GetPtrInt32Type(), false, true}; + } else { + // 指针类型(如函数参数)可以不带下标使用 + return {sym->type, true, is_const}; + } + } + } else { + if (subscript_count > 0) { + throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); + } + return {sym->type, true, is_const}; + } + } + + ExprInfo CheckFuncCall(SysYParser::UnaryExpContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法函数调用")); + } + std::string func_name = ctx->Ident()->getText(); + std::cout << "[DEBUG] CheckFuncCall: " << func_name << std::endl; + auto* func_sym = table_.lookup(func_name); + if (!func_sym || func_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "未定义的函数: " + func_name)); + } + std::vector args; + if (ctx->funcRParams()) { + std::cout << "[DEBUG] 处理函数调用参数:" << std::endl; + for (auto* exp : ctx->funcRParams()->exp()) { + if (exp) { + args.push_back(CheckExp(exp)); + } + } + } + if (args.size() != func_sym->param_types.size()) { + throw std::runtime_error(FormatError("sema", "参数个数不匹配")); + } + for (size_t i = 0; i < std::min(args.size(), func_sym->param_types.size()); ++i) { + std::cout << "[DEBUG] 检查参数 " << i << ": 实参类型 " << (int)args[i].type->GetKind() + << " 形参类型 " << (int)func_sym->param_types[i]->GetKind() << std::endl; + if (!IsTypeCompatible(args[i].type, func_sym->param_types[i])) { + throw std::runtime_error(FormatError("sema", "参数类型不匹配")); + } + if (args[i].type != func_sym->param_types[i] && ctx->funcRParams() && + i < ctx->funcRParams()->exp().size()) { + sema_.AddConversion(ctx->funcRParams()->exp()[i], + args[i].type, func_sym->param_types[i]); + } + } + std::shared_ptr return_type; + if (func_sym->type && func_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(func_sym->type.get()); + if (func_type) { + return_type = func_type->GetReturnType(); + } + } + if (!return_type) { + return_type = ir::Type::GetInt32Type(); + } + ExprInfo result; + result.type = return_type; + result.is_lvalue = false; + result.is_const = false; + return result; + } + + ExprInfo CheckBinaryOp(const ExprInfo* left, const ExprInfo* right, + const std::string& op, antlr4::ParserRuleContext* ctx) { + ExprInfo result; + if (!left->type->IsInt32() && !left->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "左操作数必须是算术类型")); + } + if (!right->type->IsInt32() && !right->type->IsFloat()) { + throw std::runtime_error(FormatError("sema", "右操作数必须是算术类型")); + } + if (op == "%" && (!left->type->IsInt32() || !right->type->IsInt32())) { + throw std::runtime_error(FormatError("sema", "取模运算要求操作数为 int 类型")); + } + if (left->type->IsFloat() || right->type->IsFloat()) { + result.type = ir::Type::GetFloatType(); + } else { + result.type = ir::Type::GetInt32Type(); + } + result.is_lvalue = false; + if (left->is_const && right->is_const) { + result.is_const = true; + float l = GetFloatValue(*left); + float r = GetFloatValue(*right); + if (result.type->IsInt32()) { + result.is_const_int = true; + int li = (int)l, ri = (int)r; + if (op == "*") result.const_int_value = li * ri; + else if (op == "/") result.const_int_value = li / ri; + else if (op == "%") result.const_int_value = li % ri; + else if (op == "+") result.const_int_value = li + ri; + else if (op == "-") result.const_int_value = li - ri; + } else { + if (op == "*") result.const_float_value = l * r; + else if (op == "/") result.const_float_value = l / r; + else if (op == "+") result.const_float_value = l + r; + else if (op == "-") result.const_float_value = l - r; + } + } + return result; + } + + float GetFloatValue(const ExprInfo& info) { + if (info.type->IsInt32() && info.is_const_int) { + return (float)info.const_int_value; + } else { + return info.const_float_value; + } + } + + bool IsTypeCompatible(std::shared_ptr src, std::shared_ptr dst) { + if (src == dst) return true; + if (src->IsInt32() && dst->IsFloat()) return true; + if (src->IsFloat() && dst->IsInt32()) return true; + return false; + } + + void CollectFunctionDeclaration(SysYParser::FuncDefContext* ctx) { + if (!ctx || !ctx->Ident()) return; + std::string name = ctx->Ident()->getText(); + if (table_.lookup(name)) return; + std::shared_ptr ret_type; + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + ret_type = ir::Type::GetFloatType(); + } + } + if (!ret_type) ret_type = ir::Type::GetInt32Type(); + std::vector> param_types; + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param) continue; + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + if (!param->L_BRACK().empty()) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_type); + } + } + + // 创建函数类型 + std::shared_ptr func_type = ir::Type::GetFunctionType(ret_type, param_types); + + // 创建函数符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Function; + sym.type = func_type; + sym.param_types = param_types; + sym.scope_level = 0; + sym.is_initialized = true; + sym.func_def_ctx = ctx; + + table_.addSymbol(sym); + } + + void CollectFunctionParams(SysYParser::FuncFParamsContext* ctx) { + if (!ctx) return; + for (auto* param : ctx->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义参数: " + name)); + } + std::shared_ptr param_type; + if (param->bType()) { + if (param->bType()->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_type = ir::Type::GetFloatType(); + } + } + if (!param_type) param_type = ir::Type::GetInt32Type(); + bool is_array = !param->L_BRACK().empty(); + if (is_array) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + std::cout << "[DEBUG] 数组参数: " << name << " 类型转换为指针" << std::endl; + } + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Parameter; + sym.type = param_type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + table_.addSymbol(sym); + std::cout << "[DEBUG] 添加参数: " << name << " type_kind: " << (int)param_type->GetKind() << std::endl; + } + } + + void CheckGlobalInitIsConst(SysYParser::InitValContext* ctx) { + if (!ctx) return; + if (ctx->exp()) { + ExprInfo info = CheckExp(ctx->exp()); + if (!info.is_const) { + throw std::runtime_error(FormatError("sema", "全局变量初始化必须是常量表达式")); + } + } else { + for (auto* init : ctx->initVal()) { + CheckGlobalInitIsConst(init); + } + } + } + + int EvaluateConstExp(SysYParser::ConstExpContext* ctx) { + if (!ctx || !ctx->addExp()) return 0; + ExprInfo info = CheckAddExp(ctx->addExp()); + if (info.is_const && info.is_const_int) { + return info.const_int_value; + } + throw std::runtime_error(FormatError("sema", "常量表达式求值失败")); + return 0; + } + + struct ConstValue { + bool is_int; + int int_val; + float float_val; + }; + + std::vector EvaluateConstInitVal(SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) { + std::vector result; + if (!ctx) return result; + if (ctx->constExp()) { + ExprInfo info = CheckAddExp(ctx->constExp()->addExp()); + ConstValue val; + if (info.type->IsInt32() && info.is_const_int) { + val.is_int = true; + val.int_val = info.const_int_value; + if (base_type->IsFloat()) { + val.is_int = false; + val.float_val = (float)info.const_int_value; + } + } else if (info.type->IsFloat() && info.is_const) { + val.is_int = false; + val.float_val = info.const_float_value; + if (base_type->IsInt32()) { + val.is_int = true; + val.int_val = (int)info.const_float_value; + } + } else { + val.is_int = base_type->IsInt32(); + val.int_val = 0; + val.float_val = 0.0f; + } + result.push_back(val); + } else { + for (auto* init : ctx->constInitVal()) { + std::vector sub_vals = EvaluateConstInitVal(init, dims, base_type); + result.insert(result.end(), sub_vals.begin(), sub_vals.end()); + } + } + return result; + } + + void CheckMainFunction() { + auto* main_sym = table_.lookup("main"); + if (!main_sym || main_sym->kind != SymbolKind::Function) { + throw std::runtime_error(FormatError("sema", "缺少 main 函数")); + } + std::shared_ptr ret_type; + if (main_sym->type && main_sym->type->IsFunction()) { + auto* func_type = dynamic_cast(main_sym->type.get()); + if (func_type) { + ret_type = func_type->GetReturnType(); + } + } + if (!ret_type || !ret_type->IsInt32()) { + throw std::runtime_error(FormatError("sema", "main 函数必须返回 int")); + } + if (!main_sym->param_types.empty()) { + throw std::runtime_error(FormatError("sema", "main 函数不能有参数")); + } + } }; } // namespace SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit) { - SemaVisitor visitor; - comp_unit.accept(&visitor); - return visitor.TakeSemanticContext(); + SemaVisitor visitor; + comp_unit.accept(&visitor); + return visitor.TakeSemanticContext(); } diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index ffeea89..0f37e73 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -1,17 +1,338 @@ -// 维护局部变量声明的注册与查找。 - #include "sem/SymbolTable.h" +#include // 用于访问父节点 + +// ---------- 构造函数 ---------- +SymbolTable::SymbolTable() { + scopes_.emplace_back(); // 初始化全局作用域 + registerBuiltinFunctions(); // 注册内置库函数 +} + +// ---------- 作用域管理 ---------- +void SymbolTable::enterScope() { + scopes_.emplace_back(); +} + +void SymbolTable::exitScope() { + if (scopes_.size() > 1) { + scopes_.pop_back(); + } + // 不能退出全局作用域 +} + +// ---------- 符号添加与查找 ---------- +bool SymbolTable::addSymbol(const Symbol& sym) { + auto& current_scope = scopes_.back(); + if (current_scope.find(sym.name) != current_scope.end()) { + return false; // 重复定义 + } + current_scope[sym.name] = sym; + return true; +} + +Symbol* SymbolTable::lookup(const std::string& name) { + // 从当前作用域向外层查找 + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto& scope = *it; + auto found = scope.find(name); + if (found != scope.end()) { + return &found->second; + } + } + return nullptr; +} -void SymbolTable::Add(const std::string& name, - SysYParser::VarDefContext* decl) { - table_[name] = decl; +Symbol* SymbolTable::lookupCurrent(const std::string& name) { + auto& current_scope = scopes_.back(); + auto it = current_scope.find(name); + if (it != current_scope.end()) { + return &it->second; + } + return nullptr; +} + +// ---------- 兼容原接口 ---------- +void SymbolTable::Add(const std::string& name, SysYParser::VarDefContext* decl) { + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Variable; + sym.type = getTypeFromVarDef(decl); + sym.var_def_ctx = decl; + sym.scope_level = currentScopeLevel(); + addSymbol(sym); } bool SymbolTable::Contains(const std::string& name) const { - return table_.find(name) != table_.end(); + // const 方法不能修改 scopes_,我们模拟查找 + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + if (it->find(name) != it->end()) { + return true; + } + } + return false; } SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { - auto it = table_.find(name); - return it == table_.end() ? nullptr : it->second; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto found = it->find(name); + if (found != it->end()) { + // 只返回变量定义的上下文(函数等其他符号返回 nullptr) + if (found->second.kind == SymbolKind::Variable) { + return found->second.var_def_ctx; + } + return nullptr; + } + } + return nullptr; +} + +// ---------- 辅助函数:从 VarDefContext 获取外层 VarDeclContext ---------- +static SysYParser::VarDeclContext* getOuterVarDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto varDecl = dynamic_cast(parent)) { + return varDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// ---------- 辅助函数:从 VarDefContext 获取外层 ConstDeclContext(常量定义)---------- +static SysYParser::ConstDeclContext* getOuterConstDecl(SysYParser::VarDefContext* varDef) { + auto parent = varDef->parent; + while (parent) { + if (auto constDecl = dynamic_cast(parent)) { + return constDecl; + } + parent = parent->parent; + } + return nullptr; +} + +// 常量表达式求值(占位,需实现真正的常量折叠) +static int evaluateConstExp(SysYParser::ConstExpContext* ctx) { + // TODO: 实现常量折叠,目前返回0 + return 0; } + +// 从 VarDefContext 构造类型 +std::shared_ptr SymbolTable::getTypeFromVarDef(SysYParser::VarDefContext* ctx) { + // 1. 获取基本类型(int/float) + std::shared_ptr base_type = nullptr; + auto varDecl = getOuterVarDecl(ctx); + if (varDecl) { + auto bType = varDecl->bType(); + if (bType->Int()) { + base_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + base_type = ir::Type::GetFloatType(); + } + } else { + auto constDecl = getOuterConstDecl(ctx); + if (constDecl) { + auto bType = constDecl->bType(); + if (bType->Int()) { + base_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + base_type = ir::Type::GetFloatType(); + } + } + } + + if (!base_type) { + base_type = ir::Type::GetInt32Type(); // 默认 int + } + + // 2. 解析数组维度(从 varDef 的 constExp 列表获取) + std::vector dims; + for (auto constExp : ctx->constExp()) { + int dimVal = evaluateConstExp(constExp); + dims.push_back(dimVal); + } + + if (!dims.empty()) { + return ir::Type::GetArrayType(base_type, dims); + } + return base_type; +} + +// 从 FuncDefContext 构造函数类型 +std::shared_ptr SymbolTable::getTypeFromFuncDef(SysYParser::FuncDefContext* ctx) { + // 1. 返回类型 + std::shared_ptr ret_type; + auto funcType = ctx->funcType(); + if (funcType->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (funcType->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (funcType->Float()) { + ret_type = ir::Type::GetFloatType(); + } else { + ret_type = ir::Type::GetInt32Type(); // fallback + } + + // 2. 参数类型 + std::vector> param_types; + auto fParams = ctx->funcFParams(); + if (fParams) { + for (auto param : fParams->funcFParam()) { + std::shared_ptr param_type; + auto bType = param->bType(); + if (bType->Int()) { + param_type = ir::Type::GetInt32Type(); + } else if (bType->Float()) { + param_type = ir::Type::GetFloatType(); + } else { + param_type = ir::Type::GetInt32Type(); + } + + // 处理数组参数:如果存在 [ ] 或 [ exp ],退化为指针 + if (param->L_BRACK().size() > 0) { + if (param_type->IsInt32()) { + param_type = ir::Type::GetPtrInt32Type(); + } else if (param_type->IsFloat()) { + param_type = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_type); + } + } + + return ir::Type::GetFunctionType(ret_type, param_types); +} + +// ----- 注册内置库函数----- +void SymbolTable::registerBuiltinFunctions() { + // 确保当前处于全局作用域(scopes_ 只有一层) + // 1. getint: int getint() + Symbol getint; + getint.name = "getint"; + getint.kind = SymbolKind::Function; + getint.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); // 无参数 + getint.param_types = {}; + getint.scope_level = 0; + getint.is_builtin = true; + addSymbol(getint); + + // 2. getfloat: float getfloat() + Symbol getfloat; + getfloat.name = "getfloat"; + getfloat.kind = SymbolKind::Function; + getfloat.type = ir::Type::GetFunctionType(ir::Type::GetFloatType(), {}); + getfloat.param_types = {}; + getfloat.scope_level = 0; + getfloat.is_builtin = true; + addSymbol(getfloat); + + // 3. getch: int getch() + Symbol getch; + getch.name = "getch"; + getch.kind = SymbolKind::Function; + getch.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {}); + getch.param_types = {}; + getch.scope_level = 0; + getch.is_builtin = true; + addSymbol(getch); + + // 4. putint: void putint(int) + std::vector> putint_params = { ir::Type::GetInt32Type() }; + Symbol putint; + putint.name = "putint"; + putint.kind = SymbolKind::Function; + putint.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putint_params); + putint.param_types = putint_params; + putint.scope_level = 0; + putint.is_builtin = true; + addSymbol(putint); + + // 5. putfloat: void putfloat(float) + std::vector> putfloat_params = { ir::Type::GetFloatType() }; + Symbol putfloat; + putfloat.name = "putfloat"; + putfloat.kind = SymbolKind::Function; + putfloat.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfloat_params); + putfloat.param_types = putfloat_params; + putfloat.scope_level = 0; + putfloat.is_builtin = true; + addSymbol(putfloat); + + // 6. putch: void putch(int) + std::vector> putch_params = { ir::Type::GetInt32Type() }; + Symbol putch; + putch.name = "putch"; + putch.kind = SymbolKind::Function; + putch.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putch_params); + putch.param_types = putch_params; + putch.scope_level = 0; + putch.is_builtin = true; + addSymbol(putch); + + // 7. getarray: int getarray(int a[]) + // 参数类型: int a[] 退化为 int* 即 PtrInt32 + std::vector> getarray_params = { ir::Type::GetPtrInt32Type() }; + Symbol getarray; + getarray.name = "getarray"; + getarray.kind = SymbolKind::Function; + getarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getarray_params); + getarray.param_types = getarray_params; + getarray.scope_level = 0; + getarray.is_builtin = true; + addSymbol(getarray); + + // 8. putarray: void putarray(int n, int a[]) + // 参数: int n, int a[] -> 实际类型: int, int* + std::vector> putarray_params = { ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type() }; + Symbol putarray; + putarray.name = "putarray"; + putarray.kind = SymbolKind::Function; + putarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putarray_params); + putarray.param_types = putarray_params; + putarray.scope_level = 0; + putarray.is_builtin = true; + addSymbol(putarray); + + // starttime: void starttime() + Symbol starttime; + starttime.name = "starttime"; + starttime.kind = SymbolKind::Function; + starttime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + starttime.param_types = {}; + starttime.scope_level = 0; + starttime.is_builtin = true; + addSymbol(starttime); + + // stoptime: void stoptime() + Symbol stoptime; + stoptime.name = "stoptime"; + stoptime.kind = SymbolKind::Function; + stoptime.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), {}); // 无参数,返回 void + stoptime.param_types = {}; + stoptime.scope_level = 0; + stoptime.is_builtin = true; + addSymbol(stoptime); + + // getfarray: int getfarray(float arr[]) + std::vector> getfarray_params = { ir::Type::GetPtrFloatType() }; + Symbol getfarray; + getfarray.name = "getfarray"; + getfarray.kind = SymbolKind::Function; + getfarray.type = ir::Type::GetFunctionType(ir::Type::GetInt32Type(), getfarray_params); + getfarray.param_types = getfarray_params; + getfarray.scope_level = 0; + getfarray.is_builtin = true; + addSymbol(getfarray); + + // putfarray: void putfarray(int len, float arr[]) + std::vector> putfarray_params = { + ir::Type::GetInt32Type(), + ir::Type::GetPtrFloatType() + }; + Symbol putfarray; + putfarray.name = "putfarray"; + putfarray.kind = SymbolKind::Function; + putfarray.type = ir::Type::GetFunctionType(ir::Type::GetVoidType(), putfarray_params); + putfarray.param_types = putfarray_params; + putfarray.scope_level = 0; + putfarray.is_builtin = true; + addSymbol(putfarray); +} \ No newline at end of file From e0c8898dae3bddeda04f125150011a3ef37e23db Mon Sep 17 00:00:00 2001 From: ftt <> Date: Thu, 26 Mar 2026 08:23:21 +0800 Subject: [PATCH 19/39] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E4=B8=8B=E6=A0=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 4 + src/sem/Sema.cpp | 222 +++++++++++++++++++------------------- 2 files changed, 113 insertions(+), 113 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index c546960..a541739 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -27,6 +27,10 @@ struct Symbol { bool is_initialized = false; // 是否已初始化 bool is_builtin = false; // 是否为库函数 + // 对于数组参数,存储维度信息 + std::vector array_dims; // 数组各维长度(参数数组的第一维可能为0表示省略) + bool is_array_param = false; // 是否是数组参数 + // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) std::vector> param_types; diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 861caf3..feb9e1d 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -398,104 +398,7 @@ public: // 左值表达式(变量引用) std::any visitLVal(SysYParser::LValContext* ctx) override { - std::cout << "[DEBUG] visitLVal: " << ctx->getText() << std::endl; - if (!ctx || !ctx->Ident()) { - throw std::runtime_error(FormatError("sema", "非法变量引用")); - } - std::string name = ctx->Ident()->getText(); - auto* sym = table_.lookup(name); - if (!sym) { - throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); - } - // 检查数组访问 - bool is_array_access = !ctx->exp().empty(); - std::cout << "[DEBUG] name: " << name - << ", is_array_access: " << is_array_access - << ", subscript_count: " << ctx->exp().size() << std::endl; - ExprInfo result; - // 判断是否为数组类型或指针类型(数组参数) - bool is_array_or_ptr = false; - if (sym->type) { - is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); - std::cout << "[DEBUG] type_kind: " << (int)sym->type->GetKind() - << ", is_array: " << sym->type->IsArray() - << ", is_ptr: " << (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) << std::endl; - } - - if (is_array_or_ptr) { - // 获取维度信息 - size_t dim_count = 0; - std::shared_ptr elem_type = sym->type; - if (sym->type->IsArray()) { - if (auto* arr_type = dynamic_cast(sym->type.get())) { - dim_count = arr_type->GetDimensions().size(); - elem_type = arr_type->GetElementType(); - std::cout << "[DEBUG] 数组维度: " << dim_count << std::endl; - } - } else if (sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { - dim_count = 1; - if (sym->type->IsPtrInt32()) { - elem_type = ir::Type::GetInt32Type(); - } else if (sym->type->IsPtrFloat()) { - elem_type = ir::Type::GetFloatType(); - } - std::cout << "[DEBUG] 指针类型, dim_count: 1" << std::endl; - } - - if (is_array_access) { - std::cout << "[DEBUG] 有下标访问,期望维度: " << dim_count - << ", 实际下标数: " << ctx->exp().size() << std::endl; - if (ctx->exp().size() != dim_count) { - throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); - } - for (auto* idx_exp : ctx->exp()) { - ExprInfo idx = CheckExp(idx_exp); - if (!idx.type->IsInt32()) { - throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); - } - } - result.type = elem_type; - result.is_lvalue = true; - result.is_const = false; - } else { - std::cout << "[DEBUG] 无下标访问" << std::endl; - if (sym->type->IsArray()) { - std::cout << "[DEBUG] 数组名作为地址,转换为指针" << std::endl; - if (auto* arr_type = dynamic_cast(sym->type.get())) { - if (arr_type->GetElementType()->IsInt32()) { - result.type = ir::Type::GetPtrInt32Type(); - } else if (arr_type->GetElementType()->IsFloat()) { - result.type = ir::Type::GetPtrFloatType(); - } else { - result.type = ir::Type::GetPtrInt32Type(); - } - } else { - result.type = ir::Type::GetPtrInt32Type(); - } - result.is_lvalue = false; - result.is_const = true; - } else { - result.type = sym->type; - result.is_lvalue = true; - result.is_const = (sym->kind == SymbolKind::Constant); - } - } - } else { - if (is_array_access) { - throw std::runtime_error(FormatError("sema", "非数组变量不能使用下标: " + name)); - } - result.type = sym->type; - result.is_lvalue = true; - result.is_const = (sym->kind == SymbolKind::Constant); - if (result.is_const && sym->type && !sym->type->IsArray()) { - if (sym->is_int_const) { - result.is_const_int = true; - result.const_int_value = sym->const_value.i32; - } else { - result.const_float_value = sym->const_value.f32; - } - } - } + ExprInfo result = CheckLValue(ctx); sema_.SetExprType(ctx, result); return {}; } @@ -1056,21 +959,30 @@ private: bool is_array_access = !ctx->exp().empty(); bool is_const = (sym->kind == SymbolKind::Constant); - bool is_array_or_ptr = false; - - if (sym->type) { - is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); - } size_t dim_count = 0; std::shared_ptr elem_type = sym->type; + std::vector dims; + // 获取维度信息 if (sym->type && sym->type->IsArray()) { if (auto* arr_type = dynamic_cast(sym->type.get())) { - dim_count = arr_type->GetDimensions().size(); + dims = arr_type->GetDimensions(); + dim_count = dims.size(); elem_type = arr_type->GetElementType(); } + } else if (sym->is_array_param) { + // 数组参数,使用保存的维度信息 + dims = sym->array_dims; + dim_count = dims.size(); + // 元素类型是基本类型 + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); + } } else if (sym->type && (sym->type->IsPtrInt32() || sym->type->IsPtrFloat())) { + // 普通指针,只能有一个下标 dim_count = 1; if (sym->type->IsPtrInt32()) { elem_type = ir::Type::GetInt32Type(); @@ -1081,23 +993,53 @@ private: size_t subscript_count = ctx->exp().size(); - if (is_array_or_ptr) { + if (dim_count > 0 || sym->is_array_param || sym->type->IsArray() || + sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { if (subscript_count > 0) { // 有下标访问 - if (subscript_count != dim_count) { - throw std::runtime_error(FormatError("sema", "数组下标个数不匹配")); + if (subscript_count > dim_count && dim_count > 0) { + throw std::runtime_error(FormatError("sema", "数组下标个数过多")); } + // 检查每个下标表达式 for (auto* idx_exp : ctx->exp()) { ExprInfo idx = CheckExp(idx_exp); if (!idx.type->IsInt32()) { throw std::runtime_error(FormatError("sema", "数组下标必须是 int 类型")); } } - return {elem_type, true, false}; + + if (subscript_count == dim_count) { + // 完全索引,返回元素类型 + return {elem_type, true, false}; + } else { + // 部分索引,返回子数组的指针类型 + // 计算剩余维度的元素类型 + std::shared_ptr remaining_type = sym->type; + if (sym->is_array_param) { + // 对于数组参数,我们需要返回指向剩余维度的指针 + if (elem_type->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, false}; + } else if (elem_type->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, false}; + } + } else { + for (size_t i = 0; i < subscript_count && remaining_type->IsArray(); i++) { + if (auto* arr_type = dynamic_cast(remaining_type.get())) { + remaining_type = arr_type->GetElementType(); + } + } + if (remaining_type->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, false}; + } else if (remaining_type->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, false}; + } + } + return {ir::Type::GetPtrInt32Type(), false, false}; + } } else { // 没有下标访问 - if (sym->type->IsArray()) { - // 数组名作为地址(右值) + if (sym->type && sym->type->IsArray()) { + // 数组名作为地址 if (auto* arr_type = dynamic_cast(sym->type.get())) { if (arr_type->GetElementType()->IsInt32()) { return {ir::Type::GetPtrInt32Type(), false, true}; @@ -1106,8 +1048,15 @@ private: } } return {ir::Type::GetPtrInt32Type(), false, true}; + } else if (sym->is_array_param) { + // 数组参数名作为地址 + if (sym->type->IsPtrInt32()) { + return {ir::Type::GetPtrInt32Type(), false, true}; + } else { + return {ir::Type::GetPtrFloatType(), false, true}; + } } else { - // 指针类型(如函数参数)可以不带下标使用 + // 普通变量或指针 return {sym->type, true, is_const}; } } @@ -1280,6 +1229,20 @@ private: table_.addSymbol(sym); } + // 在 SemaVisitor 类中添加 + int EvaluateConstantAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) return 0; + // 使用常量求值器 + // 这里需要访问 ConstEvaluator,但 SemaVisitor 可能没有直接访问 + // 我们可以直接使用 CheckAddExp 并检查常量 + ExprInfo info = CheckAddExp(ctx); + if (info.is_const && info.is_const_int) { + return info.const_int_value; + } + throw std::runtime_error(FormatError("sema", "常量表达式求值失败")); + return 0; + } + void CollectFunctionParams(SysYParser::FuncFParamsContext* ctx) { if (!ctx) return; for (auto* param : ctx->funcFParam()) { @@ -1297,15 +1260,42 @@ private: } } if (!param_type) param_type = ir::Type::GetInt32Type(); + bool is_array = !param->L_BRACK().empty(); + std::vector dims; + if (is_array) { + // 第一维是 [],没有表达式,所以维度为0(表示省略) + dims.push_back(0); + + // 后续维度有表达式 + // 注意:exp() 返回的是 ExpContext 列表,对应后面的维度表达式 + for (auto* exp_ctx : param->exp()) { + // 使用常量求值器直接求值 + // 创建一个临时的 ConstExpContext + // 由于 ConstExpContext 只是 addExp 的包装,我们可以直接使用 addExp + auto* addExp = exp_ctx->addExp(); + if (!addExp) { + throw std::runtime_error(FormatError("sema", "无效的数组维度表达式")); + } + + // 求值常量表达式 + // 我们需要一个函数来求值常量表达式 + int dim = EvaluateConstantAddExp(addExp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + } + + // 数组参数退化为指针 if (param_type->IsInt32()) { param_type = ir::Type::GetPtrInt32Type(); } else if (param_type->IsFloat()) { param_type = ir::Type::GetPtrFloatType(); } - std::cout << "[DEBUG] 数组参数: " << name << " 类型转换为指针" << std::endl; } + Symbol sym; sym.name = name; sym.kind = SymbolKind::Parameter; @@ -1313,8 +1303,14 @@ private: sym.scope_level = table_.currentScopeLevel(); sym.is_initialized = true; sym.var_def_ctx = nullptr; + sym.is_array_param = is_array; + sym.array_dims = dims; table_.addSymbol(sym); - std::cout << "[DEBUG] 添加参数: " << name << " type_kind: " << (int)param_type->GetKind() << std::endl; + + std::cout << "[DEBUG] 添加参数: " << name << " type_kind: " << (int)param_type->GetKind() + << " is_array: " << is_array << " dims: "; + for (int d : dims) std::cout << d << " "; + std::cout << std::endl; } } From bff9a5d296ef5526e699e7c119fa8dd17b0a297d Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 26 Mar 2026 10:19:11 +0800 Subject: [PATCH 20/39] =?UTF-8?q?fix(sem)=E4=BF=AE=E6=AD=A3=E6=A0=87?= =?UTF-8?q?=E9=87=8F=E5=B8=B8=E9=87=8F=E5=BD=93=E4=BD=9C=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 3 + src/sem/SymbolTable.cpp | 124 +++++++++++++++++++++++++++++--------- 2 files changed, 97 insertions(+), 30 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index a541739..bf05648 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -88,6 +88,9 @@ class SymbolTable { float float_val; }; }; + void flattenInit(SysYParser::ConstInitValContext* ctx, + std::vector& out, + std::shared_ptr base_type) const; std::vector EvaluateConstInitVal( SysYParser::ConstInitValContext* ctx, const std::vector& dims, diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 976ce87..877ab63 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -5,6 +5,15 @@ #include #include +#define DEBUG_SYMBOL_TABLE + +#ifdef DEBUG_SYMBOL_TABLE +#include +#define DEBUG_MSG(msg) std::cerr << "[SymbolTable Debug] " << msg << std::endl +#else +#define DEBUG_MSG(msg) +#endif + // ---------- 构造函数 ---------- SymbolTable::SymbolTable() { scopes_.emplace_back(); // 初始化全局作用域 @@ -551,45 +560,100 @@ float SymbolTable::EvaluateConstExpFloat(SysYParser::ConstExpContext* ctx) const } } -std::vector SymbolTable::EvaluateConstInitVal( - SysYParser::ConstInitValContext* ctx, - const std::vector& dims, - std::shared_ptr base_type) const -{ - std::vector result; - if (!ctx) return result; +void SymbolTable::flattenInit(SysYParser::ConstInitValContext* ctx, + std::vector& out, + std::shared_ptr base_type) const { + if (!ctx) return; + + // 获取当前初始化列表的文本(用于调试) + std::string ctxText; + if (ctx->constExp()) { + ctxText = ctx->constExp()->getText(); + } else { + ctxText = "{ ... }"; + } if (ctx->constExp()) { ConstValue val = EvaluateAddExp(ctx->constExp()->addExp()); - // 根据基础类型进行可能的隐式转换 + + DEBUG_MSG("处理常量表达式: " << ctxText + << " 类型=" << (val.kind == ConstValue::INT ? "INT" : "FLOAT") + << " 值=" << (val.kind == ConstValue::INT ? std::to_string(val.int_val) : std::to_string(val.float_val)) + << " 目标类型=" << (base_type->IsInt32() ? "Int32" : "Float")); + + // 整型数组不能接受浮点常量 if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { - int i = static_cast(val.float_val); - if (std::abs(val.float_val - i) > 1e-6) { - throw std::runtime_error("常量初始化:浮点常量不能隐式转换为整数"); - } - val.kind = ConstValue::INT; - val.int_val = i; - } else if (base_type->IsFloat() && val.kind == ConstValue::INT) { + DEBUG_MSG("错误:整型数组遇到浮点常量,值=" << val.float_val); + throw std::runtime_error("常量初始化:整型数组不能使用浮点常量"); + } + // 浮点数组接受整型常量,并隐式转换 + if (base_type->IsFloat() && val.kind == ConstValue::INT) { + DEBUG_MSG("浮点数组接收整型常量,隐式转换为浮点: " << val.int_val); val.kind = ConstValue::FLOAT; val.float_val = static_cast(val.int_val); } - result.push_back(val); + out.push_back(val); } else { - // 嵌套初始化列表 - if (dims.empty()) { - throw std::runtime_error("常量初始化:非数组使用初始化列表"); + DEBUG_MSG("进入花括号初始化列表: " << ctxText); + // 花括号初始化列表:递归展开所有子项 + for (auto* sub : ctx->constInitVal()) { + flattenInit(sub, out, base_type); } - std::vector sub_dims(dims.begin() + 1, dims.end()); - int expected_count = 1; - for (int d : sub_dims) expected_count *= d; - - for (auto* sub_init : ctx->constInitVal()) { - auto sub_vals = EvaluateConstInitVal(sub_init, sub_dims, base_type); - if (sub_vals.size() != static_cast(expected_count)) { - throw std::runtime_error("常量初始化:子列表元素数量不匹配"); - } - result.insert(result.end(), sub_vals.begin(), sub_vals.end()); + DEBUG_MSG("退出花括号初始化列表"); + } +} + +std::vector SymbolTable::EvaluateConstInitVal( + SysYParser::ConstInitValContext* ctx, + const std::vector& dims, + std::shared_ptr base_type) const { + + // ========== 1. 标量常量(dims 为空)========== + if (dims.empty()) { + if (!ctx || !ctx->constExp()) { + throw std::runtime_error("标量常量初始化必须使用单个表达式"); + } + ConstValue val = EvaluateAddExp(ctx->constExp()->addExp()); + + // 类型兼容性检查 + /* + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + throw std::runtime_error("整型常量不能使用浮点常量初始化"); } + if (base_type->IsFloat() && val.kind == ConstValue::INT) { + val.kind = ConstValue::FLOAT; + val.float_val = static_cast(val.int_val); + } + */ + return {val}; // 返回包含单个值的向量 } - return result; + + // ========== 2. 数组常量(dims 非空)========== + // 计算数组总元素个数 + size_t total = 1; + for (int d : dims) total *= d; + + // 展平初始化列表(递归处理花括号) + std::vector flat; + flattenInit(ctx, flat, base_type); + + // 检查数量是否超过数组容量 + if (flat.size() > total) { + throw std::runtime_error("常量初始化:提供的初始值数量超过数组元素总数"); + } + + // 不足的部分补零 + if (flat.size() < total) { + ConstValue zero; + if (base_type->IsInt32()) { + zero.kind = ConstValue::INT; + zero.int_val = 0; + } else { + zero.kind = ConstValue::FLOAT; + zero.float_val = 0.0f; + } + flat.resize(total, zero); + } + + return flat; } \ No newline at end of file From 8e42c77caf2b3e44a959f2cca6e8e59b4733b561 Mon Sep 17 00:00:00 2001 From: ftt <> Date: Thu, 26 Mar 2026 10:27:15 +0800 Subject: [PATCH 21/39] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E4=B8=8B=E6=A0=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/Sema.cpp | 76 ++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 1668616..c03d2bb 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -1071,30 +1071,44 @@ private: if (!sym) { throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); } - // ========== 添加绑定 ========== - if (sym->var_def_ctx) { - std::cout << "[DEBUG] CheckLValue 绑定变量: " << name << std::endl; - sema_.BindVarUse(ctx, sym->var_def_ctx); - } - // ============================ + + std::cout << "CheckLValue 绑定变量: " << name << std::endl; bool is_array_access = !ctx->exp().empty(); bool is_const = (sym->kind == SymbolKind::Constant); - bool is_array_or_ptr = false; - - if (sym->type) { - is_array_or_ptr = sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat(); - } size_t dim_count = 0; std::shared_ptr elem_type = sym->type; + std::vector dims; + // 获取维度信息 if (sym->type && sym->type->IsArray()) { if (auto* arr_type = dynamic_cast(sym->type.get())) { - dim_count = arr_type->GetDimensions().size(); - elem_type = arr_type->GetElementType(); + dims = arr_type->GetDimensions(); + dim_count = dims.size(); + // 计算元素类型(递归获取最内层元素类型) + std::shared_ptr t = sym->type; + while (t->IsArray()) { + auto* arr_t = dynamic_cast(t.get()); + t = arr_t->GetElementType(); + } + elem_type = t; + } + } else if (sym->is_array_param) { + // 数组参数,使用保存的维度信息 + dims = sym->array_dims; + dim_count = dims.size(); + // 元素类型是基本类型 + if (sym->type->IsPtrInt32()) { + elem_type = ir::Type::GetInt32Type(); + } else if (sym->type->IsPtrFloat()) { + elem_type = ir::Type::GetFloatType(); } + std::cout << "数组参数维度: " << dim_count << " 维, dims: "; + for (int d : dims) std::cout << d << " "; + std::cout << std::endl; } else if (sym->type && (sym->type->IsPtrInt32() || sym->type->IsPtrFloat())) { + // 普通指针,只能有一个下标 dim_count = 1; if (sym->type->IsPtrInt32()) { elem_type = ir::Type::GetInt32Type(); @@ -1105,11 +1119,15 @@ private: size_t subscript_count = ctx->exp().size(); + std::cout << "dim_count: " << dim_count << ", subscript_count: " << subscript_count << std::endl; + if (dim_count > 0 || sym->is_array_param || sym->type->IsArray() || sym->type->IsPtrInt32() || sym->type->IsPtrFloat()) { if (subscript_count > 0) { // 有下标访问 - if (subscript_count > dim_count && dim_count > 0) { + // 对于数组参数,第一维是省略的(0),但实际可以访问 + // 我们需要检查提供的下标个数是否超过实际维度个数 + if (subscript_count > dim_count) { throw std::runtime_error(FormatError("sema", "数组下标个数过多")); } // 检查每个下标表达式 @@ -1122,36 +1140,25 @@ private: if (subscript_count == dim_count) { // 完全索引,返回元素类型 + std::cout << "完全索引,返回元素类型" << std::endl; return {elem_type, true, false}; } else { // 部分索引,返回子数组的指针类型 - // 计算剩余维度的元素类型 - std::shared_ptr remaining_type = sym->type; - if (sym->is_array_param) { - // 对于数组参数,我们需要返回指向剩余维度的指针 - if (elem_type->IsInt32()) { - return {ir::Type::GetPtrInt32Type(), false, false}; - } else if (elem_type->IsFloat()) { - return {ir::Type::GetPtrFloatType(), false, false}; - } + std::cout << "部分索引,返回指针类型" << std::endl; + // 计算剩余维度的指针类型 + if (elem_type->IsInt32()) { + return {ir::Type::GetPtrInt32Type(), false, false}; + } else if (elem_type->IsFloat()) { + return {ir::Type::GetPtrFloatType(), false, false}; } else { - for (size_t i = 0; i < subscript_count && remaining_type->IsArray(); i++) { - if (auto* arr_type = dynamic_cast(remaining_type.get())) { - remaining_type = arr_type->GetElementType(); - } - } - if (remaining_type->IsInt32()) { - return {ir::Type::GetPtrInt32Type(), false, false}; - } else if (remaining_type->IsFloat()) { - return {ir::Type::GetPtrFloatType(), false, false}; - } + return {ir::Type::GetPtrInt32Type(), false, false}; } - return {ir::Type::GetPtrInt32Type(), false, false}; } } else { // 没有下标访问 if (sym->type && sym->type->IsArray()) { // 数组名作为地址 + std::cout << "数组名作为地址" << std::endl; if (auto* arr_type = dynamic_cast(sym->type.get())) { if (arr_type->GetElementType()->IsInt32()) { return {ir::Type::GetPtrInt32Type(), false, true}; @@ -1162,6 +1169,7 @@ private: return {ir::Type::GetPtrInt32Type(), false, true}; } else if (sym->is_array_param) { // 数组参数名作为地址 + std::cout << "数组参数名作为地址" << std::endl; if (sym->type->IsPtrInt32()) { return {ir::Type::GetPtrInt32Type(), false, true}; } else { From 8477ab4aca70ccc060a160ad70411f3ec027d4cf Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 26 Mar 2026 15:16:35 +0800 Subject: [PATCH 22/39] =?UTF-8?q?fix(sem)=E4=BF=AE=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E8=A1=A8=E8=BE=BE=E5=BC=8F=E6=B1=82=E5=80=BC=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/SymbolTable.h | 2 ++ src/sem/Sema.cpp | 70 +-------------------------------------- src/sem/SymbolTable.cpp | 17 ++++++++++ 3 files changed, 20 insertions(+), 69 deletions(-) diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index bf05648..7b08f82 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -95,6 +95,8 @@ class SymbolTable { SysYParser::ConstInitValContext* ctx, const std::vector& dims, std::shared_ptr base_type) const; + + int EvaluateConstExpression(SysYParser::ExpContext* ctx) const; private: // 作用域栈:每个元素是一个从名字到符号的映射 diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index c03d2bb..a92a1db 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -1348,20 +1348,6 @@ private: table_.addSymbol(sym); } - - // 在 SemaVisitor 类中添加 - int EvaluateConstantAddExp(SysYParser::AddExpContext* ctx) { - if (!ctx) return 0; - // 使用常量求值器 - // 这里需要访问 ConstEvaluator,但 SemaVisitor 可能没有直接访问 - // 我们可以直接使用 CheckAddExp 并检查常量 - ExprInfo info = CheckAddExp(ctx); - if (info.is_const && info.is_const_int) { - return info.const_int_value; - } - throw std::runtime_error(FormatError("sema", "常量表达式求值失败")); - return 0; - } void CollectFunctionParams(SysYParser::FuncFParamsContext* ctx) { if (!ctx) return; @@ -1400,8 +1386,7 @@ private: } // 求值常量表达式 - // 我们需要一个函数来求值常量表达式 - int dim = EvaluateConstantAddExp(addExp); + int dim = table_.EvaluateConstExpression(exp_ctx); if (dim <= 0) { throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); } @@ -1448,59 +1433,6 @@ private: } } - int EvaluateConstExp(SysYParser::ConstExpContext* ctx) { - if (!ctx || !ctx->addExp()) return 0; - ExprInfo info = CheckAddExp(ctx->addExp()); - if (info.is_const && info.is_const_int) { - return info.const_int_value; - } - throw std::runtime_error(FormatError("sema", "常量表达式求值失败")); - return 0; - } - - struct ConstValue { - bool is_int; - int int_val; - float float_val; - }; - - std::vector EvaluateConstInitVal(SysYParser::ConstInitValContext* ctx, - const std::vector& dims, - std::shared_ptr base_type) { - std::vector result; - if (!ctx) return result; - if (ctx->constExp()) { - ExprInfo info = CheckAddExp(ctx->constExp()->addExp()); - ConstValue val; - if (info.type->IsInt32() && info.is_const_int) { - val.is_int = true; - val.int_val = info.const_int_value; - if (base_type->IsFloat()) { - val.is_int = false; - val.float_val = (float)info.const_int_value; - } - } else if (info.type->IsFloat() && info.is_const) { - val.is_int = false; - val.float_val = info.const_float_value; - if (base_type->IsInt32()) { - val.is_int = true; - val.int_val = (int)info.const_float_value; - } - } else { - val.is_int = base_type->IsInt32(); - val.int_val = 0; - val.float_val = 0.0f; - } - result.push_back(val); - } else { - for (auto* init : ctx->constInitVal()) { - std::vector sub_vals = EvaluateConstInitVal(init, dims, base_type); - result.insert(result.end(), sub_vals.begin(), sub_vals.end()); - } - } - return result; - } - void CheckMainFunction() { auto* main_sym = table_.lookup("main"); if (!main_sym || main_sym->kind != SymbolKind::Function) { diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 877ab63..f1a6a87 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -656,4 +656,21 @@ std::vector SymbolTable::EvaluateConstInitVal( } return flat; +} + +int SymbolTable::EvaluateConstExpression(SysYParser::ExpContext* ctx) const { + if (!ctx || !ctx->addExp()) { + throw std::runtime_error("常量表达式求值:无效 ExpContext"); + } + ConstValue val = EvaluateAddExp(ctx->addExp()); + if (val.kind == ConstValue::INT) { + return val.int_val; + } else { + float f = val.float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error("常量表达式求值:浮点常量不能隐式转换为整数"); + } + return i; + } } \ No newline at end of file From 74f325c6fd01cd67fb9d9e102e7fa3b3afb859f0 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 26 Mar 2026 15:29:50 +0800 Subject: [PATCH 23/39] =?UTF-8?q?feat(sem)=E5=B8=B8=E9=87=8F=E6=B5=AE?= =?UTF-8?q?=E7=82=B9=E7=B1=BB=E5=9E=8B=E9=9A=90=E5=BC=8F=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E4=B8=BA=E6=95=B4=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/SymbolTable.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index f1a6a87..f9f421a 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -620,11 +620,16 @@ std::vector SymbolTable::EvaluateConstInitVal( if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { throw std::runtime_error("整型常量不能使用浮点常量初始化"); } + */ + // 隐式类型转换 + if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { + val.kind = ConstValue::INT; + val.float_val = static_cast(val.int_val); + } if (base_type->IsFloat() && val.kind == ConstValue::INT) { val.kind = ConstValue::FLOAT; val.float_val = static_cast(val.int_val); } - */ return {val}; // 返回包含单个值的向量 } From 9efcdde3536a250394db8e3a846c14d6c53783cd Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 26 Mar 2026 18:36:50 +0800 Subject: [PATCH 24/39] =?UTF-8?q?feat(sem)=E4=BF=AE=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sem/Sema.cpp | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index a92a1db..01bae52 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -407,24 +407,6 @@ public: if (!sym) { throw std::runtime_error(FormatError("sema", "使用了未定义的变量: " + name)); } - // ========== 关键修复:绑定变量使用到定义 ========== - if (sym) { - std::cerr << "[DEBUG] 找到符号: " << sym->name - << ", kind: " << (int)sym->kind - << ", var_def_ctx: " << sym->var_def_ctx << std::endl; - if (sym->var_def_ctx) { - std::cout << "[DEBUG] 绑定变量使用" << std::endl; - sema_.BindVarUse(ctx, sym->var_def_ctx); - } - } - else if (sym->kind == SymbolKind::Parameter) { - // 对于函数参数,需要特殊处理 - // 参数可能没有对应的 VarDefContext,需要创建一个 - // 或者通过其他方式标识 - std::cout << "[DEBUG] 参数变量: " << name << " (无法绑定到 VarDefContext)" << std::endl; - // 可以创建一个临时标识,但这里先不处理 - } - // ============================================ // 检查数组访问 bool is_array_access = !ctx->exp().empty(); std::cout << "[DEBUG] name: " << name @@ -1071,7 +1053,10 @@ private: if (!sym) { throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); } - + + if (sym->kind == SymbolKind::Variable && sym->var_def_ctx) { + sema_.BindVarUse(ctx, sym->var_def_ctx); + } std::cout << "CheckLValue 绑定变量: " << name << std::endl; bool is_array_access = !ctx->exp().empty(); From b93d76957645de29d6d569bd31f7219895c8cdfc Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 26 Mar 2026 18:46:17 +0800 Subject: [PATCH 25/39] =?UTF-8?q?feat(sem)=E5=A2=9E=E6=B7=BB=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/sem/Sema.h | 10 ++++++++++ include/sem/SymbolTable.h | 2 ++ src/irgen/IRGenExp.cpp | 6 ++++-- src/sem/Sema.cpp | 15 +++++++++++++-- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/include/sem/Sema.h b/include/sem/Sema.h index c79c401..10e4d8e 100644 --- a/include/sem/Sema.h +++ b/include/sem/Sema.h @@ -34,6 +34,14 @@ public: return it == var_uses_.end() ? nullptr : it->second; } + void BindConstUse(SysYParser::LValContext* use, SysYParser::ConstDefContext* decl) { + const_uses_[use] = decl; + } + SysYParser::ConstDefContext* ResolveConstUse(const SysYParser::LValContext* use) const { + auto it = const_uses_.find(use); + return it == const_uses_.end() ? nullptr : it->second; + } + // ----- 表达式类型信息存储 ----- void SetExprType(antlr4::ParserRuleContext* node, const ExprInfo& info) { ExprInfo copy = info; @@ -76,6 +84,8 @@ private: // 隐式转换列表 std::vector conversions_; + + std::unordered_map const_uses_; }; // 目前仅检查: diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index 7b08f82..2dfbc89 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -43,6 +43,8 @@ struct Symbol { // 关联的语法树节点(用于报错位置或进一步分析) SysYParser::VarDefContext* var_def_ctx = nullptr; + SysYParser::ConstDefContext* const_def_ctx = nullptr; + SysYParser::FuncFParamContext* param_def_ctx = nullptr; SysYParser::FuncDefContext* func_def_ctx = nullptr; }; diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 90d07b1..acf9d9c 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -84,9 +84,11 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 从语义分析获取变量定义 auto* decl = sema_.ResolveVarUse(ctx); if (!decl) { - throw std::runtime_error( + auto* const_def = sema_.ResolveConstUse(ctx); + if (!const_def) { FormatError("irgen", - "变量使用缺少语义绑定: " + varName)); + "使用缺少语义绑定: " + varName); + } } auto it = storage_map_.find(decl); diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 01bae52..8e4fd0f 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -298,6 +298,9 @@ public: sym.scope_level = table_.currentScopeLevel(); sym.is_initialized = true; sym.var_def_ctx = nullptr; + sym.const_def_ctx = ctx; + sym.const_def_ctx = ctx; + std::cout << "保存常量定义上下文: " << name << ", ctx: " << ctx << std::endl; // 存储常量值(仅对非数组有效) if (!is_array && !init_values.empty()) { if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::INT) { @@ -1056,9 +1059,17 @@ private: if (sym->kind == SymbolKind::Variable && sym->var_def_ctx) { sema_.BindVarUse(ctx, sym->var_def_ctx); + std::cout << "绑定变量: " << name << " -> VarDefContext" << std::endl; } - std::cout << "CheckLValue 绑定变量: " << name << std::endl; - + else if (sym->kind == SymbolKind::Constant && sym->const_def_ctx) { + sema_.BindConstUse(ctx, sym->const_def_ctx); + std::cout << "绑定常量: " << name << " -> ConstDefContext" << std::endl; + } + std::cout << "CheckLValue 绑定变量: " << name + << ", sym->kind: " << (int)sym->kind + << ", sym->var_def_ctx: " << sym->var_def_ctx + << ", sym->const_def_ctx: " << sym->const_def_ctx << std::endl; + bool is_array_access = !ctx->exp().empty(); bool is_const = (sym->kind == SymbolKind::Constant); From affccfb27c274b3f2cf43c6654d34ab47333b01d Mon Sep 17 00:00:00 2001 From: LuoHello <2901023943@qq.com> Date: Thu, 26 Mar 2026 19:00:24 +0800 Subject: [PATCH 26/39] =?UTF-8?q?=E5=AE=8C=E5=96=84=20FunctionType=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=EF=BC=9A=E6=89=A9=E5=B1=95=20CreateFunction?= =?UTF-8?q?=20=E4=BB=A5=E6=94=AF=E6=8C=81=20FunctionType=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20IR=20=E7=94=9F=E6=88=90=E5=92=8C=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 36 +++++++-- include/irgen/IRGen.h | 7 ++ result.txt | 166 ++++++++++++++++++++++++++++++++++++++++ src/ir/Function.cpp | 15 +++- src/ir/IRBuilder.cpp | 33 +++++++- src/ir/IRPrinter.cpp | 47 ++++++++++-- src/ir/Instruction.cpp | 24 +++++- src/ir/Module.cpp | 4 +- src/ir/Value.cpp | 4 +- src/irgen/IRGenDecl.cpp | 18 ++++- src/irgen/IRGenExp.cpp | 87 ++++++++++++++++++--- src/irgen/IRGenFunc.cpp | 125 ++++++++++++++++++++++-------- src/irgen/IRGenStmt.cpp | 54 +++++++++++-- test.c | 1 + test.sy | 1 + test2.sy | 1 + 16 files changed, 549 insertions(+), 74 deletions(-) create mode 100644 result.txt create mode 100644 test.c create mode 100644 test.sy create mode 100644 test2.sy diff --git a/include/ir/IR.h b/include/ir/IR.h index 4ea12dc..891c59e 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -214,9 +214,14 @@ class ConstantInt : public ConstantValue { private: int value_{}; }; +//function 参数占位类,目前仅保存类型和名字,后续可扩展更多属性(例如是否为数组参数、数组维度等)。 +class Argument : public Value { + public: + Argument(std::shared_ptr ty, std::string name); +}; -// 后续还需要扩展更多指令类型。 -enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret }; +// 后续还需要扩展更多指令类型。add call instruction 只是最小占位,后续可以继续补 sub/mul/div/rem、br/condbr、phi、gep 等指令。 +enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret, Call }; // User 是所有“会使用其他 Value 作为输入”的 IR 对象的抽象基类。 // 当前实现中只有 Instruction 继承自 User。 @@ -326,16 +331,32 @@ class BasicBlock : public Value { // 形参和调用,通常需要引入专门的函数类型表示。 class Function : public Value { public: - // 当前构造函数接收的也是返回类型,而不是完整函数类型。 - Function(std::string name, std::shared_ptr ret_type); + // 当前构造函数接收完整的 FunctionType。 + Function(std::string name, std::shared_ptr func_type); BasicBlock* CreateBlock(const std::string& name); BasicBlock* GetEntry(); const BasicBlock* GetEntry() const; const std::vector>& GetBlocks() const; + // 函数增加参数的接口,目前仅保存参数类型和名字,后续可扩展更多属性(例如是否为数组参数、数组维度等)。注意这里是直接在 Function 上管理参数列表,而不是通过一个单独的 FunctionType 来表达完整函数签名,这也是当前最小实现的一个简化点。 + Argument* AddArgument(std::unique_ptr arg); + const std::vector>& GetArguments() const; private: BasicBlock* entry_ = nullptr; std::vector> blocks_; + std::vector> arguments_; +}; + +class CallInst : public Instruction { + public: + CallInst(std::shared_ptr ret_ty, Function* callee, + const std::vector& args, std::string name); + Function* GetCallee() const; + const std::vector& GetArgs() const; + + private: + Function* callee_; + std::vector args_; }; class Module { @@ -343,9 +364,9 @@ class Module { Module() = default; Context& GetContext(); const Context& GetContext() const; - // 创建函数时当前只显式传入返回类型,尚未接入完整的 FunctionType。 + // 创建函数时传入完整的 FunctionType。 Function* CreateFunction(const std::string& name, - std::shared_ptr ret_type); + std::shared_ptr func_type); const std::vector>& GetFunctions() const; private: @@ -365,9 +386,12 @@ class IRBuilder { const std::string& name); BinaryInst* CreateAdd(Value* lhs, Value* rhs, const std::string& name); AllocaInst* CreateAllocaI32(const std::string& name); + AllocaInst* CreateAllocaFloat(const std::string& name); LoadInst* CreateLoad(Value* ptr, const std::string& name); StoreInst* CreateStore(Value* val, Value* ptr); ReturnInst* CreateRet(Value* v); + CallInst* CreateCall(Function* callee, const std::vector& args, + const std::string& name); private: Context& ctx_; diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 30b71c7..9006b3f 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -40,8 +40,13 @@ class IRGenImpl final : public SysYBaseVisitor { std::any visitStmt(SysYParser::StmtContext* ctx) override; // 表达式 + // 基本表达式(变量、常量、括号表达式)直接翻译为 IR 中的值;函数调用和一元运算需要特殊处理。 std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; + // 一元表达式包括函数调用和一元运算,需要特殊处理 + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override; + // 其他二元表达式按照优先级分层访问,最终调用 visitLVal 来处理变量访问。变量引用 std::any visitLVal(SysYParser::LValContext* ctx) override; + // 加法表达式、乘法表达式、关系表达式、相等表达式、条件表达式分别对应不同的访问函数,按照优先级分层访问,最终调用 visitLVal 来处理变量访问 std::any visitAddExp(SysYParser::AddExpContext* ctx) override; std::any visitMulExp(SysYParser::MulExpContext* ctx) override; std::any visitRelExp(SysYParser::RelExpContext* ctx) override; @@ -72,6 +77,8 @@ class IRGenImpl final : public SysYBaseVisitor { ir::IRBuilder builder_; // 名称绑定由 Sema 负责;IRGen 只维护“声明 -> 存储槽位”的代码生成状态。 std::unordered_map storage_map_; + std::unordered_map param_map_; + std::unordered_map global_map_; // 循环栈,用于 break/continue struct LoopContext { diff --git a/result.txt b/result.txt new file mode 100644 index 0000000..9c10863 --- /dev/null +++ b/result.txt @@ -0,0 +1,166 @@ +========== test/test_case/functional/09_func_defn.sy ========== +compUnit +|-- decl +| `-- varDecl +| |-- bType +| | `-- Int: int +| |-- varDef +| | `-- Ident: a +| `-- Semi: ; +|-- funcDef +| |-- funcType +| | `-- Int: int +| |-- Ident: func +| |-- L_PAREN: ( +| |-- funcFParams +| | `-- funcFParam +| | |-- bType +| | | `-- Int: int +| | `-- Ident: p +| |-- R_PAREN: ) +| `-- block +| |-- L_BRACE: { +| |-- blockItem +| | `-- stmt +| | |-- lVal +| | | `-- Ident: p +| | |-- Assign: = +| | |-- exp +| | | `-- addExp +| | | |-- addExp +| | | | `-- mulExp +| | | | `-- unaryExp +| | | | `-- primaryExp +| | | | `-- lVal +| | | | `-- Ident: p +| | | |-- SubOp: - +| | | `-- mulExp +| | | `-- unaryExp +| | | `-- primaryExp +| | | `-- DECIMAL_INT: 1 +| | `-- Semi: ; +| |-- blockItem +| | `-- stmt +| | |-- Return: return +| | |-- exp +| | | `-- addExp +| | | `-- mulExp +| | | `-- unaryExp +| | | `-- primaryExp +| | | `-- lVal +| | | `-- Ident: p +| | `-- Semi: ; +| `-- R_BRACE: } +|-- funcDef +| |-- funcType +| | `-- Int: int +| |-- Ident: main +| |-- L_PAREN: ( +| |-- R_PAREN: ) +| `-- block +| |-- L_BRACE: { +| |-- blockItem +| | `-- decl +| | `-- varDecl +| | |-- bType +| | | `-- Int: int +| | |-- varDef +| | | `-- Ident: b +| | `-- Semi: ; +| |-- blockItem +| | `-- stmt +| | |-- lVal +| | | `-- Ident: a +| | |-- Assign: = +| | |-- exp +| | | `-- addExp +| | | `-- mulExp +| | | `-- unaryExp +| | | `-- primaryExp +| | | `-- DECIMAL_INT: 10 +| | `-- Semi: ; +| |-- blockItem +| | `-- stmt +| | |-- lVal +| | | `-- Ident: b +| | |-- Assign: = +| | |-- exp +| | | `-- addExp +| | | `-- mulExp +| | | `-- unaryExp +| | | |-- Ident: func +| | | |-- L_PAREN: ( +| | | |-- funcRParams +| | | | `-- exp +| | | | `-- addExp +| | | | `-- mulExp +| | | | `-- unaryExp +| | | | `-- primaryExp +| | | | `-- lVal +| | | | `-- Ident: a +| | | `-- R_PAREN: ) +| | `-- Semi: ; +| |-- blockItem +| | `-- stmt +| | |-- Return: return +| | |-- exp +| | | `-- addExp +| | | `-- mulExp +| | | `-- unaryExp +| | | `-- primaryExp +| | | `-- lVal +| | | `-- Ident: b +| | `-- Semi: ; +| `-- R_BRACE: } +`-- EOF: +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] 进入函数: func 返回类型: int +[DEBUG] 添加参数: p type_kind: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: p-1 +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: func(a) +[DEBUG] visitUnaryExp: func(a) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: b +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[error] [irgen] 变量声明缺少存储槽位: a + diff --git a/src/ir/Function.cpp b/src/ir/Function.cpp index cf14d48..3652f77 100644 --- a/src/ir/Function.cpp +++ b/src/ir/Function.cpp @@ -5,10 +5,21 @@ namespace ir { -Function::Function(std::string name, std::shared_ptr ret_type) - : Value(std::move(ret_type), std::move(name)) { +Function::Function(std::string name, std::shared_ptr func_type) + : Value(std::move(func_type), std::move(name)) { entry_ = CreateBlock("entry"); } +// 向函数添加参数的实现。 +Argument* Function::AddArgument(std::unique_ptr arg) {// 独占所有权,自动释放内存 + if (!arg) return nullptr; // 1. 检查参数是否为空 + auto* ptr = arg.get(); // 2. 获取原始指针(用于返回) + arguments_.push_back(std::move(arg)); // 3. 将参数所有权转移到函数的参数列表中,arg已经是空指针了,不能再使用arg了 + return ptr; // 4. 返回参数指针,方便调用者使用 +} +// 获取函数参数列表的实现。 +const std::vector>& Function::GetArguments() const { + return arguments_; +} BasicBlock* Function::CreateBlock(const std::string& name) { auto block = std::make_unique(name); diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 90f03c4..5bf992b 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -49,6 +49,13 @@ AllocaInst* IRBuilder::CreateAllocaI32(const std::string& name) { return insert_block_->Append(Type::GetPtrInt32Type(), name); } +AllocaInst* IRBuilder::CreateAllocaFloat(const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + return insert_block_->Append(Type::GetPtrFloatType(), name); +} + LoadInst* IRBuilder::CreateLoad(Value* ptr, const std::string& name) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -57,7 +64,16 @@ LoadInst* IRBuilder::CreateLoad(Value* ptr, const std::string& name) { throw std::runtime_error( FormatError("ir", "IRBuilder::CreateLoad 缺少 ptr")); } - return insert_block_->Append(Type::GetInt32Type(), ptr, name); + auto ptr_ty = ptr->GetType(); + std::shared_ptr elem_ty; + if (ptr_ty->IsPtrInt32()) { + elem_ty = Type::GetInt32Type(); + } else if (ptr_ty->IsPtrFloat()) { + elem_ty = Type::GetFloatType(); + } else { + throw std::runtime_error(FormatError("ir", "不支持的指针类型")); + } + return insert_block_->Append(elem_ty, ptr, name); } StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { @@ -85,5 +101,20 @@ ReturnInst* IRBuilder::CreateRet(Value* v) { } return insert_block_->Append(Type::GetVoidType(), v); } +// 注意:当前 CreateCall 仅支持直接调用 Function,且不支持变长参数列表等复杂特性。 +// 创建函数调用指令的实现,被调用的函数,参数列表,返回值临时变量名 +CallInst* IRBuilder::CreateCall(Function* callee, + const std::vector& args, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!callee) { //被调用的函数不能为空 + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateCall 缺少 callee")); + } + auto func_ty = std::static_pointer_cast(callee->GetType()); + auto ret_ty = func_ty->GetReturnType(); + return insert_block_->Append(ret_ty, callee, args, name); +} } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 5b11d63..28f1e88 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -43,6 +43,8 @@ static const char* OpcodeToString(Opcode op) { return "store"; case Opcode::Ret: return "ret"; + case Opcode::Call: + return "call"; } return "?"; } @@ -56,8 +58,15 @@ static std::string ValueToString(const Value* v) { void IRPrinter::Print(const Module& module, std::ostream& os) { for (const auto& func : module.GetFunctions()) { - os << "define " << TypeToString(*func->GetType()) << " @" << func->GetName() - << "() {\n"; + auto* func_ty = static_cast(func->GetType().get()); + os << "define " << TypeToString(*func_ty->GetReturnType()) << " @" << func->GetName() << "("; + bool first = true; + for (const auto& arg : func->GetArguments()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*arg->GetType()) << " " << arg->GetName(); + } + os << ") {\n"; for (const auto& bb : func->GetBlocks()) { if (!bb) { continue; @@ -79,19 +88,31 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { } case Opcode::Alloca: { auto* alloca = static_cast(inst); - os << " " << alloca->GetName() << " = alloca i32\n"; + std::string elem_ty_str; + if (alloca->GetType()->IsPtrInt32()) { + elem_ty_str = "i32"; + } else if (alloca->GetType()->IsPtrFloat()) { + elem_ty_str = "float"; + } else { + elem_ty_str = TypeToString(*alloca->GetType()); + } + os << " " << alloca->GetName() << " = alloca " << elem_ty_str << "\n"; break; } case Opcode::Load: { auto* load = static_cast(inst); - os << " " << load->GetName() << " = load i32, i32* " + os << " " << load->GetName() << " = load " + << TypeToString(*load->GetType()) << ", " + << TypeToString(*load->GetPtr()->GetType()) << " " << ValueToString(load->GetPtr()) << "\n"; break; } case Opcode::Store: { auto* store = static_cast(inst); - os << " store i32 " << ValueToString(store->GetValue()) - << ", i32* " << ValueToString(store->GetPtr()) << "\n"; + os << " store " << TypeToString(*store->GetValue()->GetType()) << " " + << ValueToString(store->GetValue()) + << ", " << TypeToString(*store->GetPtr()->GetType()) << " " + << ValueToString(store->GetPtr()) << "\n"; break; } case Opcode::Ret: { @@ -100,6 +121,20 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { << ValueToString(ret->GetValue()) << "\n"; break; } + // CallInst类在 include/ir/IR.h 中定义 + case Opcode::Call: { + auto* call = static_cast(inst); + os << " " << call->GetName() << " = call " + << TypeToString(*call->GetType()) << " @" << call->GetCallee()->GetName() << "("; + bool first = true; + for (auto* arg : call->GetArgs()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*arg->GetType()) << " " << ValueToString(arg); + } + os << ")\n"; + break; + } } } } diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 7928716..396dbf6 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -61,8 +61,9 @@ void Instruction::SetParent(BasicBlock* parent) { parent_ = parent; } BinaryInst::BinaryInst(Opcode op, std::shared_ptr ty, Value* lhs, Value* rhs, std::string name) : Instruction(op, std::move(ty), std::move(name)) { - if (op != Opcode::Add) { - throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 Add")); + // 当前 BinaryInst 仅支持 Add/Sub/Mul,且操作数和结果必须都是 i32。 + if (op != Opcode::Add && op != Opcode::Sub && op != Opcode::Mul) { + throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 Add/Sub/Mul")); } if (!lhs || !rhs) { throw std::runtime_error(FormatError("ir", "BinaryInst 缺少操作数")); @@ -148,4 +149,23 @@ Value* StoreInst::GetValue() const { return GetOperand(0); } Value* StoreInst::GetPtr() const { return GetOperand(1); } +CallInst::CallInst(std::shared_ptr ret_ty, Function* callee, + const std::vector& args, std::string name) + : Instruction(Opcode::Call, std::move(ret_ty), std::move(name)), + callee_(callee), args_(args) { + if (!callee_) { + throw std::runtime_error(FormatError("ir", "CallInst 缺少被调用函数")); + } + for (auto* arg : args_) { + if (!arg) { + throw std::runtime_error(FormatError("ir", "CallInst 参数不能为 null")); + } + AddOperand(arg); + } +} + +Function* CallInst::GetCallee() const { return callee_; } + +const std::vector& CallInst::GetArgs() const { return args_; } + } // namespace ir diff --git a/src/ir/Module.cpp b/src/ir/Module.cpp index 928efdc..811aa09 100644 --- a/src/ir/Module.cpp +++ b/src/ir/Module.cpp @@ -9,8 +9,8 @@ Context& Module::GetContext() { return context_; } const Context& Module::GetContext() const { return context_; } Function* Module::CreateFunction(const std::string& name, - std::shared_ptr ret_type) { - functions_.push_back(std::make_unique(name, std::move(ret_type))); + std::shared_ptr func_type) { + functions_.push_back(std::make_unique(name, std::move(func_type))); return functions_.back().get(); } diff --git a/src/ir/Value.cpp b/src/ir/Value.cpp index 2e9f4c1..a4fd6f4 100644 --- a/src/ir/Value.cpp +++ b/src/ir/Value.cpp @@ -77,7 +77,9 @@ void Value::ReplaceAllUsesWith(Value* new_value) { ConstantValue::ConstantValue(std::shared_ptr ty, std::string name) : Value(std::move(ty), std::move(name)) {} +Argument::Argument(std::shared_ptr ty, std::string name) + : Value(std::move(ty), std::move(name)) {} + ConstantInt::ConstantInt(std::shared_ptr ty, int v) : ConstantValue(std::move(ty), ""), value_(v) {} - } // namespace ir diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 7ca55d0..5b2d446 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -44,7 +44,7 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { return {}; } - +// 处理变量定义的函数,包括全局变量和局部变量的定义。全局变量会被记录在 global_map_ 中,局部变量会被 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量定义")); @@ -56,12 +56,22 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { } std::string varName = ctx->Ident()->getText(); - + // 防止同一个变量被多次分配存储空间。 if (storage_map_.find(ctx) != storage_map_.end()) { throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); } - - // 分配存储 + // 区分全局变量和局部变量,func_ 记录当前正在生成IR的函数,如果 func_ 为空则说明当前在处理全局变量,否则在处理局部变量 + if (!func_) { + // 全局变量(简化):用全局占位符记录为 i32*,Default 不直接插入指令 + // 全局变量:在数据段分配 + // TODO:真正的全局变量应该存储值本身,而不是指针,这里为了简化实现先使用指针占位,后续可以改为直接存储值 + auto* global = new ir::GlobalValue(ir::Type::GetPtrInt32Type(), varName); + global_map_[varName] = global; + // 对全局初始化暂不支持,默认为0 + return {}; + } + + // 分配存储(局部变量) auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); storage_map_[ctx] = slot; diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 90d07b1..6e5ffcc 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -70,6 +70,60 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } +std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少一元表达式")); + } + + if (ctx->primaryExp()) { + return ctx->primaryExp()->accept(this); + } + + if (ctx->Ident() && ctx->L_PAREN()) { + std::string funcName = ctx->Ident()->getText(); + ir::Function* callee = nullptr; + for (auto& f : module_.GetFunctions()) { + if (f->GetName() == funcName) { + callee = f.get(); + break; + } + } + if (!callee) { + throw std::runtime_error(FormatError("irgen", "找不到函数: " + funcName)); + } + + std::vector args; + if (ctx->funcRParams()) { + for (auto* exp : ctx->funcRParams()->exp()) { + args.push_back(EvalExpr(*exp)); + } + } + + ir::Value* result = builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); + return result; + } + + if (ctx->unaryOp() && ctx->unaryExp()) { + auto* operand = std::any_cast(ctx->unaryExp()->accept(this)); + if (ctx->unaryOp()->AddOp()) { + return operand; + } + if (ctx->unaryOp()->SubOp()) { + auto* zero = builder_.CreateConstInt(0); + return builder_.CreateBinary(ir::Opcode::Sub, zero, operand, + module_.GetContext().NextTemp()); + } + if (ctx->unaryOp()->NotOp()) { + // 逻辑非暂不支持,先默认 0/1 取反 + // 这里简化:如果 operand ==0 返回1,否则返回0。(不做真实比较) + // 需要后续完善比较指令。 + return operand; + } + } + + throw std::runtime_error(FormatError("irgen", "不支持的 unaryExp")); +} + // 左值(变量)处理 // 1. 先通过语义分析结果把变量使用绑定回声明; // 2. 再通过 storage_map_ 找到该声明对应的栈槽位; @@ -83,21 +137,36 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 从语义分析获取变量定义 auto* decl = sema_.ResolveVarUse(ctx); - if (!decl) { - throw std::runtime_error( - FormatError("irgen", - "变量使用缺少语义绑定: " + varName)); + ir::Value* ptr = nullptr; + if (decl) { + auto it = storage_map_.find(decl); + if (it != storage_map_.end()) { + ptr = it->second; + } } - - auto it = storage_map_.find(decl); - if (it == storage_map_.end()) { + + if (!ptr) { + auto it2 = param_map_.find(varName); + if (it2 != param_map_.end()) { + ptr = it2->second; + } + } + + if (!ptr) { + auto it3 = global_map_.find(varName); + if (it3 != global_map_.end()) { + ptr = it3->second; + } + } + + if (!ptr) { throw std::runtime_error( FormatError("irgen", "变量声明缺少存储槽位: " + varName)); } - + return static_cast( - builder_.CreateLoad(it->second, module_.GetContext().NextTemp())); + builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); } diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index 87f3ac8..d47f970 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -33,26 +33,21 @@ std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少编译单元")); } - - // 获取所有函数定义 - auto funcDefs = ctx->funcDef(); - - // 找到 main 函数 - SysYParser::FuncDefContext* mainFunc = nullptr; - for (auto* funcDef : funcDefs) { - if (funcDef->Ident() && funcDef->Ident()->getText() == "main") { - mainFunc = funcDef; - break; + + // 处理全局变量声明 + for (auto* decl : ctx->decl()) { + if (decl) { + decl->accept(this); } } - - if (!mainFunc) { - throw std::runtime_error(FormatError("irgen", "缺少main函数")); + + // 处理所有函数定义 + for (auto* funcDef : ctx->funcDef()) { + if (funcDef) { + funcDef->accept(this); + } } - - // 生成 main 函数 - mainFunc->accept(this); - + return {}; } @@ -60,39 +55,101 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少函数定义")); } - - // 使用 Ident() 而不是 ID() + if (!ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "缺少函数名")); } - + std::string funcName = ctx->Ident()->getText(); - - // 检查函数体 - 使用 block() 而不是 blockStmt() + if (!ctx->block()) { throw std::runtime_error(FormatError("irgen", "函数体为空")); } - - // 检查返回类型 - 使用 Int() 而不是 INT() - if (!ctx->funcType() || !ctx->funcType()->Int()) { - throw std::runtime_error(FormatError("irgen", "当前仅支持int函数")); + + std::shared_ptr ret_type = ir::Type::GetInt32Type(); + if (ctx->funcType()) { + if (ctx->funcType()->Void()) { + ret_type = ir::Type::GetVoidType(); + } else if (ctx->funcType()->Int()) { + ret_type = ir::Type::GetInt32Type(); + } else if (ctx->funcType()->Float()) { + ret_type = ir::Type::GetFloatType(); + } } - - // 创建函数 - func_ = module_.CreateFunction(funcName, ir::Type::GetInt32Type()); + + std::vector> param_types; + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param || !param->bType()) continue; + std::shared_ptr param_ty; + if (param->bType()->Int()) { + param_ty = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_ty = ir::Type::GetFloatType(); + } else { + param_ty = ir::Type::GetInt32Type(); + } + if (!param->L_BRACK().empty()) { + if (param_ty->IsInt32()) { + param_ty = ir::Type::GetPtrInt32Type(); + } else if (param_ty->IsFloat()) { + param_ty = ir::Type::GetPtrFloatType(); + } + } + param_types.push_back(param_ty); + } + } + + auto func_type = ir::Type::GetFunctionType(ret_type, param_types); + func_ = module_.CreateFunction(funcName, func_type); builder_.SetInsertPoint(func_->GetEntry()); storage_map_.clear(); - - // 生成函数体 - 使用 block() 而不是 blockStmt() + param_map_.clear(); + + // 函数参数 (按照语义分析、symbol table 定义顺序) + if (ctx->funcFParams()) { + for (auto* param : ctx->funcFParams()->funcFParam()) { + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); + std::shared_ptr param_ty; + if (param->bType()->Int()) { + param_ty = ir::Type::GetInt32Type(); + } else if (param->bType()->Float()) { + param_ty = ir::Type::GetFloatType(); + } else { + param_ty = ir::Type::GetInt32Type(); + } + if (!param->L_BRACK().empty()) { + if (param_ty->IsInt32()) { + param_ty = ir::Type::GetPtrInt32Type(); + } else if (param_ty->IsFloat()) { + param_ty = ir::Type::GetPtrFloatType(); + } + } + auto* arg = func_->AddArgument(std::make_unique(param_ty, name)); + ir::AllocaInst* slot; + if (param_ty->IsInt32() || param_ty->IsPtrInt32()) { + slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); + } else if (param_ty->IsFloat() || param_ty->IsPtrFloat()) { + slot = builder_.CreateAllocaFloat(module_.GetContext().NextTemp()); + } else { + throw std::runtime_error(FormatError("irgen", "不支持的参数类型")); + } + builder_.CreateStore(arg, slot); + param_map_[name] = slot; + } + } + + // 生成函数体 ctx->block()->accept(this); - - // 确保函数有返回值 + if (!func_->GetEntry()->HasTerminator()) { auto retVal = builder_.CreateConstInt(0); builder_.CreateRet(retVal); } - + VerifyFunctionStructure(*func_); + func_ = nullptr; return {}; } diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index fef78ea..cd78d93 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -19,26 +19,30 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句")); } - + // return 语句 - 通过 Return() 关键字判断 if (ctx->Return()) { return HandleReturnStmt(ctx); } - + + // 赋值语句 + if (ctx->lVal() && ctx->Assign() && ctx->exp()) { + return HandleAssignStmt(ctx); + } + // 块语句 if (ctx->block()) { return ctx->block()->accept(this); } - + // 空语句或表达式语句(先计算表达式) if (ctx->exp()) { EvalExpr(*ctx->exp()); return BlockFlow::Continue; } - + throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); } - IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); @@ -83,6 +87,42 @@ IRGenImpl::BlockFlow IRGenImpl::HandleContinueStmt(SysYParser::StmtContext* ctx) // 赋值语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { - // TODO: 实现赋值 - throw std::runtime_error(FormatError("irgen", "赋值语句暂未实现")); + if (!ctx || !ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("irgen", "非法赋值语句")); + } + + ir::Value* rhs = EvalExpr(*ctx->exp()); + if (!rhs) { + throw std::runtime_error(FormatError("irgen", "赋值 RHS 计算失败")); + } + + auto* lval = ctx->lVal(); + auto* decl = sema_.ResolveVarUse(lval); + ir::Value* ptr = nullptr; + if (decl) { + auto it = storage_map_.find(decl); + if (it != storage_map_.end()) { + ptr = it->second; + } + } + + if (!ptr && lval->Ident()) { + auto it = param_map_.find(lval->Ident()->getText()); + if (it != param_map_.end()) { + ptr = it->second; + } + if (!ptr) { + auto it2 = global_map_.find(lval->Ident()->getText()); + if (it2 != global_map_.end()) { + ptr = it2->second; + } + } + } + + if (!ptr) { + throw std::runtime_error(FormatError("irgen", "赋值目标缺少存储槽位: " + lval->getText())); + } + + builder_.CreateStore(rhs, ptr); + return BlockFlow::Continue; } diff --git a/test.c b/test.c new file mode 100644 index 0000000..76e8197 --- /dev/null +++ b/test.c @@ -0,0 +1 @@ +int main() { return 0; } diff --git a/test.sy b/test.sy new file mode 100644 index 0000000..76e8197 --- /dev/null +++ b/test.sy @@ -0,0 +1 @@ +int main() { return 0; } diff --git a/test2.sy b/test2.sy new file mode 100644 index 0000000..05e7a96 --- /dev/null +++ b/test2.sy @@ -0,0 +1 @@ +int add(int a, int b) { return a + b; } int main() { return add(1, 2); } From f53f7ec82c9d790dfce802d3a7db181178ca8b05 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Thu, 26 Mar 2026 19:40:59 +0800 Subject: [PATCH 27/39] =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 52 ++++++- include/irgen/IRGen.h | 58 +++++--- src/ir/IRBuilder.cpp | 217 ++++++++++++++++++++++++++++++ src/ir/IRPrinter.cpp | 66 ++++++++- src/ir/Instruction.cpp | 70 ++++++++++ src/ir/Module.cpp | 9 ++ src/irgen/IRGenDecl.cpp | 136 +++++++++++++++++-- src/irgen/IRGenExp.cpp | 291 ++++++++++++++++++++++++++++++---------- 8 files changed, 796 insertions(+), 103 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index 4ea12dc..5f87875 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -216,7 +216,16 @@ class ConstantInt : public ConstantValue { }; // 后续还需要扩展更多指令类型。 -enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret }; +enum class Opcode { + Add, Sub, Mul, + Alloca, Load, Store, Ret, + Div, Mod, + ICmpEQ, ICmpNE, + ICmpSLT, ICmpSLE, + ICmpSGT, ICmpSGE, + And, Or, Not, + GEP, Call, + }; // User 是所有“会使用其他 Value 作为输入”的 IR 对象的抽象基类。 // 当前实现中只有 Instruction 继承自 User。 @@ -287,6 +296,26 @@ class StoreInst : public Instruction { Value* GetPtr() const; }; +class GEPInst : public Instruction { + public: + GEPInst(std::shared_ptr ptr_ty, + Value* base, + const std::vector& indices, + const std::string& name); + Value* GetBase() const; + const std::vector& GetIndices() const; +}; + +class CallInst : public Instruction { + public: + CallInst(std::shared_ptr ret_ty, + Function* callee, + const std::vector& args, + const std::string& name); + Function* GetCallee() const; + const std::vector& GetArgs() const; +}; + // BasicBlock 已纳入 Value 体系,便于后续向更完整 IR 类图靠拢。 // 当前其类型仍使用 void 作为占位,后续可替换为专门的 label type。 class BasicBlock : public Value { @@ -346,6 +375,7 @@ class Module { // 创建函数时当前只显式传入返回类型,尚未接入完整的 FunctionType。 Function* CreateFunction(const std::string& name, std::shared_ptr ret_type); + Function* FindFunction(const std::string& name) const; const std::vector>& GetFunctions() const; private: @@ -369,6 +399,26 @@ class IRBuilder { StoreInst* CreateStore(Value* val, Value* ptr); ReturnInst* CreateRet(Value* v); + BinaryInst* CreateDiv(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateMod(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateMul(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateSub(Value* lhs, Value* rhs, const std::string& name); + + // 比较运算接口 + BinaryInst* CreateICmpEQ(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateICmpNE(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateICmpSLT(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateICmpSLE(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateICmpSGT(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateICmpSGE(Value* lhs, Value* rhs, const std::string& name); + + BinaryInst* CreateAnd(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateOr(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateNot(Value* val, const std::string& name); + + GEPInst* CreateGEP(Value* base, const std::vector& indices, const std::string& name); + CallInst* CreateCall(Function* callee, const std::vector& args, const std::string& name); + private: Context& ctx_; BasicBlock* insert_block_; diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 30b71c7..bf48098 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -21,7 +21,7 @@ class Value; } class IRGenImpl final : public SysYBaseVisitor { - public: +public: IRGenImpl(ir::Module& module, const SemanticContext& sema); // 顶层 @@ -29,36 +29,49 @@ class IRGenImpl final : public SysYBaseVisitor { std::any visitFuncDef(SysYParser::FuncDefContext* ctx) override; // 块 - std::any visitBlock(SysYParser::BlockContext* ctx) override; + std::any visitBlock(SysYParser::BlockContext* ctx) override; // 注意:规则名为 Block std::any visitBlockItem(SysYParser::BlockItemContext* ctx) override; // 声明 std::any visitDecl(SysYParser::DeclContext* ctx) override; std::any visitVarDef(SysYParser::VarDefContext* ctx) override; + std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override; + std::any visitConstDef(SysYParser::ConstDefContext* ctx) override; + std::any visitInitVal(SysYParser::InitValContext* ctx) override; + std::any visitConstInitVal(SysYParser::ConstInitValContext* ctx) override; // 语句 std::any visitStmt(SysYParser::StmtContext* ctx) override; // 表达式 - std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; + std::any visitExp(SysYParser::ExpContext* ctx) override; + std::any visitCond(SysYParser::CondContext* ctx) override; std::any visitLVal(SysYParser::LValContext* ctx) override; - std::any visitAddExp(SysYParser::AddExpContext* ctx) override; + std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; + std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override; + std::any visitFuncRParams(SysYParser::FuncRParamsContext* ctx) override; std::any visitMulExp(SysYParser::MulExpContext* ctx) override; + std::any visitAddExp(SysYParser::AddExpContext* ctx) override; std::any visitRelExp(SysYParser::RelExpContext* ctx) override; std::any visitEqExp(SysYParser::EqExpContext* ctx) override; - std::any visitCond(SysYParser::CondContext* ctx) override; + std::any visitLAndExp(SysYParser::LAndExpContext* ctx) override; + std::any visitLOrExp(SysYParser::LOrExpContext* ctx) override; + std::any visitConstExp(SysYParser::ConstExpContext* ctx) override; - private: - enum class BlockFlow { + // 辅助函数 + ir::Value* EvalExpr(SysYParser::ExpContext& expr); // 只保留一处 + ir::Value* EvalCond(SysYParser::CondContext& cond); + ir::Value* visitCallExp(SysYParser::UnaryExpContext* ctx); + +private: + // 辅助函数声明 + enum class BlockFlow{ Continue, Terminated, }; BlockFlow VisitBlockItemResult(SysYParser::BlockItemContext& item); - ir::Value* EvalExpr(SysYParser::ExpContext& expr); - ir::Value* EvalCond(SysYParser::CondContext& cond); - - // 辅助函数 + BlockFlow HandleReturnStmt(SysYParser::StmtContext* ctx); BlockFlow HandleIfStmt(SysYParser::StmtContext* ctx); BlockFlow HandleWhileStmt(SysYParser::StmtContext* ctx); @@ -66,20 +79,27 @@ class IRGenImpl final : public SysYBaseVisitor { BlockFlow HandleContinueStmt(SysYParser::StmtContext* ctx); BlockFlow HandleAssignStmt(SysYParser::StmtContext* ctx); - ir::Module& module_; - const SemanticContext& sema_; - ir::Function* func_; - ir::IRBuilder builder_; - // 名称绑定由 Sema 负责;IRGen 只维护“声明 -> 存储槽位”的代码生成状态。 - std::unordered_map storage_map_; - - // 循环栈,用于 break/continue + // 循环上下文结构 struct LoopContext { ir::BasicBlock* condBlock; ir::BasicBlock* bodyBlock; ir::BasicBlock* exitBlock; }; + + struct ArrayInfo { + std::vector elements; + std::vector dimensions; + }; + std::vector loopStack_; + + ir::Module& module_; + const SemanticContext& sema_; + ir::Function* func_; + ir::IRBuilder builder_; + std::unordered_map storage_map_; + std::unordered_map array_info_map_; + }; std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 90f03c4..950a1aa 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -86,4 +86,221 @@ ReturnInst* IRBuilder::CreateRet(Value* v) { return insert_block_->Append(Type::GetVoidType(), v); } +BinaryInst* IRBuilder::CreateDiv(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateDiv 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateDiv 缺少 rhs")); + } + return insert_block_->Append(Opcode::Div, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateMod(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMod 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMod 缺少 rhs")); + } + return insert_block_->Append(Opcode::Mod, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateICmpEQ(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpEQ 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpEQ 缺少 rhs")); + } + // 比较运算返回int32类型,0表示假,1表示真 + return insert_block_->Append(Opcode::ICmpEQ, Type::GetInt32Type(), lhs, rhs, name); +} + +// 不等于比较 +BinaryInst* IRBuilder::CreateICmpNE(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpNE 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpNE 缺少 rhs")); + } + return insert_block_->Append(Opcode::ICmpNE, Type::GetInt32Type(), lhs, rhs, name); +} + +// 有符号小于 +BinaryInst* IRBuilder::CreateICmpSLT(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSLT 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSLT 缺少 rhs")); + } + return insert_block_->Append(Opcode::ICmpSLT, Type::GetInt32Type(), lhs, rhs, name); +} + +// 有符号小于等于 +BinaryInst* IRBuilder::CreateICmpSLE(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSLE 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSLE 缺少 rhs")); + } + return insert_block_->Append(Opcode::ICmpSLE, Type::GetInt32Type(), lhs, rhs, name); +} + +// 有符号大于 +BinaryInst* IRBuilder::CreateICmpSGT(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSGT 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSGT 缺少 rhs")); + } + return insert_block_->Append(Opcode::ICmpSGT, Type::GetInt32Type(), lhs, rhs, name); +} + +// 有符号大于等于 +BinaryInst* IRBuilder::CreateICmpSGE(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSGE 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateICmpSGE 缺少 rhs")); + } + return insert_block_->Append(Opcode::ICmpSGE, Type::GetInt32Type(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateAnd(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAnd 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAnd 缺少 rhs")); + } + return insert_block_->Append(Opcode::And, Type::GetInt32Type(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateOr(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateOr 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateOr 缺少 rhs")); + } + return insert_block_->Append(Opcode::Or, Type::GetInt32Type(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateNot(Value* val, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!val) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateNot 缺少 operand")); + } + auto zero = CreateConstInt(0); + return CreateICmpEQ(val, zero, name); +} + +GEPInst* IRBuilder::CreateGEP(Value* base, + const std::vector& indices, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!base) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateGEP 缺少 base")); + } + + // 检查所有索引 + for (size_t i = 0; i < indices.size(); ++i) { + if (!indices[i]) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateGEP 索引 " + std::to_string(i) + " 为空")); + } + } + + // GEP返回指针类型,假设与base类型相同 + return insert_block_->Append(base->GetType(), base, indices, name); +} + +CallInst* IRBuilder::CreateCall(Function* callee, + const std::vector& args, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!callee) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateCall 缺少 callee")); + } + + // 检查所有参数 + for (size_t i = 0; i < args.size(); ++i) { + if (!args[i]) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCall 参数 " + std::to_string(i) + " 为空")); + } + } + + // Call返回函数的返回类型 + return insert_block_->Append(callee->GetType(), callee, args, name); +} + +BinaryInst* IRBuilder::CreateMul(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMul 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateMul 缺少 rhs")); + } + return CreateBinary(Opcode::Mul, lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateSub(Value* lhs, Value* rhs, const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateSub 缺少 lhs")); + } + if (!rhs) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateSub 缺少 rhs")); + } + return CreateBinary(Opcode::Sub, lhs, rhs, name); +} + } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 5b11d63..2475063 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -43,6 +43,32 @@ static const char* OpcodeToString(Opcode op) { return "store"; case Opcode::Ret: return "ret"; + case Opcode::Div: + return "div"; + case Opcode::Mod: + return "mod"; + case Opcode::ICmpEQ: + return "icmp eq"; + case Opcode::ICmpNE: + return "icmp ne"; + case Opcode::ICmpSLT: + return "icmp slt"; + case Opcode::ICmpSLE: + return "icmp sle"; + case Opcode::ICmpSGT: + return "icmp sgt"; + case Opcode::ICmpSGE: + return "icmp sge"; + case Opcode::And: + return "and"; + case Opcode::Or: + return "or"; + case Opcode::Not: + return "not"; + case Opcode::GEP: + return "getelementptr"; + case Opcode::Call: + return "call"; } return "?"; } @@ -68,7 +94,18 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { switch (inst->GetOpcode()) { case Opcode::Add: case Opcode::Sub: - case Opcode::Mul: { + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::And: + case Opcode::Not: + case Opcode::Or: + case Opcode::ICmpEQ: + case Opcode::ICmpNE: + case Opcode::ICmpSLT: + case Opcode::ICmpSLE: + case Opcode::ICmpSGT: + case Opcode::ICmpSGE:{ auto* bin = static_cast(inst); os << " " << bin->GetName() << " = " << OpcodeToString(bin->GetOpcode()) << " " @@ -100,6 +137,33 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { << ValueToString(ret->GetValue()) << "\n"; break; } + case Opcode::GEP:{ + // 简化打印:只打印基本信息和操作数数量 + os << " " << inst->GetName() << " = getelementptr "; + os << TypeToString(*inst->GetType()) << " ("; + for (size_t i = 0; i < inst->GetNumOperands(); ++i) { + if (i > 0) os << ", "; + os << ValueToString(inst->GetOperand(i)); + } + os << ")\n"; + break; + } + case Opcode::Call:{ + // 简化打印:只打印基本信息和操作数数量 + os << " " << inst->GetName() << " = call "; + os << TypeToString(*inst->GetType()) << " ("; + for (size_t i = 0; i < inst->GetNumOperands(); ++i) { + if (i > 0) os << ", "; + os << ValueToString(inst->GetOperand(i)); + } + os << ")\n"; + break; + } + default: { + // 处理未知操作码 + os << " ; 未知指令: " << OpcodeToString(inst->GetOpcode()) << "\n"; + break; + } } } } diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 7928716..351b6fb 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -148,4 +148,74 @@ Value* StoreInst::GetValue() const { return GetOperand(0); } Value* StoreInst::GetPtr() const { return GetOperand(1); } +GEPInst::GEPInst(std::shared_ptr ptr_ty, + Value* base, + const std::vector& indices, + const std::string& name) + : Instruction(Opcode::GEP, ptr_ty, name) { + // 添加base作为第一个操作数 + AddOperand(base); + + // 添加所有索引作为后续操作数 + for (auto* index : indices) { + AddOperand(index); + } +} + +Value* GEPInst::GetBase() const { + // 第一个操作数是base + return GetOperand(0); +} + +const std::vector& GEPInst::GetIndices() const { + // 需要返回索引列表,但Instruction只存储操作数 + // 这是一个设计问题:要么修改架构,要么提供辅助方法 + + // 简化实现:返回空vector(或创建临时vector) + static std::vector indices; + indices.clear(); + + // 索引从操作数1开始 + for (size_t i = 1; i < GetNumOperands(); ++i) { + indices.push_back(GetOperand(i)); + } + + return indices; +} + +// CallInst构造函数实现 +CallInst::CallInst(std::shared_ptr ret_ty, + Function* callee, + const std::vector& args, + const std::string& name) + : Instruction(Opcode::Call, ret_ty, name) { + // 添加callee作为第一个操作数 + AddOperand(callee); + + // 添加所有参数作为后续操作数 + for (auto* arg : args) { + AddOperand(arg); + } +} + +Function* CallInst::GetCallee() const { + // 第一个操作数是callee + return dynamic_cast(GetOperand(0)); +} + +const std::vector& CallInst::GetArgs() const { + // 需要返回参数列表,但Instruction只存储操作数 + // 简化实现:返回空vector(或创建临时vector) + static std::vector args; + args.clear(); + + // 参数从操作数1开始 + for (size_t i = 1; i < GetNumOperands(); ++i) { + args.push_back(GetOperand(i)); + } + + return args; +} + } // namespace ir + diff --git a/src/ir/Module.cpp b/src/ir/Module.cpp index 928efdc..c3a61f5 100644 --- a/src/ir/Module.cpp +++ b/src/ir/Module.cpp @@ -14,6 +14,15 @@ Function* Module::CreateFunction(const std::string& name, return functions_.back().get(); } +Function* Module::FindFunction(const std::string& name) const { + for (const auto& func : functions_) { + if (func->GetName() == name) { + return func.get(); + } + } + return nullptr; +} + const std::vector>& Module::GetFunctions() const { return functions_; } diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 7ca55d0..34428c3 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -37,9 +37,53 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { } } - // 处理 constDecl(暂不支持) + // 处理 constDecl if (ctx->constDecl()) { - throw std::runtime_error(FormatError("irgen", "常量声明暂未实现")); + auto* constDecl = ctx->constDecl(); + + if (constDecl->bType() && constDecl->bType()->Int()) { + for (auto* constDef : constDecl->constDef()) { + constDef->accept(this); + } + } else if (constDecl->bType() && constDecl->bType()->Float()) { + throw std::runtime_error(FormatError("irgen", "float常量暂未实现")); + } else { + throw std::runtime_error(FormatError("irgen", "未知的常量类型")); + } + } + return {}; +} + +// 实现常量定义 +std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法常量定义")); + } + + std::string const_name = ctx->Ident()->getText(); + + // 检查是否为数组 + bool is_array = !ctx->constExp().empty(); + + if (is_array) { + // 数组常量 + throw std::runtime_error(FormatError("irgen", "数组常量暂未实现")); + } else { + // 标量常量 + if (!ctx->constInitVal()) { + throw std::runtime_error(FormatError("irgen", "常量缺少初始值")); + } + + // 处理常量初始化值 + auto* const_init_val = ctx->constInitVal(); + + if (const_init_val->constExp()) { + // 常量表达式求值需要语义分析支持 + throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); + } else { + // 聚合初始化 + throw std::runtime_error(FormatError("irgen", "常量聚合初始化暂未实现")); + } } return {}; @@ -61,23 +105,87 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); } - // 分配存储 - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); - storage_map_[ctx] = slot; + bool is_array = !ctx->constExp().empty(); - ir::Value* init = nullptr; - // 使用 initVal() 而不是 initValue() - if (auto* initVal = ctx->initVal()) { - if (initVal->exp()) { - init = EvalExpr(*initVal->exp()); + if (is_array) { + // 数组变量 + // 获取数组维度(简化处理) + int array_size = 10; // 默认数组大小 + + if (!ctx->constExp().empty()) { + // 尝试获取数组大小(需要常量表达式求值) + // 简化:假设第一个维度为10 + array_size = 10; + } + + // 分配数组存储(简化:为每个元素分配独立存储) + if (array_size > 100) { + throw std::runtime_error(FormatError("irgen", "数组大小太大")); + } + + std::vector element_slots; + for (int i = 0; i < array_size; i++) { + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + std::to_string(i)); + element_slots.push_back(slot); + } + // 处理初始化 + if (auto* initVal = ctx->initVal()) { + if (initVal->exp()) { + // 标量初始化(只初始化第一个元素) + ir::Value* init = EvalExpr(*initVal->exp()); + builder_.CreateStore(init, element_slots[0]); + + // 其他元素初始化为0 + for (int i = 1; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } else { + // 聚合初始化 + throw std::runtime_error(FormatError("irgen", "数组聚合初始化暂未实现")); + } + }else { + // 无初始化,所有元素初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } + + // 存储第一个元素的地址 + storage_map_[ctx] = element_slots[0]; + + // 保存数组信息 + ArrayInfo info; + info.elements = element_slots; + info.dimensions = {array_size}; + array_info_map_[ctx] = info; + } else { + // 标量变量 + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); + storage_map_[ctx] = slot; + + ir::Value* init = nullptr; + if (auto* initVal = ctx->initVal()) { + if (initVal->exp()) { + init = EvalExpr(*initVal->exp()); + } else { + // 聚合初始化(对于标量,大括号内应该只有一个值) + auto initVals = initVal->initVal(); + if (initVals.empty()) { + init = builder_.CreateConstInt(0); + } else if (initVals.size() == 1) { + init = std::any_cast(initVals[0]->accept(this)); + } else { + throw std::runtime_error( + FormatError("irgen", "标量变量聚合初始化只能有一个值")); + } + } } else { - // 数组初始化暂不支持 init = builder_.CreateConstInt(0); } - } else { - init = builder_.CreateConstInt(0); + + builder_.CreateStore(init, slot); } - builder_.CreateStore(init, slot); return {}; } + diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index acf9d9c..9a72deb 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -105,100 +105,255 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 加法表达式 std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "非法加法表达式")); - } - - // 注意:mulExp() 返回的是 MulExpContext*,不是 vector - // 需要递归处理 AddExp 的左结合性 - // AddExp : MulExp | AddExp ('+' | '-') MulExp - - // 先处理左操作数 - ir::Value* result = nullptr; - - // 如果有左子节点(AddExp),递归处理 - if (ctx->addExp()) { - result = std::any_cast(ctx->addExp()->accept(this)); - } else { - // 否则是 MulExp - result = std::any_cast(ctx->mulExp()->accept(this)); + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法加法表达式")); + + if (!ctx->addExp()) { + return ctx->mulExp()->accept(this); } - - // 如果有运算符和右操作数 - if (ctx->AddOp() || ctx->SubOp()) { - ir::Value* rhs = std::any_cast(ctx->mulExp()->accept(this)); - - if (ctx->AddOp()) { - result = builder_.CreateAdd(result, rhs, module_.GetContext().NextTemp()); - } else if (ctx->SubOp()) { - // 减法:a - b = a + (-b) - // 暂时用加法,后续需要实现真正的减法 - result = builder_.CreateAdd(result, rhs, module_.GetContext().NextTemp()); - } + + ir::Value* left = std::any_cast(ctx->addExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->mulExp()->accept(this)); + if (ctx->AddOp()) { + return builder_.CreateAdd(left, right, module_.GetContext().NextTemp()); + } else if (ctx->SubOp()) { + return builder_.CreateSub(left, right, module_.GetContext().NextTemp()); } - - return static_cast(result); + throw std::runtime_error(FormatError("irgen", "未知的加法操作符")); } // 在 IRGenExp.cpp 中添加 -// 简化版 visitMulExp +// visitMulExp std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); - } - - // 暂时只返回 unaryExp 的值 - if (ctx->unaryExp()) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); + + // 如果是基本形式 UnaryExp + if (!ctx->mulExp()) { return ctx->unaryExp()->accept(this); } - - // 如果有 mulExp 子节点,递归处理 - if (ctx->mulExp()) { - return ctx->mulExp()->accept(this); + + // 否则有左子节点和操作符 + ir::Value* left = std::any_cast(ctx->mulExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->unaryExp()->accept(this)); + std::string op; + if (ctx->MulOp()) op = "*"; + else if (ctx->DivOp()) op = "/"; + else if (ctx->QuoOp()) op = "%"; + else throw std::runtime_error(FormatError("irgen", "缺少乘法类操作符")); + + if (op == "*") { + return builder_.CreateMul(left, right, module_.GetContext().NextTemp()); + } else if (op == "/") { + return builder_.CreateDiv(left, right, module_.GetContext().NextTemp()); + } else if (op == "%") { + return builder_.CreateMod(left, right, module_.GetContext().NextTemp()); } - - throw std::runtime_error(FormatError("irgen", "乘法表达式暂未实现")); + throw std::runtime_error(FormatError("irgen", "未知的乘法操作符")); } -// 关系表达式(暂未完整实现) +// 关系表达式 std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "非法关系表达式")); - } - - // 简化:返回 addExp 的值 - if (ctx->addExp()) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法关系表达式")); + + if (!ctx->relExp()) { return ctx->addExp()->accept(this); } - - throw std::runtime_error(FormatError("irgen", "关系表达式暂未实现")); + + ir::Value* left = std::any_cast(ctx->relExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->addExp()->accept(this)); + + if (ctx->LOp()) { + return builder_.CreateICmpSLT(left, right, module_.GetContext().NextTemp()); + } else if (ctx->GOp()) { + return builder_.CreateICmpSGT(left, right, module_.GetContext().NextTemp()); + } else if (ctx->LeOp()) { + return builder_.CreateICmpSLE(left, right, module_.GetContext().NextTemp()); + } else if (ctx->GeOp()) { + return builder_.CreateICmpSGE(left, right, module_.GetContext().NextTemp()); + } + throw std::runtime_error(FormatError("irgen", "未知的关系操作符")); } -// 相等表达式(暂未完整实现) +// 相等表达式 std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "非法相等表达式")); - } - - // 简化:返回 relExp 的值 - if (ctx->relExp()) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法相等表达式")); + + if (!ctx->eqExp()) { return ctx->relExp()->accept(this); } - - throw std::runtime_error(FormatError("irgen", "相等表达式暂未实现")); + + ir::Value* left = std::any_cast(ctx->eqExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->relExp()->accept(this)); + + if (ctx->EqOp()) { + return builder_.CreateICmpEQ(left, right, module_.GetContext().NextTemp()); + } else if (ctx->NeOp()) { + return builder_.CreateICmpNE(left, right, module_.GetContext().NextTemp()); + } + throw std::runtime_error(FormatError("irgen", "未知的相等操作符")); +} + +// 逻辑与 +std::any IRGenImpl::visitLAndExp(SysYParser::LAndExpContext* ctx) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑与表达式")); + + if (!ctx->lAndExp()) { + return ctx->eqExp()->accept(this); + } + + ir::Value* left = std::any_cast(ctx->lAndExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->eqExp()->accept(this)); + auto zero = builder_.CreateConstInt(0); + auto left_bool = builder_.CreateICmpNE(left, zero, module_.GetContext().NextTemp()); + auto right_bool = builder_.CreateICmpNE(right, zero, module_.GetContext().NextTemp()); + return builder_.CreateAnd(left_bool, right_bool, module_.GetContext().NextTemp()); +} + +// 逻辑或 +std::any IRGenImpl::visitLOrExp(SysYParser::LOrExpContext* ctx) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑或表达式")); + + if (!ctx->lOrExp()) { + return ctx->lAndExp()->accept(this); + } + + ir::Value* left = std::any_cast(ctx->lOrExp()->accept(this)); + ir::Value* right = std::any_cast(ctx->lAndExp()->accept(this)); + auto zero = builder_.CreateConstInt(0); + auto left_bool = builder_.CreateICmpNE(left, zero, module_.GetContext().NextTemp()); + auto right_bool = builder_.CreateICmpNE(right, zero, module_.GetContext().NextTemp()); + return builder_.CreateOr(left_bool, right_bool, module_.GetContext().NextTemp()); +} + +std::any IRGenImpl::visitExp(SysYParser::ExpContext* ctx) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法表达式")); + return ctx->addExp()->accept(this); } -// 条件表达式 std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { + if (!ctx) throw std::runtime_error(FormatError("irgen", "非法条件表达式")); + return ctx->lOrExp()->accept(this); +} + +ir::Value* IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法函数调用")); + } + + std::string funcName = ctx->Ident()->getText(); + + // 语义检查(如果需要) + // auto* funcDecl = sema_.ResolveFuncCall(ctx); + // if (!funcDecl) throw ... + + // 收集实参 + std::vector args; + if (ctx->funcRParams()) { + auto argList = ctx->funcRParams()->accept(this); + args = std::any_cast>(argList); + } + + // 查找函数对象 + ir::Function* callee = module_.FindFunction(funcName); + if (!callee) { + throw std::runtime_error(FormatError("irgen", "未找到函数: " + funcName)); + } + + // 生成调用指令 + return builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); +} + +// 实现一元表达式 +std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { if (!ctx) { - throw std::runtime_error(FormatError("irgen", "非法条件表达式")); + throw std::runtime_error(FormatError("irgen", "非法一元表达式")); + } + + // 基本表达式 + if (ctx->primaryExp()) { + return ctx->primaryExp()->accept(this); } - // 简化:返回 lOrExp 的值 - if (ctx->lOrExp()) { - return ctx->lOrExp()->accept(this); + // 函数调用 + if (ctx->Ident()) { + return visitCallExp(ctx); } - throw std::runtime_error(FormatError("irgen", "条件表达式暂未实现")); + // 一元运算 + if (ctx->unaryOp() && ctx->unaryExp()) { + auto* operand = std::any_cast(ctx->unaryExp()->accept(this)); + std::string op = ctx->unaryOp()->getText(); + + if (op == "+") { + // +x 等价于 x + return operand; + } else if (op == "-") { + // -x 等价于 0 - x + ir::Value* zero = builder_.CreateConstInt(0); + return static_cast( + builder_.CreateBinary(ir::Opcode::Sub, zero, operand, + module_.GetContext().NextTemp())); + } else if (op == "!") { + return builder_.CreateNot(operand, module_.GetContext().NextTemp()); + } + } + + throw std::runtime_error(FormatError("irgen", "暂不支持的一元表达式形式")); +} + +// 实现函数调用 +std::any IRGenImpl::visitFuncRParams(SysYParser::FuncRParamsContext* ctx) { + if (!ctx) return std::vector{}; + std::vector args; + for (auto* exp : ctx->exp()) { + args.push_back(EvalExpr(*exp)); + } + return args; +} + +std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { + // 常量声明在编译时求值,不分配存储。只需遍历常量定义,将常量值存入符号表即可。 + // 由于 IRGen 阶段不需要常量的存储槽位,这里只触发子节点访问(常量定义会处理值)。 + for (auto* constDef : ctx->constDef()) { + constDef->accept(this); + } + return {}; +} + +std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { + // 常量初始化值可能是单一常量表达式,也可能是大括号列表(聚合)。 + // 为简化,我们仅支持单一表达式(标量常量),数组常量暂未实现。 + if (ctx->constExp()) { + // 常量表达式求值:需要语义分析支持常量折叠,这里我们返回求值后的常量值。 + // 假设 sema_ 有方法 EvaluateConstExp 返回 int。 + auto* constExp = ctx->constExp(); + // 通过语义分析求值(暂未实现,先抛异常) + // int val = sema_.EvaluateConstExp(constExp); + // return builder_.CreateConstInt(val); + throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); + } else { + // 聚合初始化:返回数组值,暂未实现 + throw std::runtime_error(FormatError("irgen", "常量聚合初始化暂未实现")); + } +} + +std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { + // 返回初始化的值(可能是单个表达式或聚合列表) + if (ctx->exp()) { + return EvalExpr(*ctx->exp()); + } else { + // 聚合初始化:需要返回一个列表,暂未实现 + throw std::runtime_error(FormatError("irgen", "聚合初始化暂未实现")); + } +} + +std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { + // 常量表达式由 AddExp 构成,我们直接复用表达式求值(但需要常量折叠)。 + // 由于常量表达式在编译时求值,IR 生成阶段其实不需要计算值,语义分析会提供。 + // 这里我们只用来获取 IR 值(例如数组大小),但数组大小需要在 IR 生成前就知道。 + // 暂时复用 EvalExpr(但 EvalExpr 生成 IR 指令,这不合适)。实际上常量表达式应在语义分析阶段求值,IRGen 直接使用结果。 + // 为避免复杂,我们暂时返回表达式的 IR 值(但会产生计算指令,不适合数组大小)。 + // 更好的做法是调用语义分析求值。 + // 这里先抛异常,等待语义团队提供接口。 + throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); } From 97c01debbdcd8f0e97284c20a4f9231a774db883 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Thu, 26 Mar 2026 21:38:14 +0800 Subject: [PATCH 28/39] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E4=BD=86=E6=9C=89=E5=87=BD=E6=95=B0=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/irgen/IRGenExp.cpp | 220 +++++++++++++++++++++++++++++------------ 1 file changed, 158 insertions(+), 62 deletions(-) diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 9a72deb..2ff3bd7 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -22,9 +22,38 @@ // - ... ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { - return std::any_cast(expr.accept(this)); + try { + auto result_any = expr.accept(this); + + if (!result_any.has_value()) { + std::cerr << "[ERROR] EvalExpr: result_any has no value" << std::endl; + throw std::runtime_error("表达式求值结果为空"); + } + + try { + ir::Value* result = std::any_cast(result_any); + std::cerr << "[DEBUG] EvalExpr: success, result = " << (void*)result << std::endl; + return result; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] EvalExpr: bad any_cast - " << e.what() << std::endl; + std::cerr << " Type info: " << result_any.type().name() << std::endl; + + // 尝试其他可能的类型 + try { + // 检查是否是无值的any(可能来自visit函数返回{}) + std::cerr << "[DEBUG] EvalExpr: Trying to handle empty any" << std::endl; + return nullptr; + } catch (...) { + throw std::runtime_error(FormatError("irgen", "表达式求值返回了错误的类型")); + } + } + } catch (const std::exception& e) { + std::cerr << "[ERROR] Exception in EvalExpr: " << e.what() << std::endl; + throw; + } } + ir::Value* IRGenImpl::EvalCond(SysYParser::CondContext& cond) { return std::any_cast(cond.accept(this)); } @@ -35,62 +64,70 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "缺少基本表达式")); } + std::cerr << "[DEBUG] visitPrimaryExp" << std::endl; + // 处理数字字面量 if (ctx->DECIMAL_INT()) { int value = std::stoi(ctx->DECIMAL_INT()->getText()); - return static_cast(builder_.CreateConstInt(value)); + ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant int " << value + << " created as " << (void*)const_int << std::endl; + return static_cast(const_int); } if (ctx->HEX_INT()) { std::string hex = ctx->HEX_INT()->getText(); int value = std::stoi(hex, nullptr, 16); - return static_cast(builder_.CreateConstInt(value)); + ir::Value* const_int = builder_.CreateConstInt(value); + return static_cast(const_int); } if (ctx->OCTAL_INT()) { std::string oct = ctx->OCTAL_INT()->getText(); int value = std::stoi(oct, nullptr, 8); - return static_cast(builder_.CreateConstInt(value)); + ir::Value* const_int = builder_.CreateConstInt(value); + return static_cast(const_int); } if (ctx->ZERO()) { - return static_cast(builder_.CreateConstInt(0)); + ir::Value* const_int = builder_.CreateConstInt(0); + return static_cast(const_int); } // 处理变量 if (ctx->lVal()) { + std::cerr << "[DEBUG] visitPrimaryExp: visiting lVal" << std::endl; return ctx->lVal()->accept(this); } // 处理括号表达式 if (ctx->L_PAREN() && ctx->exp()) { + std::cerr << "[DEBUG] visitPrimaryExp: visiting parenthesized expression" << std::endl; return EvalExpr(*ctx->exp()); } + std::cerr << "[ERROR] visitPrimaryExp: unsupported primary expression type" << std::endl; throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } -// 左值(变量)处理 -// 1. 先通过语义分析结果把变量使用绑定回声明; -// 2. 再通过 storage_map_ 找到该声明对应的栈槽位; -// 3. 最后生成 load,把内存中的值读出来。 +// visitLVal std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); } std::string varName = ctx->Ident()->getText(); + std::cerr << "[DEBUG] visitLVal: " << varName << std::endl; // 从语义分析获取变量定义 auto* decl = sema_.ResolveVarUse(ctx); if (!decl) { - auto* const_def = sema_.ResolveConstUse(ctx); - if (!const_def) { + throw std::runtime_error( FormatError("irgen", - "使用缺少语义绑定: " + varName); - } + "变量使用缺少语义绑定: " + varName)); } + // 使用 storage_map_ 而不是 varNameToSlot_ auto it = storage_map_.find(decl); if (it == storage_map_.end()) { throw std::runtime_error( @@ -98,26 +135,49 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { "变量声明缺少存储槽位: " + varName)); } - return static_cast( - builder_.CreateLoad(it->second, module_.GetContext().NextTemp())); + ir::Value* load_result = builder_.CreateLoad(it->second, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: created load, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); } // 加法表达式 std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { - if (!ctx) throw std::runtime_error(FormatError("irgen", "非法加法表达式")); - + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法加法表达式")); + } + + // 如果没有 addExp(),说明是单个 mulExp() if (!ctx->addExp()) { return ctx->mulExp()->accept(this); } - ir::Value* left = std::any_cast(ctx->addExp()->accept(this)); - ir::Value* right = std::any_cast(ctx->mulExp()->accept(this)); + // 正确提取左操作数 + auto left_any = ctx->addExp()->accept(this); + if (!left_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "左操作数求值失败")); + } + ir::Value* left = std::any_cast(left_any); + + // 正确提取右操作数 + auto right_any = ctx->mulExp()->accept(this); + if (!right_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "右操作数求值失败")); + } + ir::Value* right = std::any_cast(right_any); + + std::cerr << "[DEBUG] visitAddExp: left=" << (void*)left << ", right=" << (void*)right << std::endl; + + // 根据操作符生成相应的指令 if (ctx->AddOp()) { - return builder_.CreateAdd(left, right, module_.GetContext().NextTemp()); + return static_cast( + builder_.CreateAdd(left, right, module_.GetContext().NextTemp())); } else if (ctx->SubOp()) { - return builder_.CreateSub(left, right, module_.GetContext().NextTemp()); + return static_cast( + builder_.CreateSub(left, right, module_.GetContext().NextTemp())); } + throw std::runtime_error(FormatError("irgen", "未知的加法操作符")); } @@ -125,53 +185,42 @@ std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { // visitMulExp std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { - if (!ctx) throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); - + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); + } + // 如果是基本形式 UnaryExp if (!ctx->mulExp()) { return ctx->unaryExp()->accept(this); } - - // 否则有左子节点和操作符 - ir::Value* left = std::any_cast(ctx->mulExp()->accept(this)); - ir::Value* right = std::any_cast(ctx->unaryExp()->accept(this)); - std::string op; - if (ctx->MulOp()) op = "*"; - else if (ctx->DivOp()) op = "/"; - else if (ctx->QuoOp()) op = "%"; - else throw std::runtime_error(FormatError("irgen", "缺少乘法类操作符")); - - if (op == "*") { - return builder_.CreateMul(left, right, module_.GetContext().NextTemp()); - } else if (op == "/") { - return builder_.CreateDiv(left, right, module_.GetContext().NextTemp()); - } else if (op == "%") { - return builder_.CreateMod(left, right, module_.GetContext().NextTemp()); + + // 提取左操作数 + auto left_any = ctx->mulExp()->accept(this); + if (!left_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "左操作数求值失败")); } - throw std::runtime_error(FormatError("irgen", "未知的乘法操作符")); -} - -// 关系表达式 -std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { - if (!ctx) throw std::runtime_error(FormatError("irgen", "非法关系表达式")); - - if (!ctx->relExp()) { - return ctx->addExp()->accept(this); + ir::Value* left = std::any_cast(left_any); + + // 提取右操作数 + auto right_any = ctx->unaryExp()->accept(this); + if (!right_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "右操作数求值失败")); } - - ir::Value* left = std::any_cast(ctx->relExp()->accept(this)); - ir::Value* right = std::any_cast(ctx->addExp()->accept(this)); - - if (ctx->LOp()) { - return builder_.CreateICmpSLT(left, right, module_.GetContext().NextTemp()); - } else if (ctx->GOp()) { - return builder_.CreateICmpSGT(left, right, module_.GetContext().NextTemp()); - } else if (ctx->LeOp()) { - return builder_.CreateICmpSLE(left, right, module_.GetContext().NextTemp()); - } else if (ctx->GeOp()) { - return builder_.CreateICmpSGE(left, right, module_.GetContext().NextTemp()); + ir::Value* right = std::any_cast(right_any); + + // 根据操作符生成指令 + if (ctx->MulOp()) { + return static_cast( + builder_.CreateMul(left, right, module_.GetContext().NextTemp())); + } else if (ctx->DivOp()) { + return static_cast( + builder_.CreateDiv(left, right, module_.GetContext().NextTemp())); + } else if (ctx->QuoOp()) { + return static_cast( + builder_.CreateMod(left, right, module_.GetContext().NextTemp())); } - throw std::runtime_error(FormatError("irgen", "未知的关系操作符")); + + throw std::runtime_error(FormatError("irgen", "未知的乘法操作符")); } // 相等表达式 @@ -326,7 +375,7 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { if (ctx->constExp()) { // 常量表达式求值:需要语义分析支持常量折叠,这里我们返回求值后的常量值。 // 假设 sema_ 有方法 EvaluateConstExp 返回 int。 - auto* constExp = ctx->constExp(); + // auto* constExp = ctx->constExp(); // 这行可以删除,因为不需要使用 // 通过语义分析求值(暂未实现,先抛异常) // int val = sema_.EvaluateConstExp(constExp); // return builder_.CreateConstInt(val); @@ -348,6 +397,9 @@ std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { } std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { + // 消除未使用参数警告 + (void)ctx; // 明确表示参数未使用 + // 常量表达式由 AddExp 构成,我们直接复用表达式求值(但需要常量折叠)。 // 由于常量表达式在编译时求值,IR 生成阶段其实不需要计算值,语义分析会提供。 // 这里我们只用来获取 IR 值(例如数组大小),但数组大小需要在 IR 生成前就知道。 @@ -357,3 +409,47 @@ std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { // 这里先抛异常,等待语义团队提供接口。 throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); } + +std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法关系表达式")); + } + + // 如果是基本形式 AddExp + if (!ctx->relExp()) { + return ctx->addExp()->accept(this); + } + + // 提取左操作数 + auto left_any = ctx->relExp()->accept(this); + if (!left_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "左操作数求值失败")); + } + ir::Value* left = std::any_cast(left_any); + + // 提取右操作数 + auto right_any = ctx->addExp()->accept(this); + if (!right_any.has_value()) { + throw std::runtime_error(FormatError("irgen", "右操作数求值失败")); + } + ir::Value* right = std::any_cast(right_any); + + // 根据操作符生成相应的比较指令 + std::string op = ctx->relExp()->getText(); + + if (op == "<") { + return static_cast( + builder_.CreateICmpSLT(left, right, module_.GetContext().NextTemp())); + } else if (op == ">") { + return static_cast( + builder_.CreateICmpSGT(left, right, module_.GetContext().NextTemp())); + } else if (op == "<=") { + return static_cast( + builder_.CreateICmpSLE(left, right, module_.GetContext().NextTemp())); + } else if (op == ">=") { + return static_cast( + builder_.CreateICmpSGE(left, right, module_.GetContext().NextTemp())); + } + + throw std::runtime_error(FormatError("irgen", "未知的关系操作符: " + op)); +} \ No newline at end of file From 9c7095bba70632e93bce736192978c36ab7b8c73 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Fri, 27 Mar 2026 09:40:11 +0800 Subject: [PATCH 29/39] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/irgen/IRGen.h | 2 +- src/irgen/IRGenExp.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index bf48098..918229d 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -99,7 +99,7 @@ private: ir::IRBuilder builder_; std::unordered_map storage_map_; std::unordered_map array_info_map_; - + ir::Value* EvalAssign(SysYParser::StmtContext* ctx); }; std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 2ff3bd7..ccc7413 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -452,4 +452,36 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { } throw std::runtime_error(FormatError("irgen", "未知的关系操作符: " + op)); +} + +//赋值 +ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { + if (!ctx || !ctx->lVal() || !ctx->exp()) { + throw std::runtime_error(FormatError("irgen", "非法赋值语句")); + } + + // 计算右值 + ir::Value* rhs = EvalExpr(*ctx->exp()); + + // 获取左值地址 + std::string varName = ctx->lVal()->Ident()->getText(); + + // 从语义分析获取变量定义 + auto* decl = sema_.ResolveVarUse(ctx->lVal()); + if (!decl) { + throw std::runtime_error( + FormatError("irgen", "变量使用缺少语义绑定: " + varName)); + } + + // 从storage_map_获取存储位置 + auto it = storage_map_.find(decl); + if (it == storage_map_.end()) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } + + // 生成store指令 + builder_.CreateStore(rhs, it->second); + + return rhs; } \ No newline at end of file From 5e7e8a6ff292393c187f19d9db9fd6b192615a8a Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Fri, 27 Mar 2026 16:16:03 +0800 Subject: [PATCH 30/39] =?UTF-8?q?=E6=95=B0=E7=BB=84=E6=9C=AA=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ir/IRBuilder.cpp | 57 +++++++++++++++++- src/ir/Instruction.cpp | 65 +++++++++++++++++--- src/irgen/IRGenDecl.cpp | 103 ++++++++++++++++++++++++++++++-- src/irgen/IRGenExp.cpp | 129 +++++++++++++++++++++++++++++++--------- 4 files changed, 313 insertions(+), 41 deletions(-) diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 950a1aa..0bddcd9 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -34,7 +34,62 @@ BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, throw std::runtime_error( FormatError("ir", "IRBuilder::CreateBinary 缺少 rhs")); } - return insert_block_->Append(op, lhs->GetType(), lhs, rhs, name); + + // 检查操作码是否为有效的二元操作符 + switch (op) { + case Opcode::Add: + case Opcode::Sub: + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::ICmpEQ: + case Opcode::ICmpNE: + case Opcode::ICmpSLT: + case Opcode::ICmpSLE: + case Opcode::ICmpSGT: + case Opcode::ICmpSGE: + case Opcode::And: + case Opcode::Or: + // 有效的二元操作符 + break; + case Opcode::Not: + // Not是一元操作符,不应该在BinaryInst中 + throw std::runtime_error(FormatError("ir", "Not是一元操作符,应使用其他指令")); + default: + throw std::runtime_error(FormatError("ir", "BinaryInst 不支持的操作码")); + } + + // 确定结果类型 + std::shared_ptr result_type; + + // 检查操作数类型是否相同 + if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "CreateBinary 操作数类型不匹配")); + } + + // 根据操作符确定结果类型 + bool is_compare = (op == Opcode::ICmpEQ || op == Opcode::ICmpNE || + op == Opcode::ICmpSLT || op == Opcode::ICmpSLE || + op == Opcode::ICmpSGT || op == Opcode::ICmpSGE); + + bool is_logical = (op == Opcode::And || op == Opcode::Or); + + if (is_compare || is_logical) { + // 比较和逻辑运算的结果是 int32(布尔值) + result_type = Type::GetInt32Type(); + } else { + // 算术运算的结果类型与操作数相同 + result_type = lhs->GetType(); + } + + // 检查操作数类型是否支持 + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "CreateBinary 只支持 int32 和 float 类型")); + } + + return insert_block_->Append(op, result_type, lhs, rhs, name); } BinaryInst* IRBuilder::CreateAdd(Value* lhs, Value* rhs, diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 351b6fb..a84e0c3 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -61,22 +61,73 @@ void Instruction::SetParent(BasicBlock* parent) { parent_ = parent; } BinaryInst::BinaryInst(Opcode op, std::shared_ptr ty, Value* lhs, Value* rhs, std::string name) : Instruction(op, std::move(ty), std::move(name)) { - if (op != Opcode::Add) { - throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 Add")); + // 检查操作码是否为有效的二元操作符 + switch (op) { + case Opcode::Add: + case Opcode::Sub: + case Opcode::Mul: + case Opcode::Div: + case Opcode::Mod: + case Opcode::ICmpEQ: + case Opcode::ICmpNE: + case Opcode::ICmpSLT: + case Opcode::ICmpSLE: + case Opcode::ICmpSGT: + case Opcode::ICmpSGE: + case Opcode::And: + case Opcode::Or: + // 有效的二元操作符 + break; + case Opcode::Not: + // Not是一元操作符,不应该在BinaryInst中 + throw std::runtime_error(FormatError("ir", "Not是一元操作符,应使用其他指令")); + default: + throw std::runtime_error(FormatError("ir", "BinaryInst 不支持的操作码")); } + if (!lhs || !rhs) { throw std::runtime_error(FormatError("ir", "BinaryInst 缺少操作数")); } + if (!type_ || !lhs->GetType() || !rhs->GetType()) { throw std::runtime_error(FormatError("ir", "BinaryInst 缺少类型信息")); } - if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind() || - type_->GetKind() != lhs->GetType()->GetKind()) { - throw std::runtime_error(FormatError("ir", "BinaryInst 类型不匹配")); + + // 对于比较操作,结果类型是i1,但我们的类型系统可能还没有i1 + // 暂时简化:所有操作都返回i32,比较操作返回0或1 + // 检查操作数类型是否匹配 + if (lhs->GetType()->GetKind() != rhs->GetType()->GetKind()) { + throw std::runtime_error(FormatError("ir", "BinaryInst 操作数类型不匹配")); + } + + // 检查操作数类型是否支持 + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "BinaryInst 只支持 int32 和 float 类型")); } - if (!type_->IsInt32()) { - throw std::runtime_error(FormatError("ir", "BinaryInst 当前只支持 i32")); + + // 对于算术运算,结果类型应与操作数类型相同 + // 对于比较运算,结果类型是int32(布尔值) + bool is_compare = (op == Opcode::ICmpEQ || op == Opcode::ICmpNE || + op == Opcode::ICmpSLT || op == Opcode::ICmpSLE || + op == Opcode::ICmpSGT || op == Opcode::ICmpSGE); + + bool is_logical = (op == Opcode::And || op == Opcode::Or); + + if (is_compare || is_logical) { + // 比较和逻辑运算的结果应该是整数类型 + if (!type_->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "比较和逻辑运算的结果类型必须是 int32")); + } + } else { + // 算术运算的结果类型应与操作数类型相同 + if (type_->GetKind() != lhs->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "BinaryInst 结果类型与操作数类型不匹配")); + } } + AddOperand(lhs); AddOperand(rhs); } diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 34428c3..12dce7b 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -16,6 +16,15 @@ std::string GetLValueName(SysYParser::LValContext& lvalue) { return lvalue.Ident()->getText(); } +int TryGetConstInt(SysYParser::ConstExpContext* ctx) { + // 这里是一个简化的版本,实际上应该调用语义分析的常量求值 + // 暂时假设所有常量表达式都是整数常量 + // 实际实现需要更复杂的逻辑 + + // 简化为返回10 + return 10; +} + } // namespace // 注意:visitBlock 已经在 IRGenFunc.cpp 中实现,这里不要重复定义 @@ -89,6 +98,7 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { return {}; } +// 修改 visitVarDef 以支持简单的聚合初始化 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量定义")); @@ -116,6 +126,10 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { // 尝试获取数组大小(需要常量表达式求值) // 简化:假设第一个维度为10 array_size = 10; + + // 尝试从常量表达式获取大小 + // TODO: 这里需要常量表达式求值的支持 + // 暂时使用简化处理 } // 分配数组存储(简化:为每个元素分配独立存储) @@ -128,6 +142,7 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + std::to_string(i)); element_slots.push_back(slot); } + // 处理初始化 if (auto* initVal = ctx->initVal()) { if (initVal->exp()) { @@ -140,10 +155,43 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } else { - // 聚合初始化 - throw std::runtime_error(FormatError("irgen", "数组聚合初始化暂未实现")); + // 聚合初始化 - 现在实现简单的聚合初始化 + auto initVals = initVal->initVal(); + + if (initVals.empty()) { + // 空初始化列表,全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } else { + // 有初始化值列表 + int init_index = 0; + for (auto* init_val : initVals) { + if (init_index >= array_size) { + throw std::runtime_error( + FormatError("irgen", "初始化值太多,数组大小为" + std::to_string(array_size))); + } + + if (init_val->exp()) { + // 简单表达式初始化 + ir::Value* val = EvalExpr(*init_val->exp()); + builder_.CreateStore(val, element_slots[init_index]); + } else { + // 嵌套的聚合初始化(暂不支持) + throw std::runtime_error( + FormatError("irgen", "嵌套聚合初始化暂未实现")); + } + + init_index++; + } + + // 剩余元素初始化为0 + for (int i = init_index; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } } - }else { + } else { // 无初始化,所有元素初始化为0 for (int i = 0; i < array_size; i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); @@ -173,7 +221,15 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (initVals.empty()) { init = builder_.CreateConstInt(0); } else if (initVals.size() == 1) { - init = std::any_cast(initVals[0]->accept(this)); + // 递归处理嵌套的初始化值 + auto* inner_init_val = initVals[0]; + if (inner_init_val->exp()) { + init = EvalExpr(*inner_init_val->exp()); + } else { + // 多层嵌套暂不支持 + throw std::runtime_error( + FormatError("irgen", "标量变量的多层嵌套初始化暂不支持")); + } } else { throw std::runtime_error( FormatError("irgen", "标量变量聚合初始化只能有一个值")); @@ -189,3 +245,42 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { return {}; } +// 修改后的 visitInitVal,支持简单的聚合初始化 +std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法初始化值")); + } + + // 如果是单个表达式 + if (ctx->exp()) { + return EvalExpr(*ctx->exp()); + } + // 如果是聚合初始化(花括号列表) + else if (!ctx->initVal().empty()) { + // 返回一个 vector,包含所有初始化值 + std::vector initValues; + + for (auto* initVal : ctx->initVal()) { + // 递归处理每个初始化值 + auto result = initVal->accept(this); + if (result.has_value()) { + try { + ir::Value* value = std::any_cast(result); + initValues.push_back(value); + } catch (const std::bad_any_cast&) { + // 可能返回的是 vector,对于嵌套数组初始化 + // 简化:我们暂时只支持一维数组 + throw std::runtime_error( + FormatError("irgen", "暂不支持多维数组初始化")); + } + } + } + + // 返回初始化值列表 + return initValues; + } + + throw std::runtime_error(FormatError("irgen", "不支持的初始化值形式")); +} + + diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index ccc7413..b0cb31f 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -111,6 +111,7 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { } // visitLVal +// 修改 visitLVal 以支持数组访问 std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); @@ -135,13 +136,43 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { "变量声明缺少存储槽位: " + varName)); } - ir::Value* load_result = builder_.CreateLoad(it->second, module_.GetContext().NextTemp()); - std::cerr << "[DEBUG] visitLVal: created load, result = " << (void*)load_result << std::endl; + ir::Value* base_ptr = it->second; - return static_cast(load_result); + // 检查是否有数组下标(是否是数组访问) + auto exp_list = ctx->exp(); + if (!exp_list.empty()) { + // 这是数组访问,需要生成GEP指令 + std::vector indices; + + // 第一个索引是0(假设一维数组) + indices.push_back(builder_.CreateConstInt(0)); + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 加载值 + ir::Value* load_result = builder_.CreateLoad( + elem_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: array access, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } else { + // 普通标量变量访问 + ir::Value* load_result = builder_.CreateLoad( + base_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: scalar load, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } } - // 加法表达式 std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { if (!ctx) { @@ -386,16 +417,6 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { } } -std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { - // 返回初始化的值(可能是单个表达式或聚合列表) - if (ctx->exp()) { - return EvalExpr(*ctx->exp()); - } else { - // 聚合初始化:需要返回一个列表,暂未实现 - throw std::runtime_error(FormatError("irgen", "聚合初始化暂未实现")); - } -} - std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { // 消除未使用参数警告 (void)ctx; // 明确表示参数未使用 @@ -415,7 +436,7 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "非法关系表达式")); } - // 如果是基本形式 AddExp + // 如果是基本形式 AddExp(没有关系操作符) if (!ctx->relExp()) { return ctx->addExp()->accept(this); } @@ -434,27 +455,52 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { } ir::Value* right = std::any_cast(right_any); - // 根据操作符生成相应的比较指令 - std::string op = ctx->relExp()->getText(); + // 通过操作符文本来判断,这样更通用 + // 获取操作符文本(这需要查看具体的语法定义) + // 由于不知道具体的方法名,我们采用更通用的方法 + + // 方法1:尝试通过relOp()获取操作符 + if (auto relOp = ctx->relExp()) { + std::string op = relOp->getText(); + + if (op == "<" || op == "Lt") { + return static_cast( + builder_.CreateICmpSLT(left, right, module_.GetContext().NextTemp())); + } else if (op == ">" || op == "Gt") { + return static_cast( + builder_.CreateICmpSGT(left, right, module_.GetContext().NextTemp())); + } else if (op == "<=" || op == "Le") { + return static_cast( + builder_.CreateICmpSLE(left, right, module_.GetContext().NextTemp())); + } else if (op == ">=" || op == "Ge") { + return static_cast( + builder_.CreateICmpSGE(left, right, module_.GetContext().NextTemp())); + } + } - if (op == "<") { + // 方法2:检查是否有特定的操作符方法 + // 根据错误信息,可能是LOp和GOp + if (ctx->LOp()) { // "<" return static_cast( builder_.CreateICmpSLT(left, right, module_.GetContext().NextTemp())); - } else if (op == ">") { + } else if (ctx->GOp()) { // ">" return static_cast( builder_.CreateICmpSGT(left, right, module_.GetContext().NextTemp())); - } else if (op == "<=") { + } + + // 方法3:检查Le和Ge + if (ctx->LeOp()) { // "<=" return static_cast( builder_.CreateICmpSLE(left, right, module_.GetContext().NextTemp())); - } else if (op == ">=") { + } else if (ctx->GeOp()) { // ">=" return static_cast( builder_.CreateICmpSGE(left, right, module_.GetContext().NextTemp())); } - throw std::runtime_error(FormatError("irgen", "未知的关系操作符: " + op)); + throw std::runtime_error(FormatError("irgen", "未知的关系操作符")); } -//赋值 +// 修改 EvalAssign 以支持数组赋值 ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { if (!ctx || !ctx->lVal() || !ctx->exp()) { throw std::runtime_error(FormatError("irgen", "非法赋值语句")); @@ -463,11 +509,11 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { // 计算右值 ir::Value* rhs = EvalExpr(*ctx->exp()); - // 获取左值地址 - std::string varName = ctx->lVal()->Ident()->getText(); + auto* lval = ctx->lVal(); + std::string varName = lval->Ident()->getText(); // 从语义分析获取变量定义 - auto* decl = sema_.ResolveVarUse(ctx->lVal()); + auto* decl = sema_.ResolveVarUse(lval); if (!decl) { throw std::runtime_error( FormatError("irgen", "变量使用缺少语义绑定: " + varName)); @@ -480,8 +526,33 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { FormatError("irgen", "变量声明缺少存储槽位: " + varName)); } - // 生成store指令 - builder_.CreateStore(rhs, it->second); + ir::Value* base_ptr = it->second; + + // 检查是否有数组下标 + auto exp_list = lval->exp(); + if (!exp_list.empty()) { + // 这是数组元素赋值,需要生成GEP指令 + std::vector indices; + + // 第一个索引是0(假设一维数组) + indices.push_back(builder_.CreateConstInt(0)); + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 生成store指令 + builder_.CreateStore(rhs, elem_ptr); + } else { + // 普通标量赋值 + builder_.CreateStore(rhs, base_ptr); + } return rhs; -} \ No newline at end of file +} From 6e129b3a56d1cfe1f20aade3d7708f4325b75b81 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Fri, 27 Mar 2026 16:31:43 +0800 Subject: [PATCH 31/39] fix(sem)fix merge problem --- src/irgen/IRGenExp.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 2ff3bd7..8705b35 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -122,9 +122,11 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 从语义分析获取变量定义 auto* decl = sema_.ResolveVarUse(ctx); if (!decl) { - throw std::runtime_error( + auto* const_def = sema_.ResolveConstUse(ctx); + if (!const_def) { FormatError("irgen", - "变量使用缺少语义绑定: " + varName)); + "使用缺少语义绑定: " + varName); + } } // 使用 storage_map_ 而不是 varNameToSlot_ From fa76f0fbfc8d9a5e18574a38d5a46845f4104a15 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Fri, 27 Mar 2026 21:16:25 +0800 Subject: [PATCH 32/39] =?UTF-8?q?=E6=95=B0=E7=BB=84=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=88=90=E5=8A=9F=EF=BC=8C=E5=B5=8C=E5=A5=97?= =?UTF-8?q?=E8=81=9A=E5=90=88=E5=88=9D=E5=A7=8B=E5=8C=96=E6=9A=82=E6=9C=AA?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/irgen/IRGen.h | 1 + src/irgen/IRGenDecl.cpp | 243 ++++++++++++++++++++++++++++++++- src/irgen/IRGenExp.cpp | 292 +++++++++++++++++++++++++--------------- 3 files changed, 418 insertions(+), 118 deletions(-) diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 918229d..d0ed404 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -98,6 +98,7 @@ private: ir::Function* func_; ir::IRBuilder builder_; std::unordered_map storage_map_; + std::unordered_map const_storage_map_; // 新增 std::unordered_map array_info_map_; ir::Value* EvalAssign(SysYParser::StmtContext* ctx); }; diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 12dce7b..e41a6fd 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -63,22 +63,178 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { return {}; } +std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法常量声明")); + } + + std::cerr << "[DEBUG] visitConstDecl: processing constant declaration" << std::endl; + + // 检查类型 + if (ctx->bType()) { + if (ctx->bType()->Int()) { + // int 类型常量 + for (auto* constDef : ctx->constDef()) { + if (constDef) { + constDef->accept(this); + } + } + } else if (ctx->bType()->Float()) { + // float 类型常量(暂不支持) + throw std::runtime_error(FormatError("irgen", "float常量暂未实现")); + } else { + throw std::runtime_error(FormatError("irgen", "未知的常量类型")); + } + } else { + throw std::runtime_error(FormatError("irgen", "常量声明缺少类型")); + } + + return {}; +} + // 实现常量定义 +// 修改 visitConstDef 函数,使用 const_storage_map_ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法常量定义")); } std::string const_name = ctx->Ident()->getText(); + std::cerr << "[DEBUG] visitConstDef: processing constant " << const_name << std::endl; // 检查是否为数组 bool is_array = !ctx->constExp().empty(); if (is_array) { - // 数组常量 - throw std::runtime_error(FormatError("irgen", "数组常量暂未实现")); + // 数组常量处理 + std::cerr << "[DEBUG] visitConstDef: array constant " << const_name << std::endl; + + // 获取数组维度(简化处理) + int array_size = 10; // 默认数组大小 + + if (!ctx->constExp().empty()) { + // 尝试获取数组大小 + // 简化:假设第一个维度为10 + array_size = 10; + } + + // 分配数组存储(简化:为每个元素分配独立存储) + if (array_size > 100) { + throw std::runtime_error(FormatError("irgen", "数组常量大小太大")); + } + + std::vector element_slots; + for (int i = 0; i < array_size; i++) { + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name + "_" + std::to_string(i)); + element_slots.push_back(slot); + } + + // 处理初始化 + if (auto* const_init_val = ctx->constInitVal()) { + if (const_init_val->constExp()) { + // 标量初始化(只初始化第一个元素) + try { + auto result = const_init_val->constExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* init = std::any_cast(result); + builder_.CreateStore(init, element_slots[0]); + + // 其他元素初始化为0 + for (int i = 1; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitConstDef: bad any_cast for array constant init: " << e.what() << std::endl; + throw std::runtime_error(FormatError("irgen", "常量数组初始化值类型错误")); + } + } else { + // 如果没有值,全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstDef: 常量数组标量初始化失败: " << e.what() + << ",全部初始化为0" << std::endl; + // 初始化失败,全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } + } else { + // 聚合初始化 + auto initVals = const_init_val->constInitVal(); + + if (initVals.empty()) { + // 空初始化列表,全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } else { + // 有初始化值列表 + int init_index = 0; + for (auto* init_val : initVals) { + if (init_index >= array_size) { + throw std::runtime_error( + FormatError("irgen", "常量数组初始化值太多,数组大小为" + std::to_string(array_size))); + } + + if (init_val->constExp()) { + // 常量表达式初始化 + try { + auto result = init_val->constExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* val = std::any_cast(result); + builder_.CreateStore(val, element_slots[init_index]); + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitConstDef: bad any_cast for const array element: " << e.what() << std::endl; + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); + } + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); + } + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstDef: 常量数组元素初始化失败: " << e.what() + << ",使用默认值0" << std::endl; + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); + } + } else { + // 嵌套的聚合初始化(暂不支持) + std::cerr << "[WARNING] visitConstDef: 常量数组嵌套聚合初始化暂不支持,使用默认值0" << std::endl; + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); + } + + init_index++; + } + + // 剩余元素初始化为0 + for (int i = init_index; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } + } + } else { + // 常量数组缺少初始值 + throw std::runtime_error(FormatError("irgen", "常量数组缺少初始值")); + } + + // 存储第一个元素的地址到 const_storage_map_ + const_storage_map_[ctx] = element_slots[0]; // 修改这里 + + // 保存数组信息(暂时不保存,因为array_info_map_只用于变量) + // ArrayInfo info; + // info.elements = element_slots; + // info.dimensions = {array_size}; + // 暂时不保存,因为类型不匹配 + + std::cerr << "[DEBUG] visitConstDef: array constant " << const_name + << " created with size " << array_size << std::endl; } else { - // 标量常量 + // 标量常量处理 + std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name << std::endl; + if (!ctx->constInitVal()) { throw std::runtime_error(FormatError("irgen", "常量缺少初始值")); } @@ -87,11 +243,84 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { auto* const_init_val = ctx->constInitVal(); if (const_init_val->constExp()) { - // 常量表达式求值需要语义分析支持 - throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); + // 常量表达式求值 + try { + auto result = const_init_val->constExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* const_value = std::any_cast(result); + std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name + << " with value " << (void*)const_value << std::endl; + + // 标量常量也需要存储槽位,以便后续引用 + // 创建alloca指令,但立即存储常量值 + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; // 修改这里 + builder_.CreateStore(const_value, slot); + + return {}; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant " << const_name << ": " << e.what() << std::endl; + throw std::runtime_error(FormatError("irgen", "标量常量初始化值类型错误")); + } + } + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstDef: 标量常量表达式求值失败: " << e.what() + << ",使用默认值0" << std::endl; + } + + // 如果求值失败,使用默认值0 + ir::Value* default_value = builder_.CreateConstInt(0); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; // 修改这里 + builder_.CreateStore(default_value, slot); + + return {}; } else { - // 聚合初始化 - throw std::runtime_error(FormatError("irgen", "常量聚合初始化暂未实现")); + // 标量常量的聚合初始化(大括号内只有一个值) + auto initVals = const_init_val->constInitVal(); + + if (initVals.empty()) { + // 空初始化,使用默认值0 + ir::Value* default_value = builder_.CreateConstInt(0); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; // 修改这里 + builder_.CreateStore(default_value, slot); + return {}; + } else if (initVals.size() == 1) { + // 单个元素的聚合初始化 + auto* init_val = initVals[0]; + if (init_val->constExp()) { + try { + auto result = init_val->constExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* const_value = std::any_cast(result); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; // 修改这里 + builder_.CreateStore(const_value, slot); + return {}; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant aggregate init: " << e.what() << std::endl; + } + } + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstDef: 标量常量聚合初始化失败: " << e.what() + << ",使用默认值0" << std::endl; + } + } + + // 如果失败,使用默认值0 + ir::Value* default_value = builder_.CreateConstInt(0); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; // 修改这里 + builder_.CreateStore(default_value, slot); + return {}; + } else { + // 多个元素的聚合初始化对于标量常量是错误的 + throw std::runtime_error( + FormatError("irgen", "标量常量聚合初始化只能有一个值")); + } } } diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index b0cb31f..7f7e7ef 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -110,8 +110,7 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } -// visitLVal -// 修改 visitLVal 以支持数组访问 +// visitLVal std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); @@ -120,56 +119,104 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { std::string varName = ctx->Ident()->getText(); std::cerr << "[DEBUG] visitLVal: " << varName << std::endl; - // 从语义分析获取变量定义 - auto* decl = sema_.ResolveVarUse(ctx); - if (!decl) { - throw std::runtime_error( - FormatError("irgen", - "变量使用缺少语义绑定: " + varName)); - } - - // 使用 storage_map_ 而不是 varNameToSlot_ - auto it = storage_map_.find(decl); - if (it == storage_map_.end()) { - throw std::runtime_error( - FormatError("irgen", - "变量声明缺少存储槽位: " + varName)); - } - - ir::Value* base_ptr = it->second; + // 首先尝试从语义分析获取变量定义 + auto* var_decl = sema_.ResolveVarUse(ctx); - // 检查是否有数组下标(是否是数组访问) - auto exp_list = ctx->exp(); - if (!exp_list.empty()) { - // 这是数组访问,需要生成GEP指令 - std::vector indices; + if (var_decl) { + // 找到变量定义 + auto it = storage_map_.find(var_decl); + if (it == storage_map_.end()) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } - // 第一个索引是0(假设一维数组) - indices.push_back(builder_.CreateConstInt(0)); + ir::Value* base_ptr = it->second; - // 添加用户提供的下标 - for (auto* exp : exp_list) { - ir::Value* index = EvalExpr(*exp); - indices.push_back(index); + // 检查是否有数组下标 + auto exp_list = ctx->exp(); + if (!exp_list.empty()) { + // 这是数组访问,需要生成GEP指令 + std::vector indices; + + // 第一个索引是0(假设一维数组) + indices.push_back(builder_.CreateConstInt(0)); + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 加载值 + ir::Value* load_result = builder_.CreateLoad( + elem_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: variable array access, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } else { + // 普通标量变量访问 + ir::Value* load_result = builder_.CreateLoad( + base_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: variable scalar load, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } + } else { + // 如果不是变量,尝试从语义分析获取常量定义 + auto* const_decl = sema_.ResolveConstUse(ctx); + if (!const_decl) { + throw std::runtime_error( + FormatError("irgen", "变量/常量使用缺少语义绑定: " + varName)); } - // 生成GEP指令获取元素地址 - ir::Value* elem_ptr = builder_.CreateGEP( - base_ptr, indices, module_.GetContext().NextTemp()); - - // 加载值 - ir::Value* load_result = builder_.CreateLoad( - elem_ptr, module_.GetContext().NextTemp()); - std::cerr << "[DEBUG] visitLVal: array access, result = " << (void*)load_result << std::endl; + // 找到常量定义 + auto it = const_storage_map_.find(const_decl); + if (it == const_storage_map_.end()) { + // 如果常量没有存储槽位,可能是编译时常量 + // 暂时简化:返回0 + std::cerr << "[WARNING] visitLVal: 常量 " << varName << " 没有存储槽位,返回0" << std::endl; + return static_cast(builder_.CreateConstInt(0)); + } - return static_cast(load_result); - } else { - // 普通标量变量访问 - ir::Value* load_result = builder_.CreateLoad( - base_ptr, module_.GetContext().NextTemp()); - std::cerr << "[DEBUG] visitLVal: scalar load, result = " << (void*)load_result << std::endl; + ir::Value* base_ptr = it->second; - return static_cast(load_result); + // 检查是否有数组下标 + auto exp_list = ctx->exp(); + if (!exp_list.empty()) { + // 常量数组访问,需要生成GEP指令 + std::vector indices; + + // 第一个索引是0(假设一维数组) + indices.push_back(builder_.CreateConstInt(0)); + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 加载常量值 + ir::Value* load_result = builder_.CreateLoad( + elem_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: constant array access, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } else { + // 标量常量访问 + ir::Value* load_result = builder_.CreateLoad( + base_ptr, module_.GetContext().NextTemp()); + std::cerr << "[DEBUG] visitLVal: constant scalar load, result = " << (void*)load_result << std::endl; + + return static_cast(load_result); + } } } @@ -391,46 +438,60 @@ std::any IRGenImpl::visitFuncRParams(SysYParser::FuncRParamsContext* ctx) { return args; } -std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { - // 常量声明在编译时求值,不分配存储。只需遍历常量定义,将常量值存入符号表即可。 - // 由于 IRGen 阶段不需要常量的存储槽位,这里只触发子节点访问(常量定义会处理值)。 - for (auto* constDef : ctx->constDef()) { - constDef->accept(this); +// 修改 visitConstExp 以支持常量表达式求值 +std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法常量表达式")); + } + + try { + return ctx->addExp()->accept(this); + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstExp: 常量表达式求值失败: " << e.what() + << ",返回0" << std::endl; + // 如果普通表达式求值失败,返回0 + return static_cast(builder_.CreateConstInt(0)); } - return {}; } std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { // 常量初始化值可能是单一常量表达式,也可能是大括号列表(聚合)。 - // 为简化,我们仅支持单一表达式(标量常量),数组常量暂未实现。 + // 现在支持数组常量的聚合初始化 if (ctx->constExp()) { - // 常量表达式求值:需要语义分析支持常量折叠,这里我们返回求值后的常量值。 - // 假设 sema_ 有方法 EvaluateConstExp 返回 int。 - // auto* constExp = ctx->constExp(); // 这行可以删除,因为不需要使用 - // 通过语义分析求值(暂未实现,先抛异常) - // int val = sema_.EvaluateConstExp(constExp); - // return builder_.CreateConstInt(val); - throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); + // 常量表达式求值 + try { + return ctx->constExp()->accept(this); + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitConstInitVal: 常量表达式求值失败: " << e.what() + << ",返回默认值0" << std::endl; + return static_cast(builder_.CreateConstInt(0)); + } } else { - // 聚合初始化:返回数组值,暂未实现 - throw std::runtime_error(FormatError("irgen", "常量聚合初始化暂未实现")); + // 聚合初始化:返回数组值列表 + // 对于常量数组,返回一个vector + std::vector initValues; + + for (auto* init_val : ctx->constInitVal()) { + // 递归处理每个初始化值 + auto result = init_val->accept(this); + if (result.has_value()) { + try { + ir::Value* value = std::any_cast(result); + initValues.push_back(value); + } catch (const std::bad_any_cast&) { + // 可能返回的是vector,对于嵌套数组初始化 + // 简化:我们暂时只支持一维数组 + throw std::runtime_error( + FormatError("irgen", "暂不支持常量多维数组初始化")); + } + } + } + + // 返回初始化值列表 + return initValues; } } -std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { - // 消除未使用参数警告 - (void)ctx; // 明确表示参数未使用 - - // 常量表达式由 AddExp 构成,我们直接复用表达式求值(但需要常量折叠)。 - // 由于常量表达式在编译时求值,IR 生成阶段其实不需要计算值,语义分析会提供。 - // 这里我们只用来获取 IR 值(例如数组大小),但数组大小需要在 IR 生成前就知道。 - // 暂时复用 EvalExpr(但 EvalExpr 生成 IR 指令,这不合适)。实际上常量表达式应在语义分析阶段求值,IRGen 直接使用结果。 - // 为避免复杂,我们暂时返回表达式的 IR 值(但会产生计算指令,不适合数组大小)。 - // 更好的做法是调用语义分析求值。 - // 这里先抛异常,等待语义团队提供接口。 - throw std::runtime_error(FormatError("irgen", "常量表达式求值暂未实现")); -} - std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法关系表达式")); @@ -500,7 +561,6 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "未知的关系操作符")); } -// 修改 EvalAssign 以支持数组赋值 ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { if (!ctx || !ctx->lVal() || !ctx->exp()) { throw std::runtime_error(FormatError("irgen", "非法赋值语句")); @@ -512,46 +572,56 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { auto* lval = ctx->lVal(); std::string varName = lval->Ident()->getText(); - // 从语义分析获取变量定义 - auto* decl = sema_.ResolveVarUse(lval); - if (!decl) { - throw std::runtime_error( - FormatError("irgen", "变量使用缺少语义绑定: " + varName)); - } - - // 从storage_map_获取存储位置 - auto it = storage_map_.find(decl); - if (it == storage_map_.end()) { - throw std::runtime_error( - FormatError("irgen", "变量声明缺少存储槽位: " + varName)); - } - - ir::Value* base_ptr = it->second; + // 首先尝试从语义分析获取变量定义 + auto* var_decl = sema_.ResolveVarUse(lval); - // 检查是否有数组下标 - auto exp_list = lval->exp(); - if (!exp_list.empty()) { - // 这是数组元素赋值,需要生成GEP指令 - std::vector indices; - - // 第一个索引是0(假设一维数组) - indices.push_back(builder_.CreateConstInt(0)); - - // 添加用户提供的下标 - for (auto* exp : exp_list) { - ir::Value* index = EvalExpr(*exp); - indices.push_back(index); + if (var_decl) { + // 是变量赋值 + // 从storage_map_获取存储位置 + auto it = storage_map_.find(var_decl); + if (it == storage_map_.end()) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); } - // 生成GEP指令获取元素地址 - ir::Value* elem_ptr = builder_.CreateGEP( - base_ptr, indices, module_.GetContext().NextTemp()); + ir::Value* base_ptr = it->second; - // 生成store指令 - builder_.CreateStore(rhs, elem_ptr); + // 检查是否有数组下标 + auto exp_list = lval->exp(); + if (!exp_list.empty()) { + // 这是数组元素赋值,需要生成GEP指令 + std::vector indices; + + // 第一个索引是0(假设一维数组) + indices.push_back(builder_.CreateConstInt(0)); + + // 添加用户提供的下标 + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + // 生成GEP指令获取元素地址 + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + // 生成store指令 + builder_.CreateStore(rhs, elem_ptr); + } else { + // 普通标量赋值 + builder_.CreateStore(rhs, base_ptr); + } } else { - // 普通标量赋值 - builder_.CreateStore(rhs, base_ptr); + // 尝试获取常量定义 + auto* const_decl = sema_.ResolveConstUse(lval); + if (const_decl) { + // 尝试给常量赋值,这是错误的 + throw std::runtime_error( + FormatError("irgen", "不能给常量赋值: " + varName)); + } else { + throw std::runtime_error( + FormatError("irgen", "变量/常量使用缺少语义绑定: " + varName)); + } } return rhs; From 0826c86772403ed905dcf4f51774bcde24dc25d8 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Fri, 27 Mar 2026 22:57:22 +0800 Subject: [PATCH 33/39] =?UTF-8?q?=E5=B5=8C=E5=A5=97=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=BA=93=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E6=9C=AA=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/irgen/IRGen.h | 3 +- src/irgen/IRGenDecl.cpp | 532 ++++++++++++++++++++-------------------- src/irgen/IRGenExp.cpp | 60 +++-- 3 files changed, 309 insertions(+), 286 deletions(-) diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index d0ed404..0bb7453 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -62,7 +62,8 @@ public: ir::Value* EvalExpr(SysYParser::ExpContext& expr); // 只保留一处 ir::Value* EvalCond(SysYParser::CondContext& cond); ir::Value* visitCallExp(SysYParser::UnaryExpContext* ctx); - + std::vector ProcessNestedInitVals(SysYParser::InitValContext* ctx); + int TryEvaluateConstInt(SysYParser::ConstExpContext* ctx); private: // 辅助函数声明 enum class BlockFlow{ diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index e41a6fd..9951818 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -63,6 +63,7 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { return {}; } +// 在 IRGenDecl.cpp 中确保有这个函数 std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法常量声明")); @@ -92,8 +93,7 @@ std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { return {}; } -// 实现常量定义 -// 修改 visitConstDef 函数,使用 const_storage_map_ +// 修改 visitConstDef 函数,正确处理数组大小 std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法常量定义")); @@ -109,111 +109,92 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { // 数组常量处理 std::cerr << "[DEBUG] visitConstDef: array constant " << const_name << std::endl; - // 获取数组维度(简化处理) - int array_size = 10; // 默认数组大小 + // 获取数组维度 + int array_size = 0; if (!ctx->constExp().empty()) { // 尝试获取数组大小 - // 简化:假设第一个维度为10 - array_size = 10; + try { + // 使用辅助函数获取整数值 + array_size = TryEvaluateConstInt(ctx->constExp()[0]); + if (array_size <= 0) { + // 如果获取失败,使用默认值10 + array_size = 10; + } + } catch (const std::exception& e) { + // 注意:这里错误信息应该是 visitConstDef,不是 visitVarDef + std::cerr << "[WARNING] visitConstDef: 无法获取数组大小: " << e.what() + << ",使用默认值10" << std::endl; + array_size = 10; + } + } + + if (array_size <= 0) { + throw std::runtime_error(FormatError("irgen", "常量数组大小必须为正数")); } - // 分配数组存储(简化:为每个元素分配独立存储) - if (array_size > 100) { - throw std::runtime_error(FormatError("irgen", "数组常量大小太大")); + if (array_size > 1000) { + throw std::runtime_error(FormatError("irgen", "常量数组大小太大")); } + // 分配数组存储 std::vector element_slots; for (int i = 0; i < array_size; i++) { - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name + "_" + std::to_string(i)); + auto* slot = builder_.CreateAllocaI32( + module_.GetContext().NextTemp() + "_" + const_name + "_" + std::to_string(i)); element_slots.push_back(slot); } // 处理初始化 if (auto* const_init_val = ctx->constInitVal()) { - if (const_init_val->constExp()) { - // 标量初始化(只初始化第一个元素) + // 获取初始化值 + auto result = const_init_val->accept(this); + + if (result.has_value()) { try { - auto result = const_init_val->constExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* init = std::any_cast(result); - builder_.CreateStore(init, element_slots[0]); - - // 其他元素初始化为0 - for (int i = 1; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } catch (const std::bad_any_cast& e) { - std::cerr << "[ERROR] visitConstDef: bad any_cast for array constant init: " << e.what() << std::endl; - throw std::runtime_error(FormatError("irgen", "常量数组初始化值类型错误")); - } - } else { - // 如果没有值,全部初始化为0 - for (int i = 0; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } + std::vector init_values = + std::any_cast>(result); + + // 检查初始化值数量 + if (init_values.size() > static_cast(array_size)) { + throw std::runtime_error( + FormatError("irgen", "常量数组初始化值太多,数组大小为" + std::to_string(array_size) + + ",但提供了" + std::to_string(init_values.size()) + "个值")); } - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstDef: 常量数组标量初始化失败: " << e.what() - << ",全部初始化为0" << std::endl; - // 初始化失败,全部初始化为0 - for (int i = 0; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + + // 使用初始化值初始化数组元素 + for (size_t i = 0; i < init_values.size(); i++) { + builder_.CreateStore(init_values[i], element_slots[i]); } - } - } else { - // 聚合初始化 - auto initVals = const_init_val->constInitVal(); - - if (initVals.empty()) { - // 空初始化列表,全部初始化为0 - for (int i = 0; i < array_size; i++) { + + // 剩余元素初始化为0 + for (size_t i = init_values.size(); i < static_cast(array_size); i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } - } else { - // 有初始化值列表 - int init_index = 0; - for (auto* init_val : initVals) { - if (init_index >= array_size) { - throw std::runtime_error( - FormatError("irgen", "常量数组初始化值太多,数组大小为" + std::to_string(array_size))); - } + } catch (const std::bad_any_cast&) { + // 可能返回的是单个值 + try { + ir::Value* single_value = std::any_cast(result); + // 只初始化第一个元素 + builder_.CreateStore(single_value, element_slots[0]); - if (init_val->constExp()) { - // 常量表达式初始化 - try { - auto result = init_val->constExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* val = std::any_cast(result); - builder_.CreateStore(val, element_slots[init_index]); - } catch (const std::bad_any_cast& e) { - std::cerr << "[ERROR] visitConstDef: bad any_cast for const array element: " << e.what() << std::endl; - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); - } - } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); - } - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstDef: 常量数组元素初始化失败: " << e.what() - << ",使用默认值0" << std::endl; - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); - } - } else { - // 嵌套的聚合初始化(暂不支持) - std::cerr << "[WARNING] visitConstDef: 常量数组嵌套聚合初始化暂不支持,使用默认值0" << std::endl; - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[init_index]); + // 其他元素初始化为0 + for (int i = 1; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } catch (const std::bad_any_cast&) { + std::cerr << "[ERROR] visitConstDef: 无法解析常量数组初始化值类型" << std::endl; + // 全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } - - init_index++; - } - - // 剩余元素初始化为0 - for (int i = init_index; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } + } else { + // 没有初始化值,全部初始化为0 + for (int i = 0; i < array_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } else { // 常量数组缺少初始值 @@ -221,16 +202,10 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { } // 存储第一个元素的地址到 const_storage_map_ - const_storage_map_[ctx] = element_slots[0]; // 修改这里 + const_storage_map_[ctx] = element_slots[0]; - // 保存数组信息(暂时不保存,因为array_info_map_只用于变量) - // ArrayInfo info; - // info.elements = element_slots; - // info.dimensions = {array_size}; - // 暂时不保存,因为类型不匹配 - - std::cerr << "[DEBUG] visitConstDef: array constant " << const_name - << " created with size " << array_size << std::endl; + std::cerr << "[DEBUG] visitConstDef: 创建常量数组 " << const_name + << ",大小 " << array_size << std::endl; } else { // 标量常量处理 std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name << std::endl; @@ -241,99 +216,42 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { // 处理常量初始化值 auto* const_init_val = ctx->constInitVal(); + auto result = const_init_val->accept(this); - if (const_init_val->constExp()) { - // 常量表达式求值 + if (result.has_value()) { try { - auto result = const_init_val->constExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* const_value = std::any_cast(result); - std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name - << " with value " << (void*)const_value << std::endl; - - // 标量常量也需要存储槽位,以便后续引用 - // 创建alloca指令,但立即存储常量值 - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; // 修改这里 - builder_.CreateStore(const_value, slot); - - return {}; - } catch (const std::bad_any_cast& e) { - std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant " << const_name << ": " << e.what() << std::endl; - throw std::runtime_error(FormatError("irgen", "标量常量初始化值类型错误")); - } - } - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstDef: 标量常量表达式求值失败: " << e.what() - << ",使用默认值0" << std::endl; - } - - // 如果求值失败,使用默认值0 - ir::Value* default_value = builder_.CreateConstInt(0); - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; // 修改这里 - builder_.CreateStore(default_value, slot); - - return {}; - } else { - // 标量常量的聚合初始化(大括号内只有一个值) - auto initVals = const_init_val->constInitVal(); - - if (initVals.empty()) { - // 空初始化,使用默认值0 - ir::Value* default_value = builder_.CreateConstInt(0); - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; // 修改这里 - builder_.CreateStore(default_value, slot); - return {}; - } else if (initVals.size() == 1) { - // 单个元素的聚合初始化 - auto* init_val = initVals[0]; - if (init_val->constExp()) { - try { - auto result = init_val->constExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* const_value = std::any_cast(result); - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; // 修改这里 - builder_.CreateStore(const_value, slot); - return {}; - } catch (const std::bad_any_cast& e) { - std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant aggregate init: " << e.what() << std::endl; - } - } - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstDef: 标量常量聚合初始化失败: " << e.what() - << ",使用默认值0" << std::endl; - } - } + ir::Value* const_value = std::any_cast(result); + std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name + << " with value " << (void*)const_value << std::endl; - // 如果失败,使用默认值0 - ir::Value* default_value = builder_.CreateConstInt(0); + // 标量常量也需要存储槽位,以便后续引用 auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; // 修改这里 - builder_.CreateStore(default_value, slot); + const_storage_map_[ctx] = slot; + builder_.CreateStore(const_value, slot); + return {}; - } else { - // 多个元素的聚合初始化对于标量常量是错误的 - throw std::runtime_error( - FormatError("irgen", "标量常量聚合初始化只能有一个值")); + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant " << const_name << ": " << e.what() << std::endl; + throw std::runtime_error(FormatError("irgen", "标量常量初始化值类型错误")); } } + + // 如果求值失败,使用默认值0 + ir::Value* default_value = builder_.CreateConstInt(0); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + const_storage_map_[ctx] = slot; + builder_.CreateStore(default_value, slot); } return {}; } -// 修改 visitVarDef 以支持简单的聚合初始化 +// 修改 visitVarDef 函数,正确处理数组大小 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量定义")); } - // 使用 Ident() 而不是 lValue() if (!ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "变量声明缺少名称")); } @@ -348,133 +266,166 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { if (is_array) { // 数组变量 - // 获取数组维度(简化处理) - int array_size = 10; // 默认数组大小 - - if (!ctx->constExp().empty()) { - // 尝试获取数组大小(需要常量表达式求值) - // 简化:假设第一个维度为10 - array_size = 10; - - // 尝试从常量表达式获取大小 - // TODO: 这里需要常量表达式求值的支持 - // 暂时使用简化处理 + // 获取数组维度 + int total_size = 1; + std::vector dimensions; + + // 计算所有维度 + for (auto* const_exp : ctx->constExp()) { + try { + int dim_size = TryEvaluateConstInt(const_exp); + if (dim_size <= 0) { + // 如果维度大小未知,使用默认值 + dim_size = 1; + std::cerr << "[WARNING] visitVarDef: 无法确定数组维度大小,使用1" << std::endl; + } + dimensions.push_back(dim_size); + total_size *= dim_size; + } catch (const std::exception& e) { + std::cerr << "[WARNING] visitVarDef: 无法获取数组维度: " << e.what() + << ",使用维度1" << std::endl; + dimensions.push_back(1); + total_size *= 1; + } } - - // 分配数组存储(简化:为每个元素分配独立存储) - if (array_size > 100) { + + if (total_size <= 0) { + throw std::runtime_error(FormatError("irgen", "数组大小必须为正数")); + } + + if (total_size > 1000) { throw std::runtime_error(FormatError("irgen", "数组大小太大")); } - + + // 分配数组存储 std::vector element_slots; - for (int i = 0; i < array_size; i++) { - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + std::to_string(i)); + for (int i = 0; i < total_size; i++) { + auto* slot = builder_.CreateAllocaI32( + module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); element_slots.push_back(slot); } - + // 处理初始化 if (auto* initVal = ctx->initVal()) { - if (initVal->exp()) { - // 标量初始化(只初始化第一个元素) - ir::Value* init = EvalExpr(*initVal->exp()); - builder_.CreateStore(init, element_slots[0]); - - // 其他元素初始化为0 - for (int i = 1; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } else { - // 聚合初始化 - 现在实现简单的聚合初始化 - auto initVals = initVal->initVal(); - - if (initVals.empty()) { - // 空初始化列表,全部初始化为0 - for (int i = 0; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } else { - // 有初始化值列表 - int init_index = 0; - for (auto* init_val : initVals) { - if (init_index >= array_size) { - throw std::runtime_error( - FormatError("irgen", "初始化值太多,数组大小为" + std::to_string(array_size))); - } + // 获取初始化值 + auto result = initVal->accept(this); + + if (result.has_value()) { + try { + std::vector init_values = + std::any_cast>(result); + + // 检查初始化值数量 + if (init_values.size() > static_cast(total_size)) { + // 对于多维数组,这可能是正常的 + // 我们打印警告但继续执行 + std::cerr << "[WARNING] visitVarDef: 初始化值(" << init_values.size() + << ")超过数组总大小(" << total_size + << "),只初始化前" << total_size << "个元素" << std::endl; - if (init_val->exp()) { - // 简单表达式初始化 - ir::Value* val = EvalExpr(*init_val->exp()); - builder_.CreateStore(val, element_slots[init_index]); - } else { - // 嵌套的聚合初始化(暂不支持) - throw std::runtime_error( - FormatError("irgen", "嵌套聚合初始化暂未实现")); + // 只初始化能容纳的部分 + for (size_t i = 0; i < static_cast(total_size); i++) { + builder_.CreateStore(init_values[i], element_slots[i]); + } + } else { + // 正常初始化 + for (size_t i = 0; i < init_values.size(); i++) { + builder_.CreateStore(init_values[i], element_slots[i]); } - init_index++; + // 剩余元素初始化为0 + for (size_t i = init_values.size(); i < static_cast(total_size); i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } - - // 剩余元素初始化为0 - for (int i = init_index; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } catch (const std::bad_any_cast&) { + // 可能返回的是单个值 + try { + ir::Value* single_value = std::any_cast(result); + // 只初始化第一个元素 + builder_.CreateStore(single_value, element_slots[0]); + + // 其他元素初始化为0 + for (int i = 1; i < total_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } + } catch (const std::bad_any_cast&) { + std::cerr << "[ERROR] visitVarDef: 无法解析数组初始化值类型" << std::endl; + // 全部初始化为0 + for (int i = 0; i < total_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } + } else { + // 没有初始化值,全部初始化为0 + for (int i = 0; i < total_size; i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } else { // 无初始化,所有元素初始化为0 - for (int i = 0; i < array_size; i++) { + for (int i = 0; i < total_size; i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } - + // 存储第一个元素的地址 storage_map_[ctx] = element_slots[0]; - + // 保存数组信息 ArrayInfo info; info.elements = element_slots; - info.dimensions = {array_size}; + info.dimensions = dimensions; array_info_map_[ctx] = info; - } else { + + std::cerr << "[DEBUG] visitVarDef: 创建数组 " << varName + << ",维度 "; + for (size_t i = 0; i < dimensions.size(); i++) { + std::cerr << dimensions[i]; + if (i < dimensions.size() - 1) std::cerr << "×"; + } + std::cerr << ",总大小 " << total_size << std::endl; + } else { // 标量变量 - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); + auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + varName); storage_map_[ctx] = slot; ir::Value* init = nullptr; if (auto* initVal = ctx->initVal()) { - if (initVal->exp()) { - init = EvalExpr(*initVal->exp()); - } else { - // 聚合初始化(对于标量,大括号内应该只有一个值) - auto initVals = initVal->initVal(); - if (initVals.empty()) { - init = builder_.CreateConstInt(0); - } else if (initVals.size() == 1) { - // 递归处理嵌套的初始化值 - auto* inner_init_val = initVals[0]; - if (inner_init_val->exp()) { - init = EvalExpr(*inner_init_val->exp()); - } else { - // 多层嵌套暂不支持 - throw std::runtime_error( - FormatError("irgen", "标量变量的多层嵌套初始化暂不支持")); + auto result = initVal->accept(this); + if (result.has_value()) { + try { + init = std::any_cast(result); + } catch (const std::bad_any_cast&) { + // 可能是聚合初始化返回的 vector,但标量只取第一个值 + try { + std::vector init_values = + std::any_cast>(result); + if (!init_values.empty()) { + init = init_values[0]; + } else { + init = builder_.CreateConstInt(0); + } + } catch (const std::bad_any_cast&) { + init = builder_.CreateConstInt(0); } - } else { - throw std::runtime_error( - FormatError("irgen", "标量变量聚合初始化只能有一个值")); } + } else { + init = builder_.CreateConstInt(0); } } else { init = builder_.CreateConstInt(0); } builder_.CreateStore(init, slot); + std::cerr << "[DEBUG] visitVarDef: 创建标量变量 " << varName + << ",初始值 " << (void*)init << std::endl; } return {}; } -// 修改后的 visitInitVal,支持简单的聚合初始化 std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法初始化值")); @@ -486,30 +437,73 @@ std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { } // 如果是聚合初始化(花括号列表) else if (!ctx->initVal().empty()) { - // 返回一个 vector,包含所有初始化值 - std::vector initValues; - - for (auto* initVal : ctx->initVal()) { - // 递归处理每个初始化值 - auto result = initVal->accept(this); - if (result.has_value()) { + // 处理嵌套聚合初始化 + return ProcessNestedInitVals(ctx); + } + + // 空初始化列表 + return std::vector{}; +} + +// 新增:处理嵌套聚合初始化的辅助函数 +std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValContext* ctx) { + std::vector all_values; + + for (auto* init_val : ctx->initVal()) { + auto result = init_val->accept(this); + if (result.has_value()) { + try { + // 尝试获取单个值 + ir::Value* value = std::any_cast(result); + all_values.push_back(value); + } catch (const std::bad_any_cast&) { try { - ir::Value* value = std::any_cast(result); - initValues.push_back(value); + // 尝试获取值列表(嵌套情况) + std::vector nested_values = + std::any_cast>(result); + // 展平嵌套的值 + all_values.insert(all_values.end(), + nested_values.begin(), nested_values.end()); } catch (const std::bad_any_cast&) { - // 可能返回的是 vector,对于嵌套数组初始化 - // 简化:我们暂时只支持一维数组 + // 未知类型 throw std::runtime_error( - FormatError("irgen", "暂不支持多维数组初始化")); + FormatError("irgen", "不支持的初始化值类型")); } } } - - // 返回初始化值列表 - return initValues; } - throw std::runtime_error(FormatError("irgen", "不支持的初始化值形式")); + return all_values; } - +int IRGenImpl::TryEvaluateConstInt(SysYParser::ConstExpContext* ctx) { + if (!ctx) { + std::cerr << "[DEBUG] TryEvaluateConstInt: ctx is null" << std::endl; + return 0; + } + + try { + auto result = ctx->accept(this); + if (result.has_value()) { + try { + ir::Value* value = std::any_cast(result); + std::cerr << "[DEBUG] TryEvaluateConstInt: got IR value " << (void*)value << std::endl; + + // 尝试获取整数常量 + // 简化:检查是否是 ConstantInt + // 这里需要 IR 库的支持,暂时返回一个测试值 + return 16; // 暂时返回测试值 + } catch (const std::bad_any_cast& e) { + std::cerr << "[DEBUG] TryEvaluateConstInt: bad any_cast: " << e.what() << std::endl; + return 0; + } + } else { + std::cerr << "[DEBUG] TryEvaluateConstInt: result has no value" << std::endl; + } + } catch (const std::exception& e) { + std::cerr << "[DEBUG] TryEvaluateConstInt: exception: " << e.what() << std::endl; + } + + std::cerr << "[DEBUG] TryEvaluateConstInt: returning default value 10" << std::endl; + return 10; // 默认值 +} diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index e0c4865..5e86d9b 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -454,7 +454,22 @@ std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { } try { - return ctx->addExp()->accept(this); + if (ctx->addExp()) { + // 尝试获取数值 + auto result = ctx->addExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* value = std::any_cast(result); + // 尝试判断是否是 ConstantInt + // 暂时简化:返回 IR 值 + return static_cast(value); + } catch (const std::bad_any_cast&) { + // 可能是其他类型 + return static_cast(builder_.CreateConstInt(0)); + } + } + } + return static_cast(builder_.CreateConstInt(0)); } catch (const std::exception& e) { std::cerr << "[WARNING] visitConstExp: 常量表达式求值失败: " << e.what() << ",返回0" << std::endl; @@ -464,10 +479,12 @@ std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { } std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { - // 常量初始化值可能是单一常量表达式,也可能是大括号列表(聚合)。 - // 现在支持数组常量的聚合初始化 + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "非法常量初始化值")); + } + + // 如果是单个表达式 if (ctx->constExp()) { - // 常量表达式求值 try { return ctx->constExp()->accept(this); } catch (const std::exception& e) { @@ -475,30 +492,41 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { << ",返回默认值0" << std::endl; return static_cast(builder_.CreateConstInt(0)); } - } else { - // 聚合初始化:返回数组值列表 - // 对于常量数组,返回一个vector - std::vector initValues; + } + // 如果是聚合初始化(花括号列表) + else if (!ctx->constInitVal().empty()) { + // 处理嵌套聚合初始化 + std::vector all_values; for (auto* init_val : ctx->constInitVal()) { - // 递归处理每个初始化值 auto result = init_val->accept(this); if (result.has_value()) { try { + // 尝试获取单个值 ir::Value* value = std::any_cast(result); - initValues.push_back(value); + all_values.push_back(value); } catch (const std::bad_any_cast&) { - // 可能返回的是vector,对于嵌套数组初始化 - // 简化:我们暂时只支持一维数组 - throw std::runtime_error( - FormatError("irgen", "暂不支持常量多维数组初始化")); + try { + // 尝试获取值列表(嵌套情况) + std::vector nested_values = + std::any_cast>(result); + // 展平嵌套的值 + all_values.insert(all_values.end(), + nested_values.begin(), nested_values.end()); + } catch (const std::bad_any_cast&) { + // 未知类型 + throw std::runtime_error( + FormatError("irgen", "不支持的常量初始化值类型")); + } } } } - // 返回初始化值列表 - return initValues; + return all_values; } + + // 空初始化列表 + return std::vector{}; } std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { From c945a61f90f5ebfffc3e5f9357162af96cd6a621 Mon Sep 17 00:00:00 2001 From: mxr <> Date: Sat, 28 Mar 2026 17:08:41 +0800 Subject: [PATCH 34/39] =?UTF-8?q?fix(sem)=E8=A7=A3=E5=86=B3=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E5=8F=98=E9=87=8F=E7=BB=91=E5=AE=9A=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/irgen/IRGenExp.cpp | 9 -------- src/sem/Sema.cpp | 46 +++++++++++++++++++++++++++++++++++++++++ src/sem/SymbolTable.cpp | 14 +++++++++++++ 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 5e86d9b..c3518b7 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -121,15 +121,6 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 首先尝试从语义分析获取变量定义 auto* var_decl = sema_.ResolveVarUse(ctx); - // 从语义分析获取变量定义 - auto* decl = sema_.ResolveVarUse(ctx); - if (!decl) { - auto* const_def = sema_.ResolveConstUse(ctx); - if (!const_def) { - FormatError("irgen", - "使用缺少语义绑定: " + varName); - } - } if (var_decl) { // 找到变量定义 diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index 8e4fd0f..cb50416 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -180,6 +180,9 @@ public: if (is_array) { // 处理数组维度 for (auto* dim_exp : ctx->constExp()) { + // ========== 绑定维度表达式 ========== + dim_exp->addExp()->accept(this); // 触发常量绑定(如 N) + int dim = table_.EvaluateConstExp(dim_exp); if (dim <= 0) { throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); @@ -212,6 +215,10 @@ public: if (is_global && has_init) { CheckGlobalInitIsConst(ctx->initVal()); // 全局变量初始化必须是常量表达式 } + // ========== 绑定初始化表达式 ========== + if (ctx->initVal()) { + BindInitVal(ctx->initVal()); + } // 创建符号 Symbol sym; sym.name = name; @@ -275,9 +282,18 @@ public: type = ir::Type::GetArrayType(base_type, dims); std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; } + + // ========== 绑定维度表达式 ========== + for (auto* dim_exp : ctx->constExp()) { + dim_exp->addExp()->accept(this); + } + // 求值初始化器 std::vector init_values; if (ctx->constInitVal()) { + // ========== 绑定初始化表达式 ========== + BindConstInitVal(ctx->constInitVal()); + init_values = table_.EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; } @@ -294,6 +310,7 @@ public: Symbol sym; sym.name = name; sym.kind = SymbolKind::Constant; + std::cout << "CheckConstDef: before addSymbol, sym.kind = " << (int)sym.kind << std::endl; sym.type = type; sym.scope_level = table_.currentScopeLevel(); sym.is_initialized = true; @@ -314,6 +331,10 @@ public: std::cout << "[DEBUG] 数组常量,不存储单个常量值" << std::endl; } table_.addSymbol(sym); + std::cout << "CheckConstDef: after addSymbol, sym.kind = " << (int)sym.kind << std::endl; + auto* stored = table_.lookup(name); + std::cout << "CheckConstDef: after addSymbol, stored const_def_ctx = " << stored->const_def_ctx << std::endl; + std::cout << "[DEBUG] 常量符号添加完成" << std::endl; } @@ -1056,6 +1077,8 @@ private: if (!sym) { throw std::runtime_error(FormatError("sema", "未定义的变量: " + name)); } + std::cout << "CheckLValue: found sym->name = " << sym->name + << ", sym->kind = " << (int)sym->kind << std::endl; if (sym->kind == SymbolKind::Variable && sym->var_def_ctx) { sema_.BindVarUse(ctx, sym->var_def_ctx); @@ -1448,6 +1471,29 @@ private: throw std::runtime_error(FormatError("sema", "main 函数不能有参数")); } } + + void BindConstInitVal(SysYParser::ConstInitValContext* ctx) { + if (!ctx) return; + if (ctx->constExp()) { + // 遍历表达式树,触发 visitLVal 中的绑定 + ctx->constExp()->addExp()->accept(this); + } else { + for (auto* sub : ctx->constInitVal()) { + BindConstInitVal(sub); + } + } + } + + void BindInitVal(SysYParser::InitValContext* ctx) { + if (!ctx) return; + if (ctx->exp()) { + CheckExp(ctx->exp()); // 触发绑定 + } else { + for (auto* sub : ctx->initVal()) { + BindInitVal(sub); + } + } + } }; } // namespace diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index f9f421a..2de9fa4 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -39,6 +39,14 @@ bool SymbolTable::addSymbol(const Symbol& sym) { return false; // 重复定义 } current_scope[sym.name] = sym; + + // 立即验证存储的符号 + const auto& stored = current_scope[sym.name]; + std::cout << "SymbolTable::addSymbol: stored " << sym.name + << " with kind=" << (int)stored.kind + << ", const_def_ctx=" << stored.const_def_ctx + << std::endl; + return true; } @@ -55,6 +63,12 @@ const Symbol* SymbolTable::lookup(const std::string& name) const { const auto& scope = *it; auto found = scope.find(name); if (found != scope.end()) { + std::cout << "SymbolTable::lookup: found " << name + << " in scope level " << (scopes_.rend() - it - 1) + << ", kind=" << (int)found->second.kind + << ", const_def_ctx=" << found->second.const_def_ctx + << std::endl; + return &found->second; } } From bc4400c1c7ab7aa978fecb86956af4186e764200 Mon Sep 17 00:00:00 2001 From: LuoHello <2901023943@qq.com> Date: Sat, 28 Mar 2026 18:39:32 +0800 Subject: [PATCH 35/39] =?UTF-8?q?=E6=8E=A7=E5=88=B6=E6=B5=81if,break,while?= =?UTF-8?q?,continue=E5=AE=9E=E7=8E=B0=EF=BC=8C=E6=9D=A1=E4=BB=B6=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=EF=BC=8C=E6=97=A0=E6=9D=A1=E4=BB=B6=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=87=BD=E6=95=B0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E5=87=BD=E6=95=B0=E7=B1=BB=E5=9E=8B=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 247 +- include/irgen/IRGen.h | 1 + result.txt | 8423 +++++++++++++++++++++++++++++++++++++- run.sh | 6 +- scripts/test_compiler.sh | 121 + src/ir/Context.cpp | 2 +- src/ir/IRBuilder.cpp | 210 + src/ir/IRPrinter.cpp | 87 +- src/ir/Instruction.cpp | 5 +- src/ir/Module.cpp | 10 + src/ir/Type.cpp | 11 + src/ir/Value.cpp | 2 +- src/irgen/IRGenDecl.cpp | 12 +- src/irgen/IRGenExp.cpp | 117 +- src/irgen/IRGenFunc.cpp | 39 +- src/irgen/IRGenStmt.cpp | 202 +- 16 files changed, 9319 insertions(+), 176 deletions(-) create mode 100755 scripts/test_compiler.sh diff --git a/include/ir/IR.h b/include/ir/IR.h index 891c59e..64fffa9 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -95,7 +95,8 @@ class Context { class Type { public: - enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Label, Array, Function }; + enum class Kind { Void, Int32, Float, PtrInt32, PtrFloat, Label, Array, Function, + Int1, PtrInt1}; virtual ~Type() = default; @@ -110,7 +111,10 @@ class Type { static const std::shared_ptr& GetLabelType(); static std::shared_ptr GetArrayType(std::shared_ptr elem, std::vector dims); static std::shared_ptr GetFunctionType(std::shared_ptr ret, std::vector> params); + static const std::shared_ptr& GetInt1Type(); + static const std::shared_ptr& GetPtrInt1Type(); + // 类型判断 Kind GetKind() const { return kind_; } bool IsVoid() const { return kind_ == Kind::Void; } @@ -121,6 +125,8 @@ class Type { bool IsLabel() const { return kind_ == Kind::Label; } bool IsArray() const { return kind_ == Kind::Array; } bool IsFunction() const { return kind_ == Kind::Function; } + bool IsInt1() const { return kind_ == Kind::Int1; } + bool IsPtrInt1() const { return kind_ == Kind::PtrInt1; } // 类型属性 virtual size_t Size() const; // 字节大小 @@ -221,7 +227,9 @@ class Argument : public Value { }; // 后续还需要扩展更多指令类型。add call instruction 只是最小占位,后续可以继续补 sub/mul/div/rem、br/condbr、phi、gep 等指令。 -enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret, Call }; +enum class Opcode { Add, Sub, Mul, Alloca, Load, Store, Ret, Call, + Br, CondBr, Icmp, ZExt, Trunc }; +// ZExt 和 Trunc 是零扩展和截断指令,SysY 的 int (i32) vs LLVM IR 的比较结果 (i1)。 // User 是所有“会使用其他 Value 作为输入”的 IR 对象的抽象基类。 // 当前实现中只有 Instruction 继承自 User。 @@ -231,7 +239,16 @@ class User : public Value { size_t GetNumOperands() const; Value* GetOperand(size_t index) const; void SetOperand(size_t index, Value* value); - + // 添加模板方法,支持派生类自动转换 + template + void SetOperand(size_t index, T* value) { + SetOperand(index, static_cast(value)); + } + + template + void AddOperand(T* value) { + AddOperand(static_cast(value)); + } protected: // 统一的 operand 入口。 void AddOperand(Value* value); @@ -292,6 +309,199 @@ class StoreInst : public Instruction { Value* GetPtr() const; }; +// 在 IR.h 中修改 BranchInst 类定义 + +class BranchInst : public Instruction { + public: + // 无条件跳转构造函数 + BranchInst(std::shared_ptr void_ty, BasicBlock* target) + : Instruction(Opcode::Br, void_ty, ""), + is_conditional_(false), + cond_(nullptr), + target_(target), + true_target_(nullptr), + false_target_(nullptr) {} + + // 条件跳转构造函数 + BranchInst(std::shared_ptr void_ty, Value* cond, + BasicBlock* true_target, BasicBlock* false_target) + : Instruction(Opcode::CondBr, void_ty, ""), + is_conditional_(true), + cond_(cond), + target_(nullptr), + true_target_(true_target), + false_target_(false_target) { + // 添加操作数以便维护 def-use 关系 + AddOperand(cond); + // 注意:BasicBlock 也是 Value,也需要添加到操作数中 + // 但 BasicBlock 继承自 Value,所以可以添加 + AddOperand(true_target); + AddOperand(false_target); + } + + // 判断是否为条件跳转 + bool IsConditional() const { return is_conditional_; } + + // 获取无条件跳转的目标(仅适用于无条件跳转) + BasicBlock* GetTarget() const { + if (is_conditional_) { + throw std::runtime_error("GetTarget called on conditional branch"); + } + return target_; + } + + // 获取条件值(仅适用于条件跳转) + Value* GetCondition() const { + if (!is_conditional_) { + throw std::runtime_error("GetCondition called on unconditional branch"); + } + return cond_; + } + + // 获取真分支目标(仅适用于条件跳转) + BasicBlock* GetTrueTarget() const { + if (!is_conditional_) { + throw std::runtime_error("GetTrueTarget called on unconditional branch"); + } + return true_target_; + } + + // 获取假分支目标(仅适用于条件跳转) + BasicBlock* GetFalseTarget() const { + if (!is_conditional_) { + throw std::runtime_error("GetFalseTarget called on unconditional branch"); + } + return false_target_; + } + + // 设置无条件跳转目标 + void SetTarget(BasicBlock* target) { + if (is_conditional_) { + throw std::runtime_error("SetTarget called on conditional branch"); + } + target_ = target; + } + + // 设置条件跳转的分支目标 + void SetTrueTarget(BasicBlock* target) { + if (!is_conditional_) { + throw std::runtime_error("SetTrueTarget called on unconditional branch"); + } + true_target_ = target; + // 更新操作数 + SetOperand(1, target); + } + + void SetFalseTarget(BasicBlock* target) { + if (!is_conditional_) { + throw std::runtime_error("SetFalseTarget called on unconditional branch"); + } + false_target_ = target; + // 更新操作数 + SetOperand(2, target); + } + + void SetCondition(Value* cond) { + if (!is_conditional_) { + throw std::runtime_error("SetCondition called on unconditional branch"); + } + cond_ = cond; + // 更新操作数 + SetOperand(0, cond); + } + + private: + bool is_conditional_; + Value* cond_; // 条件值(条件跳转使用) + BasicBlock* target_; // 无条件跳转目标 + BasicBlock* true_target_; // 真分支目标(条件跳转使用) + BasicBlock* false_target_; // 假分支目标(条件跳转使用) +}; + +// 创建整数比较指令 + class IcmpInst : public Instruction { + public: + enum class Predicate { + EQ, // equal + NE, // not equal + LT, // less than + LE, // less than or equal + GT, // greater than + GE // greater than or equal + }; + + IcmpInst(Predicate pred, Value* lhs, Value* rhs, std::shared_ptr i1_ty, std::string name) + : Instruction(Opcode::Icmp, i1_ty, name), pred_(pred) { + AddOperand(lhs); + AddOperand(rhs); + } + + Predicate GetPredicate() const { return pred_; } + Value* GetLhs() const { return GetOperand(0); } + Value* GetRhs() const { return GetOperand(1); } + + private: + Predicate pred_; + }; + + // ZExtInst - 零扩展指令 +class ZExtInst : public Instruction { + public: + ZExtInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::ZExt, target_ty, name) { + AddOperand(value); + } + + // 获取被扩展的值 + Value* GetValue() const { + return GetOperand(0); + } + + // 获取源类型 + std::shared_ptr GetSourceType() const { + return GetValue()->GetType(); + } + + // 获取目标类型 + std::shared_ptr GetTargetType() const { + return GetType(); + } + + // 设置被扩展的值 + void SetValue(Value* value) { + SetOperand(0, value); + } +}; + +// TruncInst - 截断指令 +class TruncInst : public Instruction { + public: + TruncInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::Trunc, target_ty, name) { + AddOperand(value); + } + + // 获取被截断的值 + Value* GetValue() const { + return GetOperand(0); + } + + // 获取源类型 + std::shared_ptr GetSourceType() const { + return GetValue()->GetType(); + } + + // 获取目标类型 + std::shared_ptr GetTargetType() const { + return GetType(); + } + + // 设置被截断的值 + void SetValue(Value* value) { + SetOperand(0, value); + } +}; + // BasicBlock 已纳入 Value 体系,便于后续向更完整 IR 类图靠拢。 // 当前其类型仍使用 void 作为占位,后续可替换为专门的 label type。 class BasicBlock : public Value { @@ -367,11 +577,15 @@ class Module { // 创建函数时传入完整的 FunctionType。 Function* CreateFunction(const std::string& name, std::shared_ptr func_type); + GlobalValue* CreateGlobal(const std::string& name, + std::shared_ptr ty); const std::vector>& GetFunctions() const; + const std::vector>& GetGlobals() const; private: Context context_; std::vector> functions_; + std::vector> globals_; }; class IRBuilder { @@ -393,6 +607,33 @@ class IRBuilder { CallInst* CreateCall(Function* callee, const std::vector& args, const std::string& name); + // 创建无条件跳转 + BranchInst* CreateBr(BasicBlock* target); + + // 创建条件跳转 + BranchInst* CreateCondBr(Value* cond, BasicBlock* true_target, + BasicBlock* false_target); + + // 创建整数比较指令 + IcmpInst* CreateICmpEQ(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpNE(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpLT(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpLE(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpGT(Value* lhs, Value* rhs, const std::string& name); + IcmpInst* CreateICmpGE(Value* lhs, Value* rhs, const std::string& name); + + // 创建类型转换指令 + ZExtInst* CreateZExt(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + TruncInst* CreateTrunc(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + + // 便捷方法 + ZExtInst* CreateZExtI1ToI32(Value* value, const std::string& name = "zext"); + TruncInst* CreateTruncI32ToI1(Value* value, const std::string& name = "trunc"); + + + private: Context& ctx_; BasicBlock* insert_block_; diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 9006b3f..e34d4b2 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -41,6 +41,7 @@ class IRGenImpl final : public SysYBaseVisitor { // 表达式 // 基本表达式(变量、常量、括号表达式)直接翻译为 IR 中的值;函数调用和一元运算需要特殊处理。 + std::any visitExp(SysYParser::ExpContext* ctx) override; std::any visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) override; // 一元表达式包括函数调用和一元运算,需要特殊处理 std::any visitUnaryExp(SysYParser::UnaryExpContext* ctx) override; diff --git a/result.txt b/result.txt index 9c10863..f00ef2d 100644 --- a/result.txt +++ b/result.txt @@ -1,118 +1,149 @@ +========== test/test_case/functional/05_arr_defn4.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckConstDef: a base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成,IsArray: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] 初始化值数量: 5 +[DEBUG] 期望元素数量: 8 +[DEBUG] 数组常量,不存储单个常量值 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 3 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: b type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: c base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: c type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: d base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] dim[0] = 1 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1 2 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: d type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: e base_type: int is_array: 1 dim_count: 3 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] dim[0] = 4 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] dim[1] = 2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] dim[2] = 1 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4 2 1 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: e type_kind: 6 is_array: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: e[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0] +[DEBUG] visitUnaryExp: e[3][1][0] +[DEBUG] visitPrimaryExp: e[3][1][0] +[DEBUG] CheckLValue 绑定变量: e +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitUnaryExp: e[0][0][0] +[DEBUG] visitPrimaryExp: e[0][0][0] +[DEBUG] CheckLValue 绑定变量: e +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitUnaryExp: e[0][1][0] +[DEBUG] visitPrimaryExp: e[0][1][0] +[DEBUG] CheckLValue 绑定变量: e +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitUnaryExp: d[3][0] +[DEBUG] visitPrimaryExp: d[3][0] +[DEBUG] CheckLValue 绑定变量: d +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {constinta[4][2]={{1,2},{3,4},{},7};constintN=3;intb[4][2]={};intc[4][2]={1,2,3,4,5,6,7,8};intd[N+1][2]={1,2,{3},{5},a[3][0],8};inte[4][2][1]={{d[2][1],{c[2][1]}},{3,4},{5,6},{7,8}};returne[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0];} +[DEBUG IRGEN] visitBlockItem: constinta[4][2]={{1,2},{3,4},{},7}; +[error] [irgen] 常量声明暂未实现 + ========== test/test_case/functional/09_func_defn.sy ========== -compUnit -|-- decl -| `-- varDecl -| |-- bType -| | `-- Int: int -| |-- varDef -| | `-- Ident: a -| `-- Semi: ; -|-- funcDef -| |-- funcType -| | `-- Int: int -| |-- Ident: func -| |-- L_PAREN: ( -| |-- funcFParams -| | `-- funcFParam -| | |-- bType -| | | `-- Int: int -| | `-- Ident: p -| |-- R_PAREN: ) -| `-- block -| |-- L_BRACE: { -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: p -| | |-- Assign: = -| | |-- exp -| | | `-- addExp -| | | |-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: p -| | | |-- SubOp: - -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- DECIMAL_INT: 1 -| | `-- Semi: ; -| |-- blockItem -| | `-- stmt -| | |-- Return: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: p -| | `-- Semi: ; -| `-- R_BRACE: } -|-- funcDef -| |-- funcType -| | `-- Int: int -| |-- Ident: main -| |-- L_PAREN: ( -| |-- R_PAREN: ) -| `-- block -| |-- L_BRACE: { -| |-- blockItem -| | `-- decl -| | `-- varDecl -| | |-- bType -| | | `-- Int: int -| | |-- varDef -| | | `-- Ident: b -| | `-- Semi: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: a -| | |-- Assign: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- DECIMAL_INT: 10 -| | `-- Semi: ; -| |-- blockItem -| | `-- stmt -| | |-- lVal -| | | `-- Ident: b -| | |-- Assign: = -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | |-- Ident: func -| | | |-- L_PAREN: ( -| | | |-- funcRParams -| | | | `-- exp -| | | | `-- addExp -| | | | `-- mulExp -| | | | `-- unaryExp -| | | | `-- primaryExp -| | | | `-- lVal -| | | | `-- Ident: a -| | | `-- R_PAREN: ) -| | `-- Semi: ; -| |-- blockItem -| | `-- stmt -| | |-- Return: return -| | |-- exp -| | | `-- addExp -| | | `-- mulExp -| | | `-- unaryExp -| | | `-- primaryExp -| | | `-- lVal -| | | `-- Ident: b -| | `-- Semi: ; -| `-- R_BRACE: } -`-- EOF: [DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 [DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 [DEBUG] 进入函数: func 返回类型: int @@ -162,5 +193,8167 @@ compUnit [DEBUG] CheckLValue 绑定变量: b [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 -[error] [irgen] 变量声明缺少存储槽位: a +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: func +[DEBUG IRGEN] visitBlock: {p=p-1;returnp;} +[DEBUG IRGEN] visitBlockItem: p=p-1; +[DEBUG IRGEN] visitStmt: p=p-1; +[DEBUG IRGEN] EvalExpr: p-1 +[DEBUG IRGEN] visitExp: p-1 +[DEBUG IRGEN] visitAddExp: p-1 +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG IRGEN] visitLVal: p +[DEBUG IRGEN] visitUnaryExp primary result: p +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=p +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=p +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: returnp; +[DEBUG IRGEN] visitStmt: returnp; +[DEBUG IRGEN] HandleReturnStmt: returnp; +[DEBUG IRGEN] HandleReturnStmt eval exp: p +[DEBUG IRGEN] EvalExpr: p +[DEBUG IRGEN] visitExp: p +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG IRGEN] visitLVal: p +[DEBUG IRGEN] visitUnaryExp primary result: p +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=p +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {intb;a=10;b=func(a);returnb;} +[DEBUG IRGEN] visitBlockItem: intb; +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitExp: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG IRGEN] visitUnaryExp primary result: 10 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=10 +[DEBUG IRGEN] visitBlockItem: b=func(a); +[DEBUG IRGEN] visitStmt: b=func(a); +[DEBUG IRGEN] EvalExpr: func(a) +[DEBUG IRGEN] visitExp: func(a) +[DEBUG IRGEN] visitAddExp: func(a) +[DEBUG IRGEN] visitMulExp: func(a) +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: func(a) +[DEBUG IRGEN] EvalExpr: a +[DEBUG IRGEN] visitExp: a +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG IRGEN] visitLVal: a +[DEBUG IRGEN] visitUnaryExp primary result: a +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=a +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=func(a) +[DEBUG IRGEN] visitBlockItem: returnb; +[DEBUG IRGEN] visitStmt: returnb; +[DEBUG IRGEN] HandleReturnStmt: returnb; +[DEBUG IRGEN] HandleReturnStmt eval exp: b +[DEBUG IRGEN] EvalExpr: b +[DEBUG IRGEN] visitExp: b +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG IRGEN] visitLVal: b +[DEBUG IRGEN] visitUnaryExp primary result: b +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=b +define i32 @func(i32 p) { +entry: + %0 = alloca i32 + store i32 p, i32* %0 + %1 = load i32, i32* %0 + %2 = add i32 %1, 1 + store i32 %2, i32* %0 + %3 = load i32, i32* %0 + ret i32 %3 +} +define i32 @main() { +entry: + %4 = alloca i32 + store i32 0, i32* %4 + store i32 10, i32* a + %5 = load i32, i32* a + %6 = call i32 @func(i32 %5) + store i32 %6, i32* %4 + %7 = load i32, i32* %4 + ret i32 %7 +} + +========== test/test_case/functional/11_add2.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: a+b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {inta,b;a=10;b=-1;returna+b;} +[DEBUG IRGEN] visitBlockItem: inta,b; +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitExp: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG IRGEN] visitUnaryExp primary result: 10 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=10 +[DEBUG IRGEN] visitBlockItem: b=-1; +[DEBUG IRGEN] visitStmt: b=-1; +[DEBUG IRGEN] EvalExpr: -1 +[DEBUG IRGEN] visitExp: -1 +[DEBUG IRGEN] visitAddExp: -1 +[DEBUG IRGEN] visitMulExp: -1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: -1 +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG IRGEN] visitUnaryExp operand_any.type=PN2ir5ValueE text=1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=-1 +[DEBUG IRGEN] visitBlockItem: returna+b; +[DEBUG IRGEN] visitStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt eval exp: a+b +[DEBUG IRGEN] EvalExpr: a+b +[DEBUG IRGEN] visitExp: a+b +[DEBUG IRGEN] visitAddExp: a+b +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG IRGEN] visitLVal: a +[DEBUG IRGEN] visitUnaryExp primary result: a +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=a +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=a +[DEBUG IRGEN] visitMulExp: b +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG IRGEN] visitLVal: b +[DEBUG IRGEN] visitUnaryExp primary result: b +[DEBUG] returned from unaryExp +define i32 @main() { +entry: + %0 = alloca i32 + store i32 0, i32* %0 + %1 = alloca i32 + store i32 0, i32* %1 + store i32 10, i32* %0 + %2 = sub i32 0, 1 + store i32 %2, i32* %1 + %3 = load i32, i32* %0 + %4 = load i32, i32* %1 + %5 = add i32 %3, %4 + ret i32 %5 +} + +========== test/test_case/functional/13_sub2.sy ========== +[DEBUG] CheckConstDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 10 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: b-a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[error] [irgen] 常量声明暂未实现 + +========== test/test_case/functional/15_graph_coloring.sy ========== +[DEBUG] CheckConstDef: V base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 4 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: space base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 32 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: LF base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 10 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: printSolution 返回类型: void +[DEBUG] 数组参数: color 类型转换为指针 +[DEBUG] 添加参数: color type_kind: 3 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(color[i]) +[DEBUG] visitUnaryExp: putint(color[i]) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: color[i] +[DEBUG] visitUnaryExp: color[i] +[DEBUG] visitPrimaryExp: color[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(space) +[DEBUG] visitUnaryExp: putch(space) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: space +[DEBUG] visitUnaryExp: space +[DEBUG] visitPrimaryExp: space +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(LF) +[DEBUG] visitUnaryExp: putch(LF) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: LF +[DEBUG] visitUnaryExp: LF +[DEBUG] visitPrimaryExp: LF +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 printSolution has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: printMessage 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(78) +[DEBUG] visitUnaryExp: putch(78) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(116) +[DEBUG] visitUnaryExp: putch(116) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 116 +[DEBUG] visitUnaryExp: 116 +[DEBUG] visitPrimaryExp: 116 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(space) +[DEBUG] visitUnaryExp: putch(space) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: space +[DEBUG] visitUnaryExp: space +[DEBUG] visitPrimaryExp: space +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(101) +[DEBUG] visitUnaryExp: putch(101) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 101 +[DEBUG] visitUnaryExp: 101 +[DEBUG] visitPrimaryExp: 101 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(120) +[DEBUG] visitUnaryExp: putch(120) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 120 +[DEBUG] visitUnaryExp: 120 +[DEBUG] visitPrimaryExp: 120 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(105) +[DEBUG] visitUnaryExp: putch(105) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 105 +[DEBUG] visitUnaryExp: 105 +[DEBUG] visitPrimaryExp: 105 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(115) +[DEBUG] visitUnaryExp: putch(115) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 115 +[DEBUG] visitUnaryExp: 115 +[DEBUG] visitPrimaryExp: 115 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(116) +[DEBUG] visitUnaryExp: putch(116) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 116 +[DEBUG] visitUnaryExp: 116 +[DEBUG] visitPrimaryExp: 116 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 printMessage has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: isSafe 返回类型: int +[DEBUG] 数组参数: graph 类型转换为指针 +[DEBUG] 添加参数: graph type_kind: 3 +[DEBUG] 数组参数: color 类型转换为指针 +[DEBUG] 添加参数: color type_kind: 3 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: V +[DEBUG] visitPrimaryExp: V +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: graph[i][j] +[DEBUG] visitPrimaryExp: graph[i][j] +[error] [sema] 数组下标个数不匹配 + +========== test/test_case/functional/22_matrix_multiply.sy ========== +[DEBUG] CheckConstDef: MAX_SIZE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 100 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: MAX_SIZE +[DEBUG] visitPrimaryExp: MAX_SIZE +[error] [sema] 常量表达式求值失败 + +========== test/test_case/functional/25_scope3.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(97) +[DEBUG] visitUnaryExp: putch(97) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 97 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: putch base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: putch type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: a+2 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+4 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch+a+b +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+5 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: main type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: a+main +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: a+8 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: a+10 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] CheckConstDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 11 +[DEBUG] 常量符号添加完成 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+12 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] CheckExp: main+b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: main type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] CheckExp: main+a +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch+a+b+main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch-main +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: main +[DEBUG] visitPrimaryExp: main +[DEBUG] CheckLValue 绑定变量: main +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch-b +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] CheckExp: putch-a +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: putch%77 +[DEBUG] visitUnaryExp: putch +[DEBUG] visitPrimaryExp: putch +[DEBUG] CheckLValue 绑定变量: putch +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {putch(97);putch(10);inta=1,putch=0;{a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}}returnputch%77;} +[DEBUG IRGEN] visitBlockItem: putch(97); +[DEBUG IRGEN] visitStmt: putch(97); +[DEBUG IRGEN] EvalExpr: putch(97) +[DEBUG IRGEN] visitExp: putch(97) +[DEBUG IRGEN] visitAddExp: putch(97) +[DEBUG IRGEN] visitMulExp: putch(97) +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: putch(97) +[error] [irgen] 找不到函数: putch + +========== test/test_case/functional/29_break.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] CheckVarDef: sum base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: sum type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Break +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum+i +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {inti;i=0;intsum;sum=0;while(i<100){if(i==50){break;}sum=sum+i;i=i+1;}returnsum;} +[DEBUG IRGEN] visitBlockItem: inti; +[DEBUG IRGEN] visitBlockItem: i=0; +[DEBUG IRGEN] visitStmt: i=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: intsum; +[DEBUG IRGEN] visitBlockItem: sum=0; +[DEBUG IRGEN] visitStmt: sum=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitStmt: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] HandleWhileStmt: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitCond: i<100 +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG IRGEN] visitUnaryExp primary result: 100 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=100 +[DEBUG IRGEN] visitStmt: {if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitBlock: {if(i==50){break;}sum=sum+i;i=i+1;} +[DEBUG IRGEN] visitBlockItem: if(i==50){break;} +[DEBUG IRGEN] visitStmt: if(i==50){break;} +[DEBUG IRGEN] HandleIfStmt: if(i==50){break;} +[DEBUG IRGEN] visitCond: i==50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG IRGEN] visitUnaryExp primary result: 50 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=50 +[DEBUG IRGEN] visitStmt: {break;} +[DEBUG IRGEN] visitBlock: {break;} +[DEBUG IRGEN] visitBlockItem: break; +[DEBUG IRGEN] visitStmt: break; +[DEBUG IRGEN] HandleBreakStmt: break; +[DEBUG IRGEN] visitBlockItem: sum=sum+i; +[DEBUG IRGEN] visitStmt: sum=sum+i; +[DEBUG IRGEN] EvalExpr: sum+i +[DEBUG IRGEN] visitExp: sum+i +[DEBUG IRGEN] visitAddExp: sum+i +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG IRGEN] visitLVal: sum +[DEBUG IRGEN] visitUnaryExp primary result: sum +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=sum +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=sum +[DEBUG IRGEN] visitMulExp: i +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG IRGEN] visitLVal: i +[DEBUG IRGEN] visitUnaryExp primary result: i +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: i=i+1; +[DEBUG IRGEN] visitStmt: i=i+1; +[DEBUG IRGEN] EvalExpr: i+1 +[DEBUG IRGEN] visitExp: i+1 +[DEBUG IRGEN] visitAddExp: i+1 +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG IRGEN] visitLVal: i +[DEBUG IRGEN] visitUnaryExp primary result: i +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=i +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=i +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: returnsum; +[DEBUG IRGEN] visitStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt eval exp: sum +[DEBUG IRGEN] EvalExpr: sum +[DEBUG IRGEN] visitExp: sum +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG IRGEN] visitLVal: sum +[DEBUG IRGEN] visitUnaryExp primary result: sum +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=sum +[error] BasicBlock 已有 terminator,不能继续追加指令: while.exit + +========== test/test_case/functional/36_op_priority2.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: c base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: c type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: d type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: c +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: d +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: (c+a)*(b-d) +[DEBUG] visitUnaryExp: (c+a) +[DEBUG] visitPrimaryExp: (c+a) +[DEBUG] CheckExp: c+a +[DEBUG] visitUnaryExp: c +[DEBUG] visitPrimaryExp: c +[DEBUG] CheckLValue 绑定变量: c +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: (b-d) +[DEBUG] visitPrimaryExp: (b-d) +[DEBUG] CheckExp: b-d +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: d +[DEBUG] visitPrimaryExp: d +[DEBUG] CheckLValue 绑定变量: d +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {inta,b,c,d;a=10;b=4;c=2;d=2;return(c+a)*(b-d);} +[DEBUG IRGEN] visitBlockItem: inta,b,c,d; +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitExp: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG IRGEN] visitUnaryExp primary result: 10 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=10 +[DEBUG IRGEN] visitBlockItem: b=4; +[DEBUG IRGEN] visitStmt: b=4; +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitExp: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG IRGEN] visitUnaryExp primary result: 4 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=4 +[DEBUG IRGEN] visitBlockItem: c=2; +[DEBUG IRGEN] visitStmt: c=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitExp: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG IRGEN] visitUnaryExp primary result: 2 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=2 +[DEBUG IRGEN] visitBlockItem: d=2; +[DEBUG IRGEN] visitStmt: d=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitExp: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG IRGEN] visitUnaryExp primary result: 2 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=2 +[DEBUG IRGEN] visitBlockItem: return(c+a)*(b-d); +[DEBUG IRGEN] visitStmt: return(c+a)*(b-d); +[DEBUG IRGEN] HandleReturnStmt: return(c+a)*(b-d); +[DEBUG IRGEN] HandleReturnStmt eval exp: (c+a)*(b-d) +[DEBUG IRGEN] EvalExpr: (c+a)*(b-d) +[DEBUG IRGEN] visitExp: (c+a)*(b-d) +[DEBUG IRGEN] visitAddExp: (c+a)*(b-d) +[DEBUG IRGEN] visitMulExp: (c+a)*(b-d) +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: (b-d) +[DEBUG IRGEN] visitPrimaryExp: (b-d) +[DEBUG IRGEN] EvalExpr: b-d +[DEBUG IRGEN] visitExp: b-d +[DEBUG IRGEN] visitAddExp: b-d +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG IRGEN] visitLVal: b +[DEBUG IRGEN] visitUnaryExp primary result: b +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=b +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=b +[DEBUG IRGEN] visitMulExp: d +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: d +[DEBUG IRGEN] visitPrimaryExp: d +[DEBUG IRGEN] visitLVal: d +[DEBUG IRGEN] visitUnaryExp primary result: d +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitUnaryExp primary result: (b-d) +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=(c+a)*(b-d) +define i32 @main() { +entry: + %0 = alloca i32 + store i32 0, i32* %0 + %1 = alloca i32 + store i32 0, i32* %1 + %2 = alloca i32 + store i32 0, i32* %2 + %3 = alloca i32 + store i32 0, i32* %3 + store i32 10, i32* %0 + store i32 4, i32* %1 + store i32 2, i32* %2 + store i32 2, i32* %3 + %4 = load i32, i32* %1 + %5 = load i32, i32* %3 + %6 = add i32 %4, %5 + ret i32 %6 +} + +========== test/test_case/functional/95_float.sy ========== +[DEBUG] CheckConstDef: RADIUS base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 5.5 +[DEBUG] visitPrimaryExp: 5.5 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 5.5 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: PI base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 03.141592653589793 +[DEBUG] visitPrimaryExp: 03.141592653589793 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 3.14159 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EPS base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 1e-06 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: PI_HEX base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0x1.921fb6p+1 +[DEBUG] visitPrimaryExp: 0x1.921fb6p+1 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 3.14159 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: HEX2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0x.AP-3 +[DEBUG] visitPrimaryExp: 0x.AP-3 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 0.078125 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: FACT base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: -.33E+5 +[DEBUG] visitUnaryExp: .33E+5 +[DEBUG] visitPrimaryExp: .33E+5 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: -33000 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL1 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: PI_HEX +[DEBUG] visitPrimaryExp: PI_HEX +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: EVAL3 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 0 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: CONV1 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 233 +[DEBUG] visitPrimaryExp: 233 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 233 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: CONV2 base_type: float is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 0xfff +[DEBUG] visitPrimaryExp: 0xfff +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储浮点常量值: 4095 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: MAX base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1e9 +[DEBUG] visitPrimaryExp: 1e9 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 1000000000 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: TWO base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2.9 +[DEBUG] visitPrimaryExp: 2.9 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 2 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: THREE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 3.2 +[DEBUG] visitPrimaryExp: 3.2 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 3 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckConstDef: FIVE base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: TWO +[DEBUG] visitPrimaryExp: TWO +[DEBUG] visitUnaryExp: THREE +[DEBUG] visitPrimaryExp: THREE +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 0 +[DEBUG] 常量符号添加完成 +[DEBUG] 进入函数: float_abs 返回类型: float +[DEBUG] 添加参数: x type_kind: 2 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: -x +[DEBUG] visitUnaryExp: -x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 float_abs has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: circle_area 返回类型: float +[DEBUG] 添加参数: radius type_kind: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: (PI*radius*radius+(radius*radius)*PI)/2 +[DEBUG] visitUnaryExp: (PI*radius*radius+(radius*radius)*PI) +[DEBUG] visitPrimaryExp: (PI*radius*radius+(radius*radius)*PI) +[DEBUG] CheckExp: PI*radius*radius+(radius*radius)*PI +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +[DEBUG] visitUnaryExp: (radius*radius) +[DEBUG] visitPrimaryExp: (radius*radius) +[DEBUG] CheckExp: radius*radius +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +[DEBUG] visitUnaryExp: radius +[DEBUG] visitPrimaryExp: radius +[DEBUG] visitUnaryExp: PI +[DEBUG] visitPrimaryExp: PI +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 circle_area has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: float_eq 返回类型: int +[DEBUG] 添加参数: a type_kind: 2 +[DEBUG] 添加参数: b type_kind: 2 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: float_abs(a-b) +[DEBUG] 函数调用: float_abs +[DEBUG] CheckFuncCall: float_abs +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: a-b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] visitUnaryExp: EPS +[DEBUG] visitPrimaryExp: EPS +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1*2./2 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2. +[DEBUG] visitPrimaryExp: 2. +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 float_eq has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: error 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(101) +[DEBUG] visitUnaryExp: putch(101) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 101 +[DEBUG] visitUnaryExp: 101 +[DEBUG] visitPrimaryExp: 101 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(114) +[DEBUG] visitUnaryExp: putch(114) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 114 +[DEBUG] visitUnaryExp: 114 +[DEBUG] visitPrimaryExp: 114 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 error has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: ok 返回类型: void +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(111) +[DEBUG] visitUnaryExp: putch(111) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 111 +[DEBUG] visitUnaryExp: 111 +[DEBUG] visitPrimaryExp: 111 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(107) +[DEBUG] visitUnaryExp: putch(107) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 107 +[DEBUG] visitUnaryExp: 107 +[DEBUG] visitPrimaryExp: 107 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 函数 ok has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: assert 返回类型: void +[DEBUG] 添加参数: cond type_kind: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: !cond +[DEBUG] visitUnaryExp: cond +[DEBUG] visitPrimaryExp: cond +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +[DEBUG] 函数 assert has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: assert_not 返回类型: void +[DEBUG] 添加参数: cond type_kind: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: cond +[DEBUG] visitPrimaryExp: cond +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +[DEBUG] 函数 assert_not has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(HEX2,FACT)) +[DEBUG] visitUnaryExp: assert_not(float_eq(HEX2,FACT)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(HEX2,FACT) +[DEBUG] visitUnaryExp: float_eq(HEX2,FACT) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: HEX2 +[DEBUG] visitUnaryExp: HEX2 +[DEBUG] visitPrimaryExp: HEX2 +[DEBUG] CheckExp: FACT +[DEBUG] visitUnaryExp: FACT +[DEBUG] visitPrimaryExp: FACT +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(EVAL1,EVAL2)) +[DEBUG] visitUnaryExp: assert_not(float_eq(EVAL1,EVAL2)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(EVAL1,EVAL2) +[DEBUG] visitUnaryExp: float_eq(EVAL1,EVAL2) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: EVAL1 +[DEBUG] visitUnaryExp: EVAL1 +[DEBUG] visitPrimaryExp: EVAL1 +[DEBUG] CheckExp: EVAL2 +[DEBUG] visitUnaryExp: EVAL2 +[DEBUG] visitPrimaryExp: EVAL2 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert(float_eq(EVAL2,EVAL3)) +[DEBUG] visitUnaryExp: assert(float_eq(EVAL2,EVAL3)) +[DEBUG] 函数调用: assert +[DEBUG] CheckFuncCall: assert +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(EVAL2,EVAL3) +[DEBUG] visitUnaryExp: float_eq(EVAL2,EVAL3) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: EVAL2 +[DEBUG] visitUnaryExp: EVAL2 +[DEBUG] visitPrimaryExp: EVAL2 +[DEBUG] CheckExp: EVAL3 +[DEBUG] visitUnaryExp: EVAL3 +[DEBUG] visitPrimaryExp: EVAL3 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert(float_eq(circle_area(RADIUS),circle_area(FIVE))) +[DEBUG] visitUnaryExp: assert(float_eq(circle_area(RADIUS),circle_area(FIVE))) +[DEBUG] 函数调用: assert +[DEBUG] CheckFuncCall: assert +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(circle_area(RADIUS),circle_area(FIVE)) +[DEBUG] visitUnaryExp: float_eq(circle_area(RADIUS),circle_area(FIVE)) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: circle_area(RADIUS) +[DEBUG] visitUnaryExp: circle_area(RADIUS) +[DEBUG] 函数调用: circle_area +[DEBUG] CheckFuncCall: circle_area +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: RADIUS +[DEBUG] visitUnaryExp: RADIUS +[DEBUG] visitPrimaryExp: RADIUS +[DEBUG] 检查参数 0: 实参类型 2 形参类型 1 +[DEBUG] CheckExp: circle_area(FIVE) +[DEBUG] visitUnaryExp: circle_area(FIVE) +[DEBUG] 函数调用: circle_area +[DEBUG] CheckFuncCall: circle_area +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: FIVE +[DEBUG] visitUnaryExp: FIVE +[DEBUG] visitPrimaryExp: FIVE +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: assert_not(float_eq(CONV1,CONV2)) +[DEBUG] visitUnaryExp: assert_not(float_eq(CONV1,CONV2)) +[DEBUG] 函数调用: assert_not +[DEBUG] CheckFuncCall: assert_not +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: float_eq(CONV1,CONV2) +[DEBUG] visitUnaryExp: float_eq(CONV1,CONV2) +[DEBUG] 函数调用: float_eq +[DEBUG] CheckFuncCall: float_eq +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: CONV1 +[DEBUG] visitUnaryExp: CONV1 +[DEBUG] visitPrimaryExp: CONV1 +[DEBUG] CheckExp: CONV2 +[DEBUG] visitUnaryExp: CONV2 +[DEBUG] visitPrimaryExp: CONV2 +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 1: 实参类型 2 形参类型 2 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: 1.5 +[DEBUG] visitPrimaryExp: 1.5 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: !!3.3 +[DEBUG] visitUnaryExp: !3.3 +[DEBUG] visitUnaryExp: 3.3 +[DEBUG] visitPrimaryExp: 3.3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: .0 +[DEBUG] visitPrimaryExp: .0 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: error() +[DEBUG] visitUnaryExp: error() +[DEBUG] 函数调用: error +[DEBUG] CheckFuncCall: error +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitUnaryExp: 0.3 +[DEBUG] visitPrimaryExp: 0.3 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: ok() +[DEBUG] visitUnaryExp: ok() +[DEBUG] 函数调用: ok +[DEBUG] CheckFuncCall: ok +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: p base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: p type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: arr base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] dim[0] = 10 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 10 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: arr type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: MAX +[DEBUG] visitPrimaryExp: MAX +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: input base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: input type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: area base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: area type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: area_trunc base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: area_trunc type_kind: 2 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: arr +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +[DEBUG] CheckLValue 绑定变量: p +[DEBUG] CheckExp: arr[p]+input +[DEBUG] visitUnaryExp: arr[p] +[DEBUG] visitPrimaryExp: arr[p] +[DEBUG] CheckLValue 绑定变量: arr +[DEBUG] CheckExp: p +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +[DEBUG] CheckLValue 绑定变量: p +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +[DEBUG] CheckLValue 绑定变量: input +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putfloat(area) +[DEBUG] visitUnaryExp: putfloat(area) +[DEBUG] 函数调用: putfloat +[DEBUG] CheckFuncCall: putfloat +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: area +[DEBUG] visitUnaryExp: area +[DEBUG] visitPrimaryExp: area +[DEBUG] CheckLValue 绑定变量: area +[DEBUG] 检查参数 0: 实参类型 2 形参类型 2 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(32) +[DEBUG] visitUnaryExp: putch(32) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(area_trunc) +[DEBUG] visitUnaryExp: putint(area_trunc) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: area_trunc +[DEBUG] visitUnaryExp: area_trunc +[DEBUG] visitPrimaryExp: area_trunc +[DEBUG] CheckLValue 绑定变量: area_trunc +[DEBUG] 检查参数 0: 实参类型 2 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i*--1e1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: --1e1 +[DEBUG] visitUnaryExp: -1e1 +[DEBUG] visitUnaryExp: 1e1 +[DEBUG] visitPrimaryExp: 1e1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: p +[DEBUG] CheckExp: p+1 +[DEBUG] visitUnaryExp: p +[DEBUG] visitPrimaryExp: p +[DEBUG] CheckLValue 绑定变量: p +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putfarray(len,arr) +[DEBUG] visitUnaryExp: putfarray(len,arr) +[DEBUG] 函数调用: putfarray +[DEBUG] CheckFuncCall: putfarray +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: len +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +[DEBUG] CheckLValue 绑定变量: len +[DEBUG] CheckExp: arr +[DEBUG] visitUnaryExp: arr +[DEBUG] visitPrimaryExp: arr +[DEBUG] CheckLValue 绑定变量: arr +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[error] [irgen] 常量声明暂未实现 + +========== test/test_case/functional/simple_add.sy ========== +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: a+b +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {inta=1;intb=2;returna+b;} +[DEBUG IRGEN] visitBlockItem: inta=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitExp: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=1 +[DEBUG IRGEN] visitBlockItem: intb=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitExp: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG IRGEN] visitUnaryExp primary result: 2 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=2 +[DEBUG IRGEN] visitBlockItem: returna+b; +[DEBUG IRGEN] visitStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt: returna+b; +[DEBUG IRGEN] HandleReturnStmt eval exp: a+b +[DEBUG IRGEN] EvalExpr: a+b +[DEBUG IRGEN] visitExp: a+b +[DEBUG IRGEN] visitAddExp: a+b +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG IRGEN] visitLVal: a +[DEBUG IRGEN] visitUnaryExp primary result: a +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=a +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=a +[DEBUG IRGEN] visitMulExp: b +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG IRGEN] visitLVal: b +[DEBUG IRGEN] visitUnaryExp primary result: b +[DEBUG] returned from unaryExp +define i32 @main() { +entry: + %0 = alloca i32 + store i32 1, i32* %0 + %1 = alloca i32 + store i32 2, i32* %1 + %2 = load i32, i32* %0 + %3 = load i32, i32* %1 + %4 = add i32 %2, %3 + ret i32 %4 +} + +========== test/test_case/performance/01_mm2.sy ========== +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 1024 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +[error] [sema] 常量表达式求值失败 + +========== test/test_case/performance/02_mv3.sy ========== +[DEBUG] CheckVarDef: x base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: x type_kind: 1 is_array: 0 +[DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2010 +[DEBUG] visitPrimaryExp: 2010 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 2010 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: N +[DEBUG] visitPrimaryExp: N +[error] [sema] 常量表达式求值失败 + +========== test/test_case/performance/03_sort1.sy ========== +[DEBUG] CheckConstDef: base base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 16 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 30000010 +[DEBUG] visitPrimaryExp: 30000010 +[DEBUG] dim[0] = 30000010 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 30000010 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: ans base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: ans type_kind: 1 is_array: 0 +[DEBUG] 进入函数: getMaxNum 返回类型: int +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] 数组参数: arr 类型转换为指针 +[DEBUG] 添加参数: arr type_kind: 3 +[DEBUG] CheckVarDef: ret base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: ret type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: arr[i] +[DEBUG] visitPrimaryExp: arr[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: ret +[DEBUG] visitPrimaryExp: ret +[DEBUG] CheckLValue 绑定变量: ret +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: ret +[DEBUG] CheckExp: arr[i] +[DEBUG] visitUnaryExp: arr[i] +[DEBUG] visitPrimaryExp: arr[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: ret +[DEBUG] visitUnaryExp: ret +[DEBUG] visitPrimaryExp: ret +[DEBUG] CheckLValue 绑定变量: ret +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 getMaxNum has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: getNumPos 返回类型: int +[DEBUG] 添加参数: num type_kind: 1 +[DEBUG] 添加参数: pos type_kind: 1 +[DEBUG] CheckVarDef: tmp base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: tmp type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: pos +[DEBUG] visitPrimaryExp: pos +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: num/base +[DEBUG] visitUnaryExp: num +[DEBUG] visitPrimaryExp: num +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: num%base +[DEBUG] visitUnaryExp: num +[DEBUG] visitPrimaryExp: num +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 getNumPos has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: radixSort 返回类型: void +[DEBUG] 添加参数: bitround type_kind: 1 +[DEBUG] 数组参数: a 类型转换为指针 +[DEBUG] 添加参数: a type_kind: 3 +[DEBUG] 添加参数: l type_kind: 1 +[DEBUG] 添加参数: r type_kind: 1 +[DEBUG] CheckVarDef: head base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: base +[DEBUG] visitPrimaryExp: base +[error] [sema] 常量表达式求值失败 + +========== test/test_case/performance/2025-MYO-20.sy ========== +[DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: A type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: B type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[0] = 1024 +[DEBUG] visitUnaryExp: 1024 +[DEBUG] visitPrimaryExp: 1024 +[DEBUG] dim[1] = 1024 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 1024 1024 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: C type_kind: 6 is_array: 1 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: T base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: T type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: R base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: R type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +[DEBUG] CheckLValue 绑定变量: T +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: T +[DEBUG] visitPrimaryExp: T +[DEBUG] CheckLValue 绑定变量: T +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getarray(A[i]) +[DEBUG] visitUnaryExp: getarray(A[i]) +[DEBUG] 函数调用: getarray +[DEBUG] CheckFuncCall: getarray +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: A[i] +[DEBUG] visitUnaryExp: A[i] +[DEBUG] visitPrimaryExp: A[i] +[DEBUG] CheckLValue 绑定变量: A +[error] [sema] 数组下标个数不匹配 + +========== test/test_case/performance/fft0.sy ========== +[DEBUG] CheckConstDef: mod base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 998244353 +[DEBUG] visitPrimaryExp: 998244353 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 998244353 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: d type_kind: 1 is_array: 0 +[DEBUG] CheckConstDef: maxlen base_type: int is_array: 0 dim_count: 0 +[DEBUG] visitUnaryExp: 2097152 +[DEBUG] visitPrimaryExp: 2097152 +[DEBUG] 初始化值数量: 1 +[DEBUG] 存储整型常量值: 2097152 +[DEBUG] 常量符号添加完成 +[DEBUG] CheckVarDef: temp base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: maxlen +[DEBUG] visitPrimaryExp: maxlen +[error] [sema] 常量表达式求值失败 + +========== test/test_case/performance/gameoflife-oscillator.sy ========== +[DEBUG] CheckVarDef: sheet1 base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[0] = 500 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[1] = 500 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 500 500 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: sheet1 type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: sheet2 base_type: int is_array: 1 dim_count: 2 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[0] = 500 +[DEBUG] visitUnaryExp: 500 +[DEBUG] visitPrimaryExp: 500 +[DEBUG] dim[1] = 500 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 500 500 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: sheet2 type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: active base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: active type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: width base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: width type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: height base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: height type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: steps base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: steps type_kind: 1 is_array: 0 +[DEBUG] 进入函数: read_map 返回类型: void +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: width +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: height +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: steps +[DEBUG] CheckExp: getint() +[DEBUG] visitUnaryExp: getint() +[DEBUG] 函数调用: getint +[DEBUG] CheckFuncCall: getint +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getch() +[DEBUG] visitUnaryExp: getch() +[DEBUG] 函数调用: getch +[DEBUG] CheckFuncCall: getch +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +[DEBUG] CheckLValue 绑定变量: height +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +[DEBUG] CheckLValue 绑定变量: width +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: get base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: get type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: get +[DEBUG] visitPrimaryExp: get +[DEBUG] CheckLValue 绑定变量: get +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sheet1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sheet1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: getch() +[DEBUG] visitUnaryExp: getch() +[DEBUG] 函数调用: getch +[DEBUG] CheckFuncCall: getch +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 read_map has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: put_map 返回类型: void +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +[DEBUG] CheckLValue 绑定变量: height +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +[DEBUG] CheckLValue 绑定变量: width +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: sheet1[j][i] +[DEBUG] visitPrimaryExp: sheet1[j][i] +[DEBUG] CheckLValue 绑定变量: sheet1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(35) +[DEBUG] visitUnaryExp: putch(35) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(46) +[DEBUG] visitUnaryExp: putch(46) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 put_map has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: swap12 返回类型: void +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +[DEBUG] CheckLValue 绑定变量: height +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +[DEBUG] CheckLValue 绑定变量: width +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sheet1 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: sheet2[j][i] +[DEBUG] visitUnaryExp: sheet2[j][i] +[DEBUG] visitPrimaryExp: sheet2[j][i] +[DEBUG] CheckLValue 绑定变量: sheet2 +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 swap12 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: step 返回类型: void +[DEBUG] 数组参数: source 类型转换为指针 +[DEBUG] 添加参数: source type_kind: 3 +[DEBUG] 数组参数: target 类型转换为指针 +[DEBUG] 添加参数: target type_kind: 3 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: height +[DEBUG] visitPrimaryExp: height +[DEBUG] CheckLValue 绑定变量: height +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: width +[DEBUG] visitPrimaryExp: width +[DEBUG] CheckLValue 绑定变量: width +[DEBUG] visitStmt: Block +[DEBUG] CheckVarDef: alive_count base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: alive_count type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: source[j][i] +[DEBUG] visitPrimaryExp: source[j][i] +[error] [sema] 数组下标个数不匹配 + +========== test/test_case/performance/if-combine3.sy ========== +[DEBUG] 进入函数: func 返回类型: int +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] CheckVarDef: sum base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: sum type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: s base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] dim[0] = 100 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: s type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] CheckExp: m+1 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] CheckExp: 2 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] CheckExp: 3 +[DEBUG] visitUnaryExp: 3 +[DEBUG] visitPrimaryExp: 3 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] CheckExp: 4 +[DEBUG] visitUnaryExp: 4 +[DEBUG] visitPrimaryExp: 4 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] CheckExp: 5 +[DEBUG] visitUnaryExp: 5 +[DEBUG] visitPrimaryExp: 5 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] CheckExp: 6 +[DEBUG] visitUnaryExp: 6 +[DEBUG] visitPrimaryExp: 6 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] CheckExp: 7 +[DEBUG] visitUnaryExp: 7 +[DEBUG] visitPrimaryExp: 7 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] CheckExp: 8 +[DEBUG] visitUnaryExp: 8 +[DEBUG] visitPrimaryExp: 8 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 9 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +[DEBUG] CheckExp: 9 +[DEBUG] visitUnaryExp: 9 +[DEBUG] visitPrimaryExp: 9 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 11 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] CheckExp: 11 +[DEBUG] visitUnaryExp: 11 +[DEBUG] visitPrimaryExp: 11 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 12 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] CheckExp: 12 +[DEBUG] visitUnaryExp: 12 +[DEBUG] visitPrimaryExp: 12 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 13 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +[DEBUG] CheckExp: 13 +[DEBUG] visitUnaryExp: 13 +[DEBUG] visitPrimaryExp: 13 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 14 +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +[DEBUG] CheckExp: 14 +[DEBUG] visitUnaryExp: 14 +[DEBUG] visitPrimaryExp: 14 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 15 +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +[DEBUG] CheckExp: 15 +[DEBUG] visitUnaryExp: 15 +[DEBUG] visitPrimaryExp: 15 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 16 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] CheckExp: 16 +[DEBUG] visitUnaryExp: 16 +[DEBUG] visitPrimaryExp: 16 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 17 +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +[DEBUG] CheckExp: 17 +[DEBUG] visitUnaryExp: 17 +[DEBUG] visitPrimaryExp: 17 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 18 +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +[DEBUG] CheckExp: 18 +[DEBUG] visitUnaryExp: 18 +[DEBUG] visitPrimaryExp: 18 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 19 +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +[DEBUG] CheckExp: 19 +[DEBUG] visitUnaryExp: 19 +[DEBUG] visitPrimaryExp: 19 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 20 +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +[DEBUG] CheckExp: 20 +[DEBUG] visitUnaryExp: 20 +[DEBUG] visitPrimaryExp: 20 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 21 +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +[DEBUG] CheckExp: 21 +[DEBUG] visitUnaryExp: 21 +[DEBUG] visitPrimaryExp: 21 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 22 +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +[DEBUG] CheckExp: 22 +[DEBUG] visitUnaryExp: 22 +[DEBUG] visitPrimaryExp: 22 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 23 +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +[DEBUG] CheckExp: 23 +[DEBUG] visitUnaryExp: 23 +[DEBUG] visitPrimaryExp: 23 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 24 +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +[DEBUG] CheckExp: 24 +[DEBUG] visitUnaryExp: 24 +[DEBUG] visitPrimaryExp: 24 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 25 +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +[DEBUG] CheckExp: 25 +[DEBUG] visitUnaryExp: 25 +[DEBUG] visitPrimaryExp: 25 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 26 +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +[DEBUG] CheckExp: 26 +[DEBUG] visitUnaryExp: 26 +[DEBUG] visitPrimaryExp: 26 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 27 +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +[DEBUG] CheckExp: 27 +[DEBUG] visitUnaryExp: 27 +[DEBUG] visitPrimaryExp: 27 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 28 +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +[DEBUG] CheckExp: 28 +[DEBUG] visitUnaryExp: 28 +[DEBUG] visitPrimaryExp: 28 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 29 +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +[DEBUG] CheckExp: 29 +[DEBUG] visitUnaryExp: 29 +[DEBUG] visitPrimaryExp: 29 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 30 +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +[DEBUG] CheckExp: 30 +[DEBUG] visitUnaryExp: 30 +[DEBUG] visitPrimaryExp: 30 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 31 +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +[DEBUG] CheckExp: 31 +[DEBUG] visitUnaryExp: 31 +[DEBUG] visitPrimaryExp: 31 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] CheckExp: 32 +[DEBUG] visitUnaryExp: 32 +[DEBUG] visitPrimaryExp: 32 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 33 +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +[DEBUG] CheckExp: 33 +[DEBUG] visitUnaryExp: 33 +[DEBUG] visitPrimaryExp: 33 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 34 +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +[DEBUG] CheckExp: 34 +[DEBUG] visitUnaryExp: 34 +[DEBUG] visitPrimaryExp: 34 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] CheckExp: 35 +[DEBUG] visitUnaryExp: 35 +[DEBUG] visitPrimaryExp: 35 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 36 +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +[DEBUG] CheckExp: 36 +[DEBUG] visitUnaryExp: 36 +[DEBUG] visitPrimaryExp: 36 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 37 +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +[DEBUG] CheckExp: 37 +[DEBUG] visitUnaryExp: 37 +[DEBUG] visitPrimaryExp: 37 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 38 +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +[DEBUG] CheckExp: 38 +[DEBUG] visitUnaryExp: 38 +[DEBUG] visitPrimaryExp: 38 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 39 +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +[DEBUG] CheckExp: 39 +[DEBUG] visitUnaryExp: 39 +[DEBUG] visitPrimaryExp: 39 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 40 +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +[DEBUG] CheckExp: 40 +[DEBUG] visitUnaryExp: 40 +[DEBUG] visitPrimaryExp: 40 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 41 +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +[DEBUG] CheckExp: 41 +[DEBUG] visitUnaryExp: 41 +[DEBUG] visitPrimaryExp: 41 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 42 +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +[DEBUG] CheckExp: 42 +[DEBUG] visitUnaryExp: 42 +[DEBUG] visitPrimaryExp: 42 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 43 +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +[DEBUG] CheckExp: 43 +[DEBUG] visitUnaryExp: 43 +[DEBUG] visitPrimaryExp: 43 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 44 +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +[DEBUG] CheckExp: 44 +[DEBUG] visitUnaryExp: 44 +[DEBUG] visitPrimaryExp: 44 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 45 +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +[DEBUG] CheckExp: 45 +[DEBUG] visitUnaryExp: 45 +[DEBUG] visitPrimaryExp: 45 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] CheckExp: 46 +[DEBUG] visitUnaryExp: 46 +[DEBUG] visitPrimaryExp: 46 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 47 +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +[DEBUG] CheckExp: 47 +[DEBUG] visitUnaryExp: 47 +[DEBUG] visitPrimaryExp: 47 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 48 +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +[DEBUG] CheckExp: 48 +[DEBUG] visitUnaryExp: 48 +[DEBUG] visitPrimaryExp: 48 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 49 +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +[DEBUG] CheckExp: 49 +[DEBUG] visitUnaryExp: 49 +[DEBUG] visitPrimaryExp: 49 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 50 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] CheckExp: 50 +[DEBUG] visitUnaryExp: 50 +[DEBUG] visitPrimaryExp: 50 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 51 +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +[DEBUG] CheckExp: 51 +[DEBUG] visitUnaryExp: 51 +[DEBUG] visitPrimaryExp: 51 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 52 +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +[DEBUG] CheckExp: 52 +[DEBUG] visitUnaryExp: 52 +[DEBUG] visitPrimaryExp: 52 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 53 +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +[DEBUG] CheckExp: 53 +[DEBUG] visitUnaryExp: 53 +[DEBUG] visitPrimaryExp: 53 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 54 +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +[DEBUG] CheckExp: 54 +[DEBUG] visitUnaryExp: 54 +[DEBUG] visitPrimaryExp: 54 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 55 +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +[DEBUG] CheckExp: 55 +[DEBUG] visitUnaryExp: 55 +[DEBUG] visitPrimaryExp: 55 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 56 +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +[DEBUG] CheckExp: 56 +[DEBUG] visitUnaryExp: 56 +[DEBUG] visitPrimaryExp: 56 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 57 +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +[DEBUG] CheckExp: 57 +[DEBUG] visitUnaryExp: 57 +[DEBUG] visitPrimaryExp: 57 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 58 +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +[DEBUG] CheckExp: 58 +[DEBUG] visitUnaryExp: 58 +[DEBUG] visitPrimaryExp: 58 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 59 +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +[DEBUG] CheckExp: 59 +[DEBUG] visitUnaryExp: 59 +[DEBUG] visitPrimaryExp: 59 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 60 +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +[DEBUG] CheckExp: 60 +[DEBUG] visitUnaryExp: 60 +[DEBUG] visitPrimaryExp: 60 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 61 +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +[DEBUG] CheckExp: 61 +[DEBUG] visitUnaryExp: 61 +[DEBUG] visitPrimaryExp: 61 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 62 +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +[DEBUG] CheckExp: 62 +[DEBUG] visitUnaryExp: 62 +[DEBUG] visitPrimaryExp: 62 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 63 +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +[DEBUG] CheckExp: 63 +[DEBUG] visitUnaryExp: 63 +[DEBUG] visitPrimaryExp: 63 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 64 +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +[DEBUG] CheckExp: 64 +[DEBUG] visitUnaryExp: 64 +[DEBUG] visitPrimaryExp: 64 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 65 +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +[DEBUG] CheckExp: 65 +[DEBUG] visitUnaryExp: 65 +[DEBUG] visitPrimaryExp: 65 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 66 +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +[DEBUG] CheckExp: 66 +[DEBUG] visitUnaryExp: 66 +[DEBUG] visitPrimaryExp: 66 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 67 +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +[DEBUG] CheckExp: 67 +[DEBUG] visitUnaryExp: 67 +[DEBUG] visitPrimaryExp: 67 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 68 +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +[DEBUG] CheckExp: 68 +[DEBUG] visitUnaryExp: 68 +[DEBUG] visitPrimaryExp: 68 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 69 +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +[DEBUG] CheckExp: 69 +[DEBUG] visitUnaryExp: 69 +[DEBUG] visitPrimaryExp: 69 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 70 +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +[DEBUG] CheckExp: 70 +[DEBUG] visitUnaryExp: 70 +[DEBUG] visitPrimaryExp: 70 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 71 +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +[DEBUG] CheckExp: 71 +[DEBUG] visitUnaryExp: 71 +[DEBUG] visitPrimaryExp: 71 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 72 +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +[DEBUG] CheckExp: 72 +[DEBUG] visitUnaryExp: 72 +[DEBUG] visitPrimaryExp: 72 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 73 +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +[DEBUG] CheckExp: 73 +[DEBUG] visitUnaryExp: 73 +[DEBUG] visitPrimaryExp: 73 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 74 +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +[DEBUG] CheckExp: 74 +[DEBUG] visitUnaryExp: 74 +[DEBUG] visitPrimaryExp: 74 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 75 +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +[DEBUG] CheckExp: 75 +[DEBUG] visitUnaryExp: 75 +[DEBUG] visitPrimaryExp: 75 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 76 +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +[DEBUG] CheckExp: 76 +[DEBUG] visitUnaryExp: 76 +[DEBUG] visitPrimaryExp: 76 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 77 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] CheckExp: 77 +[DEBUG] visitUnaryExp: 77 +[DEBUG] visitPrimaryExp: 77 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] CheckExp: 78 +[DEBUG] visitUnaryExp: 78 +[DEBUG] visitPrimaryExp: 78 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 79 +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +[DEBUG] CheckExp: 79 +[DEBUG] visitUnaryExp: 79 +[DEBUG] visitPrimaryExp: 79 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 80 +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +[DEBUG] CheckExp: 80 +[DEBUG] visitUnaryExp: 80 +[DEBUG] visitPrimaryExp: 80 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 81 +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +[DEBUG] CheckExp: 81 +[DEBUG] visitUnaryExp: 81 +[DEBUG] visitPrimaryExp: 81 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 82 +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +[DEBUG] CheckExp: 82 +[DEBUG] visitUnaryExp: 82 +[DEBUG] visitPrimaryExp: 82 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 83 +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +[DEBUG] CheckExp: 83 +[DEBUG] visitUnaryExp: 83 +[DEBUG] visitPrimaryExp: 83 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 84 +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +[DEBUG] CheckExp: 84 +[DEBUG] visitUnaryExp: 84 +[DEBUG] visitPrimaryExp: 84 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 85 +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +[DEBUG] CheckExp: 85 +[DEBUG] visitUnaryExp: 85 +[DEBUG] visitPrimaryExp: 85 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 86 +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +[DEBUG] CheckExp: 86 +[DEBUG] visitUnaryExp: 86 +[DEBUG] visitPrimaryExp: 86 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 87 +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +[DEBUG] CheckExp: 87 +[DEBUG] visitUnaryExp: 87 +[DEBUG] visitPrimaryExp: 87 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 88 +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +[DEBUG] CheckExp: 88 +[DEBUG] visitUnaryExp: 88 +[DEBUG] visitPrimaryExp: 88 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 89 +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +[DEBUG] CheckExp: 89 +[DEBUG] visitUnaryExp: 89 +[DEBUG] visitPrimaryExp: 89 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 90 +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +[DEBUG] CheckExp: 90 +[DEBUG] visitUnaryExp: 90 +[DEBUG] visitPrimaryExp: 90 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 91 +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +[DEBUG] CheckExp: 91 +[DEBUG] visitUnaryExp: 91 +[DEBUG] visitPrimaryExp: 91 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 92 +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +[DEBUG] CheckExp: 92 +[DEBUG] visitUnaryExp: 92 +[DEBUG] visitPrimaryExp: 92 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 93 +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +[DEBUG] CheckExp: 93 +[DEBUG] visitUnaryExp: 93 +[DEBUG] visitPrimaryExp: 93 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 94 +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +[DEBUG] CheckExp: 94 +[DEBUG] visitUnaryExp: 94 +[DEBUG] visitPrimaryExp: 94 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 95 +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +[DEBUG] CheckExp: 95 +[DEBUG] visitUnaryExp: 95 +[DEBUG] visitPrimaryExp: 95 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 96 +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +[DEBUG] CheckExp: 96 +[DEBUG] visitUnaryExp: 96 +[DEBUG] visitPrimaryExp: 96 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 97 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] CheckExp: 97 +[DEBUG] visitUnaryExp: 97 +[DEBUG] visitPrimaryExp: 97 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 98 +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +[DEBUG] CheckExp: 98 +[DEBUG] visitUnaryExp: 98 +[DEBUG] visitPrimaryExp: 98 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: 99 +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +[DEBUG] CheckExp: 99 +[DEBUG] visitUnaryExp: 99 +[DEBUG] visitPrimaryExp: 99 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: m base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: m type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] visitUnaryExp: 100 +[DEBUG] visitPrimaryExp: 100 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum+s[m] +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: s[m] +[DEBUG] visitPrimaryExp: s[m] +[DEBUG] CheckLValue 绑定变量: s +[DEBUG] CheckExp: m +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] CheckExp: m+1 +[DEBUG] visitUnaryExp: m +[DEBUG] visitPrimaryExp: m +[DEBUG] CheckLValue 绑定变量: m +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum%65535 +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: 65535 +[DEBUG] visitPrimaryExp: 65535 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +[DEBUG] CheckVarDef: loopcount base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: loopcount type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(func(loopcount)) +[DEBUG] visitUnaryExp: putint(func(loopcount)) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: func(loopcount) +[DEBUG] visitUnaryExp: func(loopcount) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: loopcount +[DEBUG] visitUnaryExp: loopcount +[DEBUG] visitPrimaryExp: loopcount +[DEBUG] CheckLValue 绑定变量: loopcount +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: func +[DEBUG IRGEN] visitBlock: {intsum=0;inti=200;intj=0;ints[100];intm=0;while(m<100){s[m]=0;m=m+1;}while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;}returnsum;} +[DEBUG IRGEN] visitBlockItem: intsum=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: inti=200; +[DEBUG IRGEN] EvalExpr: 200 +[DEBUG IRGEN] visitExp: 200 +[DEBUG IRGEN] visitAddExp: 200 +[DEBUG IRGEN] visitMulExp: 200 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 200 +[DEBUG IRGEN] visitPrimaryExp: 200 +[DEBUG IRGEN] visitUnaryExp primary result: 200 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=200 +[DEBUG IRGEN] visitBlockItem: intj=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: ints[100]; +[DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: while(m<100){s[m]=0;m=m+1;} +[DEBUG IRGEN] visitStmt: while(m<100){s[m]=0;m=m+1;} +[DEBUG IRGEN] HandleWhileStmt: while(m<100){s[m]=0;m=m+1;} +[DEBUG IRGEN] visitCond: m<100 +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG IRGEN] visitUnaryExp primary result: 100 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=100 +[DEBUG IRGEN] visitStmt: {s[m]=0;m=m+1;} +[DEBUG IRGEN] visitBlock: {s[m]=0;m=m+1;} +[DEBUG IRGEN] visitBlockItem: s[m]=0; +[DEBUG IRGEN] visitStmt: s[m]=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: m=m+1; +[DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] EvalExpr: m+1 +[DEBUG IRGEN] visitExp: m+1 +[DEBUG IRGEN] visitAddExp: m+1 +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG IRGEN] visitLVal: m +[DEBUG IRGEN] visitUnaryExp primary result: m +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=m +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=m +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitStmt: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] HandleWhileStmt: while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitCond: jaccept(this) +[DEBUG IRGEN] visitUnaryExp: n +[DEBUG IRGEN] visitPrimaryExp: n +[DEBUG IRGEN] visitLVal: n +[DEBUG IRGEN] visitUnaryExp primary result: n +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=n +[DEBUG IRGEN] visitStmt: {if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitBlock: {if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} +[DEBUG IRGEN] visitBlockItem: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=1 +[DEBUG IRGEN] visitStmt: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[1]=1; +[DEBUG IRGEN] visitStmt: s[1]=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitExp: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=1 +[DEBUG IRGEN] visitBlockItem: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG IRGEN] visitUnaryExp primary result: 2 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=2 +[DEBUG IRGEN] visitStmt: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[2]=2; +[DEBUG IRGEN] visitStmt: s[2]=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitExp: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG IRGEN] visitUnaryExp primary result: 2 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=2 +[DEBUG IRGEN] visitBlockItem: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG IRGEN] visitUnaryExp primary result: 3 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=3 +[DEBUG IRGEN] visitStmt: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[3]=3; +[DEBUG IRGEN] visitStmt: s[3]=3; +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitExp: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG IRGEN] visitUnaryExp primary result: 3 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=3 +[DEBUG IRGEN] visitBlockItem: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG IRGEN] visitUnaryExp primary result: 4 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=4 +[DEBUG IRGEN] visitStmt: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[4]=4; +[DEBUG IRGEN] visitStmt: s[4]=4; +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitExp: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG IRGEN] visitUnaryExp primary result: 4 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=4 +[DEBUG IRGEN] visitBlockItem: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG IRGEN] visitUnaryExp primary result: 5 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=5 +[DEBUG IRGEN] visitStmt: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[5]=5; +[DEBUG IRGEN] visitStmt: s[5]=5; +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitExp: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG IRGEN] visitUnaryExp primary result: 5 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=5 +[DEBUG IRGEN] visitBlockItem: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG IRGEN] visitUnaryExp primary result: 6 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=6 +[DEBUG IRGEN] visitStmt: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[6]=6; +[DEBUG IRGEN] visitStmt: s[6]=6; +[DEBUG IRGEN] EvalExpr: 6 +[DEBUG IRGEN] visitExp: 6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG IRGEN] visitUnaryExp primary result: 6 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=6 +[DEBUG IRGEN] visitBlockItem: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG IRGEN] visitUnaryExp primary result: 7 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=7 +[DEBUG IRGEN] visitStmt: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[7]=7; +[DEBUG IRGEN] visitStmt: s[7]=7; +[DEBUG IRGEN] EvalExpr: 7 +[DEBUG IRGEN] visitExp: 7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG IRGEN] visitUnaryExp primary result: 7 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=7 +[DEBUG IRGEN] visitBlockItem: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG IRGEN] visitUnaryExp primary result: 8 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=8 +[DEBUG IRGEN] visitStmt: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[8]=8; +[DEBUG IRGEN] visitStmt: s[8]=8; +[DEBUG IRGEN] EvalExpr: 8 +[DEBUG IRGEN] visitExp: 8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG IRGEN] visitUnaryExp primary result: 8 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=8 +[DEBUG IRGEN] visitBlockItem: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>9 +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG IRGEN] visitUnaryExp primary result: 9 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=9 +[DEBUG IRGEN] visitStmt: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[9]=9; +[DEBUG IRGEN] visitStmt: s[9]=9; +[DEBUG IRGEN] EvalExpr: 9 +[DEBUG IRGEN] visitExp: 9 +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG IRGEN] visitUnaryExp primary result: 9 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=9 +[DEBUG IRGEN] visitBlockItem: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG IRGEN] visitUnaryExp primary result: 10 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=10 +[DEBUG IRGEN] visitStmt: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[10]=10; +[DEBUG IRGEN] visitStmt: s[10]=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitExp: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG IRGEN] visitUnaryExp primary result: 10 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=10 +[DEBUG IRGEN] visitBlockItem: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>11 +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG IRGEN] visitUnaryExp primary result: 11 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=11 +[DEBUG IRGEN] visitStmt: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[11]=11; +[DEBUG IRGEN] visitStmt: s[11]=11; +[DEBUG IRGEN] EvalExpr: 11 +[DEBUG IRGEN] visitExp: 11 +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG IRGEN] visitUnaryExp primary result: 11 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=11 +[DEBUG IRGEN] visitBlockItem: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>12 +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG IRGEN] visitUnaryExp primary result: 12 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=12 +[DEBUG IRGEN] visitStmt: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[12]=12; +[DEBUG IRGEN] visitStmt: s[12]=12; +[DEBUG IRGEN] EvalExpr: 12 +[DEBUG IRGEN] visitExp: 12 +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG IRGEN] visitUnaryExp primary result: 12 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=12 +[DEBUG IRGEN] visitBlockItem: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>13 +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG IRGEN] visitUnaryExp primary result: 13 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=13 +[DEBUG IRGEN] visitStmt: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[13]=13; +[DEBUG IRGEN] visitStmt: s[13]=13; +[DEBUG IRGEN] EvalExpr: 13 +[DEBUG IRGEN] visitExp: 13 +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG IRGEN] visitUnaryExp primary result: 13 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=13 +[DEBUG IRGEN] visitBlockItem: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>14 +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG IRGEN] visitUnaryExp primary result: 14 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=14 +[DEBUG IRGEN] visitStmt: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[14]=14; +[DEBUG IRGEN] visitStmt: s[14]=14; +[DEBUG IRGEN] EvalExpr: 14 +[DEBUG IRGEN] visitExp: 14 +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG IRGEN] visitUnaryExp primary result: 14 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=14 +[DEBUG IRGEN] visitBlockItem: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>15 +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG IRGEN] visitUnaryExp primary result: 15 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=15 +[DEBUG IRGEN] visitStmt: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[15]=15; +[DEBUG IRGEN] visitStmt: s[15]=15; +[DEBUG IRGEN] EvalExpr: 15 +[DEBUG IRGEN] visitExp: 15 +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG IRGEN] visitUnaryExp primary result: 15 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=15 +[DEBUG IRGEN] visitBlockItem: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>16 +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG IRGEN] visitUnaryExp primary result: 16 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=16 +[DEBUG IRGEN] visitStmt: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[16]=16; +[DEBUG IRGEN] visitStmt: s[16]=16; +[DEBUG IRGEN] EvalExpr: 16 +[DEBUG IRGEN] visitExp: 16 +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG IRGEN] visitUnaryExp primary result: 16 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=16 +[DEBUG IRGEN] visitBlockItem: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>17 +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG IRGEN] visitUnaryExp primary result: 17 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=17 +[DEBUG IRGEN] visitStmt: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[17]=17; +[DEBUG IRGEN] visitStmt: s[17]=17; +[DEBUG IRGEN] EvalExpr: 17 +[DEBUG IRGEN] visitExp: 17 +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG IRGEN] visitUnaryExp primary result: 17 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=17 +[DEBUG IRGEN] visitBlockItem: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>18 +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG IRGEN] visitUnaryExp primary result: 18 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=18 +[DEBUG IRGEN] visitStmt: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[18]=18; +[DEBUG IRGEN] visitStmt: s[18]=18; +[DEBUG IRGEN] EvalExpr: 18 +[DEBUG IRGEN] visitExp: 18 +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG IRGEN] visitUnaryExp primary result: 18 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=18 +[DEBUG IRGEN] visitBlockItem: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>19 +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG IRGEN] visitUnaryExp primary result: 19 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=19 +[DEBUG IRGEN] visitStmt: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[19]=19; +[DEBUG IRGEN] visitStmt: s[19]=19; +[DEBUG IRGEN] EvalExpr: 19 +[DEBUG IRGEN] visitExp: 19 +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG IRGEN] visitUnaryExp primary result: 19 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=19 +[DEBUG IRGEN] visitBlockItem: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>20 +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG IRGEN] visitUnaryExp primary result: 20 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=20 +[DEBUG IRGEN] visitStmt: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[20]=20; +[DEBUG IRGEN] visitStmt: s[20]=20; +[DEBUG IRGEN] EvalExpr: 20 +[DEBUG IRGEN] visitExp: 20 +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG IRGEN] visitUnaryExp primary result: 20 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=20 +[DEBUG IRGEN] visitBlockItem: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>21 +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG IRGEN] visitUnaryExp primary result: 21 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=21 +[DEBUG IRGEN] visitStmt: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[21]=21; +[DEBUG IRGEN] visitStmt: s[21]=21; +[DEBUG IRGEN] EvalExpr: 21 +[DEBUG IRGEN] visitExp: 21 +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG IRGEN] visitUnaryExp primary result: 21 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=21 +[DEBUG IRGEN] visitBlockItem: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>22 +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG IRGEN] visitUnaryExp primary result: 22 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=22 +[DEBUG IRGEN] visitStmt: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[22]=22; +[DEBUG IRGEN] visitStmt: s[22]=22; +[DEBUG IRGEN] EvalExpr: 22 +[DEBUG IRGEN] visitExp: 22 +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG IRGEN] visitUnaryExp primary result: 22 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=22 +[DEBUG IRGEN] visitBlockItem: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>23 +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG IRGEN] visitUnaryExp primary result: 23 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=23 +[DEBUG IRGEN] visitStmt: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[23]=23; +[DEBUG IRGEN] visitStmt: s[23]=23; +[DEBUG IRGEN] EvalExpr: 23 +[DEBUG IRGEN] visitExp: 23 +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG IRGEN] visitUnaryExp primary result: 23 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=23 +[DEBUG IRGEN] visitBlockItem: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>24 +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG IRGEN] visitUnaryExp primary result: 24 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=24 +[DEBUG IRGEN] visitStmt: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[24]=24; +[DEBUG IRGEN] visitStmt: s[24]=24; +[DEBUG IRGEN] EvalExpr: 24 +[DEBUG IRGEN] visitExp: 24 +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG IRGEN] visitUnaryExp primary result: 24 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=24 +[DEBUG IRGEN] visitBlockItem: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>25 +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG IRGEN] visitUnaryExp primary result: 25 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=25 +[DEBUG IRGEN] visitStmt: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[25]=25; +[DEBUG IRGEN] visitStmt: s[25]=25; +[DEBUG IRGEN] EvalExpr: 25 +[DEBUG IRGEN] visitExp: 25 +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG IRGEN] visitUnaryExp primary result: 25 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=25 +[DEBUG IRGEN] visitBlockItem: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>26 +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG IRGEN] visitUnaryExp primary result: 26 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=26 +[DEBUG IRGEN] visitStmt: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[26]=26; +[DEBUG IRGEN] visitStmt: s[26]=26; +[DEBUG IRGEN] EvalExpr: 26 +[DEBUG IRGEN] visitExp: 26 +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG IRGEN] visitUnaryExp primary result: 26 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=26 +[DEBUG IRGEN] visitBlockItem: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>27 +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG IRGEN] visitUnaryExp primary result: 27 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=27 +[DEBUG IRGEN] visitStmt: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[27]=27; +[DEBUG IRGEN] visitStmt: s[27]=27; +[DEBUG IRGEN] EvalExpr: 27 +[DEBUG IRGEN] visitExp: 27 +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG IRGEN] visitUnaryExp primary result: 27 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=27 +[DEBUG IRGEN] visitBlockItem: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>28 +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG IRGEN] visitUnaryExp primary result: 28 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=28 +[DEBUG IRGEN] visitStmt: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[28]=28; +[DEBUG IRGEN] visitStmt: s[28]=28; +[DEBUG IRGEN] EvalExpr: 28 +[DEBUG IRGEN] visitExp: 28 +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG IRGEN] visitUnaryExp primary result: 28 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=28 +[DEBUG IRGEN] visitBlockItem: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>29 +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG IRGEN] visitUnaryExp primary result: 29 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=29 +[DEBUG IRGEN] visitStmt: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[29]=29; +[DEBUG IRGEN] visitStmt: s[29]=29; +[DEBUG IRGEN] EvalExpr: 29 +[DEBUG IRGEN] visitExp: 29 +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG IRGEN] visitUnaryExp primary result: 29 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=29 +[DEBUG IRGEN] visitBlockItem: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>30 +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG IRGEN] visitUnaryExp primary result: 30 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=30 +[DEBUG IRGEN] visitStmt: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[30]=30; +[DEBUG IRGEN] visitStmt: s[30]=30; +[DEBUG IRGEN] EvalExpr: 30 +[DEBUG IRGEN] visitExp: 30 +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG IRGEN] visitUnaryExp primary result: 30 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=30 +[DEBUG IRGEN] visitBlockItem: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>31 +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG IRGEN] visitUnaryExp primary result: 31 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=31 +[DEBUG IRGEN] visitStmt: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[31]=31; +[DEBUG IRGEN] visitStmt: s[31]=31; +[DEBUG IRGEN] EvalExpr: 31 +[DEBUG IRGEN] visitExp: 31 +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG IRGEN] visitUnaryExp primary result: 31 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=31 +[DEBUG IRGEN] visitBlockItem: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>32 +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG IRGEN] visitUnaryExp primary result: 32 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=32 +[DEBUG IRGEN] visitStmt: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[32]=32; +[DEBUG IRGEN] visitStmt: s[32]=32; +[DEBUG IRGEN] EvalExpr: 32 +[DEBUG IRGEN] visitExp: 32 +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG IRGEN] visitUnaryExp primary result: 32 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=32 +[DEBUG IRGEN] visitBlockItem: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>33 +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG IRGEN] visitUnaryExp primary result: 33 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=33 +[DEBUG IRGEN] visitStmt: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[33]=33; +[DEBUG IRGEN] visitStmt: s[33]=33; +[DEBUG IRGEN] EvalExpr: 33 +[DEBUG IRGEN] visitExp: 33 +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG IRGEN] visitUnaryExp primary result: 33 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=33 +[DEBUG IRGEN] visitBlockItem: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>34 +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG IRGEN] visitUnaryExp primary result: 34 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=34 +[DEBUG IRGEN] visitStmt: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[34]=34; +[DEBUG IRGEN] visitStmt: s[34]=34; +[DEBUG IRGEN] EvalExpr: 34 +[DEBUG IRGEN] visitExp: 34 +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG IRGEN] visitUnaryExp primary result: 34 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=34 +[DEBUG IRGEN] visitBlockItem: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>35 +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG IRGEN] visitUnaryExp primary result: 35 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=35 +[DEBUG IRGEN] visitStmt: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[35]=35; +[DEBUG IRGEN] visitStmt: s[35]=35; +[DEBUG IRGEN] EvalExpr: 35 +[DEBUG IRGEN] visitExp: 35 +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG IRGEN] visitUnaryExp primary result: 35 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=35 +[DEBUG IRGEN] visitBlockItem: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>36 +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG IRGEN] visitUnaryExp primary result: 36 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=36 +[DEBUG IRGEN] visitStmt: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[36]=36; +[DEBUG IRGEN] visitStmt: s[36]=36; +[DEBUG IRGEN] EvalExpr: 36 +[DEBUG IRGEN] visitExp: 36 +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG IRGEN] visitUnaryExp primary result: 36 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=36 +[DEBUG IRGEN] visitBlockItem: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>37 +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG IRGEN] visitUnaryExp primary result: 37 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=37 +[DEBUG IRGEN] visitStmt: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[37]=37; +[DEBUG IRGEN] visitStmt: s[37]=37; +[DEBUG IRGEN] EvalExpr: 37 +[DEBUG IRGEN] visitExp: 37 +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG IRGEN] visitUnaryExp primary result: 37 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=37 +[DEBUG IRGEN] visitBlockItem: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>38 +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG IRGEN] visitUnaryExp primary result: 38 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=38 +[DEBUG IRGEN] visitStmt: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[38]=38; +[DEBUG IRGEN] visitStmt: s[38]=38; +[DEBUG IRGEN] EvalExpr: 38 +[DEBUG IRGEN] visitExp: 38 +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG IRGEN] visitUnaryExp primary result: 38 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=38 +[DEBUG IRGEN] visitBlockItem: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>39 +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG IRGEN] visitUnaryExp primary result: 39 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=39 +[DEBUG IRGEN] visitStmt: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[39]=39; +[DEBUG IRGEN] visitStmt: s[39]=39; +[DEBUG IRGEN] EvalExpr: 39 +[DEBUG IRGEN] visitExp: 39 +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG IRGEN] visitUnaryExp primary result: 39 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=39 +[DEBUG IRGEN] visitBlockItem: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>40 +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG IRGEN] visitUnaryExp primary result: 40 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=40 +[DEBUG IRGEN] visitStmt: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[40]=40; +[DEBUG IRGEN] visitStmt: s[40]=40; +[DEBUG IRGEN] EvalExpr: 40 +[DEBUG IRGEN] visitExp: 40 +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG IRGEN] visitUnaryExp primary result: 40 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=40 +[DEBUG IRGEN] visitBlockItem: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>41 +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG IRGEN] visitUnaryExp primary result: 41 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=41 +[DEBUG IRGEN] visitStmt: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[41]=41; +[DEBUG IRGEN] visitStmt: s[41]=41; +[DEBUG IRGEN] EvalExpr: 41 +[DEBUG IRGEN] visitExp: 41 +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG IRGEN] visitUnaryExp primary result: 41 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=41 +[DEBUG IRGEN] visitBlockItem: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>42 +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG IRGEN] visitUnaryExp primary result: 42 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=42 +[DEBUG IRGEN] visitStmt: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[42]=42; +[DEBUG IRGEN] visitStmt: s[42]=42; +[DEBUG IRGEN] EvalExpr: 42 +[DEBUG IRGEN] visitExp: 42 +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG IRGEN] visitUnaryExp primary result: 42 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=42 +[DEBUG IRGEN] visitBlockItem: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>43 +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG IRGEN] visitUnaryExp primary result: 43 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=43 +[DEBUG IRGEN] visitStmt: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[43]=43; +[DEBUG IRGEN] visitStmt: s[43]=43; +[DEBUG IRGEN] EvalExpr: 43 +[DEBUG IRGEN] visitExp: 43 +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG IRGEN] visitUnaryExp primary result: 43 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=43 +[DEBUG IRGEN] visitBlockItem: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>44 +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG IRGEN] visitUnaryExp primary result: 44 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=44 +[DEBUG IRGEN] visitStmt: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[44]=44; +[DEBUG IRGEN] visitStmt: s[44]=44; +[DEBUG IRGEN] EvalExpr: 44 +[DEBUG IRGEN] visitExp: 44 +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG IRGEN] visitUnaryExp primary result: 44 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=44 +[DEBUG IRGEN] visitBlockItem: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>45 +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG IRGEN] visitUnaryExp primary result: 45 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=45 +[DEBUG IRGEN] visitStmt: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[45]=45; +[DEBUG IRGEN] visitStmt: s[45]=45; +[DEBUG IRGEN] EvalExpr: 45 +[DEBUG IRGEN] visitExp: 45 +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG IRGEN] visitUnaryExp primary result: 45 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=45 +[DEBUG IRGEN] visitBlockItem: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>46 +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG IRGEN] visitUnaryExp primary result: 46 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=46 +[DEBUG IRGEN] visitStmt: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[46]=46; +[DEBUG IRGEN] visitStmt: s[46]=46; +[DEBUG IRGEN] EvalExpr: 46 +[DEBUG IRGEN] visitExp: 46 +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG IRGEN] visitUnaryExp primary result: 46 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=46 +[DEBUG IRGEN] visitBlockItem: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>47 +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG IRGEN] visitUnaryExp primary result: 47 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=47 +[DEBUG IRGEN] visitStmt: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[47]=47; +[DEBUG IRGEN] visitStmt: s[47]=47; +[DEBUG IRGEN] EvalExpr: 47 +[DEBUG IRGEN] visitExp: 47 +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG IRGEN] visitUnaryExp primary result: 47 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=47 +[DEBUG IRGEN] visitBlockItem: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>48 +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG IRGEN] visitUnaryExp primary result: 48 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=48 +[DEBUG IRGEN] visitStmt: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[48]=48; +[DEBUG IRGEN] visitStmt: s[48]=48; +[DEBUG IRGEN] EvalExpr: 48 +[DEBUG IRGEN] visitExp: 48 +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG IRGEN] visitUnaryExp primary result: 48 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=48 +[DEBUG IRGEN] visitBlockItem: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>49 +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG IRGEN] visitUnaryExp primary result: 49 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=49 +[DEBUG IRGEN] visitStmt: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[49]=49; +[DEBUG IRGEN] visitStmt: s[49]=49; +[DEBUG IRGEN] EvalExpr: 49 +[DEBUG IRGEN] visitExp: 49 +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG IRGEN] visitUnaryExp primary result: 49 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=49 +[DEBUG IRGEN] visitBlockItem: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG IRGEN] visitUnaryExp primary result: 50 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=50 +[DEBUG IRGEN] visitStmt: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[50]=50; +[DEBUG IRGEN] visitStmt: s[50]=50; +[DEBUG IRGEN] EvalExpr: 50 +[DEBUG IRGEN] visitExp: 50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG IRGEN] visitUnaryExp primary result: 50 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=50 +[DEBUG IRGEN] visitBlockItem: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>51 +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG IRGEN] visitUnaryExp primary result: 51 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=51 +[DEBUG IRGEN] visitStmt: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[51]=51; +[DEBUG IRGEN] visitStmt: s[51]=51; +[DEBUG IRGEN] EvalExpr: 51 +[DEBUG IRGEN] visitExp: 51 +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG IRGEN] visitUnaryExp primary result: 51 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=51 +[DEBUG IRGEN] visitBlockItem: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>52 +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG IRGEN] visitUnaryExp primary result: 52 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=52 +[DEBUG IRGEN] visitStmt: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[52]=52; +[DEBUG IRGEN] visitStmt: s[52]=52; +[DEBUG IRGEN] EvalExpr: 52 +[DEBUG IRGEN] visitExp: 52 +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG IRGEN] visitUnaryExp primary result: 52 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=52 +[DEBUG IRGEN] visitBlockItem: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>53 +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG IRGEN] visitUnaryExp primary result: 53 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=53 +[DEBUG IRGEN] visitStmt: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[53]=53; +[DEBUG IRGEN] visitStmt: s[53]=53; +[DEBUG IRGEN] EvalExpr: 53 +[DEBUG IRGEN] visitExp: 53 +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG IRGEN] visitUnaryExp primary result: 53 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=53 +[DEBUG IRGEN] visitBlockItem: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>54 +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG IRGEN] visitUnaryExp primary result: 54 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=54 +[DEBUG IRGEN] visitStmt: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[54]=54; +[DEBUG IRGEN] visitStmt: s[54]=54; +[DEBUG IRGEN] EvalExpr: 54 +[DEBUG IRGEN] visitExp: 54 +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG IRGEN] visitUnaryExp primary result: 54 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=54 +[DEBUG IRGEN] visitBlockItem: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>55 +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG IRGEN] visitUnaryExp primary result: 55 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=55 +[DEBUG IRGEN] visitStmt: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[55]=55; +[DEBUG IRGEN] visitStmt: s[55]=55; +[DEBUG IRGEN] EvalExpr: 55 +[DEBUG IRGEN] visitExp: 55 +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG IRGEN] visitUnaryExp primary result: 55 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=55 +[DEBUG IRGEN] visitBlockItem: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>56 +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG IRGEN] visitUnaryExp primary result: 56 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=56 +[DEBUG IRGEN] visitStmt: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[56]=56; +[DEBUG IRGEN] visitStmt: s[56]=56; +[DEBUG IRGEN] EvalExpr: 56 +[DEBUG IRGEN] visitExp: 56 +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG IRGEN] visitUnaryExp primary result: 56 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=56 +[DEBUG IRGEN] visitBlockItem: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>57 +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG IRGEN] visitUnaryExp primary result: 57 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=57 +[DEBUG IRGEN] visitStmt: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[57]=57; +[DEBUG IRGEN] visitStmt: s[57]=57; +[DEBUG IRGEN] EvalExpr: 57 +[DEBUG IRGEN] visitExp: 57 +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG IRGEN] visitUnaryExp primary result: 57 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=57 +[DEBUG IRGEN] visitBlockItem: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>58 +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG IRGEN] visitUnaryExp primary result: 58 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=58 +[DEBUG IRGEN] visitStmt: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[58]=58; +[DEBUG IRGEN] visitStmt: s[58]=58; +[DEBUG IRGEN] EvalExpr: 58 +[DEBUG IRGEN] visitExp: 58 +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG IRGEN] visitUnaryExp primary result: 58 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=58 +[DEBUG IRGEN] visitBlockItem: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>59 +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG IRGEN] visitUnaryExp primary result: 59 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=59 +[DEBUG IRGEN] visitStmt: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[59]=59; +[DEBUG IRGEN] visitStmt: s[59]=59; +[DEBUG IRGEN] EvalExpr: 59 +[DEBUG IRGEN] visitExp: 59 +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG IRGEN] visitUnaryExp primary result: 59 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=59 +[DEBUG IRGEN] visitBlockItem: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>60 +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG IRGEN] visitUnaryExp primary result: 60 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=60 +[DEBUG IRGEN] visitStmt: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[60]=60; +[DEBUG IRGEN] visitStmt: s[60]=60; +[DEBUG IRGEN] EvalExpr: 60 +[DEBUG IRGEN] visitExp: 60 +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG IRGEN] visitUnaryExp primary result: 60 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=60 +[DEBUG IRGEN] visitBlockItem: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>61 +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG IRGEN] visitUnaryExp primary result: 61 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=61 +[DEBUG IRGEN] visitStmt: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[61]=61; +[DEBUG IRGEN] visitStmt: s[61]=61; +[DEBUG IRGEN] EvalExpr: 61 +[DEBUG IRGEN] visitExp: 61 +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG IRGEN] visitUnaryExp primary result: 61 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=61 +[DEBUG IRGEN] visitBlockItem: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>62 +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG IRGEN] visitUnaryExp primary result: 62 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=62 +[DEBUG IRGEN] visitStmt: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[62]=62; +[DEBUG IRGEN] visitStmt: s[62]=62; +[DEBUG IRGEN] EvalExpr: 62 +[DEBUG IRGEN] visitExp: 62 +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG IRGEN] visitUnaryExp primary result: 62 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=62 +[DEBUG IRGEN] visitBlockItem: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>63 +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG IRGEN] visitUnaryExp primary result: 63 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=63 +[DEBUG IRGEN] visitStmt: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[63]=63; +[DEBUG IRGEN] visitStmt: s[63]=63; +[DEBUG IRGEN] EvalExpr: 63 +[DEBUG IRGEN] visitExp: 63 +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG IRGEN] visitUnaryExp primary result: 63 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=63 +[DEBUG IRGEN] visitBlockItem: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>64 +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG IRGEN] visitUnaryExp primary result: 64 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=64 +[DEBUG IRGEN] visitStmt: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[64]=64; +[DEBUG IRGEN] visitStmt: s[64]=64; +[DEBUG IRGEN] EvalExpr: 64 +[DEBUG IRGEN] visitExp: 64 +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG IRGEN] visitUnaryExp primary result: 64 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=64 +[DEBUG IRGEN] visitBlockItem: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>65 +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG IRGEN] visitUnaryExp primary result: 65 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=65 +[DEBUG IRGEN] visitStmt: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[65]=65; +[DEBUG IRGEN] visitStmt: s[65]=65; +[DEBUG IRGEN] EvalExpr: 65 +[DEBUG IRGEN] visitExp: 65 +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG IRGEN] visitUnaryExp primary result: 65 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=65 +[DEBUG IRGEN] visitBlockItem: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>66 +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG IRGEN] visitUnaryExp primary result: 66 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=66 +[DEBUG IRGEN] visitStmt: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[66]=66; +[DEBUG IRGEN] visitStmt: s[66]=66; +[DEBUG IRGEN] EvalExpr: 66 +[DEBUG IRGEN] visitExp: 66 +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG IRGEN] visitUnaryExp primary result: 66 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=66 +[DEBUG IRGEN] visitBlockItem: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>67 +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG IRGEN] visitUnaryExp primary result: 67 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=67 +[DEBUG IRGEN] visitStmt: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[67]=67; +[DEBUG IRGEN] visitStmt: s[67]=67; +[DEBUG IRGEN] EvalExpr: 67 +[DEBUG IRGEN] visitExp: 67 +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG IRGEN] visitUnaryExp primary result: 67 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=67 +[DEBUG IRGEN] visitBlockItem: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>68 +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG IRGEN] visitUnaryExp primary result: 68 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=68 +[DEBUG IRGEN] visitStmt: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[68]=68; +[DEBUG IRGEN] visitStmt: s[68]=68; +[DEBUG IRGEN] EvalExpr: 68 +[DEBUG IRGEN] visitExp: 68 +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG IRGEN] visitUnaryExp primary result: 68 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=68 +[DEBUG IRGEN] visitBlockItem: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>69 +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG IRGEN] visitUnaryExp primary result: 69 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=69 +[DEBUG IRGEN] visitStmt: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[69]=69; +[DEBUG IRGEN] visitStmt: s[69]=69; +[DEBUG IRGEN] EvalExpr: 69 +[DEBUG IRGEN] visitExp: 69 +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG IRGEN] visitUnaryExp primary result: 69 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=69 +[DEBUG IRGEN] visitBlockItem: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>70 +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG IRGEN] visitUnaryExp primary result: 70 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=70 +[DEBUG IRGEN] visitStmt: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[70]=70; +[DEBUG IRGEN] visitStmt: s[70]=70; +[DEBUG IRGEN] EvalExpr: 70 +[DEBUG IRGEN] visitExp: 70 +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG IRGEN] visitUnaryExp primary result: 70 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=70 +[DEBUG IRGEN] visitBlockItem: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>71 +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG IRGEN] visitUnaryExp primary result: 71 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=71 +[DEBUG IRGEN] visitStmt: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[71]=71; +[DEBUG IRGEN] visitStmt: s[71]=71; +[DEBUG IRGEN] EvalExpr: 71 +[DEBUG IRGEN] visitExp: 71 +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG IRGEN] visitUnaryExp primary result: 71 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=71 +[DEBUG IRGEN] visitBlockItem: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>72 +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG IRGEN] visitUnaryExp primary result: 72 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=72 +[DEBUG IRGEN] visitStmt: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[72]=72; +[DEBUG IRGEN] visitStmt: s[72]=72; +[DEBUG IRGEN] EvalExpr: 72 +[DEBUG IRGEN] visitExp: 72 +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG IRGEN] visitUnaryExp primary result: 72 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=72 +[DEBUG IRGEN] visitBlockItem: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>73 +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG IRGEN] visitUnaryExp primary result: 73 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=73 +[DEBUG IRGEN] visitStmt: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[73]=73; +[DEBUG IRGEN] visitStmt: s[73]=73; +[DEBUG IRGEN] EvalExpr: 73 +[DEBUG IRGEN] visitExp: 73 +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG IRGEN] visitUnaryExp primary result: 73 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=73 +[DEBUG IRGEN] visitBlockItem: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>74 +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG IRGEN] visitUnaryExp primary result: 74 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=74 +[DEBUG IRGEN] visitStmt: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[74]=74; +[DEBUG IRGEN] visitStmt: s[74]=74; +[DEBUG IRGEN] EvalExpr: 74 +[DEBUG IRGEN] visitExp: 74 +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG IRGEN] visitUnaryExp primary result: 74 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=74 +[DEBUG IRGEN] visitBlockItem: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>75 +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG IRGEN] visitUnaryExp primary result: 75 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=75 +[DEBUG IRGEN] visitStmt: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[75]=75; +[DEBUG IRGEN] visitStmt: s[75]=75; +[DEBUG IRGEN] EvalExpr: 75 +[DEBUG IRGEN] visitExp: 75 +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG IRGEN] visitUnaryExp primary result: 75 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=75 +[DEBUG IRGEN] visitBlockItem: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>76 +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG IRGEN] visitUnaryExp primary result: 76 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=76 +[DEBUG IRGEN] visitStmt: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[76]=76; +[DEBUG IRGEN] visitStmt: s[76]=76; +[DEBUG IRGEN] EvalExpr: 76 +[DEBUG IRGEN] visitExp: 76 +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG IRGEN] visitUnaryExp primary result: 76 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=76 +[DEBUG IRGEN] visitBlockItem: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>77 +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG IRGEN] visitUnaryExp primary result: 77 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=77 +[DEBUG IRGEN] visitStmt: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[77]=77; +[DEBUG IRGEN] visitStmt: s[77]=77; +[DEBUG IRGEN] EvalExpr: 77 +[DEBUG IRGEN] visitExp: 77 +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG IRGEN] visitUnaryExp primary result: 77 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=77 +[DEBUG IRGEN] visitBlockItem: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>78 +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG IRGEN] visitUnaryExp primary result: 78 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=78 +[DEBUG IRGEN] visitStmt: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[78]=78; +[DEBUG IRGEN] visitStmt: s[78]=78; +[DEBUG IRGEN] EvalExpr: 78 +[DEBUG IRGEN] visitExp: 78 +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG IRGEN] visitUnaryExp primary result: 78 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=78 +[DEBUG IRGEN] visitBlockItem: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>79 +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG IRGEN] visitUnaryExp primary result: 79 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=79 +[DEBUG IRGEN] visitStmt: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[79]=79; +[DEBUG IRGEN] visitStmt: s[79]=79; +[DEBUG IRGEN] EvalExpr: 79 +[DEBUG IRGEN] visitExp: 79 +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG IRGEN] visitUnaryExp primary result: 79 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=79 +[DEBUG IRGEN] visitBlockItem: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>80 +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG IRGEN] visitUnaryExp primary result: 80 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=80 +[DEBUG IRGEN] visitStmt: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[80]=80; +[DEBUG IRGEN] visitStmt: s[80]=80; +[DEBUG IRGEN] EvalExpr: 80 +[DEBUG IRGEN] visitExp: 80 +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG IRGEN] visitUnaryExp primary result: 80 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=80 +[DEBUG IRGEN] visitBlockItem: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>81 +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG IRGEN] visitUnaryExp primary result: 81 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=81 +[DEBUG IRGEN] visitStmt: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[81]=81; +[DEBUG IRGEN] visitStmt: s[81]=81; +[DEBUG IRGEN] EvalExpr: 81 +[DEBUG IRGEN] visitExp: 81 +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG IRGEN] visitUnaryExp primary result: 81 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=81 +[DEBUG IRGEN] visitBlockItem: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>82 +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG IRGEN] visitUnaryExp primary result: 82 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=82 +[DEBUG IRGEN] visitStmt: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[82]=82; +[DEBUG IRGEN] visitStmt: s[82]=82; +[DEBUG IRGEN] EvalExpr: 82 +[DEBUG IRGEN] visitExp: 82 +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG IRGEN] visitUnaryExp primary result: 82 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=82 +[DEBUG IRGEN] visitBlockItem: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>83 +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG IRGEN] visitUnaryExp primary result: 83 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=83 +[DEBUG IRGEN] visitStmt: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[83]=83; +[DEBUG IRGEN] visitStmt: s[83]=83; +[DEBUG IRGEN] EvalExpr: 83 +[DEBUG IRGEN] visitExp: 83 +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG IRGEN] visitUnaryExp primary result: 83 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=83 +[DEBUG IRGEN] visitBlockItem: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>84 +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG IRGEN] visitUnaryExp primary result: 84 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=84 +[DEBUG IRGEN] visitStmt: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[84]=84; +[DEBUG IRGEN] visitStmt: s[84]=84; +[DEBUG IRGEN] EvalExpr: 84 +[DEBUG IRGEN] visitExp: 84 +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG IRGEN] visitUnaryExp primary result: 84 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=84 +[DEBUG IRGEN] visitBlockItem: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>85 +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG IRGEN] visitUnaryExp primary result: 85 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=85 +[DEBUG IRGEN] visitStmt: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[85]=85; +[DEBUG IRGEN] visitStmt: s[85]=85; +[DEBUG IRGEN] EvalExpr: 85 +[DEBUG IRGEN] visitExp: 85 +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG IRGEN] visitUnaryExp primary result: 85 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=85 +[DEBUG IRGEN] visitBlockItem: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>86 +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG IRGEN] visitUnaryExp primary result: 86 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=86 +[DEBUG IRGEN] visitStmt: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[86]=86; +[DEBUG IRGEN] visitStmt: s[86]=86; +[DEBUG IRGEN] EvalExpr: 86 +[DEBUG IRGEN] visitExp: 86 +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG IRGEN] visitUnaryExp primary result: 86 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=86 +[DEBUG IRGEN] visitBlockItem: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>87 +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG IRGEN] visitUnaryExp primary result: 87 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=87 +[DEBUG IRGEN] visitStmt: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[87]=87; +[DEBUG IRGEN] visitStmt: s[87]=87; +[DEBUG IRGEN] EvalExpr: 87 +[DEBUG IRGEN] visitExp: 87 +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG IRGEN] visitUnaryExp primary result: 87 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=87 +[DEBUG IRGEN] visitBlockItem: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>88 +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG IRGEN] visitUnaryExp primary result: 88 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=88 +[DEBUG IRGEN] visitStmt: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[88]=88; +[DEBUG IRGEN] visitStmt: s[88]=88; +[DEBUG IRGEN] EvalExpr: 88 +[DEBUG IRGEN] visitExp: 88 +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG IRGEN] visitUnaryExp primary result: 88 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=88 +[DEBUG IRGEN] visitBlockItem: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>89 +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG IRGEN] visitUnaryExp primary result: 89 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=89 +[DEBUG IRGEN] visitStmt: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[89]=89; +[DEBUG IRGEN] visitStmt: s[89]=89; +[DEBUG IRGEN] EvalExpr: 89 +[DEBUG IRGEN] visitExp: 89 +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG IRGEN] visitUnaryExp primary result: 89 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=89 +[DEBUG IRGEN] visitBlockItem: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitCond: i>90 +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG IRGEN] visitUnaryExp primary result: 90 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=90 +[DEBUG IRGEN] visitStmt: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[90]=90; +[DEBUG IRGEN] visitStmt: s[90]=90; +[DEBUG IRGEN] EvalExpr: 90 +[DEBUG IRGEN] visitExp: 90 +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG IRGEN] visitUnaryExp primary result: 90 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=90 +[DEBUG IRGEN] visitBlockItem: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitCond: i>91 +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG IRGEN] visitUnaryExp primary result: 91 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=91 +[DEBUG IRGEN] visitStmt: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[91]=91; +[DEBUG IRGEN] visitStmt: s[91]=91; +[DEBUG IRGEN] EvalExpr: 91 +[DEBUG IRGEN] visitExp: 91 +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG IRGEN] visitUnaryExp primary result: 91 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=91 +[DEBUG IRGEN] visitBlockItem: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitCond: i>92 +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG IRGEN] visitUnaryExp primary result: 92 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=92 +[DEBUG IRGEN] visitStmt: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitBlock: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[92]=92; +[DEBUG IRGEN] visitStmt: s[92]=92; +[DEBUG IRGEN] EvalExpr: 92 +[DEBUG IRGEN] visitExp: 92 +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG IRGEN] visitUnaryExp primary result: 92 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=92 +[DEBUG IRGEN] visitBlockItem: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitCond: i>93 +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG IRGEN] visitUnaryExp primary result: 93 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=93 +[DEBUG IRGEN] visitStmt: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitBlock: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} +[DEBUG IRGEN] visitBlockItem: s[93]=93; +[DEBUG IRGEN] visitStmt: s[93]=93; +[DEBUG IRGEN] EvalExpr: 93 +[DEBUG IRGEN] visitExp: 93 +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG IRGEN] visitUnaryExp primary result: 93 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=93 +[DEBUG IRGEN] visitBlockItem: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitCond: i>94 +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG IRGEN] visitUnaryExp primary result: 94 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=94 +[DEBUG IRGEN] visitStmt: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitBlock: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} +[DEBUG IRGEN] visitBlockItem: s[94]=94; +[DEBUG IRGEN] visitStmt: s[94]=94; +[DEBUG IRGEN] EvalExpr: 94 +[DEBUG IRGEN] visitExp: 94 +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG IRGEN] visitUnaryExp primary result: 94 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=94 +[DEBUG IRGEN] visitBlockItem: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitCond: i>95 +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG IRGEN] visitUnaryExp primary result: 95 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=95 +[DEBUG IRGEN] visitStmt: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitBlock: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} +[DEBUG IRGEN] visitBlockItem: s[95]=95; +[DEBUG IRGEN] visitStmt: s[95]=95; +[DEBUG IRGEN] EvalExpr: 95 +[DEBUG IRGEN] visitExp: 95 +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG IRGEN] visitUnaryExp primary result: 95 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=95 +[DEBUG IRGEN] visitBlockItem: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] HandleIfStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitCond: i>96 +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG IRGEN] visitUnaryExp primary result: 96 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=96 +[DEBUG IRGEN] visitStmt: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitBlock: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} +[DEBUG IRGEN] visitBlockItem: s[96]=96; +[DEBUG IRGEN] visitStmt: s[96]=96; +[DEBUG IRGEN] EvalExpr: 96 +[DEBUG IRGEN] visitExp: 96 +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG IRGEN] visitUnaryExp primary result: 96 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=96 +[DEBUG IRGEN] visitBlockItem: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] HandleIfStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitCond: i>97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG IRGEN] visitUnaryExp primary result: 97 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=97 +[DEBUG IRGEN] visitStmt: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitBlock: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} +[DEBUG IRGEN] visitBlockItem: s[97]=97; +[DEBUG IRGEN] visitStmt: s[97]=97; +[DEBUG IRGEN] EvalExpr: 97 +[DEBUG IRGEN] visitExp: 97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG IRGEN] visitUnaryExp primary result: 97 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=97 +[DEBUG IRGEN] visitBlockItem: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] HandleIfStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitCond: i>98 +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG IRGEN] visitUnaryExp primary result: 98 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=98 +[DEBUG IRGEN] visitStmt: {s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitBlock: {s[98]=98;if(i>99){s[99]=99;}} +[DEBUG IRGEN] visitBlockItem: s[98]=98; +[DEBUG IRGEN] visitStmt: s[98]=98; +[DEBUG IRGEN] EvalExpr: 98 +[DEBUG IRGEN] visitExp: 98 +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG IRGEN] visitUnaryExp primary result: 98 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=98 +[DEBUG IRGEN] visitBlockItem: if(i>99){s[99]=99;} +[DEBUG IRGEN] visitStmt: if(i>99){s[99]=99;} +[DEBUG IRGEN] HandleIfStmt: if(i>99){s[99]=99;} +[DEBUG IRGEN] visitCond: i>99 +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG IRGEN] visitUnaryExp primary result: 99 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=99 +[DEBUG IRGEN] visitStmt: {s[99]=99;} +[DEBUG IRGEN] visitBlock: {s[99]=99;} +[DEBUG IRGEN] visitBlockItem: s[99]=99; +[DEBUG IRGEN] visitStmt: s[99]=99; +[DEBUG IRGEN] EvalExpr: 99 +[DEBUG IRGEN] visitExp: 99 +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG IRGEN] visitUnaryExp primary result: 99 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=99 +[DEBUG IRGEN] visitBlockItem: j=j+1; +[DEBUG IRGEN] visitStmt: j=j+1; +[DEBUG IRGEN] EvalExpr: j+1 +[DEBUG IRGEN] visitExp: j+1 +[DEBUG IRGEN] visitAddExp: j+1 +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG IRGEN] visitLVal: j +[DEBUG IRGEN] visitUnaryExp primary result: j +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=j +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=j +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitExp: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG IRGEN] visitUnaryExp primary result: 0 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=0 +[DEBUG IRGEN] visitBlockItem: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitStmt: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] HandleWhileStmt: while(m<100){sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitCond: m<100 +[DEBUG IRGEN] visitAddExp: 100 +[DEBUG IRGEN] visitMulExp: 100 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 100 +[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG IRGEN] visitUnaryExp primary result: 100 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=100 +[DEBUG IRGEN] visitStmt: {sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitBlock: {sum=sum+s[m];m=m+1;} +[DEBUG IRGEN] visitBlockItem: sum=sum+s[m]; +[DEBUG IRGEN] visitStmt: sum=sum+s[m]; +[DEBUG IRGEN] EvalExpr: sum+s[m] +[DEBUG IRGEN] visitExp: sum+s[m] +[DEBUG IRGEN] visitAddExp: sum+s[m] +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG IRGEN] visitLVal: sum +[DEBUG IRGEN] visitUnaryExp primary result: sum +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=sum +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=sum +[DEBUG IRGEN] visitMulExp: s[m] +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: s[m] +[DEBUG IRGEN] visitPrimaryExp: s[m] +[DEBUG IRGEN] visitLVal: s[m] +[DEBUG IRGEN] visitUnaryExp primary result: s[m] +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: m=m+1; +[DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] EvalExpr: m+1 +[DEBUG IRGEN] visitExp: m+1 +[DEBUG IRGEN] visitAddExp: m+1 +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG IRGEN] visitLVal: m +[DEBUG IRGEN] visitUnaryExp primary result: m +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=m +[DEBUG IRGEN] visitAddExp left_any.type=PN2ir5ValueE text=m +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG IRGEN] visitUnaryExp primary result: 1 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitBlockItem: sum=sum%65535; +[DEBUG IRGEN] visitStmt: sum=sum%65535; +[DEBUG IRGEN] EvalExpr: sum%65535 +[DEBUG IRGEN] visitExp: sum%65535 +[DEBUG IRGEN] visitAddExp: sum%65535 +[DEBUG IRGEN] visitMulExp: sum%65535 +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: 65535 +[DEBUG IRGEN] visitPrimaryExp: 65535 +[DEBUG IRGEN] visitUnaryExp primary result: 65535 +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=sum%65535 +[DEBUG IRGEN] visitBlockItem: returnsum; +[DEBUG IRGEN] visitStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt: returnsum; +[DEBUG IRGEN] HandleReturnStmt eval exp: sum +[DEBUG IRGEN] EvalExpr: sum +[DEBUG IRGEN] visitExp: sum +[DEBUG IRGEN] visitAddExp: sum +[DEBUG IRGEN] visitMulExp: sum +[DEBUG] unaryExp is not null +[DEBUG] calling unaryExp->accept(this) +[DEBUG IRGEN] visitUnaryExp: sum +[DEBUG IRGEN] visitPrimaryExp: sum +[DEBUG IRGEN] visitLVal: sum +[DEBUG IRGEN] visitUnaryExp primary result: sum +[DEBUG] returned from unaryExp +[DEBUG IRGEN] visitAddExp right_any.type=PN2ir5ValueE text=sum +[error] BasicBlock 已有 terminator,不能继续追加指令: while.exit + +========== test/test_case/performance/large_loop_array_2.sy ========== +[DEBUG] CheckVarDef: COUNT base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: COUNT type_kind: 1 is_array: 0 +[DEBUG] 进入函数: loop 返回类型: float +[DEBUG] 数组参数: x 类型转换为指针 +[DEBUG] 添加参数: x type_kind: 4 +[DEBUG] 数组参数: y 类型转换为指针 +[DEBUG] 添加参数: y type_kind: 4 +[DEBUG] 添加参数: length type_kind: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: accumulator base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: accumulator type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: length +[DEBUG] visitPrimaryExp: length +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: accumulator +[DEBUG] CheckExp: accumulator+x[i]*y[i] +[DEBUG] visitUnaryExp: accumulator +[DEBUG] visitPrimaryExp: accumulator +[DEBUG] CheckLValue 绑定变量: accumulator +[DEBUG] visitUnaryExp: x[i] +[DEBUG] visitPrimaryExp: x[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: y[i] +[DEBUG] visitPrimaryExp: y[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: accumulator +[DEBUG] visitUnaryExp: accumulator +[DEBUG] visitPrimaryExp: accumulator +[DEBUG] CheckLValue 绑定变量: accumulator +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 loop has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: x base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 4096 +[DEBUG] visitPrimaryExp: 4096 +[DEBUG] dim[0] = 4096 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4096 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: x type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: y base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 4096 +[DEBUG] visitPrimaryExp: 4096 +[DEBUG] dim[0] = 4096 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 4096 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: y type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: total base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: total type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: a base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: a type_kind: 2 is_array: 0 +[DEBUG] CheckVarDef: b base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: b type_kind: 2 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: COUNT +[DEBUG] visitPrimaryExp: COUNT +[DEBUG] CheckLValue 绑定变量: COUNT +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: 0.0 +[DEBUG] visitUnaryExp: 0.0 +[DEBUG] visitPrimaryExp: 0.0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: 1.0 +[DEBUG] visitUnaryExp: 1.0 +[DEBUG] visitPrimaryExp: 1.0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: a+0.1 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: 0.1 +[DEBUG] visitPrimaryExp: 0.1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] CheckExp: b+0.2 +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: 0.2 +[DEBUG] visitPrimaryExp: 0.2 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +[DEBUG] CheckLValue 绑定变量: len +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: x +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: a+j +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: y +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: b+j +[DEBUG] visitUnaryExp: b +[DEBUG] visitPrimaryExp: b +[DEBUG] CheckLValue 绑定变量: b +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: total +[DEBUG] CheckExp: total+loop(x,y,len) +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +[DEBUG] CheckLValue 绑定变量: total +[DEBUG] visitUnaryExp: loop(x,y,len) +[DEBUG] 函数调用: loop +[DEBUG] CheckFuncCall: loop +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: x +[DEBUG] visitUnaryExp: x +[DEBUG] visitPrimaryExp: x +[DEBUG] CheckLValue 绑定变量: x +[DEBUG] CheckExp: y +[DEBUG] visitUnaryExp: y +[DEBUG] visitPrimaryExp: y +[DEBUG] CheckLValue 绑定变量: y +[DEBUG] CheckExp: len +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +[DEBUG] CheckLValue 绑定变量: len +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: (total-11442437121638400.000000) +[DEBUG] visitPrimaryExp: (total-11442437121638400.000000) +[DEBUG] CheckExp: total-11442437121638400.000000 +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +[DEBUG] CheckLValue 绑定变量: total +[DEBUG] visitUnaryExp: 11442437121638400.000000 +[DEBUG] visitPrimaryExp: 11442437121638400.000000 +[DEBUG] visitUnaryExp: 0.000001 +[DEBUG] visitPrimaryExp: 0.000001 +[DEBUG] visitUnaryExp: (total-11442437121638400.000000) +[DEBUG] visitPrimaryExp: (total-11442437121638400.000000) +[DEBUG] CheckExp: total-11442437121638400.000000 +[DEBUG] visitUnaryExp: total +[DEBUG] visitPrimaryExp: total +[DEBUG] CheckLValue 绑定变量: total +[DEBUG] visitUnaryExp: 11442437121638400.000000 +[DEBUG] visitPrimaryExp: 11442437121638400.000000 +[DEBUG] visitUnaryExp: -0.000001 +[DEBUG] visitUnaryExp: 0.000001 +[DEBUG] visitPrimaryExp: 0.000001 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(0) +[DEBUG] visitUnaryExp: putint(0) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(1) +[DEBUG] visitUnaryExp: putint(1) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: loop +[error] [ir] AllocaInst 当前只支持 i32* + +========== test/test_case/performance/transpose0.sy ========== +[DEBUG] CheckVarDef: matrix base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 20000000 +[DEBUG] visitPrimaryExp: 20000000 +[DEBUG] dim[0] = 20000000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 20000000 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: matrix type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: int +[DEBUG] 符号添加完成: a type_kind: 6 is_array: 1 +[DEBUG] 进入函数: transpose 返回类型: int +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] 数组参数: matrix 类型转换为指针 +[DEBUG] 添加参数: matrix type_kind: 3 +[DEBUG] 添加参数: rowsize type_kind: 1 +[DEBUG] CheckVarDef: colsize base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: colsize type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: colsize +[DEBUG] visitPrimaryExp: colsize +[DEBUG] CheckLValue 绑定变量: colsize +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Continue +[DEBUG] CheckVarDef: curr base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: curr type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: j*colsize+i +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: colsize +[DEBUG] visitPrimaryExp: colsize +[DEBUG] CheckLValue 绑定变量: colsize +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: matrix[i*rowsize+j] +[DEBUG] visitUnaryExp: matrix[i*rowsize+j] +[DEBUG] visitPrimaryExp: matrix[i*rowsize+j] +[DEBUG] CheckExp: i*rowsize+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: i*rowsize+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: rowsize +[DEBUG] visitPrimaryExp: rowsize +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: curr +[DEBUG] visitUnaryExp: curr +[DEBUG] visitPrimaryExp: curr +[DEBUG] CheckLValue 绑定变量: curr +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: -1 +[DEBUG] visitUnaryExp: -1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 transpose has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: len base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: len type_kind: 1 is_array: 0 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: matrix +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +[DEBUG] CheckLValue 绑定变量: len +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: transpose(n,matrix,a[i]) +[DEBUG] visitUnaryExp: transpose(n,matrix,a[i]) +[DEBUG] 函数调用: transpose +[DEBUG] CheckFuncCall: transpose +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] CheckExp: matrix +[DEBUG] visitUnaryExp: matrix +[DEBUG] visitPrimaryExp: matrix +[DEBUG] CheckLValue 绑定变量: matrix +[DEBUG] CheckExp: a[i] +[DEBUG] visitUnaryExp: a[i] +[DEBUG] visitPrimaryExp: a[i] +[DEBUG] CheckLValue 绑定变量: a +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 3 形参类型 3 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] CheckVarDef: ans base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: ans type_kind: 1 is_array: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: len +[DEBUG] visitPrimaryExp: len +[DEBUG] CheckLValue 绑定变量: len +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] CheckExp: ans+i*i*matrix[i] +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: matrix[i] +[DEBUG] visitPrimaryExp: matrix[i] +[DEBUG] CheckLValue 绑定变量: matrix +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] CheckExp: -ans +[DEBUG] visitUnaryExp: -ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(ans) +[DEBUG] visitUnaryExp: putint(ans) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: ans +[DEBUG] visitUnaryExp: ans +[DEBUG] visitPrimaryExp: ans +[DEBUG] CheckLValue 绑定变量: ans +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[DEBUG IRGEN] visitFuncDef: transpose +[error] [ir] StoreInst 当前只支持存储 i32 + +========== test/test_case/performance/vector_mul3.sy ========== +[DEBUG] CheckVarDef: temp base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: temp type_kind: 2 is_array: 0 +[DEBUG] 进入函数: func 返回类型: int +[DEBUG] 添加参数: i type_kind: 1 +[DEBUG] 添加参数: j type_kind: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] visitUnaryExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] visitPrimaryExp: ((i+j)*(i+j+1)/2+i+1) +[DEBUG] CheckExp: (i+j)*(i+j+1)/2+i+1 +[DEBUG] visitUnaryExp: (i+j) +[DEBUG] visitPrimaryExp: (i+j) +[DEBUG] CheckExp: i+j +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] visitUnaryExp: (i+j+1) +[DEBUG] visitPrimaryExp: (i+j+1) +[DEBUG] CheckExp: i+j+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 func has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: Vectordot 返回类型: float +[DEBUG] 数组参数: v 类型转换为指针 +[DEBUG] 添加参数: v type_kind: 4 +[DEBUG] 数组参数: u 类型转换为指针 +[DEBUG] 添加参数: u type_kind: 4 +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum+v[i]*u[i] +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: v[i] +[DEBUG] visitPrimaryExp: v[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: u[i] +[DEBUG] visitPrimaryExp: u[i] +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 Vectordot has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: mult1 返回类型: void +[DEBUG] 数组参数: v 类型转换为指针 +[DEBUG] 添加参数: v type_kind: 4 +[DEBUG] 数组参数: out 类型转换为指针 +[DEBUG] 添加参数: out type_kind: 4 +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum+v[j]/func(i,j) +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: v[j] +[DEBUG] visitPrimaryExp: v[j] +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: func(i,j) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mult1 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: mult2 返回类型: void +[DEBUG] 数组参数: v 类型转换为指针 +[DEBUG] 添加参数: v type_kind: 4 +[DEBUG] 数组参数: out 类型转换为指针 +[DEBUG] 添加参数: out type_kind: 4 +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: j type_kind: 1 is_array: 0 +[DEBUG] CheckVarDef: sum base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: sum type_kind: 2 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] CheckExp: sum+v[j]/func(j,i) +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitUnaryExp: v[j] +[DEBUG] visitPrimaryExp: v[j] +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: func(j,i) +[DEBUG] 函数调用: func +[DEBUG] CheckFuncCall: func +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: j +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 1: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] CheckExp: j+1 +[DEBUG] visitUnaryExp: j +[DEBUG] visitPrimaryExp: j +[DEBUG] CheckLValue 绑定变量: j +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: sum +[DEBUG] visitUnaryExp: sum +[DEBUG] visitPrimaryExp: sum +[DEBUG] CheckLValue 绑定变量: sum +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 函数 mult2 has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: mult_combin 返回类型: void +[DEBUG] 数组参数: v 类型转换为指针 +[DEBUG] 添加参数: v type_kind: 4 +[DEBUG] 数组参数: out 类型转换为指针 +[DEBUG] 添加参数: out type_kind: 4 +[DEBUG] 添加参数: n type_kind: 1 +[DEBUG] 数组参数: tmp 类型转换为指针 +[DEBUG] 添加参数: tmp type_kind: 4 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult1(v,tmp,n) +[DEBUG] visitUnaryExp: mult1(v,tmp,n) +[DEBUG] 函数调用: mult1 +[DEBUG] CheckFuncCall: mult1 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: v +[DEBUG] visitUnaryExp: v +[DEBUG] visitPrimaryExp: v +[DEBUG] CheckExp: tmp +[DEBUG] visitUnaryExp: tmp +[DEBUG] visitPrimaryExp: tmp +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult2(tmp,out,n) +[DEBUG] visitUnaryExp: mult2(tmp,out,n) +[DEBUG] 函数调用: mult2 +[DEBUG] CheckFuncCall: mult2 +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: tmp +[DEBUG] visitUnaryExp: tmp +[DEBUG] visitPrimaryExp: tmp +[DEBUG] CheckExp: out +[DEBUG] visitUnaryExp: out +[DEBUG] visitPrimaryExp: out +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 函数 mult_combin has_return: 0 return_type_is_void: 1 +[DEBUG] 进入函数: my_sqrt 返回类型: float +[DEBUG] 添加参数: input type_kind: 2 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: -1e-6 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] CheckExp: (temp+input/temp)/2 +[DEBUG] visitUnaryExp: (temp+input/temp) +[DEBUG] visitPrimaryExp: (temp+input/temp) +[DEBUG] CheckExp: temp+input/temp +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: input +[DEBUG] visitPrimaryExp: input +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] visitUnaryExp: 2 +[DEBUG] visitPrimaryExp: 2 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: temp +[DEBUG] visitUnaryExp: temp +[DEBUG] visitPrimaryExp: temp +[DEBUG] CheckLValue 绑定变量: temp +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 my_sqrt has_return: 1 return_type_is_void: 0 +[DEBUG] 进入函数: main 返回类型: int +[DEBUG] CheckVarDef: n base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: n type_kind: 1 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] CheckExp: 2000 +[DEBUG] visitUnaryExp: 2000 +[DEBUG] visitPrimaryExp: 2000 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: starttime() +[DEBUG] visitUnaryExp: starttime() +[DEBUG] 函数调用: starttime +[DEBUG] CheckFuncCall: starttime +[DEBUG] CheckVarDef: vectorA base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: vectorA type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: vectorB base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: vectorB type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: Vectortmp base_type: float is_array: 1 dim_count: 1 +[DEBUG] visitUnaryExp: 100000 +[DEBUG] visitPrimaryExp: 100000 +[DEBUG] dim[0] = 100000 +[DEBUG] 创建数组类型完成 +[DEBUG] type->IsArray(): 1 +[DEBUG] type->GetKind(): 6 +[DEBUG] ArrayType dimensions: 100000 +[DEBUG] Element type: float +[DEBUG] 符号添加完成: Vectortmp type_kind: 6 is_array: 1 +[DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: i type_kind: 1 is_array: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: vectorA +[DEBUG] CheckExp: i +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] visitStmt: While +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1000 +[DEBUG] visitPrimaryExp: 1000 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult_combin(vectorA,vectorB,n,Vectortmp) +[DEBUG] visitUnaryExp: mult_combin(vectorA,vectorB,n,Vectortmp) +[DEBUG] 函数调用: mult_combin +[DEBUG] CheckFuncCall: mult_combin +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorA +[DEBUG] visitUnaryExp: vectorA +[DEBUG] visitPrimaryExp: vectorA +[DEBUG] CheckLValue 绑定变量: vectorA +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +[DEBUG] CheckLValue 绑定变量: vectorB +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] CheckExp: Vectortmp +[DEBUG] visitUnaryExp: Vectortmp +[DEBUG] visitPrimaryExp: Vectortmp +[DEBUG] CheckLValue 绑定变量: Vectortmp +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: mult_combin(vectorB,vectorA,n,Vectortmp) +[DEBUG] visitUnaryExp: mult_combin(vectorB,vectorA,n,Vectortmp) +[DEBUG] 函数调用: mult_combin +[DEBUG] CheckFuncCall: mult_combin +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: vectorB +[DEBUG] visitUnaryExp: vectorB +[DEBUG] visitPrimaryExp: vectorB +[DEBUG] CheckLValue 绑定变量: vectorB +[DEBUG] CheckExp: vectorA +[DEBUG] visitUnaryExp: vectorA +[DEBUG] visitPrimaryExp: vectorA +[DEBUG] CheckLValue 绑定变量: vectorA +[DEBUG] CheckExp: n +[DEBUG] visitUnaryExp: n +[DEBUG] visitPrimaryExp: n +[DEBUG] CheckLValue 绑定变量: n +[DEBUG] CheckExp: Vectortmp +[DEBUG] visitUnaryExp: Vectortmp +[DEBUG] visitPrimaryExp: Vectortmp +[DEBUG] CheckLValue 绑定变量: Vectortmp +[DEBUG] 检查参数 0: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 1: 实参类型 4 形参类型 4 +[DEBUG] 检查参数 2: 实参类型 1 形参类型 1 +[DEBUG] 检查参数 3: 实参类型 4 形参类型 4 +[DEBUG] visitStmt: Assign ExpStmt +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] CheckExp: i+1 +[DEBUG] visitUnaryExp: i +[DEBUG] visitPrimaryExp: i +[DEBUG] CheckLValue 绑定变量: i +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: stoptime() +[DEBUG] visitUnaryExp: stoptime() +[DEBUG] 函数调用: stoptime +[DEBUG] CheckFuncCall: stoptime +[DEBUG] CheckVarDef: result base_type: float is_array: 0 dim_count: 0 +[DEBUG] 符号添加完成: result type_kind: 2 is_array: 0 +[DEBUG] visitStmt: If +[DEBUG] visitUnaryExp: result +[DEBUG] visitPrimaryExp: result +[DEBUG] CheckLValue 绑定变量: result +[DEBUG] visitUnaryExp: 1.000000 +[DEBUG] visitPrimaryExp: 1.000000 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitUnaryExp: result +[DEBUG] visitPrimaryExp: result +[DEBUG] CheckLValue 绑定变量: result +[DEBUG] visitUnaryExp: 1.000000 +[DEBUG] visitPrimaryExp: 1.000000 +[DEBUG] visitUnaryExp: -1e-6 +[DEBUG] visitUnaryExp: 1e-6 +[DEBUG] visitPrimaryExp: 1e-6 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(1) +[DEBUG] visitUnaryExp: putint(1) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 1 +[DEBUG] visitUnaryExp: 1 +[DEBUG] visitPrimaryExp: 1 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Block +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putint(0) +[DEBUG] visitUnaryExp: putint(0) +[DEBUG] 函数调用: putint +[DEBUG] CheckFuncCall: putint +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: ExpStmt +[DEBUG] CheckExp: putch(10) +[DEBUG] visitUnaryExp: putch(10) +[DEBUG] 函数调用: putch +[DEBUG] CheckFuncCall: putch +[DEBUG] 处理函数调用参数: +[DEBUG] CheckExp: 10 +[DEBUG] visitUnaryExp: 10 +[DEBUG] visitPrimaryExp: 10 +[DEBUG] 检查参数 0: 实参类型 1 形参类型 1 +[DEBUG] visitStmt: Return ExpStmt +[DEBUG] 检测到 return 语句 +[DEBUG] visitReturnStmtInternal 被调用 +[DEBUG] 有返回值的 return +[DEBUG] CheckExp: 0 +[DEBUG] visitUnaryExp: 0 +[DEBUG] visitPrimaryExp: 0 +[DEBUG] 设置 current_func_has_return_ = true +[DEBUG] 函数 main has_return: 1 return_type_is_void: 0 +[DEBUG IRGEN] visitCompUnit +[error] [irgen] 当前仅支持 int 类型变量 diff --git a/run.sh b/run.sh index cbd493f..1ac1ddc 100755 --- a/run.sh +++ b/run.sh @@ -35,7 +35,7 @@ total=0 passed=0 failed=0 -echo "开始测试 SysY 解析..." +echo "开始测试 ir out 解析..." echo "输出将保存到 $RESULT_FILE" echo "------------------------" @@ -59,10 +59,10 @@ for file in "${TEST_FILES[@]}"; do echo "========== $file ==========" >> "$RESULT_FILE" if [ $VERBOSE -eq 1 ]; then - "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + "$COMPILER" --emit-ir "$file" 2>&1 | tee -a "$RESULT_FILE" result=${PIPESTATUS[0]} else - "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + "$COMPILER" --emit-ir "$file" >> "$RESULT_FILE" 2>&1 result=$? fi diff --git a/scripts/test_compiler.sh b/scripts/test_compiler.sh new file mode 100755 index 0000000..2aeac28 --- /dev/null +++ b/scripts/test_compiler.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +COMPILER="$ROOT_DIR/build/bin/compiler" +TMP_DIR="$ROOT_DIR/build/test_compiler" +TEST_DIRS=("$ROOT_DIR/test/test_case/functional" "$ROOT_DIR/test/test_case/performance") + +if [[ ! -x "$COMPILER" ]]; then + echo "未找到编译器: $COMPILER" + echo "请先构建编译器,例如: mkdir -p build && cd build && cmake .. && make -j" + exit 1 +fi + +mkdir -p "$TMP_DIR" + +ir_total=0 +ir_pass=0 +result_total=0 +result_pass=0 + +ir_failures=() +result_failures=() + +function normalize_file() { + sed 's/\r$//' "$1" +} + +for test_dir in "${TEST_DIRS[@]}"; do + if [[ ! -d "$test_dir" ]]; then + echo "跳过不存在的测试目录: $test_dir" + continue + fi + + shopt -s nullglob + for input in "$test_dir"/*.sy; do + ir_total=$((ir_total+1)) + base=$(basename "$input") + stem=${base%.sy} + out_dir="$TMP_DIR/$(basename "$test_dir")" + mkdir -p "$out_dir" + ll_file="$out_dir/$stem.ll" + stdout_file="$out_dir/$stem.stdout" + expected_file="$test_dir/$stem.out" + stdin_file="$test_dir/$stem.in" + + echo "[TEST] $input" + compiler_status=0 + compiler_output= + compiler_output=$("$COMPILER" --emit-ir "$input" 2>&1) || compiler_status=$? + printf '%s\n' "$compiler_output" | sed '/^\[DEBUG/d' > "$ll_file" + + if [[ $compiler_status -ne 0 ]]; then + echo " [IR] 编译失败: 返回码 $compiler_status" + ir_failures+=("$input: compiler failed ($compiler_status)") + continue + fi + + if ! grep -qE '^define ' "$ll_file"; then + echo " [IR] 失败: 未生成有效函数定义" + ir_failures+=("$input: invalid IR output") + continue + fi + + ir_pass=$((ir_pass+1)) + echo " [IR] 生成成功" + + if [[ -f "$expected_file" ]]; then + result_total=$((result_total+1)) + expected=$(normalize_file "$expected_file") + run_status=0 + if [[ -f "$stdin_file" ]]; then + lli "$ll_file" < "$stdin_file" > "$stdout_file" 2>&1 || run_status=$? + else + lli "$ll_file" > "$stdout_file" 2>&1 || run_status=$? + fi + + if [[ ! -s "$stdout_file" && "$expected" =~ ^-?[0-9]+$ ]]; then + if [[ "$run_status" -eq "$expected" ]]; then + result_pass=$((result_pass+1)) + echo " [RUN] 返回码匹配" + else + echo " [RUN] 返回码不匹配: got $run_status" + result_failures+=("$input: exit code mismatch (got $run_status)") + fi + else + if diff -u <(printf '%s\n' "$expected") <(normalize_file "$stdout_file") > "$out_dir/$stem.diff"; then + result_pass=$((result_pass+1)) + echo " [RUN] 输出匹配" + else + echo " [RUN] 输出不匹配" + result_failures+=("$input: output mismatch") + fi + fi + else + echo " [RUN] 未找到预期输出 $expected_file,跳过结果验证" + fi + done + shopt -u nullglob + +done + +cat <Append(ret_ty, callee, args, name); } +BranchInst* IRBuilder::CreateBr(BasicBlock* target) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!target) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateBr 缺少 target")); + } + return insert_block_->Append(Type::GetVoidType(), target); +} + +BranchInst* IRBuilder::CreateCondBr(Value* cond, BasicBlock* true_target, + BasicBlock* false_target) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!cond) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 cond")); + } + if (!true_target) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 true_target")); + } + if (!false_target) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateCondBr 缺少 false_target")); + } + return insert_block_->Append(Type::GetVoidType(), cond, true_target, false_target); +} + +// 创建整数相等比较 +IcmpInst* IRBuilder::CreateICmpEQ(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpEQ 缺少操作数")); + } + // 检查类型必须一致 + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::EQ, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数不等比较 +IcmpInst* IRBuilder::CreateICmpNE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpNE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::NE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数小于比较 +IcmpInst* IRBuilder::CreateICmpLT(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpLT 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::LT, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数小于等于比较 +IcmpInst* IRBuilder::CreateICmpLE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpLE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::LE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数大于比较 +IcmpInst* IRBuilder::CreateICmpGT(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpGT 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::GT, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建整数大于等于比较 +IcmpInst* IRBuilder::CreateICmpGE(Value* lhs, Value* rhs, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!lhs || !rhs) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateICmpGE 缺少操作数")); + } + if (lhs->GetType() != rhs->GetType()) { + throw std::runtime_error( + FormatError("ir", "比较操作数类型不匹配")); + } + return insert_block_->Append(IcmpInst::Predicate::GE, lhs, rhs, + Type::GetInt1Type(), name); +} + +// 创建零扩展指令 +ZExtInst* IRBuilder::CreateZExt(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!value) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateZExt 缺少 value")); + } + if (!target_ty) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateZExt 缺少 target_ty")); + } + + auto src_ty = value->GetType(); + // 类型检查:源类型应该是较小的整数类型 + if (!src_ty->IsInt1() && !src_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "ZExt 源类型必须是整数类型")); + } + // 目标类型应该是较大的整数类型 + if (!target_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "ZExt 目标类型必须是整数类型")); + } + + return insert_block_->Append(value, target_ty, name); +} + +// 创建截断指令 +TruncInst* IRBuilder::CreateTrunc(Value* value, std::shared_ptr target_ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!value) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateTrunc 缺少 value")); + } + if (!target_ty) { + throw std::runtime_error( + FormatError("ir", "IRBuilder::CreateTrunc 缺少 target_ty")); + } + + auto src_ty = value->GetType(); + // 类型检查:源类型应该是较大的整数类型 + if (!src_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "Trunc 源类型必须是整数类型")); + } + // 目标类型应该是较小的整数类型 + if (!target_ty->IsInt1() && !target_ty->IsInt32()) { + throw std::runtime_error( + FormatError("ir", "Trunc 目标类型必须是整数类型")); + } + + return insert_block_->Append(value, target_ty, name); +} + +// 便捷方法:i1 转 i32 +ZExtInst* IRBuilder::CreateZExtI1ToI32(Value* value, const std::string& name) { + return CreateZExt(value, Type::GetInt32Type(), name); +} + +// 便捷方法:i32 转 i1 +TruncInst* IRBuilder::CreateTruncI32ToI1(Value* value, const std::string& name) { + return CreateTrunc(value, Type::GetInt1Type(), name); +} + } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 28f1e88..fc8369f 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -22,6 +22,8 @@ static const char* TypeToString(const Type& ty) { case Type::Kind::Label: return "label"; case Type::Kind::Array: return "array"; case Type::Kind::Function: return "function"; + case Type::Kind::Int1: return "i1"; + case Type::Kind::PtrInt1: return "i1*"; default: return "unknown"; } throw std::runtime_error(FormatError("ir", "未知类型")); @@ -45,6 +47,12 @@ static const char* OpcodeToString(Opcode op) { return "ret"; case Opcode::Call: return "call"; + case Opcode::Br: + return "br"; + case Opcode::CondBr: + return "condbr"; + case Opcode::Icmp: + return "icmp"; } return "?"; } @@ -53,10 +61,34 @@ static std::string ValueToString(const Value* v) { if (auto* ci = dynamic_cast(v)) { return std::to_string(ci->GetValue()); } - return v ? v->GetName() : ""; + if (!v) { + return ""; + } + const auto& name = v->GetName(); + if (name.empty()) { + return ""; + } + if (name[0] == '%' || name[0] == '@') { + return name; + } + if (dynamic_cast(v)) { + return "@" + name; + } + return "%" + name; } void IRPrinter::Print(const Module& module, std::ostream& os) { + for (const auto& global : module.GetGlobals()) { + if (!global) continue; + os << "@" << global->GetName() << " = global "; + if (global->GetType()->IsPtrInt32()) { + os << "i32 0\n"; + } else if (global->GetType()->IsPtrFloat()) { + os << "float 0.0\n"; + } else { + os << TypeToString(*global->GetType()) << " zeroinitializer\n"; + } + } for (const auto& func : module.GetFunctions()) { auto* func_ty = static_cast(func->GetType().get()); os << "define " << TypeToString(*func_ty->GetReturnType()) << " @" << func->GetName() << "("; @@ -64,7 +96,7 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { for (const auto& arg : func->GetArguments()) { if (!first) os << ", "; first = false; - os << TypeToString(*arg->GetType()) << " " << arg->GetName(); + os << TypeToString(*arg->GetType()) << " %" << arg->GetName(); } os << ") {\n"; for (const auto& bb : func->GetBlocks()) { @@ -135,6 +167,57 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { os << ")\n"; break; } + + // 在 IRPrinter.cpp 的 switch 语句中添加 + case Opcode::Br: + case Opcode::CondBr: { + auto* br = static_cast(inst); + if (!br->IsConditional()) { + os << " br label %" << br->GetTarget()->GetName() << "\n"; + } else { + os << " br i1 " << ValueToString(br->GetCondition()) + << ", label %" << br->GetTrueTarget()->GetName() + << ", label %" << br->GetFalseTarget()->GetName() << "\n"; + } + break; + } + + case Opcode::Icmp: { + auto* icmp = static_cast(inst); + os << " " << icmp->GetName() << " = icmp "; + switch (icmp->GetPredicate()) { + case IcmpInst::Predicate::EQ: os << "eq"; break; + case IcmpInst::Predicate::NE: os << "ne"; break; + case IcmpInst::Predicate::LT: os << "slt"; break; + case IcmpInst::Predicate::LE: os << "sle"; break; + case IcmpInst::Predicate::GT: os << "sgt"; break; + case IcmpInst::Predicate::GE: os << "sge"; break; + } + os << " " << TypeToString(*icmp->GetLhs()->GetType()) + << " " << ValueToString(icmp->GetLhs()) + << ", " << ValueToString(icmp->GetRhs()) << "\n"; + break; + } + + case Opcode::ZExt: { + auto* zext = static_cast(inst); + os << " " << zext->GetName() << " = zext " + << TypeToString(*zext->GetSourceType()) << " " + << ValueToString(zext->GetValue()) << " to " + << TypeToString(*zext->GetTargetType()) << "\n"; + break; + } + + case Opcode::Trunc: { + auto* trunc = static_cast(inst); + os << " " << trunc->GetName() << " = trunc " + << TypeToString(*trunc->GetSourceType()) << " " + << ValueToString(trunc->GetValue()) << " to " + << TypeToString(*trunc->GetTargetType()) << "\n"; + break; + } + default: + os << "NOT_IMPLEMENTED: " << OpcodeToString(inst->GetOpcode()) << "\n"; } } } diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 396dbf6..d339b4a 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -52,7 +52,10 @@ Instruction::Instruction(Opcode op, std::shared_ptr ty, std::string name) Opcode Instruction::GetOpcode() const { return opcode_; } -bool Instruction::IsTerminator() const { return opcode_ == Opcode::Ret; } +bool Instruction::IsTerminator() const { + return opcode_ == Opcode::Ret || opcode_ == Opcode::Br || + opcode_ == Opcode::CondBr; +} BasicBlock* Instruction::GetParent() const { return parent_; } diff --git a/src/ir/Module.cpp b/src/ir/Module.cpp index 811aa09..58ae1e5 100644 --- a/src/ir/Module.cpp +++ b/src/ir/Module.cpp @@ -18,4 +18,14 @@ const std::vector>& Module::GetFunctions() const { return functions_; } +GlobalValue* Module::CreateGlobal(const std::string& name, + std::shared_ptr ty) { + globals_.push_back(std::make_unique(ty, name)); + return globals_.back().get(); +} + +const std::vector>& Module::GetGlobals() const { + return globals_; +} + } // namespace ir diff --git a/src/ir/Type.cpp b/src/ir/Type.cpp index 8d0f5b9..792ff54 100644 --- a/src/ir/Type.cpp +++ b/src/ir/Type.cpp @@ -62,6 +62,17 @@ const std::shared_ptr& Type::GetLabelType() { return type; } +// Int1 类型表示布尔值,通常用于比较指令的结果 +const std::shared_ptr& Type::GetInt1Type() { + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::Int1)); + return type; + } +// PtrInt1 类型表示指向 Int1 的指针,主要用于条件跳转等场景 +const std::shared_ptr& Type::GetPtrInt1Type() { + static const std::shared_ptr type = std::shared_ptr(new Type(Kind::PtrInt1)); + return type; + } + // ---------- 数组类型缓存 ---------- // 使用自定义键类型保证唯一性:元素类型指针 + 维度向量 struct ArrayKey { diff --git a/src/ir/Value.cpp b/src/ir/Value.cpp index a4fd6f4..68b6ab4 100644 --- a/src/ir/Value.cpp +++ b/src/ir/Value.cpp @@ -76,7 +76,7 @@ void Value::ReplaceAllUsesWith(Value* new_value) { ConstantValue::ConstantValue(std::shared_ptr ty, std::string name) : Value(std::move(ty), std::move(name)) {} - +// 建一个 Argument 对象,用给定的类型和名称初始化它,并继承 Value 的所有属性和方法。 Argument::Argument(std::shared_ptr ty, std::string name) : Value(std::move(ty), std::move(name)) {} diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 5b2d446..4aa0b32 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -65,7 +65,7 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { // 全局变量(简化):用全局占位符记录为 i32*,Default 不直接插入指令 // 全局变量:在数据段分配 // TODO:真正的全局变量应该存储值本身,而不是指针,这里为了简化实现先使用指针占位,后续可以改为直接存储值 - auto* global = new ir::GlobalValue(ir::Type::GetPtrInt32Type(), varName); + auto* global = module_.CreateGlobal(varName, ir::Type::GetPtrInt32Type()); global_map_[varName] = global; // 对全局初始化暂不支持,默认为0 return {}; @@ -75,19 +75,15 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); storage_map_[ctx] = slot; - ir::Value* init = nullptr; - // 使用 initVal() 而不是 initValue() if (auto* initVal = ctx->initVal()) { + ir::Value* init = nullptr; if (initVal->exp()) { init = EvalExpr(*initVal->exp()); + builder_.CreateStore(init, slot); } else { - // 数组初始化暂不支持 - init = builder_.CreateConstInt(0); + // 数组初始化暂不支持,局部数组也不做默认初始化 } - } else { - init = builder_.CreateConstInt(0); } - builder_.CreateStore(init, slot); return {}; } diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 6e5ffcc..049bfba 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -22,6 +22,7 @@ // - ... ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { + std::cout << "[DEBUG IRGEN] EvalExpr: " << expr.getText() << std::endl; return std::any_cast(expr.accept(this)); } @@ -29,8 +30,17 @@ ir::Value* IRGenImpl::EvalCond(SysYParser::CondContext& cond) { return std::any_cast(cond.accept(this)); } +std::any IRGenImpl::visitExp(SysYParser::ExpContext* ctx) { + if (!ctx) { + throw std::runtime_error(FormatError("irgen", "缺少表达式")); + } + std::cout << "[DEBUG IRGEN] visitExp: " << ctx->getText() << std::endl; + return ctx->addExp()->accept(this); +} + // 基本表达式:数字、变量、括号表达式 std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { + std::cout << "[DEBUG IRGEN] visitPrimaryExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少基本表达式")); } @@ -71,12 +81,15 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { } std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { + std::cout << "[DEBUG IRGEN] visitUnaryExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少一元表达式")); } if (ctx->primaryExp()) { - return ctx->primaryExp()->accept(this); + auto result = ctx->primaryExp()->accept(this); + std::cout << "[DEBUG IRGEN] visitUnaryExp primary result: " << (ctx->primaryExp() ? ctx->primaryExp()->getText() : "") << std::endl; + return result; } if (ctx->Ident() && ctx->L_PAREN()) { @@ -104,14 +117,17 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { } if (ctx->unaryOp() && ctx->unaryExp()) { - auto* operand = std::any_cast(ctx->unaryExp()->accept(this)); + auto operand_any = ctx->unaryExp()->accept(this); + std::cout << "[DEBUG IRGEN] visitUnaryExp operand_any.type=" << operand_any.type().name() << " text=" << ctx->unaryExp()->getText() << std::endl; + auto* operand = std::any_cast(operand_any); if (ctx->unaryOp()->AddOp()) { return operand; } if (ctx->unaryOp()->SubOp()) { auto* zero = builder_.CreateConstInt(0); - return builder_.CreateBinary(ir::Opcode::Sub, zero, operand, - module_.GetContext().NextTemp()); + return static_cast( + builder_.CreateBinary(ir::Opcode::Sub, zero, operand, + module_.GetContext().NextTemp())); } if (ctx->unaryOp()->NotOp()) { // 逻辑非暂不支持,先默认 0/1 取反 @@ -129,6 +145,7 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { // 2. 再通过 storage_map_ 找到该声明对应的栈槽位; // 3. 最后生成 load,把内存中的值读出来。 std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { + std::cout << "[DEBUG IRGEN] visitLVal: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); } @@ -172,6 +189,7 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 加法表达式 std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { + std::cout << "[DEBUG IRGEN] visitAddExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法加法表达式")); } @@ -185,10 +203,14 @@ std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { // 如果有左子节点(AddExp),递归处理 if (ctx->addExp()) { - result = std::any_cast(ctx->addExp()->accept(this)); + auto left_any = ctx->addExp()->accept(this); + std::cout << "[DEBUG IRGEN] visitAddExp left_any.type=" << left_any.type().name() << " text=" << ctx->addExp()->getText() << std::endl; + result = std::any_cast(left_any); } else { // 否则是 MulExp - result = std::any_cast(ctx->mulExp()->accept(this)); + auto right_any = ctx->mulExp()->accept(this); + std::cout << "[DEBUG IRGEN] visitAddExp right_any.type=" << right_any.type().name() << " text=" << ctx->mulExp()->getText() << std::endl; + result = std::any_cast(right_any); } // 如果有运算符和右操作数 @@ -209,55 +231,108 @@ std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { // 在 IRGenExp.cpp 中添加 -// 简化版 visitMulExp std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { + std::cout << "[DEBUG IRGEN] visitMulExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); } - // 暂时只返回 unaryExp 的值 - if (ctx->unaryExp()) { - return ctx->unaryExp()->accept(this); + // 检查 unaryExp(返回指针,可能为 nullptr) + auto* unaryExp = ctx->unaryExp(); + std::cout << "[DEBUG] unaryExp is " << (unaryExp ? "not null" : "null") << std::endl; + + if (unaryExp) { + std::cout << "[DEBUG] calling unaryExp->accept(this)" << std::endl; + auto result = unaryExp->accept(this); + std::cout << "[DEBUG] returned from unaryExp" << std::endl; + return result; } - // 如果有 mulExp 子节点,递归处理 - if (ctx->mulExp()) { - return ctx->mulExp()->accept(this); + // 检查 mulExp + auto* mulExp = ctx->mulExp(); + std::cout << "[DEBUG] mulExp is " << (mulExp ? "not null" : "null") << std::endl; + if (mulExp) { + std::cout << "[DEBUG] calling mulExp->accept(this)" << std::endl; + auto result = mulExp->accept(this); + std::cout << "[DEBUG] returned from mulExp" << std::endl; + return result; } + std::cout << "[DEBUG] no unaryExp or mulExp found!" << std::endl; throw std::runtime_error(FormatError("irgen", "乘法表达式暂未实现")); } -// 关系表达式(暂未完整实现) +// 关系表达式(支持 <, >, <=, >=) std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法关系表达式")); } - - // 简化:返回 addExp 的值 + + if (ctx->relExp() && ctx->addExp()) { + auto left_any = ctx->relExp()->accept(this); + auto right_any = ctx->addExp()->accept(this); + auto* lhs = std::any_cast(left_any); + auto* rhs = std::any_cast(right_any); + + if (ctx->LOp()) { + return static_cast( + builder_.CreateICmpLT(lhs, rhs, module_.GetContext().NextTemp())); + } + if (ctx->GOp()) { + return static_cast( + builder_.CreateICmpGT(lhs, rhs, module_.GetContext().NextTemp())); + } + if (ctx->LeOp()) { + return static_cast( + builder_.CreateICmpLE(lhs, rhs, module_.GetContext().NextTemp())); + } + if (ctx->GeOp()) { + return static_cast( + builder_.CreateICmpGE(lhs, rhs, module_.GetContext().NextTemp())); + } + throw std::runtime_error(FormatError("irgen", "未知关系运算符")); + } + if (ctx->addExp()) { return ctx->addExp()->accept(this); } - + throw std::runtime_error(FormatError("irgen", "关系表达式暂未实现")); } -// 相等表达式(暂未完整实现) +// 相等表达式(支持 ==, !=) std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法相等表达式")); } - - // 简化:返回 relExp 的值 + + if (ctx->eqExp() && ctx->relExp()) { + auto left_any = ctx->eqExp()->accept(this); + auto right_any = ctx->relExp()->accept(this); + auto* lhs = std::any_cast(left_any); + auto* rhs = std::any_cast(right_any); + + if (ctx->EqOp()) { + return static_cast( + builder_.CreateICmpEQ(lhs, rhs, module_.GetContext().NextTemp())); + } + if (ctx->NeOp()) { + return static_cast( + builder_.CreateICmpNE(lhs, rhs, module_.GetContext().NextTemp())); + } + throw std::runtime_error(FormatError("irgen", "未知相等运算符")); + } + if (ctx->relExp()) { return ctx->relExp()->accept(this); } - + throw std::runtime_error(FormatError("irgen", "相等表达式暂未实现")); } // 条件表达式 std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { + std::cout << "[DEBUG IRGEN] visitCond: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法条件表达式")); } diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index d47f970..feebafa 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -30,6 +30,7 @@ IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) // 修正:没有 mainFuncDef,通过函数名找到 main std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { + std::cout << "[DEBUG IRGEN] visitCompUnit" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少编译单元")); } @@ -52,6 +53,7 @@ std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { } std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { + std::cout << "[DEBUG IRGEN] visitFuncDef: " << (ctx && ctx->Ident() ? ctx->Ident()->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少函数定义")); } @@ -154,36 +156,51 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { } std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { + std::cout << "[DEBUG IRGEN] visitBlock: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句块")); } - + + BlockFlow flow = BlockFlow::Continue; for (auto* item : ctx->blockItem()) { - if (item) { - if (VisitBlockItemResult(*item) == BlockFlow::Terminated) { - break; - } + if (!item) continue; + + flow = VisitBlockItemResult(*item); + if (flow == BlockFlow::Terminated) { + break; + } + + auto* cur = builder_.GetInsertBlock(); + std::cout << "[DEBUG] current insert block: " + << (cur ? cur->GetName() : "") << std::endl; + if (cur && cur->HasTerminator()) { + break; } } - - return {}; + + return flow; } +// 类型安全的包装器 IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( SysYParser::BlockItemContext& item) { - return std::any_cast(item.accept(this)); + auto result = item.accept(this);// 调用 visitBlockItem,返回 std::any 包装的 BlockFlow + return std::any_cast(result); // 解包为 BlockFlow } - +// 用于遍历块内项,返回是否继续访问后续项(如遇到 return/break/continue 则终止访问) std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { + std::cout << "[DEBUG IRGEN] visitBlockItem: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少块内项")); } + // 块内项可以是语句或声明,优先处理语句(如 return/break/continue 可能终止块内执行) if (ctx->stmt()) { - return ctx->stmt()->accept(this); + return ctx->stmt()->accept(this); // 语句访问返回 BlockFlow,指示是否继续访问后续项 } + // 处理声明(如变量定义),继续访问后续项 if (ctx->decl()) { ctx->decl()->accept(this); - return BlockFlow::Continue; + return BlockFlow::Continue; // 声明不会终止块内执行,继续访问后续项 } throw std::runtime_error(FormatError("irgen", "暂不支持的块内项")); } diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index cd78d93..d5fe1af 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -16,6 +16,7 @@ // - 空语句、块语句嵌套分发之外的更多语句形态 std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] visitStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句")); } @@ -30,6 +31,24 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { return HandleAssignStmt(ctx); } + // if 语句 + if (ctx->If()) { + return HandleIfStmt(ctx); + } + + // while 语句 + if (ctx->While()) { + return HandleWhileStmt(ctx); + } + + // break 语句 + if (ctx->Break()) { + return HandleBreakStmt(ctx); + } + // continue 语句 + if (ctx->Continue()) { + return HandleContinueStmt(ctx); + } // 块语句 if (ctx->block()) { return ctx->block()->accept(this); @@ -44,12 +63,14 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); } IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleReturnStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); } ir::Value* retValue = nullptr; if (ctx->exp()) { + std::cout << "[DEBUG IRGEN] HandleReturnStmt eval exp: " << ctx->exp()->getText() << std::endl; retValue = EvalExpr(*ctx->exp()); } // 如果没有表达式,返回0(对于int main) @@ -63,26 +84,187 @@ IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { // if语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { - // TODO: 实现if语句 - throw std::runtime_error(FormatError("irgen", "if语句暂未实现")); + std::cout << "[DEBUG IRGEN] HandleIfStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + auto* cond = ctx->cond(); + auto* thenStmt = ctx->stmt(0); + auto* elseStmt = ctx->stmt(1); + + // 创建基本块 + auto* thenBlock = func_->CreateBlock("then"); + auto* elseBlock = (ctx->Else() && elseStmt) ? func_->CreateBlock("else") : nullptr; + auto* mergeBlock = func_->CreateBlock("merge"); + + std::cout << "[DEBUG IF] thenBlock: " << thenBlock->GetName() << std::endl; + if (elseBlock) std::cout << "[DEBUG IF] elseBlock: " << elseBlock->GetName() << std::endl; + std::cout << "[DEBUG IF] mergeBlock: " << mergeBlock->GetName() << std::endl; + std::cout << "[DEBUG IF] current insert block before cond: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + // 生成条件 + auto* condValue = EvalCond(*cond); + + // 创建条件跳转 + if (elseBlock) { + std::cout << "[DEBUG IF] Creating condbr: " << condValue->GetName() + << " -> " << thenBlock->GetName() << ", " << elseBlock->GetName() << std::endl; + builder_.CreateCondBr(condValue, thenBlock, elseBlock); + } else { + std::cout << "[DEBUG IF] Creating condbr: " << condValue->GetName() + << " -> " << thenBlock->GetName() << ", " << mergeBlock->GetName() << std::endl; + builder_.CreateCondBr(condValue, thenBlock, mergeBlock); + } + + // 生成 then 分支 + std::cout << "[DEBUG IF] Generating then branch in block: " << thenBlock->GetName() << std::endl; + builder_.SetInsertPoint(thenBlock); + auto thenResult = thenStmt->accept(this); + bool thenTerminated = (std::any_cast(thenResult) == BlockFlow::Terminated); + std::cout << "[DEBUG IF] then branch terminated: " << thenTerminated << std::endl; + + if (!thenTerminated) { + std::cout << "[DEBUG IF] Adding br to merge block from then" << std::endl; + builder_.CreateBr(mergeBlock); + } + std::cout << "[DEBUG IF] then block has terminator: " << thenBlock->HasTerminator() << std::endl; + + // 生成 else 分支 + bool elseTerminated = false; + if (elseBlock) { + std::cout << "[DEBUG IF] Generating else branch in block: " << elseBlock->GetName() << std::endl; + builder_.SetInsertPoint(elseBlock); + auto elseResult = elseStmt->accept(this); + elseTerminated = (std::any_cast(elseResult) == BlockFlow::Terminated); + std::cout << "[DEBUG IF] else branch terminated: " << elseTerminated << std::endl; + + if (!elseTerminated) { + std::cout << "[DEBUG IF] Adding br to merge block from else" << std::endl; + builder_.CreateBr(mergeBlock); + } + std::cout << "[DEBUG IF] else block has terminator: " << elseBlock->HasTerminator() << std::endl; + } + + // 决定后续插入点 + std::cout << "[DEBUG IF] thenTerminated=" << thenTerminated + << ", elseTerminated=" << elseTerminated << std::endl; + + if (elseBlock) { + if (thenTerminated && elseTerminated) { + auto* afterIfBlock = func_->CreateBlock("after.if"); + std::cout << "[DEBUG IF] Both branches terminated, creating new block: " + << afterIfBlock->GetName() << std::endl; + builder_.SetInsertPoint(afterIfBlock); + } else { + std::cout << "[DEBUG IF] Setting insert point to merge block: " + << mergeBlock->GetName() << std::endl; + builder_.SetInsertPoint(mergeBlock); + } + } else { + std::cout << "[DEBUG IF] No else, setting insert point to merge block: " + << mergeBlock->GetName() << std::endl; + builder_.SetInsertPoint(mergeBlock); + } + + std::cout << "[DEBUG IF] Final insert block: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + return BlockFlow::Continue; } -// while语句(待实现) +// while语句(待实现)IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { - // TODO: 实现while语句 - throw std::runtime_error(FormatError("irgen", "while语句暂未实现")); + std::cout << "[DEBUG IRGEN] HandleWhileStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (!ctx || !ctx->cond() || !ctx->stmt(0)) { + throw std::runtime_error(FormatError("irgen", "非法 while 语句")); + } + + std::cout << "[DEBUG WHILE] Current insert block before while: " + << builder_.GetInsertBlock()->GetName() << std::endl; + + auto* condBlock = func_->CreateBlock("while.cond"); + auto* bodyBlock = func_->CreateBlock("while.body"); + auto* exitBlock = func_->CreateBlock("while.exit"); + + std::cout << "[DEBUG WHILE] condBlock: " << condBlock->GetName() << std::endl; + std::cout << "[DEBUG WHILE] bodyBlock: " << bodyBlock->GetName() << std::endl; + std::cout << "[DEBUG WHILE] exitBlock: " << exitBlock->GetName() << std::endl; + + std::cout << "[DEBUG WHILE] Adding br to condBlock from current block" << std::endl; + builder_.CreateBr(condBlock); + + loopStack_.push_back({condBlock, bodyBlock, exitBlock}); + std::cout << "[DEBUG WHILE] loopStack size: " << loopStack_.size() << std::endl; + + // 条件块 + std::cout << "[DEBUG WHILE] Generating condition in block: " << condBlock->GetName() << std::endl; + builder_.SetInsertPoint(condBlock); + auto* condValue = EvalCond(*ctx->cond()); + builder_.CreateCondBr(condValue, bodyBlock, exitBlock); + std::cout << "[DEBUG WHILE] condBlock has terminator: " << condBlock->HasTerminator() << std::endl; + + // 循环体 + std::cout << "[DEBUG WHILE] Generating body in block: " << bodyBlock->GetName() << std::endl; + builder_.SetInsertPoint(bodyBlock); + auto bodyResult = ctx->stmt(0)->accept(this); + bool bodyTerminated = (std::any_cast(bodyResult) == BlockFlow::Terminated); + std::cout << "[DEBUG WHILE] body terminated: " << bodyTerminated << std::endl; + + if (!bodyTerminated) { + std::cout << "[DEBUG WHILE] Adding br to condBlock from body" << std::endl; + builder_.CreateBr(condBlock); + } + std::cout << "[DEBUG WHILE] bodyBlock has terminator: " << bodyBlock->HasTerminator() << std::endl; + + loopStack_.pop_back(); + std::cout << "[DEBUG WHILE] loopStack size after pop: " << loopStack_.size() << std::endl; + + // 设置插入点为 exitBlock + std::cout << "[DEBUG WHILE] Setting insert point to exitBlock: " << exitBlock->GetName() << std::endl; + builder_.SetInsertPoint(exitBlock); + std::cout << "[DEBUG WHILE] exitBlock has terminator before return: " + << exitBlock->HasTerminator() << std::endl; + + return BlockFlow::Continue; } // break语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleBreakStmt(SysYParser::StmtContext* ctx) { - // TODO: 实现break - throw std::runtime_error(FormatError("irgen", "break语句暂未实现")); + std::cout << "[DEBUG IRGEN] HandleBreakStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (loopStack_.empty()) { + throw std::runtime_error(FormatError("irgen", "break 语句不在循环中")); + } + + std::cout << "[DEBUG BREAK] Current insert block before break: " + << builder_.GetInsertBlock()->GetName() << std::endl; + std::cout << "[DEBUG BREAK] Breaking to exitBlock: " + << loopStack_.back().exitBlock->GetName() << std::endl; + + // 跳转到循环退出块 + builder_.CreateBr(loopStack_.back().exitBlock); + + // break 本身就是终止当前路径,后续 unreachable 代码不需要继续生成。 + return BlockFlow::Terminated; } -// continue语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleContinueStmt(SysYParser::StmtContext* ctx) { - // TODO: 实现continue - throw std::runtime_error(FormatError("irgen", "continue语句暂未实现")); + std::cout << "[DEBUG IRGEN] HandleContinueStmt: " << (ctx ? ctx->getText() : "") << std::endl; + + if (loopStack_.empty()) { + throw std::runtime_error(FormatError("irgen", "continue 语句不在循环中")); + } + + std::cout << "[DEBUG CONTINUE] Current insert block before continue: " + << builder_.GetInsertBlock()->GetName() << std::endl; + std::cout << "[DEBUG CONTINUE] Continuing to condBlock: " + << loopStack_.back().condBlock->GetName() << std::endl; + + // 跳转到循环条件块 + builder_.CreateBr(loopStack_.back().condBlock); + + // continue 本身就是终止当前路径,后续 unreachable 代码不需要继续生成。 + return BlockFlow::Terminated; } // 赋值语句(待实现) From 700bbb4e3b42069a975b1a9b8e49c7edc80fd2d8 Mon Sep 17 00:00:00 2001 From: LuoHello <2901023943@qq.com> Date: Tue, 31 Mar 2026 16:22:59 +0800 Subject: [PATCH 36/39] =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=8F=8A=E5=B1=80=E9=83=A8=E5=8F=98=E9=87=8F=E5=8C=BA?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E6=94=AF=E6=8C=81=E6=95=B4=E5=9E=8B=E5=B8=B8?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 131 ++++++++- include/irgen/IRGen.h | 42 ++- scripts/test_compiler.sh | 4 +- src/ir/Context.cpp | 60 +++- src/ir/GlobalValue.cpp | 118 +++++++- src/ir/IRBuilder.cpp | 15 + src/ir/IRPrinter.cpp | 24 ++ src/ir/Module.cpp | 16 +- src/ir/Value.cpp | 55 ++++ src/irgen/IRGenDecl.cpp | 599 ++++++++++++++++++++++++++++----------- src/irgen/IRGenExp.cpp | 108 +++++-- src/irgen/IRGenStmt.cpp | 119 ++++++-- src/sem/Sema.cpp | 4 +- 13 files changed, 1070 insertions(+), 225 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index abe582d..d252ab3 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -47,6 +47,10 @@ class Value; class User; class ConstantValue; class ConstantInt; +class ConstantFloat; +class ConstantArray; +class ConstantZero; +class ConstantAggregateZero; class GlobalValue; class Instruction; class BasicBlock; @@ -79,17 +83,44 @@ class Use { }; // IR 上下文:集中管理类型、常量等共享资源,便于复用与扩展。 +// ir/IR.h - 修改 Context 类定义 + class Context { public: Context() = default; ~Context(); - // 去重创建 i32 常量。 + + // 去重创建 i32 常量 ConstantInt* GetConstInt(int v); + + // 去重创建浮点常量 + ConstantFloat* GetConstFloat(float v); + + // 创建数组常量(不去重,因为数组常量通常比较复杂且组合多样) + ConstantArray* GetConstArray(std::shared_ptr ty, + std::vector elements); + + // 获取零常量(按类型缓存) + ConstantZero* GetZeroConstant(std::shared_ptr ty); + + // 获取聚合类型的零常量 + ConstantAggregateZero* GetAggregateZero(std::shared_ptr ty); std::string NextTemp(); private: std::unordered_map> const_ints_; + + // 浮点常量:使用整数表示浮点数位模式作为键(避免浮点精度问题) + std::unordered_map> const_floats_; + + // 零常量缓存(按类型指针) + std::unordered_map> zero_constants_; + std::unordered_map> aggregate_zeros_; + + // 数组常量简单存储,不去重(因为数组常量通常组合多样,去重成本高) + std::vector> const_arrays_; + int temp_index_ = -1; }; @@ -220,6 +251,61 @@ class ConstantInt : public ConstantValue { private: int value_{}; }; + +// 在 ConstantInt 类之后添加以下类 + +// ConstantFloat - 浮点常量 +class ConstantFloat : public ConstantValue { + public: + ConstantFloat(std::shared_ptr ty, float v); + float GetValue() const { return value_; } + + private: + float value_{}; +}; + +// ConstantArray - 数组常量 +class ConstantArray : public ConstantValue { + public: + // 构造函数:接收数组类型和常量元素列表 + ConstantArray(std::shared_ptr ty, std::vector elements); + + // 获取元素数量 + size_t GetNumElements() const { return elements_.size(); } + + // 获取指定索引的元素 + ConstantValue* GetElement(size_t index) const { return elements_[index]; } + + // 获取所有元素 + const std::vector& GetElements() const { return elements_; } + + // 验证常量数组的类型是否正确 + bool IsValid() const; + + private: + std::vector elements_; +}; + +// ConstantZero - 零常量(用于零初始化) +class ConstantZero : public ConstantValue { + public: + explicit ConstantZero(std::shared_ptr ty); + + // 工厂方法:创建特定类型的零常量 + static std::unique_ptr GetZero(std::shared_ptr ty); +}; + +// ConstantAggregateZero - 聚合类型的零常量(数组、结构体等) +class ConstantAggregateZero : public ConstantValue { + public: + explicit ConstantAggregateZero(std::shared_ptr ty); + + // 获取聚合类型 + std::shared_ptr GetAggregateType() const { return GetType(); } + + // 工厂方法:创建聚合类型的零常量 + static std::unique_ptr GetZero(std::shared_ptr ty); +}; //function 参数占位类,目前仅保存类型和名字,后续可扩展更多属性(例如是否为数组参数、数组维度等)。 class Argument : public Value { public: @@ -265,9 +351,42 @@ class User : public Value { // GlobalValue 是全局值/全局变量体系的空壳占位类。 // 当前只补齐类层次,具体初始化器、打印和链接语义后续再补。 +// ir/IR.h - 修正 GlobalValue 定义 +// ir/IR.h - 修正 GlobalValue 定义 class GlobalValue : public User { - public: +private: + std::vector initializer_; // 初始化值列表 + bool is_constant_ = false; // 是否为常量(如const变量) + bool is_extern_ = false; // 是否为外部声明 + +public: GlobalValue(std::shared_ptr ty, std::string name); + + // 初始化器相关 - 使用 ConstantValue* + void SetInitializer(ConstantValue* init); + void SetInitializer(const std::vector& init); + const std::vector& GetInitializer() const { return initializer_; } + bool HasInitializer() const { return !initializer_.empty(); } + + // 常量属性 + void SetConstant(bool is_const) { is_constant_ = is_const; } + bool IsConstant() const { return is_constant_; } + + // 外部声明 + void SetExtern(bool is_extern) { is_extern_ = is_extern; } + bool IsExtern() const { return is_extern_; } + + // 类型判断 - 使用 Type 的方法 + bool IsArray() const { return GetType()->IsArray(); } + bool IsScalar() const { return GetType()->IsInt32() || GetType()->IsFloat(); } + + // 获取数组大小(如果是数组类型) + int GetArraySize() const { + if (auto* array_ty = dynamic_cast(GetType().get())) { + return array_ty->GetElementCount(); + } + return 0; + } }; class Instruction : public User { @@ -617,6 +736,11 @@ class IRBuilder { // 构造常量、二元运算、返回指令的最小集合。 ConstantInt* CreateConstInt(int v); + ConstantFloat* CreateConstFloat(float v); // 新增 + ConstantArray* CreateConstArray(std::shared_ptr ty, + std::vector elements); // 新增 + ConstantZero* CreateZeroConstant(std::shared_ptr ty); // 新增 + BinaryInst* CreateBinary(Opcode op, Value* lhs, Value* rhs, const std::string& name); BinaryInst* CreateAdd(Value* lhs, Value* rhs, const std::string& name); @@ -675,6 +799,9 @@ class IRBuilder { class IRPrinter { public: void Print(const Module& module, std::ostream& os); + + private: + void PrintConstant(const ConstantValue* constant, std::ostream& os); }; } // namespace ir diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index c8c4c75..b61efcb 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -84,6 +84,12 @@ private: BlockFlow HandleContinueStmt(SysYParser::StmtContext* ctx); BlockFlow HandleAssignStmt(SysYParser::StmtContext* ctx); + // 完全正确的左值判断函数 + bool IsLValueExpression(SysYParser::ExpContext* ctx); + bool IsLValueInAddExp(SysYParser::AddExpContext* ctx); + bool IsLValueInMulExp(SysYParser::MulExpContext* ctx); + bool IsLValueInUnaryExp(SysYParser::UnaryExpContext* ctx); + bool IsLValueInPrimaryExp(SysYParser::PrimaryExpContext* ctx); // 循环上下文结构 struct LoopContext { ir::BasicBlock* condBlock; @@ -102,13 +108,41 @@ private: const SemanticContext& sema_; ir::Function* func_; ir::IRBuilder builder_; + ir::Value* EvalAssign(SysYParser::StmtContext* ctx); + + // 按 VarDefContext 查找存储位置(用于数组访问等场景) std::unordered_map storage_map_; - std::unordered_map const_storage_map_; // 新增 + + // 按变量名快速查找(用于 LVal 等场景) + std::unordered_map local_var_map_; // 局部变量 + std::unordered_map global_map_; // 全局变量 + std::unordered_map param_map_; // 函数参数 + + // 常量映射:常量名 -> 常量值(标量常量) + std::unordered_map const_value_map_; + + // 全局常量映射:常量名 -> 全局变量(数组常量) + std::unordered_map const_global_map_; + + // 原有的常量存储映射(用于兼容) + std::unordered_map const_storage_map_; + std::unordered_map array_info_map_; - ir::Value* EvalAssign(SysYParser::StmtContext* ctx); - std::unordered_map param_map_;// 函数参数映射,key 是参数名,value 是对应的 IR 值(通常是 AllocaInst 或 Function 参数) - std::unordered_map global_map_;// 全局变量映射,key 是全局变量名,value 是对应的 IR 值(通常是 GlobalValue) + + // 新增:处理全局和局部变量的辅助函数 + std::any HandleGlobalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + bool is_array); + std::any HandleLocalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + bool is_array); + // 常量求值辅助函数 + int EvaluateConstAddExp(SysYParser::AddExpContext* ctx); + int EvaluateConstMulExp(SysYParser::MulExpContext* ctx); + int EvaluateConstUnaryExp(SysYParser::UnaryExpContext* ctx); + int EvaluateConstPrimaryExp(SysYParser::PrimaryExpContext* ctx); + int EvaluateConstExp(SysYParser::ExpContext* ctx); }; std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, diff --git a/scripts/test_compiler.sh b/scripts/test_compiler.sh index 082846c..5045b56 100755 --- a/scripts/test_compiler.sh +++ b/scripts/test_compiler.sh @@ -67,7 +67,7 @@ for test_dir in "${TEST_DIRS[@]}"; do # 检查是否生成了有效的函数定义(在过滤后的内容中检查) # 先过滤一下看看是否有define - filtered_content=$(sed -E '/^\[DEBUG\]|^SymbolTable::|^CheckLValue:|^绑定变量:|^dim_count:/d' "$raw_ll") + filtered_content=$(sed -E '/^\[DEBUG\]|^SymbolTable::|^Check|^绑定|^保存|^dim_count:/d' "$raw_ll") if ! echo "$filtered_content" | grep -qE '^define '; then echo " [IR] 失败: 未生成有效函数定义" ir_failures+=("$input: invalid IR output") @@ -85,7 +85,7 @@ for test_dir in "${TEST_DIRS[@]}"; do # 4. 绑定变量: 开头的行 # 5. dim_count: 开头的行 # 6. 空行(可选) - sed -E '/^(\[DEBUG|SymbolTable::|CheckLValue|绑定变量:|dim_)/d' "$raw_ll" > "$ll_file" + sed -E '/^(\[DEBUG|SymbolTable::|Check|绑定|保存|dim_)/d' "$raw_ll" > "$ll_file" # 可选:删除多余的空行 sed -i '/^$/N;/\n$/D' "$ll_file" diff --git a/src/ir/Context.cpp b/src/ir/Context.cpp index 5f32c65..2059cde 100644 --- a/src/ir/Context.cpp +++ b/src/ir/Context.cpp @@ -1,6 +1,8 @@ // 管理基础类型、整型常量池和临时名生成。 -#include "ir/IR.h" +// ir/IR.cpp +#include "ir/IR.h" +#include // for memcpy #include namespace ir { @@ -15,10 +17,64 @@ ConstantInt* Context::GetConstInt(int v) { return inserted->second.get(); } +// 新增:获取浮点常量 +ConstantFloat* Context::GetConstFloat(float v) { + // 使用浮点数的二进制表示作为键,避免精度问题 + uint32_t key; + std::memcpy(&key, &v, sizeof(float)); + + auto it = const_floats_.find(key); + if (it != const_floats_.end()) { + return it->second.get(); + } + + auto float_ty = Type::GetFloatType(); + auto constant = std::make_unique(float_ty, v); + auto* ptr = constant.get(); + const_floats_[key] = std::move(constant); + return ptr; +} + +// 新增:创建数组常量 +ConstantArray* Context::GetConstArray(std::shared_ptr ty, + std::vector elements) { + auto constant = std::make_unique(ty, std::move(elements)); + auto* ptr = constant.get(); + const_arrays_.push_back(std::move(constant)); + return ptr; +} + +// 新增:获取零常量 +ConstantZero* Context::GetZeroConstant(std::shared_ptr ty) { + auto it = zero_constants_.find(ty.get()); + if (it != zero_constants_.end()) { + return it->second.get(); + } + + auto constant = std::make_unique(ty); + auto* ptr = constant.get(); + zero_constants_[ty.get()] = std::move(constant); + return ptr; +} + +// 新增:获取聚合类型的零常量 +ConstantAggregateZero* Context::GetAggregateZero(std::shared_ptr ty) { + auto it = aggregate_zeros_.find(ty.get()); + if (it != aggregate_zeros_.end()) { + return it->second.get(); + } + + auto constant = std::make_unique(ty); + auto* ptr = constant.get(); + aggregate_zeros_[ty.get()] = std::move(constant); + return ptr; +} + std::string Context::NextTemp() { std::ostringstream oss; oss << "%t" << ++temp_index_; return oss.str(); } -} // namespace ir + +} // namespace ir \ No newline at end of file diff --git a/src/ir/GlobalValue.cpp b/src/ir/GlobalValue.cpp index 7c2abe1..5b68e0b 100644 --- a/src/ir/GlobalValue.cpp +++ b/src/ir/GlobalValue.cpp @@ -1,11 +1,121 @@ -// GlobalValue 占位实现: -// - 具体的全局初始化器、打印和链接语义需要自行补全 - +// ir/GlobalValue.cpp #include "ir/IR.h" +#include namespace ir { GlobalValue::GlobalValue(std::shared_ptr ty, std::string name) : User(std::move(ty), std::move(name)) {} -} // namespace ir +void GlobalValue::SetInitializer(ConstantValue* init) { + if (!init) { + throw std::runtime_error("GlobalValue::SetInitializer: init is null"); + } + + // 获取实际的值类型(用于类型检查) + std::shared_ptr value_type; + + // 如果当前类型是指针,获取指向的值类型 + if (GetType()->IsPtrInt32()) { + value_type = Type::GetInt32Type(); + } else if (GetType()->IsPtrFloat()) { + value_type = Type::GetFloatType(); + } else if (GetType()->IsPtrInt1()) { + value_type = Type::GetInt1Type(); + } else { + // 非指针类型:直接使用当前类型 + value_type = GetType(); + } + + // 类型检查 + bool type_match = false; + + // 检查标量类型 + if (value_type->IsInt32() && init->GetType()->IsInt32()) { + type_match = true; + } else if (value_type->IsFloat() && init->GetType()->IsFloat()) { + type_match = true; + } else if (value_type->IsInt1() && init->GetType()->IsInt1()) { + type_match = true; + } + // 检查数组类型:允许用单个标量初始化整个数组 + else if (value_type->IsArray()) { + auto* array_ty = static_cast(value_type.get()); + auto* elem_type = array_ty->GetElementType().get(); + + if (elem_type->IsInt32() && init->GetType()->IsInt32()) { + type_match = true; + } else if (elem_type->IsFloat() && init->GetType()->IsFloat()) { + type_match = true; + } + } + + if (!type_match) { + throw std::runtime_error("GlobalValue::SetInitializer: type mismatch"); + } + + initializer_.clear(); + initializer_.push_back(init); +} + +void GlobalValue::SetInitializer(const std::vector& init) { + if (init.empty()) { + return; + } + + // 获取实际的值类型 + std::shared_ptr value_type; + + if (GetType()->IsPtrInt32()) { + value_type = Type::GetInt32Type(); + } else if (GetType()->IsPtrFloat()) { + value_type = Type::GetFloatType(); + } else if (GetType()->IsPtrInt1()) { + value_type = Type::GetInt1Type(); + } else { + value_type = GetType(); + } + + // 检查类型 + if (value_type->IsArray()) { + auto* array_ty = static_cast(value_type.get()); + size_t array_size = array_ty->GetElementCount(); + + if (init.size() > array_size) { + throw std::runtime_error("GlobalValue::SetInitializer: too many initializers"); + } + + // 检查每个初始化值的类型 + auto* elem_type = array_ty->GetElementType().get(); + for (auto* elem : init) { + bool elem_match = false; + if (elem_type->IsInt32() && elem->GetType()->IsInt32()) { + elem_match = true; + } else if (elem_type->IsFloat() && elem->GetType()->IsFloat()) { + elem_match = true; + } + + if (!elem_match) { + throw std::runtime_error("GlobalValue::SetInitializer: element type mismatch"); + } + } + } + else if (value_type->IsInt32() || value_type->IsFloat() || value_type->IsInt1()) { + if (init.size() != 1) { + throw std::runtime_error("GlobalValue::SetInitializer: scalar requires exactly one initializer"); + } + + if ((value_type->IsInt32() && !init[0]->GetType()->IsInt32()) || + (value_type->IsFloat() && !init[0]->GetType()->IsFloat()) || + (value_type->IsInt1() && !init[0]->GetType()->IsInt1())) { + throw std::runtime_error("GlobalValue::SetInitializer: type mismatch"); + } + } + else { + throw std::runtime_error("GlobalValue::SetInitializer: unsupported type"); + } + + initializer_ = init; +} + +} // namespace ir \ No newline at end of file diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 0665d59..a91f081 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -21,6 +21,21 @@ ConstantInt* IRBuilder::CreateConstInt(int v) { return ctx_.GetConstInt(v); } +// IRBuilder 方法实现 +ConstantFloat* IRBuilder::CreateConstFloat(float v) { + return ctx_.GetConstFloat(v); +} + +ConstantArray* IRBuilder::CreateConstArray(std::shared_ptr ty, + std::vector elements) { + return ctx_.GetConstArray(ty, std::move(elements)); +} + +ConstantZero* IRBuilder::CreateZeroConstant(std::shared_ptr ty) { + return ctx_.GetZeroConstant(ty); +} + + BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, const std::string& name) { if (!insert_block_) { diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index beb6ca8..053274a 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -261,4 +261,28 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { } } +void IRPrinter::PrintConstant(const ConstantValue* constant, std::ostream& os) { + if (auto* const_int = dynamic_cast(constant)) { + os << const_int->GetValue(); + } + else if (auto* const_float = dynamic_cast(constant)) { + os << const_float->GetValue(); + } + else if (auto* const_array = dynamic_cast(constant)) { + os << "["; + auto& elements = const_array->GetElements(); + for (size_t i = 0; i < elements.size(); ++i) { + if (i > 0) os << ", "; + PrintConstant(elements[i], os); + } + os << "]"; + } + else if (auto* zero = dynamic_cast(constant)) { + os << "zero"; + } + else if (auto* agg_zero = dynamic_cast(constant)) { + os << "zeroinitializer"; + } +} + } // namespace ir diff --git a/src/ir/Module.cpp b/src/ir/Module.cpp index 76eb1eb..79e41a5 100644 --- a/src/ir/Module.cpp +++ b/src/ir/Module.cpp @@ -29,7 +29,21 @@ const std::vector>& Module::GetFunctions() const { GlobalValue* Module::CreateGlobal(const std::string& name, std::shared_ptr ty) { - globals_.push_back(std::make_unique(ty, name)); + // 对于标量类型,自动转换为指针类型 + std::shared_ptr global_ty; + + if (ty->IsInt32()) { + global_ty = Type::GetPtrInt32Type(); // i32 -> i32* + } else if (ty->IsFloat()) { + global_ty = Type::GetPtrFloatType(); // float -> float* + } else if (ty->IsInt1()) { + global_ty = Type::GetPtrInt1Type(); // i1 -> i1* + } else { + // 数组等类型保持不变 + global_ty = ty; + } + + globals_.push_back(std::make_unique(global_ty, name)); return globals_.back().get(); } diff --git a/src/ir/Value.cpp b/src/ir/Value.cpp index 68b6ab4..56dd2e6 100644 --- a/src/ir/Value.cpp +++ b/src/ir/Value.cpp @@ -82,4 +82,59 @@ Argument::Argument(std::shared_ptr ty, std::string name) ConstantInt::ConstantInt(std::shared_ptr ty, int v) : ConstantValue(std::move(ty), ""), value_(v) {} + +// ConstantFloat 实现 +ConstantFloat::ConstantFloat(std::shared_ptr ty, float v) + : ConstantValue(ty, ""), value_(v) { + if (!ty->IsFloat()) { + throw std::runtime_error("ConstantFloat requires Float type"); + } +} + +// ConstantArray 实现 +ConstantArray::ConstantArray(std::shared_ptr ty, + std::vector elements) + : ConstantValue(ty, ""), elements_(std::move(elements)) { + if (!IsValid()) { + throw std::runtime_error("Invalid constant array initialization"); + } +} + +bool ConstantArray::IsValid() const { + auto* array_ty = dynamic_cast(GetType().get()); + if (!array_ty) return false; + + // 检查元素数量是否匹配 + if (elements_.size() != array_ty->GetElementCount()) return false; + + // 检查每个元素的类型是否匹配数组元素类型 + auto& elem_ty = array_ty->GetElementType(); + for (auto* elem : elements_) { + if (elem->GetType() != elem_ty) return false; + } + + return true; +} + +// ConstantZero 实现 +ConstantZero::ConstantZero(std::shared_ptr ty) + : ConstantValue(ty, "zero") { + // 零常量可以用于任何类型 +} + +std::unique_ptr ConstantZero::GetZero(std::shared_ptr ty) { + return std::make_unique(ty); +} + +// ConstantAggregateZero 实现 +ConstantAggregateZero::ConstantAggregateZero(std::shared_ptr ty) + : ConstantValue(ty, "zero") { + if (!ty->IsArray()) { + throw std::runtime_error("ConstantAggregateZero requires aggregate type"); + } +} + +std::unique_ptr ConstantAggregateZero::GetZero(std::shared_ptr ty) { + return std::make_unique(ty); +} } // namespace ir diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index 4ec2a95..bc8e2d8 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -30,12 +30,14 @@ int TryGetConstInt(SysYParser::ConstExpContext* ctx) { // 注意:visitBlock 已经在 IRGenFunc.cpp 中实现,这里不要重复定义 std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { + std::cerr << "[DEBUG] visitDecl: 开始处理声明" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量声明")); } // 处理 varDecl if (auto* varDecl = ctx->varDecl()) { + std::cerr << "[DEBUG] visitDecl: 处理变量声明" << std::endl; // 检查类型 if (varDecl->bType() && varDecl->bType()->Int()) { for (auto* varDef : varDecl->varDef()) { @@ -48,6 +50,7 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { // 处理 constDecl if (ctx->constDecl()) { + std::cerr << "[DEBUG] visitDecl: 处理常量声明" << std::endl; auto* constDecl = ctx->constDecl(); if (constDecl->bType() && constDecl->bType()->Int()) { @@ -60,11 +63,13 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { throw std::runtime_error(FormatError("irgen", "未知的常量类型")); } } + std::cerr << "[DEBUG] visitDecl: 声明处理完成" << std::endl; return {}; } // 在 IRGenDecl.cpp 中确保有这个函数 std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { + std::cerr << "[DEBUG] visitConstDecl: 开始处理常量声明" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法常量声明")); } @@ -90,10 +95,10 @@ std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { throw std::runtime_error(FormatError("irgen", "常量声明缺少类型")); } + std::cerr << "[DEBUG] visitConstDecl: 常量声明处理完成" << std::endl; return {}; } -// 修改 visitConstDef 函数,正确处理数组大小 std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法常量定义")); @@ -106,147 +111,103 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { bool is_array = !ctx->constExp().empty(); if (is_array) { - // 数组常量处理 + // 数组常量处理 - 创建全局常量数组 std::cerr << "[DEBUG] visitConstDef: array constant " << const_name << std::endl; // 获取数组维度 - int array_size = 0; - - if (!ctx->constExp().empty()) { - // 尝试获取数组大小 - try { - // 使用辅助函数获取整数值 - array_size = TryEvaluateConstInt(ctx->constExp()[0]); - if (array_size <= 0) { - // 如果获取失败,使用默认值10 - array_size = 10; - } - } catch (const std::exception& e) { - // 注意:这里错误信息应该是 visitConstDef,不是 visitVarDef - std::cerr << "[WARNING] visitConstDef: 无法获取数组大小: " << e.what() - << ",使用默认值10" << std::endl; - array_size = 10; - } - } - - if (array_size <= 0) { - throw std::runtime_error(FormatError("irgen", "常量数组大小必须为正数")); - } - - if (array_size > 1000) { - throw std::runtime_error(FormatError("irgen", "常量数组大小太大")); + std::vector dimensions; + for (auto* const_exp : ctx->constExp()) { + int dim_size = TryEvaluateConstInt(const_exp); + if (dim_size <= 0) dim_size = 1; + dimensions.push_back(dim_size); } - // 分配数组存储 - std::vector element_slots; - for (int i = 0; i < array_size; i++) { - auto* slot = builder_.CreateAllocaI32( - module_.GetContext().NextTemp() + "_" + const_name + "_" + std::to_string(i)); - element_slots.push_back(slot); - } + // 创建数组类型 + auto array_type = ir::Type::GetArrayType(ir::Type::GetInt32Type(), dimensions); + ir::GlobalValue* global_array = module_.CreateGlobal(const_name, array_type); - // 处理初始化 + // 处理初始化值 + std::vector init_consts; if (auto* const_init_val = ctx->constInitVal()) { - // 获取初始化值 auto result = const_init_val->accept(this); - if (result.has_value()) { try { - std::vector init_values = - std::any_cast>(result); - - // 检查初始化值数量 - if (init_values.size() > static_cast(array_size)) { - throw std::runtime_error( - FormatError("irgen", "常量数组初始化值太多,数组大小为" + std::to_string(array_size) + - ",但提供了" + std::to_string(init_values.size()) + "个值")); - } - - // 使用初始化值初始化数组元素 - for (size_t i = 0; i < init_values.size(); i++) { - builder_.CreateStore(init_values[i], element_slots[i]); - } - - // 剩余元素初始化为0 - for (size_t i = init_values.size(); i < static_cast(array_size); i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + auto init_vec = std::any_cast>(result); + for (auto* val : init_vec) { + if (auto* const_int = dynamic_cast(val)) { + init_consts.push_back(const_int); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } } catch (const std::bad_any_cast&) { - // 可能返回的是单个值 try { - ir::Value* single_value = std::any_cast(result); - // 只初始化第一个元素 - builder_.CreateStore(single_value, element_slots[0]); - - // 其他元素初始化为0 - for (int i = 1; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } catch (const std::bad_any_cast&) { - std::cerr << "[ERROR] visitConstDef: 无法解析常量数组初始化值类型" << std::endl; - // 全部初始化为0 - for (int i = 0; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + ir::Value* single_val = std::any_cast(result); + if (auto* const_int = dynamic_cast(single_val)) { + init_consts.push_back(const_int); } - } - } - } else { - // 没有初始化值,全部初始化为0 - for (int i = 0; i < array_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } catch (...) {} } } - } else { - // 常量数组缺少初始值 - throw std::runtime_error(FormatError("irgen", "常量数组缺少初始值")); } - // 存储第一个元素的地址到 const_storage_map_ - const_storage_map_[ctx] = element_slots[0]; + // 补0 + int total_size = 1; + for (int dim : dimensions) total_size *= dim; + while (init_consts.size() < static_cast(total_size)) { + init_consts.push_back(builder_.CreateConstInt(0)); + } + + global_array->SetInitializer(init_consts); + global_array->SetConstant(true); + + // 存储到常量映射(而不是storage_map_) + const_storage_map_[ctx] = global_array; + const_global_map_[const_name] = global_array; - std::cerr << "[DEBUG] visitConstDef: 创建常量数组 " << const_name - << ",大小 " << array_size << std::endl; } else { - // 标量常量处理 + // 标量常量处理 - 直接求值并存储常量值 std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name << std::endl; if (!ctx->constInitVal()) { throw std::runtime_error(FormatError("irgen", "常量缺少初始值")); } - // 处理常量初始化值 + // 求值常量表达式 + // 求值常量表达式 auto* const_init_val = ctx->constInitVal(); - auto result = const_init_val->accept(this); - if (result.has_value()) { - try { - ir::Value* const_value = std::any_cast(result); - std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name - << " with value " << (void*)const_value << std::endl; - - // 标量常量也需要存储槽位,以便后续引用 - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; - builder_.CreateStore(const_value, slot); - - return {}; - } catch (const std::bad_any_cast& e) { - std::cerr << "[ERROR] visitConstDef: bad any_cast for scalar constant " << const_name << ": " << e.what() << std::endl; - throw std::runtime_error(FormatError("irgen", "标量常量初始化值类型错误")); - } + // 关键修改:直接求值常量表达式,不使用 builder_ + ir::ConstantValue* const_value = nullptr; + + if (const_init_val->constExp()) { + // 直接访问常量表达式的值,不通过 IR 生成 + int value = TryEvaluateConstInt(const_init_val->constExp()); + // 使用 Context 直接创建常量,不依赖 builder_ + const_value = module_.GetContext().GetConstInt(value); + std::cerr << "[DEBUG] visitConstDef: constant " << const_name + << " = " << value << std::endl; + } else { + const_value = module_.GetContext().GetConstInt(0); } - // 如果求值失败,使用默认值0 - ir::Value* default_value = builder_.CreateConstInt(0); - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - const_storage_map_[ctx] = slot; - builder_.CreateStore(default_value, slot); + // 存储常量值到映射 + const_value_map_[const_name] = const_value; + + // 同时也保存一个虚拟指针用于统一接口(可选) + // auto* dummy_slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); + // builder_.CreateStore(const_value, dummy_slot); + // const_storage_map_[ctx] = dummy_slot; + std::cerr << "[DEBUG] visitConstDef: scalar constant stored, no alloca created" << std::endl; } return {}; } + + // TO DO:visitVarDef来区分全局和局部变量,并且正确处理数组变量的定义和初始化 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { + std::cerr << "[DEBUG] visitVarDef: 开始处理变量定义" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少变量定义")); } @@ -256,91 +217,258 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { } std::string varName = ctx->Ident()->getText(); + std::cerr << "[DEBUG] visitVarDef: 变量名称: " << varName << std::endl; // 防止同一个变量被多次分配存储空间。 if (storage_map_.find(ctx) != storage_map_.end()) { throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); } bool is_array = !ctx->constExp().empty(); + std::cerr << "[DEBUG] visitVarDef: 是否为数组: " << (is_array ? "是" : "否") << std::endl; + // 使用 func_ 来判断:func_ == nullptr 表示在全局作用域 + if (func_ == nullptr) { + std::cerr << "[DEBUG] visitVarDef: 处理全局变量" << std::endl; + // 全局变量处理 + return HandleGlobalVariable(ctx, varName, is_array); + } else { + std::cerr << "[DEBUG] visitVarDef: 处理局部变量" << std::endl; + // 局部变量处理 + return HandleLocalVariable(ctx, varName, is_array); + } +} + +std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + bool is_array) { + std::cerr << "[DEBUG] HandleGlobalVariable: 开始处理全局变量 " << varName << std::endl; if (is_array) { - // 数组变量 - // 获取数组维度 + std::cerr << "[DEBUG] HandleGlobalVariable: 处理全局数组变量" << std::endl; + // 全局数组变量 int total_size = 1; std::vector dimensions; + + // 计算总大小 + for (auto* const_exp : ctx->constExp()) { + int dim_size = TryEvaluateConstInt(const_exp); + if (dim_size <= 0) { + dim_size = 1; + std::cerr << "[WARNING] HandleGlobalVariable: 无法确定数组维度大小,使用1" << std::endl; + } + dimensions.push_back(dim_size); + total_size *= dim_size; + } + + std::cerr << "[DEBUG] HandleGlobalVariable: 数组总大小: " << total_size << std::endl; + + if (total_size <= 0 || total_size > 10000) { + throw std::runtime_error(FormatError("irgen", "全局数组大小无效")); + } + + // 创建数组类型的全局变量 + auto array_type = ir::Type::GetArrayType(ir::Type::GetInt32Type(), dimensions); + ir::GlobalValue* global_array = module_.CreateGlobal(varName, array_type); + std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局数组: " << varName << std::endl; + + // 处理初始化值 + std::vector init_consts; + if (auto* initVal = ctx->initVal()) { + std::cerr << "[DEBUG] HandleGlobalVariable: 处理初始化值" << std::endl; + auto result = initVal->accept(this); + if (result.has_value()) { + try { + // 尝试获取初始化值列表 + auto init_vec = std::any_cast>(result); + std::cerr << "[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: " << init_vec.size() << std::endl; + for (auto* val : init_vec) { + if (auto* const_int = dynamic_cast(val)) { + init_consts.push_back(const_int); + } else { + // 非常量表达式,使用0 + init_consts.push_back(builder_.CreateConstInt(0)); + } + } + } catch (const std::bad_any_cast&) { + try { + // 可能是单个值 + ir::Value* single_val = std::any_cast(result); + std::cerr << "[DEBUG] HandleGlobalVariable: 获取到单个初始化值" << std::endl; + if (auto* const_int = dynamic_cast(single_val)) { + init_consts.push_back(const_int); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } + } catch (const std::bad_any_cast&) { + std::cerr << "[WARNING] HandleGlobalVariable: 无法解析数组初始化值" << std::endl; + } + } + } + } + + // 如果初始化值不足,补0 + while (init_consts.size() < static_cast(total_size)) { + init_consts.push_back(builder_.CreateConstInt(0)); + } + + // 设置全局数组的初始化器 + if (!init_consts.empty()) { + global_array->SetInitializer(init_consts); + std::cerr << "[DEBUG] HandleGlobalVariable: 设置全局数组初始化器" << std::endl; + } + + // 判断是否为常量(检查父节点是否为 ConstDef) + if (ctx->parent && dynamic_cast(ctx->parent)) { + global_array->SetConstant(true); + std::cerr << "[DEBUG] HandleGlobalVariable: 设置为常量数组" << std::endl; + } + + // 存储全局变量引用 + storage_map_[ctx] = global_array; + global_map_[varName] = global_array;//按名称映射 + std::cerr << "[DEBUG] HandleGlobalVariable: 存储全局数组引用" << std::endl; + + // 保存数组信息 + ArrayInfo info; + info.elements.clear(); // 全局数组不预先分配元素槽位 + info.dimensions = dimensions; + array_info_map_[ctx] = info; + + std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局数组 " << varName + << ",总大小 " << total_size << std::endl; + } else { + std::cerr << "[DEBUG] HandleGlobalVariable: 处理全局标量变量" << std::endl; + // 全局标量变量 + ir::GlobalValue* global_var = module_.CreateGlobal(varName, ir::Type::GetInt32Type()); + std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局标量变量: " << varName << std::endl; + + // 处理初始化值 + ir::ConstantValue* init_value = nullptr; + if (auto* initVal = ctx->initVal()) { + std::cerr << "[DEBUG] HandleGlobalVariable: 处理标量初始化值" << std::endl; + auto result = initVal->accept(this); + if (result.has_value()) { + try { + ir::Value* val = std::any_cast(result); + if (auto* const_int = dynamic_cast(val)) { + init_value = const_int; + std::cerr << "[DEBUG] HandleGlobalVariable: 获取到常量初始化值" << std::endl; + } else { + // 默认初始化为0 + init_value = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleGlobalVariable: 使用默认初始化值0" << std::endl; + } + } catch (const std::bad_any_cast&) { + init_value = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleGlobalVariable: 类型转换失败,使用默认初始化值0" << std::endl; + } + } else { + std::cerr << "[DEBUG] HandleGlobalVariable: 无初始化值结果" << std::endl; + } + } else { + std::cerr << "[DEBUG] HandleGlobalVariable: 无初始化值" << std::endl; + } + + // 如果没有初始化值,默认初始化为0 + if (!init_value) { + init_value = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleGlobalVariable: 使用默认初始化值0" << std::endl; + } + + // 设置全局变量的初始化器 + global_var->SetInitializer(init_value); + std::cerr << "[DEBUG] HandleGlobalVariable: 设置全局变量初始化器" << std::endl; + + // 判断是否为常量 + if (ctx->parent && dynamic_cast(ctx->parent)) { + global_var->SetConstant(true); + std::cerr << "[DEBUG] HandleGlobalVariable: 设置为常量" << std::endl; + } + + // 存储全局变量引用 + storage_map_[ctx] = global_var; + global_map_[varName] = global_var; + std::cerr << "[DEBUG] HandleGlobalVariable: 存储全局变量引用" << std::endl; + + std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局变量 " << varName << std::endl; + } + + std::cerr << "[DEBUG] HandleGlobalVariable: 全局变量处理完成" << std::endl; + return {}; +} - // 计算所有维度 +std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + bool is_array) { + std::cerr << "[DEBUG] HandleLocalVariable: 开始处理局部变量 " << varName << std::endl; + if (is_array) { + std::cerr << "[DEBUG] HandleLocalVariable: 处理局部数组变量" << std::endl; + // 局部数组变量 + int total_size = 1; + std::vector dimensions; + + // 获取数组维度 for (auto* const_exp : ctx->constExp()) { try { int dim_size = TryEvaluateConstInt(const_exp); if (dim_size <= 0) { - // 如果维度大小未知,使用默认值 dim_size = 1; - std::cerr << "[WARNING] visitVarDef: 无法确定数组维度大小,使用1" << std::endl; + std::cerr << "[WARNING] HandleLocalVariable: 无法确定数组维度大小,使用1" << std::endl; } dimensions.push_back(dim_size); total_size *= dim_size; } catch (const std::exception& e) { - std::cerr << "[WARNING] visitVarDef: 无法获取数组维度: " << e.what() + std::cerr << "[WARNING] HandleLocalVariable: 无法获取数组维度: " << e.what() << ",使用维度1" << std::endl; dimensions.push_back(1); total_size *= 1; } } - + + std::cerr << "[DEBUG] HandleLocalVariable: 数组总大小: " << total_size << std::endl; + if (total_size <= 0) { throw std::runtime_error(FormatError("irgen", "数组大小必须为正数")); } - - if (total_size > 1000) { + + if (total_size > 10000) { throw std::runtime_error(FormatError("irgen", "数组大小太大")); } - - // 分配数组存储 + + // 分配数组存储 - 为每个元素创建独立的 alloca std::vector element_slots; + std::cerr << "[DEBUG] HandleLocalVariable: 为数组元素分配存储空间" << std::endl; for (int i = 0; i < total_size; i++) { auto* slot = builder_.CreateAllocaI32( module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); element_slots.push_back(slot); } - + // 处理初始化 if (auto* initVal = ctx->initVal()) { - // 获取初始化值 + std::cerr << "[DEBUG] HandleLocalVariable: 处理数组初始化值" << std::endl; auto result = initVal->accept(this); if (result.has_value()) { try { + // 尝试获取初始化值列表 std::vector init_values = std::any_cast>(result); + std::cerr << "[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: " << init_values.size() << std::endl; - // 检查初始化值数量 - if (init_values.size() > static_cast(total_size)) { - // 对于多维数组,这可能是正常的 - // 我们打印警告但继续执行 - std::cerr << "[WARNING] visitVarDef: 初始化值(" << init_values.size() - << ")超过数组总大小(" << total_size - << "),只初始化前" << total_size << "个元素" << std::endl; - - // 只初始化能容纳的部分 - for (size_t i = 0; i < static_cast(total_size); i++) { - builder_.CreateStore(init_values[i], element_slots[i]); - } - } else { - // 正常初始化 - for (size_t i = 0; i < init_values.size(); i++) { - builder_.CreateStore(init_values[i], element_slots[i]); - } - - // 剩余元素初始化为0 - for (size_t i = init_values.size(); i < static_cast(total_size); i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } + // 初始化数组元素 + for (size_t i = 0; i < init_values.size() && i < static_cast(total_size); i++) { + builder_.CreateStore(init_values[i], element_slots[i]); + } + + // 剩余元素初始化为0 + for (size_t i = init_values.size(); i < static_cast(total_size); i++) { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } catch (const std::bad_any_cast&) { // 可能返回的是单个值 try { ir::Value* single_value = std::any_cast(result); + std::cerr << "[DEBUG] HandleLocalVariable: 获取到单个初始化值" << std::endl; // 只初始化第一个元素 builder_.CreateStore(single_value, element_slots[0]); @@ -349,7 +477,7 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } catch (const std::bad_any_cast&) { - std::cerr << "[ERROR] visitVarDef: 无法解析数组初始化值类型" << std::endl; + std::cerr << "[ERROR] HandleLocalVariable: 无法解析数组初始化值类型" << std::endl; // 全部初始化为0 for (int i = 0; i < total_size; i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); @@ -357,45 +485,56 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { } } } else { + std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值结果" << std::endl; // 没有初始化值,全部初始化为0 for (int i = 0; i < total_size; i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } } else { + std::cerr << "[DEBUG] HandleLocalVariable: 无初始化,全部初始化为0" << std::endl; // 无初始化,所有元素初始化为0 for (int i = 0; i < total_size; i++) { builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); } } - - // 存储第一个元素的地址 + + // 存储第一个元素的地址作为数组的基地址 storage_map_[ctx] = element_slots[0]; - + local_var_map_[varName] = element_slots[0]; // 添加到局部变量映射,按名称映射 + std::cerr << "[DEBUG] HandleLocalVariable: 存储数组引用" << std::endl; + // 保存数组信息 ArrayInfo info; info.elements = element_slots; info.dimensions = dimensions; array_info_map_[ctx] = info; - - std::cerr << "[DEBUG] visitVarDef: 创建数组 " << varName + + std::cerr << "[DEBUG] HandleLocalVariable: 创建局部数组 " << varName << ",维度 "; for (size_t i = 0; i < dimensions.size(); i++) { std::cerr << dimensions[i]; if (i < dimensions.size() - 1) std::cerr << "×"; } std::cerr << ",总大小 " << total_size << std::endl; - } else { - // 标量变量 + + } else { + std::cerr << "[DEBUG] HandleLocalVariable: 处理局部标量变量" << std::endl; + // 局部标量变量 auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + varName); storage_map_[ctx] = slot; + local_var_map_[varName] = slot; // 添加到局部变量映射 + std::cerr << "[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽" << std::endl; + // 处理初始化 ir::Value* init = nullptr; if (auto* initVal = ctx->initVal()) { + std::cerr << "[DEBUG] HandleLocalVariable: 处理标量初始化值" << std::endl; auto result = initVal->accept(this); if (result.has_value()) { try { init = std::any_cast(result); + std::cerr << "[DEBUG] HandleLocalVariable: 获取到初始化值" << std::endl; } catch (const std::bad_any_cast&) { // 可能是聚合初始化返回的 vector,但标量只取第一个值 try { @@ -403,49 +542,60 @@ std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { std::any_cast>(result); if (!init_values.empty()) { init = init_values[0]; + std::cerr << "[DEBUG] HandleLocalVariable: 从列表获取第一个初始化值" << std::endl; } else { init = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleLocalVariable: 初始化列表为空,使用0" << std::endl; } } catch (const std::bad_any_cast&) { init = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleLocalVariable: 无法解析初始化值类型,使用0" << std::endl; } } } else { init = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值结果,使用0" << std::endl; } } else { init = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值,使用0" << std::endl; } builder_.CreateStore(init, slot); - std::cerr << "[DEBUG] visitVarDef: 创建标量变量 " << varName + std::cerr << "[DEBUG] HandleLocalVariable: 创建局部变量 " << varName << ",初始值 " << (void*)init << std::endl; } + std::cerr << "[DEBUG] HandleLocalVariable: 局部变量处理完成" << std::endl; return {}; } std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { + std::cerr << "[DEBUG] visitInitVal: 开始处理初始化值" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法初始化值")); } // 如果是单个表达式 if (ctx->exp()) { + std::cerr << "[DEBUG] visitInitVal: 处理表达式初始化" << std::endl; return EvalExpr(*ctx->exp()); } // 如果是聚合初始化(花括号列表) else if (!ctx->initVal().empty()) { + std::cerr << "[DEBUG] visitInitVal: 处理聚合初始化" << std::endl; // 处理嵌套聚合初始化 return ProcessNestedInitVals(ctx); } + std::cerr << "[DEBUG] visitInitVal: 空初始化列表" << std::endl; // 空初始化列表 return std::vector{}; } // 新增:处理嵌套聚合初始化的辅助函数 std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValContext* ctx) { + std::cerr << "[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值" << std::endl; std::vector all_values; for (auto* init_val : ctx->initVal()) { @@ -455,54 +605,163 @@ std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValCont // 尝试获取单个值 ir::Value* value = std::any_cast(result); all_values.push_back(value); + std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到单个值" << std::endl; } catch (const std::bad_any_cast&) { try { // 尝试获取值列表(嵌套情况) std::vector nested_values = std::any_cast>(result); + std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: " << nested_values.size() << std::endl; // 展平嵌套的值 all_values.insert(all_values.end(), nested_values.begin(), nested_values.end()); } catch (const std::bad_any_cast&) { // 未知类型 + std::cerr << "[ERROR] ProcessNestedInitVals: 不支持的初始化值类型" << std::endl; throw std::runtime_error( FormatError("irgen", "不支持的初始化值类型")); } } + } else { + std::cerr << "[DEBUG] ProcessNestedInitVals: 无初始化值结果" << std::endl; } } + std::cerr << "[DEBUG] ProcessNestedInitVals: 共获取 " << all_values.size() << " 个初始化值" << std::endl; return all_values; } int IRGenImpl::TryEvaluateConstInt(SysYParser::ConstExpContext* ctx) { + std::cerr << "[DEBUG] TryEvaluateConstInt: 开始求值常量表达式" << std::endl; if (!ctx) { std::cerr << "[DEBUG] TryEvaluateConstInt: ctx is null" << std::endl; return 0; } - try { - auto result = ctx->accept(this); - if (result.has_value()) { - try { - ir::Value* value = std::any_cast(result); - std::cerr << "[DEBUG] TryEvaluateConstInt: got IR value " << (void*)value << std::endl; - - // 尝试获取整数常量 - // 简化:检查是否是 ConstantInt - // 这里需要 IR 库的支持,暂时返回一个测试值 - return 16; // 暂时返回测试值 - } catch (const std::bad_any_cast& e) { - std::cerr << "[DEBUG] TryEvaluateConstInt: bad any_cast: " << e.what() << std::endl; - return 0; + // 直接访问常量表达式树,计算数值 + // 这里需要实现真正的常量求值逻辑 + // 简化版本:假设常量表达式是整数常量 + + if (ctx->addExp()) { + // 尝试从 addExp 求值 + return EvaluateConstAddExp(ctx->addExp()); + } + + return 0; +} + +// 添加辅助函数来求值常量表达式 +int IRGenImpl::EvaluateConstAddExp(SysYParser::AddExpContext* ctx) { + if (!ctx) return 0; + + // 如果没有左操作数,直接求值右操作数 + if (!ctx->addExp()) { + return EvaluateConstMulExp(ctx->mulExp()); + } + + int left = EvaluateConstAddExp(ctx->addExp()); + int right = EvaluateConstMulExp(ctx->mulExp()); + + if (ctx->AddOp()) { + return left + right; + } else if (ctx->SubOp()) { + return left - right; + } + + return 0; +} + +int IRGenImpl::EvaluateConstMulExp(SysYParser::MulExpContext* ctx) { + if (!ctx) return 0; + + // 如果没有左操作数,直接求值右操作数 + if (!ctx->mulExp()) { + return EvaluateConstUnaryExp(ctx->unaryExp()); + } + + int left = EvaluateConstMulExp(ctx->mulExp()); + int right = EvaluateConstUnaryExp(ctx->unaryExp()); + + if (ctx->MulOp()) { + return left * right; + } else if (ctx->DivOp()) { + return left / right; + } else if (ctx->QuoOp()) { + return left % right; + } + + return 0; +} + +int IRGenImpl::EvaluateConstUnaryExp(SysYParser::UnaryExpContext* ctx) { + if (!ctx) return 0; + + // 基本表达式(数字字面量) + if (ctx->primaryExp()) { + return EvaluateConstPrimaryExp(ctx->primaryExp()); + } + + // 一元运算 + if (ctx->unaryOp() && ctx->unaryExp()) { + int operand = EvaluateConstUnaryExp(ctx->unaryExp()); + std::string op = ctx->unaryOp()->getText(); + + if (op == "+") { + return operand; + } else if (op == "-") { + return -operand; + } else if (op == "!") { + return !operand; + } + } + + return 0; +} + +int IRGenImpl::EvaluateConstPrimaryExp(SysYParser::PrimaryExpContext* ctx) { + if (!ctx) return 0; + + // 处理数字字面量 + if (ctx->DECIMAL_INT()) { + return std::stoi(ctx->DECIMAL_INT()->getText()); + } + + if (ctx->HEX_INT()) { + std::string hex = ctx->HEX_INT()->getText(); + return std::stoi(hex, nullptr, 16); + } + + if (ctx->OCTAL_INT()) { + std::string oct = ctx->OCTAL_INT()->getText(); + return std::stoi(oct, nullptr, 8); + } + + if (ctx->ZERO()) { + return 0; + } + + // 处理括号表达式 + if (ctx->L_PAREN() && ctx->exp()) { + return EvaluateConstExp(ctx->exp()); + } + + // 常量标识符(引用其他常量) + if (ctx->lVal()) { + std::string const_name = ctx->lVal()->Ident()->getText(); + auto it = const_value_map_.find(const_name); + if (it != const_value_map_.end()) { + if (auto* const_int = dynamic_cast(it->second)) { + return const_int->GetValue(); } - } else { - std::cerr << "[DEBUG] TryEvaluateConstInt: result has no value" << std::endl; } - } catch (const std::exception& e) { - std::cerr << "[DEBUG] TryEvaluateConstInt: exception: " << e.what() << std::endl; + // 也可以从语义分析获取常量值 + // ... } - std::cerr << "[DEBUG] TryEvaluateConstInt: returning default value 10" << std::endl; - return 10; // 默认值 + return 0; } + +int IRGenImpl::EvaluateConstExp(SysYParser::ExpContext* ctx) { + if (!ctx || !ctx->addExp()) return 0; + return EvaluateConstAddExp(ctx->addExp()); +} \ No newline at end of file diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 8b6e864..70d6296 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -120,7 +120,6 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { // 2. 再通过 storage_map_ 找到该声明对应的栈槽位; // 3. 最后生成 load,把内存中的值读出来。 std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { - std::cout << "[DEBUG IRGEN] visitLVal: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); } @@ -128,7 +127,40 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { std::string varName = ctx->Ident()->getText(); std::cerr << "[DEBUG] visitLVal: " << varName << std::endl; - // 从语义分析获取变量定义 + // 优先检查是否是常量 + auto const_it = const_value_map_.find(varName); + if (const_it != const_value_map_.end()) { + // 常量直接返回值,不需要load + std::cerr << "[DEBUG] visitLVal: constant " << varName << std::endl; + return static_cast(const_it->second); + } + + // 检查全局常量 + auto const_global_it = const_global_map_.find(varName); + if (const_global_it != const_global_map_.end()) { + // 全局常量,需要load + ir::Value* ptr = const_global_it->second; + if (!ctx->exp().empty()) { + // 数组访问 + std::vector indices; + indices.push_back(builder_.CreateConstInt(0)); + for (auto* exp : ctx->exp()) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + ir::Value* elem_ptr = builder_.CreateGEP( + ptr, indices, module_.GetContext().NextTemp()); + return static_cast( + builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); + } + } + + // 不是常量,按正常变量处理 + // ... 原有的变量查找代码 ... + auto* decl = sema_.ResolveVarUse(ctx); ir::Value* ptr = nullptr; if (decl) { @@ -152,17 +184,39 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { } } + if (!ptr) { + auto it4 = local_var_map_.find(varName); + if (it4 != local_var_map_.end()) { + ptr = it4->second; + } + } + if (!ptr) { throw std::runtime_error( - FormatError("irgen", - "变量声明缺少存储槽位: " + varName)); + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); } - return static_cast( - builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); + // 检查是否有数组下标 + bool is_array_access = !ctx->exp().empty(); + if (is_array_access) { + std::vector indices; + indices.push_back(builder_.CreateConstInt(0)); + + for (auto* exp : ctx->exp()) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + ir::Value* elem_ptr = builder_.CreateGEP( + ptr, indices, module_.GetContext().NextTemp()); + + return static_cast( + builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); + } } - - // 加法表达式 std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { std::cout << "[DEBUG IRGEN] visitAddExp: " << (ctx ? ctx->getText() : "") << std::endl; @@ -401,26 +455,41 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { throw std::runtime_error(FormatError("irgen", "非法常量初始化值")); } - // 如果是单个表达式 + // 如果是单个常量表达式 if (ctx->constExp()) { try { - return ctx->constExp()->accept(this); + auto result = ctx->constExp()->accept(this); + if (result.has_value()) { + try { + ir::Value* value = std::any_cast(result); + // 尝试提取常量值 + if (auto* const_int = dynamic_cast(value)) { + return static_cast(const_int); + } else { + // 如果不是常量,尝试计算数值 + int int_val = TryEvaluateConstInt(ctx->constExp()); + return static_cast(builder_.CreateConstInt(int_val)); + } + } catch (const std::bad_any_cast&) { + int int_val = TryEvaluateConstInt(ctx->constExp()); + return static_cast(builder_.CreateConstInt(int_val)); + } + } + return static_cast(builder_.CreateConstInt(0)); } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstInitVal: 常量表达式求值失败: " << e.what() - << ",返回默认值0" << std::endl; + std::cerr << "[WARNING] visitConstInitVal: " << e.what() << std::endl; return static_cast(builder_.CreateConstInt(0)); } } // 如果是聚合初始化(花括号列表) else if (!ctx->constInitVal().empty()) { - // 处理嵌套聚合初始化 std::vector all_values; for (auto* init_val : ctx->constInitVal()) { auto result = init_val->accept(this); if (result.has_value()) { try { - // 尝试获取单个值 + // 尝试获取单个常量值 ir::Value* value = std::any_cast(result); all_values.push_back(value); } catch (const std::bad_any_cast&) { @@ -428,11 +497,9 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { // 尝试获取值列表(嵌套情况) std::vector nested_values = std::any_cast>(result); - // 展平嵌套的值 all_values.insert(all_values.end(), nested_values.begin(), nested_values.end()); } catch (const std::bad_any_cast&) { - // 未知类型 throw std::runtime_error( FormatError("irgen", "不支持的常量初始化值类型")); } @@ -563,6 +630,15 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { builder_.CreateStore(rhs, elem_ptr); } else { // 普通标量赋值 + // 调试输出指针类型 + std::cerr << "[DEBUG] base_ptr type: " << base_ptr->GetType() << std::endl; + std::cerr << "[DEBUG] rhs type: " << rhs->GetType()<< std::endl; + + // 如果 base_ptr 不是指针类型,可能需要特殊处理 + if (!base_ptr->GetType()->IsPtrInt32()) { + std::cerr << "[ERROR] base_ptr is not a pointer type!" << std::endl; + throw std::runtime_error("尝试存储到非指针类型"); + } builder_.CreateStore(rhs, base_ptr); } } else { diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index d5fe1af..056984a 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -268,43 +268,118 @@ IRGenImpl::BlockFlow IRGenImpl::HandleContinueStmt(SysYParser::StmtContext* ctx) } // 赋值语句(待实现) +// 赋值语句 +// 赋值语句 IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { + std::cout << "[DEBUG IRGEN] HandleAssignStmt: " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->lVal() || !ctx->exp()) { throw std::runtime_error(FormatError("irgen", "非法赋值语句")); } + // 计算右值 ir::Value* rhs = EvalExpr(*ctx->exp()); if (!rhs) { throw std::runtime_error(FormatError("irgen", "赋值 RHS 计算失败")); } - + auto* lval = ctx->lVal(); - auto* decl = sema_.ResolveVarUse(lval); - ir::Value* ptr = nullptr; - if (decl) { - auto it = storage_map_.find(decl); + std::string varName = lval->Ident()->getText(); + std::cerr << "[DEBUG] HandleAssignStmt: assigning to " << varName << std::endl; + + // 1. 检查是否为常量(不能给常量赋值) + auto* const_decl = sema_.ResolveConstUse(lval); + if (const_decl) { + throw std::runtime_error( + FormatError("irgen", "不能给常量赋值: " + varName)); + } + + // 2. 查找存储位置 + ir::Value* base_ptr = nullptr; + + // 2.1 尝试通过语义分析获取变量定义,并从 storage_map_ 查找 + auto* var_decl = sema_.ResolveVarUse(lval); + if (var_decl) { + auto it = storage_map_.find(var_decl); if (it != storage_map_.end()) { - ptr = it->second; + base_ptr = it->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in storage_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; } } - - if (!ptr && lval->Ident()) { - auto it = param_map_.find(lval->Ident()->getText()); - if (it != param_map_.end()) { - ptr = it->second; + + // 2.2 从参数映射查找(关键!) + if (!base_ptr) { + auto it2 = param_map_.find(varName); + if (it2 != param_map_.end()) { + base_ptr = it2->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in param_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; } - if (!ptr) { - auto it2 = global_map_.find(lval->Ident()->getText()); - if (it2 != global_map_.end()) { - ptr = it2->second; - } + } + + // 2.3 从全局变量映射查找 + if (!base_ptr) { + auto it3 = global_map_.find(varName); + if (it3 != global_map_.end()) { + base_ptr = it3->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in global_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; } } - - if (!ptr) { - throw std::runtime_error(FormatError("irgen", "赋值目标缺少存储槽位: " + lval->getText())); + + // 2.4 从局部变量映射查找(fallback) + if (!base_ptr) { + auto it4 = local_var_map_.find(varName); + if (it4 != local_var_map_.end()) { + base_ptr = it4->second; + std::cerr << "[DEBUG] HandleAssignStmt: found in local_var_map_ for " << varName + << ", ptr = " << (void*)base_ptr << std::endl; + } } - - builder_.CreateStore(rhs, ptr); + + // 如果还是找不到,才报错 + if (!base_ptr) { + throw std::runtime_error( + FormatError("irgen", "变量声明缺少存储槽位: " + varName)); + } + + // 3. 检查是否有数组下标 + auto exp_list = lval->exp(); + if (!exp_list.empty()) { + // 数组元素赋值 + std::vector indices; + indices.push_back(builder_.CreateConstInt(0)); + + for (auto* exp : exp_list) { + ir::Value* index = EvalExpr(*exp); + indices.push_back(index); + } + + ir::Value* elem_ptr = builder_.CreateGEP( + base_ptr, indices, module_.GetContext().NextTemp()); + + builder_.CreateStore(rhs, elem_ptr); + } else { + // 普通标量赋值 + std::cerr << "[DEBUG] HandleAssignStmt: scalar assignment to " << varName + << ", ptr = " << (void*)base_ptr + << ", rhs = " << (void*)rhs << std::endl; + // 在 HandleAssignStmt 中,存储前添加类型调试 + if (base_ptr && base_ptr->GetType()) { + + std::cerr << "[DEBUG] Is int32: " << base_ptr->GetType()->IsInt32() << std::endl; + std::cerr << "[DEBUG] Is float: " << base_ptr->GetType()->IsFloat() << std::endl; + std::cerr << "[DEBUG] Is ptr int32: " << base_ptr->GetType()->IsPtrInt32() << std::endl; + std::cerr << "[DEBUG] Is ptr float: " << base_ptr->GetType()->IsPtrFloat() << std::endl; + std::cerr << "[DEBUG] Is array: " << base_ptr->GetType()->IsArray() << std::endl; + } + if (rhs && rhs->GetType()) { + + std::cerr << "[DEBUG] Value is int32: " << rhs->GetType()->IsInt32() << std::endl; + } + builder_.CreateStore(rhs, base_ptr); + } + return BlockFlow::Continue; -} +} \ No newline at end of file diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index cb50416..cbedf1d 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -31,7 +31,6 @@ std::shared_ptr GetTypeFromBType(SysYParser::BTypeContext* ctx) { class SemaVisitor final : public SysYBaseVisitor { public: SemaVisitor() : table_() {} - std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override { if (!ctx) { throw std::runtime_error(FormatError("sema", "缺少编译单元")); @@ -1501,5 +1500,6 @@ private: SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit) { SemaVisitor visitor; comp_unit.accept(&visitor); - return visitor.TakeSemanticContext(); + SemanticContext ctx = visitor.TakeSemanticContext(); + return ctx; } From d9201de4286c9f8f518523a986cb7e234cadc148 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Tue, 31 Mar 2026 20:00:21 +0800 Subject: [PATCH 37/39] =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/irgen/IRGen.h | 4 +- result.txt | 9055 +++++++++++++++++++++++++++++---------- src/irgen/IRGenExp.cpp | 108 +- src/irgen/IRGenFunc.cpp | 78 +- 4 files changed, 6932 insertions(+), 2313 deletions(-) diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index b61efcb..947ffa5 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -65,9 +65,11 @@ public: // 辅助函数 ir::Value* EvalExpr(SysYParser::ExpContext& expr); // 只保留一处 ir::Value* EvalCond(SysYParser::CondContext& cond); - ir::Value* visitCallExp(SysYParser::UnaryExpContext* ctx); + std::any visitCallExp(SysYParser::UnaryExpContext* ctx); std::vector ProcessNestedInitVals(SysYParser::InitValContext* ctx); int TryEvaluateConstInt(SysYParser::ConstExpContext* ctx); + void AddRuntimeFunctions(); + ir::Function* CreateRuntimeFunctionDecl(const std::string& funcName); private: // 辅助函数声明 enum class BlockFlow{ diff --git a/result.txt b/result.txt index 9e40a1a..d94ad8d 100644 --- a/result.txt +++ b/result.txt @@ -47,23 +47,23 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] 初始化值数量: 8 [DEBUG] 期望元素数量: 8 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x5b960e458e80 +保存常量定义上下文: a, ctx: 0x55cf3c928b00 [DEBUG] 数组常量,不存储单个常量值 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x5b960e458e80 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55cf3c928b00 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x5b960e458e80 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5b960e458e80 +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55cf3c928b00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cf3c928b00 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x5b960e463640 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x5b960e463640 +保存常量定义上下文: N, ctx: 0x55cf3c9332c0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55cf3c9332c0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x5b960e463640 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5b960e463640 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cf3c9332c0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: 4 @@ -120,14 +120,14 @@ SymbolTable::addSymbol: stored c with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: d base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x5b960e463640 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b960e463640 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cf3c9332c0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x5b960e463640 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 [DEBUG] dim[0] = 4 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -152,10 +152,10 @@ SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x5b960e463 [DEBUG] CheckExp: a[3][0] [DEBUG] visitUnaryExp: a[3][0] [DEBUG] visitPrimaryExp: a[3][0] -SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x5b960e458e80 +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55cf3c928b00 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b960e458e80 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cf3c928b00 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -190,7 +190,7 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5b960e469dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55cf3c939a40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -205,7 +205,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x5b960e4662e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55cf3c935f60, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -244,7 +244,7 @@ SymbolTable::addSymbol: stored e with kind=0, const_def_ctx=0 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x5b960e472790, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -261,7 +261,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x5b960e472790, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -278,7 +278,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x5b960e472790, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -295,7 +295,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5b960e469dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55cf3c939a40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -307,196 +307,272 @@ dim_count: 2, subscript_count: 2 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {constinta[4][2]={{1,2},{3,4},{},7};constintN=3;intb[4][2]={};intc[4][2]={1,2,3,4,5,6,7,8};intd[N+1][2]={1,2,{3},{5},a[3][0],8};inte[4][2][1]={{d[2][1],{c[2][1]}},{3,4},{5,6},{7,8}};returne[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0];} [DEBUG IRGEN] visitBlockItem: constinta[4][2]={{1,2},{3,4},{},7}; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant a [DEBUG] visitConstDef: array constant a -[DEBUG IRGEN] visitAddExp: 4 -[DEBUG IRGEN] visitMulExp: 4 -[DEBUG IRGEN] visitPrimaryExp: 4 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5b960e423450 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423450 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5b960e481ae0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5b960e421760 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5b960e423450 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55cf3c9593c0 [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x5b960e422c70 -[DEBUG] visitConstDef: 创建常量数组 a,大小 16 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55cf3c959460 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: constintN=3; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant N [DEBUG] visitConstDef: scalar constant N -[DEBUG IRGEN] visitAddExp: 3 -[DEBUG IRGEN] visitMulExp: 3 -[DEBUG IRGEN] visitPrimaryExp: 3 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5b960e421760 -[DEBUG] visitConstDef: scalar constant N with value 0x5b960e421760 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant N = 3 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intb[4][2]={}; -[DEBUG IRGEN] visitAddExp: 4 -[DEBUG IRGEN] visitMulExp: 4 -[DEBUG IRGEN] visitPrimaryExp: 4 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5b960e423450 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423450 -[DEBUG IRGEN] visitAddExp: 2 -[DEBUG IRGEN] visitMulExp: 2 -[DEBUG IRGEN] visitPrimaryExp: 2 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423250 -[DEBUG] visitVarDef: 创建数组 b,维度 16×16,总大小 256 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleLocalVariable: 数组总大小: 8 +[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 +[DEBUG] HandleLocalVariable: 处理数组初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: 0 +[DEBUG] HandleLocalVariable: 存储数组引用 +[DEBUG] HandleLocalVariable: 创建局部数组 b,维度 4×2,总大小 8 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intc[4][2]={1,2,3,4,5,6,7,8}; -[DEBUG IRGEN] visitAddExp: 4 -[DEBUG IRGEN] visitMulExp: 4 -[DEBUG IRGEN] visitPrimaryExp: 4 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5b960e423450 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423450 -[DEBUG IRGEN] visitAddExp: 2 -[DEBUG IRGEN] visitMulExp: 2 -[DEBUG IRGEN] visitPrimaryExp: 2 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423250 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 c +[DEBUG] HandleLocalVariable: 处理局部数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleLocalVariable: 数组总大小: 8 +[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 +[DEBUG] HandleLocalVariable: 处理数组初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 1 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5b960e481ae0 -[DEBUG] EvalExpr: success, result = 0x5b960e481ae0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 +[DEBUG] EvalExpr: success, result = 0x55cf3c959190 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 -[DEBUG] EvalExpr: success, result = 0x5b960e423250 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 +[DEBUG] EvalExpr: success, result = 0x55cf3c959210 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 3 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5b960e421760 -[DEBUG] EvalExpr: success, result = 0x5b960e421760 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 +[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 4 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5b960e423450 -[DEBUG] EvalExpr: success, result = 0x5b960e423450 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55cf3c9593c0 +[DEBUG] EvalExpr: success, result = 0x55cf3c9593c0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 5 [DEBUG IRGEN] visitAddExp: 5 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x5b960e423000 -[DEBUG] EvalExpr: success, result = 0x5b960e423000 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55cf3c95a700 +[DEBUG] EvalExpr: success, result = 0x55cf3c95a700 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 6 [DEBUG IRGEN] visitAddExp: 6 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x5b960e4ac050 -[DEBUG] EvalExpr: success, result = 0x5b960e4ac050 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x55cf3c95a7b0 +[DEBUG] EvalExpr: success, result = 0x55cf3c95a7b0 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 7 [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x5b960e422c70 -[DEBUG] EvalExpr: success, result = 0x5b960e422c70 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55cf3c959460 +[DEBUG] EvalExpr: success, result = 0x55cf3c959460 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 8 [DEBUG IRGEN] visitAddExp: 8 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x5b960e4ac0b0 -[DEBUG] EvalExpr: success, result = 0x5b960e4ac0b0 -[DEBUG] visitVarDef: 创建数组 c,维度 16×16,总大小 256 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x55cf3c95a810 +[DEBUG] EvalExpr: success, result = 0x55cf3c95a810 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 8 个初始化值 +[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: 8 +[DEBUG] HandleLocalVariable: 存储数组引用 +[DEBUG] HandleLocalVariable: 创建局部数组 c,维度 4×2,总大小 8 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intd[N+1][2]={1,2,{3},{5},a[3][0],8}; -[DEBUG IRGEN] visitAddExp: N+1 -[DEBUG IRGEN] visitAddExp: N -[DEBUG IRGEN] visitMulExp: N -[DEBUG IRGEN] visitPrimaryExp: N -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: N -[DEBUG] visitLVal: N -[WARNING] visitConstExp: 常量表达式求值失败: [irgen] 变量声明缺少存储槽位: N,返回0 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e422ea0 -[DEBUG IRGEN] visitAddExp: 2 -[DEBUG IRGEN] visitMulExp: 2 -[DEBUG IRGEN] visitPrimaryExp: 2 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 -[DEBUG] TryEvaluateConstInt: got IR value 0x5b960e423250 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 d +[DEBUG] HandleLocalVariable: 处理局部数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleLocalVariable: 数组总大小: 8 +[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 +[DEBUG] HandleLocalVariable: 处理数组初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 1 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5b960e481ae0 -[DEBUG] EvalExpr: success, result = 0x5b960e481ae0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 +[DEBUG] EvalExpr: success, result = 0x55cf3c959190 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5b960e423250 -[DEBUG] EvalExpr: success, result = 0x5b960e423250 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 +[DEBUG] EvalExpr: success, result = 0x55cf3c959210 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 3 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5b960e421760 -[DEBUG] EvalExpr: success, result = 0x5b960e421760 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 +[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 +[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理聚合初始化 +[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 5 [DEBUG IRGEN] visitAddExp: 5 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x5b960e423000 -[DEBUG] EvalExpr: success, result = 0x5b960e423000 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55cf3c95a700 +[DEBUG] EvalExpr: success, result = 0x55cf3c95a700 +[DEBUG] ProcessNestedInitVals: 获取到单个值 +[DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 +[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: a[3][0] [DEBUG IRGEN] visitAddExp: a[3][0] [DEBUG IRGEN] visitMulExp: a[3][0] [DEBUG IRGEN] visitPrimaryExp: a[3][0] [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: a[3][0] [DEBUG] visitLVal: a -[ERROR] Exception in EvalExpr: [irgen] 变量声明缺少存储槽位: a -[error] [irgen] 变量声明缺少存储槽位: a +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 +[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x55cf3c9594c0 +[ERROR] Exception in EvalExpr: [ir] 不支持的指针类型 +[error] [ir] 不支持的指针类型 ========== test/test_case/functional/09_func_defn.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -554,7 +630,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x593f4530daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558432321720, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -563,7 +639,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x593f45310500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558432324180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: func(a) [DEBUG] visitUnaryExp: func(a) @@ -577,7 +653,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x593f4530daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558432321720, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: Return ExpStmt @@ -590,13 +666,212 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x593f45310500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558432324180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: a +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 a +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: func +[DEBUG IRGEN] visitBlock: {p=p-1;returnp;} +[DEBUG IRGEN] visitBlockItem: p=p-1; +[DEBUG IRGEN] visitStmt: p=p-1; +[DEBUG IRGEN] HandleAssignStmt: p=p-1; +[DEBUG IRGEN] EvalExpr: p-1 +[DEBUG IRGEN] visitAddExp: p-1 +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: p +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x558432337f00 +[DEBUG] visitAddExp: left=0x558432337e40, right=0x558432337f00 +[DEBUG] EvalExpr: success, result = 0x558432337f60 +[DEBUG] HandleAssignStmt: assigning to p +[DEBUG] HandleAssignStmt: found in param_map_ for p, ptr = 0x558432335d40 +[DEBUG] HandleAssignStmt: scalar assignment to p, ptr = 0x558432335d40, rhs = 0x558432337f60 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnp; +[DEBUG IRGEN] visitStmt: returnp; +[DEBUG IRGEN] HandleReturnStmt: returnp; +[DEBUG IRGEN] HandleReturnStmt eval exp: p +[DEBUG IRGEN] EvalExpr: p +[DEBUG IRGEN] visitAddExp: p +[DEBUG IRGEN] visitMulExp: p +[DEBUG IRGEN] visitPrimaryExp: p +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: p +[DEBUG] EvalExpr: success, result = 0x558432338150 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {intb;a=10;b=func(a);returnb;} +[DEBUG IRGEN] visitBlockItem: intb; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x5584323379e0 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=10; +[DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x558432338590 +[DEBUG] EvalExpr: success, result = 0x558432338590 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in global_map_ for a, ptr = 0x558432337930 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x558432337930, rhs = 0x558432338590 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=func(a); +[DEBUG IRGEN] visitStmt: b=func(a); +[DEBUG IRGEN] HandleAssignStmt: b=func(a); +[DEBUG IRGEN] EvalExpr: func(a) +[DEBUG IRGEN] visitAddExp: func(a) +[DEBUG IRGEN] visitMulExp: func(a) +[DEBUG IRGEN] visitCallExp: 调用函数 func +[DEBUG IRGEN] EvalExpr: a +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] EvalExpr: success, result = 0x5584323386b0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x558432338770 +[DEBUG] EvalExpr: success, result = 0x558432338770 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5584323383f0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5584323383f0, rhs = 0x558432338770 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnb; +[DEBUG IRGEN] visitStmt: returnb; +[DEBUG IRGEN] HandleReturnStmt: returnb; +[DEBUG IRGEN] HandleReturnStmt eval exp: b +[DEBUG IRGEN] EvalExpr: b +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] EvalExpr: success, result = 0x558432338980 +@a = global i32 0 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @func(i32 %p) { +entry: + %t0 = alloca i32 + store i32 %p, i32* %t0 + %t1 = load i32, i32* %t0 + %t2 = sub i32 %t1, 1 + store i32 %t2, i32* %t0 + %t3 = load i32, i32* %t0 + ret i32 %t3 +} +define i32 @main() { +entry: + %t4_b = alloca i32 + store i32 0, i32* %t4_b + store i32 10, i32* @a + %t5 = load i32, i32* @a + %t6 = call i32 @func(i32 %t5) + store i32 %t6, i32* %t4_b + %t7 = load i32, i32* %t4_b + ret i32 %t7 +} ========== test/test_case/functional/11_add2.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -623,7 +898,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x62b777be0de0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2da60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -632,7 +907,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x62b777be15b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2e230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -1 [DEBUG] visitUnaryExp: -1 @@ -648,44 +923,87 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x62b777be0de0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2da60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x62b777be15b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2e230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {inta,b;a=10;b=-1;returna+b;} [DEBUG IRGEN] visitBlockItem: inta,b; -[DEBUG] visitVarDef: 创建标量变量 a,初始值 0x62b777be8e90 -[DEBUG] visitVarDef: 创建标量变量 b,初始值 0x62b777be8e90 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x55bc2cd35b10 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55bc2cd35b10 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=10; [DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; [DEBUG IRGEN] EvalExpr: 10 [DEBUG IRGEN] visitAddExp: 10 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x62b777bef700 -[DEBUG] EvalExpr: success, result = 0x62b777bef700 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x55bc2cd3c380 +[DEBUG] EvalExpr: success, result = 0x55bc2cd3c380 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x55bc2ccf8a30 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55bc2ccf8a30, rhs = 0x55bc2cd3c380 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: b=-1; [DEBUG IRGEN] visitStmt: b=-1; +[DEBUG IRGEN] HandleAssignStmt: b=-1; [DEBUG IRGEN] EvalExpr: -1 [DEBUG IRGEN] visitAddExp: -1 [DEBUG IRGEN] visitMulExp: -1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x62b777bee520 -[DEBUG] EvalExpr: success, result = 0x62b777bedb90 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55bc2cd3b1a0 +[DEBUG] EvalExpr: success, result = 0x55bc2cd3f980 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55bc2cd3f690 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55bc2cd3f690, rhs = 0x55bc2cd3f980 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: returna+b; [DEBUG IRGEN] visitStmt: returna+b; @@ -698,16 +1016,56 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: a [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: a [DEBUG] visitLVal: a [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: b [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x62b777bf1910, right=0x62b777bf1990 -[DEBUG] EvalExpr: success, result = 0x62b777bf1a80 +[DEBUG] visitAddExp: left=0x55bc2cd3fb00, right=0x55bc2cd3fbf0 +[DEBUG] EvalExpr: success, result = 0x55bc2cd3fd70 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} define i32 @main() { entry: %t0_a = alloca i32 @@ -742,11 +1100,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 10 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x610c7786f950 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x610c7786f950 +保存常量定义上下文: a, ctx: 0x55df262785d0 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55df262785d0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x610c7786f950 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x610c7786f950 +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55df262785d0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55df262785d0 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: main 返回类型: int [DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 @@ -756,7 +1114,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x610c77876d60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df2627f9e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -771,28 +1129,137 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x610c77876d60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df2627f9e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x610c7786f950 +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55df262785d0 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x610c7786f950 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55df262785d0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant a [DEBUG] visitConstDef: scalar constant a -[DEBUG IRGEN] visitAddExp: 10 -[DEBUG IRGEN] visitMulExp: 10 -[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant a = 10 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG IRGEN] visitBlock: {intb;b=2;returnb-a;} +[DEBUG IRGEN] visitBlockItem: intb; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55df26285860 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=2; +[DEBUG IRGEN] visitStmt: b=2; +[DEBUG IRGEN] HandleAssignStmt: b=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55df2628d5b0 +[DEBUG] EvalExpr: success, result = 0x55df2628d5b0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55df26245be0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55df26245be0, rhs = 0x55df2628d5b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnb-a; +[DEBUG IRGEN] visitStmt: returnb-a; +[DEBUG IRGEN] HandleReturnStmt: returnb-a; +[DEBUG IRGEN] HandleReturnStmt eval exp: b-a +[DEBUG IRGEN] EvalExpr: b-a +[DEBUG IRGEN] visitAddExp: b-a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x610c7787d250 -[DEBUG] visitConstDef: scalar constant a with value 0x610c7787d250 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x55df2628d710, right=0x55df26285ed0 +[DEBUG] EvalExpr: success, result = 0x55df2628d800 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0_b = alloca i32 + store i32 0, i32* %t0_b + store i32 2, i32* %t0_b + %t1 = load i32, i32* %t0_b + %t2 = sub i32 %t1, 10 + ret i32 %t2 +} ========== test/test_case/functional/15_graph_coloring.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -817,33 +1284,33 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 4 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: V, ctx: 0x5ffcbab834b0 -SymbolTable::addSymbol: stored V with kind=3, const_def_ctx=0x5ffcbab834b0 +保存常量定义上下文: V, ctx: 0x55c5b2283130 +SymbolTable::addSymbol: stored V with kind=3, const_def_ctx=0x55c5b2283130 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2283130 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: space base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 32 [DEBUG] visitPrimaryExp: 32 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: space, ctx: 0x5ffcbab8a180 -SymbolTable::addSymbol: stored space with kind=3, const_def_ctx=0x5ffcbab8a180 +保存常量定义上下文: space, ctx: 0x55c5b2289e00 +SymbolTable::addSymbol: stored space with kind=3, const_def_ctx=0x55c5b2289e00 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5ffcbab8a180 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5ffcbab8a180 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2289e00 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: LF base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: LF, ctx: 0x5ffcbab8a300 -SymbolTable::addSymbol: stored LF with kind=3, const_def_ctx=0x5ffcbab8a300 +保存常量定义上下文: LF, ctx: 0x55c5b2289f80 +SymbolTable::addSymbol: stored LF with kind=3, const_def_ctx=0x55c5b2289f80 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5ffcbab8a300 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5ffcbab8a300 +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x55c5b2289f80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2289f80 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: printSolution 返回类型: void SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 @@ -860,14 +1327,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbab83f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -891,7 +1358,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbab83f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -905,17 +1372,17 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: space [DEBUG] visitUnaryExp: space [DEBUG] visitPrimaryExp: space -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5ffcbab8a180 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 CheckLValue: found sym->name = space, sym->kind = 3 绑定常量: space -> ConstDefContext -CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab8a180 +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289e00 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbab83f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -923,7 +1390,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbab83f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -937,10 +1404,10 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: LF [DEBUG] visitUnaryExp: LF [DEBUG] visitPrimaryExp: LF -SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5ffcbab8a300 +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x55c5b2289f80 CheckLValue: found sym->name = LF, sym->kind = 3 绑定常量: LF -> ConstDefContext -CheckLValue 绑定变量: LF, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab8a300 +CheckLValue 绑定变量: LF, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289f80 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 函数 printSolution has_return: 0 return_type_is_void: 1 @@ -988,10 +1455,10 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: space [DEBUG] visitUnaryExp: space [DEBUG] visitPrimaryExp: space -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5ffcbab8a180 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 CheckLValue: found sym->name = space, sym->kind = 3 绑定常量: space -> ConstDefContext -CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab8a180 +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289e00 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -1051,7 +1518,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 函数 printMessage has_return: 0 return_type_is_void: 1 [DEBUG] 进入函数: isSafe 返回类型: int -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 [DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 @@ -1068,14 +1535,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -1085,7 +1552,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1097,14 +1564,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabae0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -1121,7 +1588,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -1129,7 +1596,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabae0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: color[j] @@ -1145,7 +1612,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabae0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: color[i] @@ -1161,7 +1628,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Return ExpStmt @@ -1176,7 +1643,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabae0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -1184,7 +1651,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabae0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1192,7 +1659,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -1200,7 +1667,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabac6b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1214,7 +1681,7 @@ dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 isSafe has_return: 1 return_type_is_void: 0 [DEBUG] 进入函数: graphColoring 返回类型: int -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 [DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 SymbolTable::addSymbol: stored m with kind=2, const_def_ctx=0 @@ -1232,10 +1699,10 @@ CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -1310,7 +1777,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabc30a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m @@ -1339,7 +1806,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabc30a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: If [DEBUG] visitUnaryExp: graphColoring(graph,m,i+1,color) @@ -1414,7 +1881,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabc30a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -1422,7 +1889,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabc30a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1439,21 +1906,21 @@ dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: graph base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 [DEBUG] dim[0] = 4 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 [DEBUG] dim[1] = 4 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1519,12 +1986,12 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: color base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 [DEBUG] dim[0] = 4 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1545,21 +2012,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd6f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5ffcbab834b0 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5ffcbab834b0 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = color, sym->kind = 0 绑定变量: color -> VarDefContext -CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd67c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6410, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -1567,7 +2034,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd6f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -1577,7 +2044,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd6f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -1585,7 +2052,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd6f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1602,7 +2069,7 @@ SymbolTable::lookup: found graphColoring in scope level 1, kind=1, const_def_ctx SymbolTable::lookup: found graph in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = graph, sym->kind = 0 绑定变量: graph -> VarDefContext -CheckLValue 绑定变量: graph, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabcd590, sym->const_def_ctx: 0 +CheckLValue 绑定变量: graph, sym->kind: 0, sym->var_def_ctx: 0x55c5b22cd1e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: m @@ -1611,7 +2078,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd5ee0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d5b30, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -1622,7 +2089,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = color, sym->kind = 0 绑定变量: color -> VarDefContext -CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5ffcbabd67c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6410, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -1645,16 +2112,35 @@ SymbolTable::lookup: found printMessage in scope level 1, kind=1, const_def_ctx= [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant V [DEBUG] visitConstDef: scalar constant V -[DEBUG IRGEN] visitAddExp: 4 -[DEBUG IRGEN] visitMulExp: 4 -[DEBUG IRGEN] visitPrimaryExp: 4 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5ffcbabe0b90 -[DEBUG] visitConstDef: scalar constant V with value 0x5ffcbabe0b90 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant V = 4 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] visitConstDef: processing constant space +[DEBUG] visitConstDef: scalar constant space +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant space = 32 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] visitConstDef: processing constant LF +[DEBUG] visitConstDef: scalar constant LF +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant LF = 10 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: printSolution +[error] [ir] StoreInst 当前只支持存储 i32 ========== test/test_case/functional/22_matrix_multiply.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -1676,30 +2162,30 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 100 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: MAX_SIZE, ctx: 0x63bbaedcd300 -SymbolTable::addSymbol: stored MAX_SIZE with kind=3, const_def_ctx=0x63bbaedcd300 +保存常量定义上下文: MAX_SIZE, ctx: 0x5568ea0b5f80 +SymbolTable::addSymbol: stored MAX_SIZE with kind=3, const_def_ctx=0x5568ea0b5f80 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5568ea0b5f80 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1711,21 +2197,21 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1737,21 +2223,21 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: res base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63bbaedcd300 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x63bbaedcd300 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1785,14 +2271,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde0f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -1807,14 +2293,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde340, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 @@ -1829,21 +2315,21 @@ SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x63bbaedec8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n1 [DEBUG] visitPrimaryExp: n1 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x63bbaeddde00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd6550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -1851,7 +2337,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -1859,7 +2345,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: res[i][j]+a[i][k]*b[k][j] @@ -1868,7 +2354,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd6550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -1876,7 +2362,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -1884,7 +2370,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: a[i][k] @@ -1892,7 +2378,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd2960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bb5e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -1900,7 +2386,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -1908,7 +2394,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x63bbaedec8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[k][j] @@ -1916,7 +2402,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd5d40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5568ea0be9c0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -1924,7 +2410,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x63bbaedec8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -1932,14 +2418,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x63bbaedec8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -1947,7 +2433,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x63bbaedec8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1955,7 +2441,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -1963,7 +2449,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedeb050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1971,7 +2457,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -1979,7 +2465,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaede1080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1995,7 +2481,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde0f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2006,7 +2492,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x63bbaeddde00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2017,7 +2503,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2028,21 +2514,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde0f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2053,21 +2539,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n1 [DEBUG] visitPrimaryExp: n1 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x63bbaeddde00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd2960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bb5e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2075,7 +2561,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2083,7 +2569,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -2095,7 +2581,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2103,7 +2589,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2111,7 +2597,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2119,7 +2605,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2127,7 +2613,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m2, sym->kind = 0 绑定变量: m2 -> VarDefContext -CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde560, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c71e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2138,7 +2624,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde340, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2149,7 +2635,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2160,21 +2646,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m2 [DEBUG] visitPrimaryExp: m2 SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m2, sym->kind = 0 绑定变量: m2 -> VarDefContext -CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde560, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c71e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2185,21 +2671,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde340, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd5d40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5568ea0be9c0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2207,7 +2693,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2215,7 +2701,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -2227,7 +2713,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2235,7 +2721,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2243,7 +2729,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2251,7 +2737,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2265,7 +2751,7 @@ SymbolTable::lookup: found matrix_multiply in scope level 1, kind=1, const_def_c SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2276,21 +2762,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde0f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2301,14 +2787,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x63bbaedde340, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -2324,7 +2810,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x63bbaedd6550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2332,7 +2818,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2340,7 +2826,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -2359,7 +2845,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2367,7 +2853,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfb110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2386,7 +2872,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2394,7 +2880,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x63bbaedfaf10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2408,80 +2894,365 @@ dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant MAX_SIZE [DEBUG] visitConstDef: scalar constant MAX_SIZE -[DEBUG IRGEN] visitAddExp: 100 -[DEBUG IRGEN] visitMulExp: 100 -[DEBUG IRGEN] visitPrimaryExp: 100 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant MAX_SIZE = 100 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] HandleGlobalVariable: 存储全局数组引用 +[DEBUG] HandleGlobalVariable: 创建全局数组 a,总大小 10000 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 b +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: b +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] HandleGlobalVariable: 存储全局数组引用 +[DEBUG] HandleGlobalVariable: 创建全局数组 b,总大小 10000 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: res +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 res +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 10000 +[DEBUG] HandleGlobalVariable: 创建全局数组: res +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] HandleGlobalVariable: 存储全局数组引用 +[DEBUG] HandleGlobalVariable: 创建全局数组 res,总大小 10000 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: n1 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 n1 +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: n1 +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 n1 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m1 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 m1 +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: m1 +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 m1 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: n2 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 n2 +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: n2 +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 n2 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m2 +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 m2 +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: m2 +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 m2 +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: matrix_multiply +[DEBUG IRGEN] visitBlock: {inti=0;while(iname = a, sym->kind = 0 -绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 -dim_count: 0, subscript_count: 0 -[DEBUG] CheckExp: a+2 -[DEBUG] visitUnaryExp: a -[DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 +[DEBUG] EvalExpr: success, result = 0x5568ea105ec0 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 i,初始值 0x5568ea105ec0 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: while(iname = a, sym->kind = 0 +绑定变量: a -> VarDefContext +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +dim_count: 0, subscript_count: 0 +[DEBUG] CheckExp: a+2 +[DEBUG] visitUnaryExp: a +[DEBUG] visitPrimaryExp: a +SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -2492,7 +3263,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -2502,7 +3273,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+4 [DEBUG] visitUnaryExp: b @@ -2510,7 +3281,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 4 [DEBUG] visitPrimaryExp: 4 @@ -2518,7 +3289,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b [DEBUG] visitUnaryExp: putch @@ -2526,28 +3297,28 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+5 [DEBUG] visitUnaryExp: b @@ -2555,7 +3326,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -2566,7 +3337,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 6 [DEBUG] visitPrimaryExp: 6 @@ -2576,7 +3347,7 @@ SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+main [DEBUG] visitUnaryExp: a @@ -2584,20 +3355,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -2605,35 +3376,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+a [DEBUG] visitUnaryExp: b @@ -2641,14 +3412,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: main+7 @@ -2657,7 +3428,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -2667,7 +3438,7 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+8 [DEBUG] visitUnaryExp: a @@ -2675,7 +3446,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 8 [DEBUG] visitPrimaryExp: 8 @@ -2683,7 +3454,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -2691,35 +3462,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+a [DEBUG] visitUnaryExp: b @@ -2727,14 +3498,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: main+9 @@ -2743,7 +3514,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 9 [DEBUG] visitPrimaryExp: 9 @@ -2753,7 +3524,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+10 [DEBUG] visitUnaryExp: a @@ -2761,7 +3532,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e23c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -2770,17 +3541,17 @@ dim_count: 0, subscript_count: 0 [DEBUG] visitPrimaryExp: 11 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x63ab81e2aeb0 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x63ab81e2aeb0 +保存常量定义上下文: a, ctx: 0x557dc5f47b30 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x557dc5f47b30 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x63ab81e2aeb0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x63ab81e2aeb0 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x557dc5f47b30 [DEBUG] 常量符号添加完成 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+12 [DEBUG] visitUnaryExp: b @@ -2788,7 +3559,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 12 [DEBUG] visitPrimaryExp: 12 @@ -2796,7 +3567,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -2804,35 +3575,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x63ab81e2aeb0 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63ab81e2aeb0 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: main+b [DEBUG] visitUnaryExp: main @@ -2840,14 +3611,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: b+13 @@ -2856,7 +3627,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 13 [DEBUG] visitPrimaryExp: 13 @@ -2866,7 +3637,7 @@ SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e229b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: main+a [DEBUG] visitUnaryExp: main @@ -2874,20 +3645,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e229b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x63ab81e2aeb0 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63ab81e2aeb0 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -2895,34 +3666,34 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x63ab81e2aeb0 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x63ab81e2aeb0 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e27890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e229b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-main [DEBUG] visitUnaryExp: putch @@ -2930,20 +3701,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x63ab81e1fd40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-b [DEBUG] visitUnaryExp: putch @@ -2951,20 +3722,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x63ab81e19da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-a [DEBUG] visitUnaryExp: putch @@ -2972,14 +3743,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x63ab81e08c90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Return ExpStmt [DEBUG] 检测到 return 语句 @@ -2991,13 +3762,15 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x63ab81e16390, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 77 [DEBUG] visitPrimaryExp: 77 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {putch(97);putch(10);inta=1,putch=0;{a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}}returnputch%77;} @@ -3006,15 +3779,1034 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] EvalExpr: putch(97) [DEBUG IRGEN] visitAddExp: putch(97) [DEBUG IRGEN] visitMulExp: putch(97) +[DEBUG IRGEN] visitCallExp: 调用函数 putch [DEBUG IRGEN] EvalExpr: 97 [DEBUG IRGEN] visitAddExp: 97 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x63ab81e381d0 -[DEBUG] EvalExpr: success, result = 0x63ab81e381d0 -[ERROR] Exception in EvalExpr: [irgen] 未找到函数: putch -[error] [irgen] 未找到函数: putch +[DEBUG] visitPrimaryExp: constant int 97 created as 0x557dc5f5e5b0 +[DEBUG] EvalExpr: success, result = 0x557dc5f5e5b0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch(10); +[DEBUG IRGEN] visitStmt: putch(10); +[DEBUG IRGEN] EvalExpr: putch(10) +[DEBUG IRGEN] visitAddExp: putch(10) +[DEBUG IRGEN] visitMulExp: putch(10) +[DEBUG IRGEN] visitCallExp: 调用函数 putch +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x557dc5f5e6f0 +[DEBUG] EvalExpr: success, result = 0x557dc5f5e6f0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inta=1,putch=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x557dc5f5e890 +[DEBUG] EvalExpr: success, result = 0x557dc5f5e890 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x557dc5f5e890 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: putch +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 putch +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 putch,初始值 0x557dc5f5e670 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitStmt: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitBlock: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} +[DEBUG IRGEN] visitBlockItem: a=a+2; +[DEBUG IRGEN] visitStmt: a=a+2; +[DEBUG IRGEN] HandleAssignStmt: a=a+2; +[DEBUG IRGEN] EvalExpr: a+2 +[DEBUG IRGEN] visitAddExp: a+2 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x557dc5f5edb0 +[DEBUG] visitAddExp: left=0x557dc5f5ecf0, right=0x557dc5f5edb0 +[DEBUG] EvalExpr: success, result = 0x557dc5f5ee10 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f553d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f553d0, rhs = 0x557dc5f5ee10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb=a+3; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: a+3 +[DEBUG IRGEN] visitAddExp: a+3 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x557dc5f5f180 +[DEBUG] visitAddExp: left=0x557dc5f5f0e0, right=0x557dc5f5f180 +[DEBUG] EvalExpr: success, result = 0x557dc5f5f200 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x557dc5f5f200 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=b+4; +[DEBUG IRGEN] visitStmt: b=b+4; +[DEBUG IRGEN] HandleAssignStmt: b=b+4; +[DEBUG IRGEN] EvalExpr: b+4 +[DEBUG IRGEN] visitAddExp: b+4 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x557dc5f5f480 +[DEBUG] visitAddExp: left=0x557dc5f5f3c0, right=0x557dc5f5f480 +[DEBUG] EvalExpr: success, result = 0x557dc5f5f4e0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f5f4e0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b; +[DEBUG IRGEN] visitStmt: putch=putch+a+b; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b; +[DEBUG IRGEN] EvalExpr: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x557dc5f5f6a0, right=0x557dc5f5f720 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f5f870, right=0x557dc5f5f950 +[DEBUG] EvalExpr: success, result = 0x557dc5f5f9f0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f5f9f0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitStmt: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitBlock: {b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;} +[DEBUG IRGEN] visitBlockItem: b=b+5; +[DEBUG IRGEN] visitStmt: b=b+5; +[DEBUG IRGEN] HandleAssignStmt: b=b+5; +[DEBUG IRGEN] EvalExpr: b+5 +[DEBUG IRGEN] visitAddExp: b+5 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x557dc5f5fd20 +[DEBUG] visitAddExp: left=0x557dc5f5fbd0, right=0x557dc5f5fd20 +[DEBUG] EvalExpr: success, result = 0x557dc5f5fd80 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f5fd80 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intmain=b+6; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: main +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 main +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: b+6 +[DEBUG IRGEN] visitAddExp: b+6 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x557dc5f60080 +[DEBUG] visitAddExp: left=0x557dc5f5ffe0, right=0x557dc5f60080 +[DEBUG] EvalExpr: success, result = 0x557dc5f60100 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 main,初始值 0x557dc5f60100 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+main; +[DEBUG IRGEN] visitStmt: a=a+main; +[DEBUG IRGEN] HandleAssignStmt: a=a+main; +[DEBUG IRGEN] EvalExpr: a+main +[DEBUG IRGEN] visitAddExp: a+main +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f602c0, right=0x557dc5f60340 +[DEBUG] EvalExpr: success, result = 0x557dc5f60420 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f553d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f553d0, rhs = 0x557dc5f60420 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x557dc5f605c0, right=0x557dc5f60640 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f606e0, right=0x557dc5f607c0 +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f60860, right=0x557dc5f60940 +[DEBUG] EvalExpr: success, result = 0x557dc5f609e0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f609e0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitStmt: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitBlock: {b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;} +[DEBUG IRGEN] visitBlockItem: b=b+a; +[DEBUG IRGEN] visitStmt: b=b+a; +[DEBUG IRGEN] HandleAssignStmt: b=b+a; +[DEBUG IRGEN] EvalExpr: b+a +[DEBUG IRGEN] visitAddExp: b+a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x557dc5f60ce0, right=0x557dc5f60d60 +[DEBUG] EvalExpr: success, result = 0x557dc5f60f70 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f60f70 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inta=main+7; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: main+7 +[DEBUG IRGEN] visitAddExp: main+7 +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x557dc5f61210 +[DEBUG] visitAddExp: left=0x557dc5f61170, right=0x557dc5f61210 +[DEBUG] EvalExpr: success, result = 0x557dc5f61290 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x557dc5f61290 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+8; +[DEBUG IRGEN] visitStmt: a=a+8; +[DEBUG IRGEN] HandleAssignStmt: a=a+8; +[DEBUG IRGEN] EvalExpr: a+8 +[DEBUG IRGEN] visitAddExp: a+8 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x557dc5f614d0 +[DEBUG] visitAddExp: left=0x557dc5f61450, right=0x557dc5f614d0 +[DEBUG] EvalExpr: success, result = 0x557dc5f61530 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f610d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f610d0, rhs = 0x557dc5f61530 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x557dc5f616f0, right=0x557dc5f61770 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f61810, right=0x557dc5f618f0 +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f61990, right=0x557dc5f61a70 +[DEBUG] EvalExpr: success, result = 0x557dc5f61b10 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f61b10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitStmt: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitBlock: {b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;} +[DEBUG IRGEN] visitBlockItem: b=b+a; +[DEBUG IRGEN] visitStmt: b=b+a; +[DEBUG IRGEN] HandleAssignStmt: b=b+a; +[DEBUG IRGEN] EvalExpr: b+a +[DEBUG IRGEN] visitAddExp: b+a +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x557dc5f61d40, right=0x557dc5f61dc0 +[DEBUG] EvalExpr: success, result = 0x557dc5f61e40 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f61e40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intb=main+9; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: main+9 +[DEBUG IRGEN] visitAddExp: main+9 +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x557dc5f62140 +[DEBUG] visitAddExp: left=0x557dc5f620a0, right=0x557dc5f62140 +[DEBUG] EvalExpr: success, result = 0x557dc5f621c0 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x557dc5f621c0 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: a=a+10; +[DEBUG IRGEN] visitStmt: a=a+10; +[DEBUG IRGEN] HandleAssignStmt: a=a+10; +[DEBUG IRGEN] EvalExpr: a+10 +[DEBUG IRGEN] visitAddExp: a+10 +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x557dc5f5e6f0 +[DEBUG] visitAddExp: left=0x557dc5f62380, right=0x557dc5f5e6f0 +[DEBUG] EvalExpr: success, result = 0x557dc5f62400 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f610d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f610d0, rhs = 0x557dc5f62400 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: constinta=11; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] visitConstDef: processing constant a +[DEBUG] visitConstDef: scalar constant a +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant a = 11 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: b=b+12; +[DEBUG IRGEN] visitStmt: b=b+12; +[DEBUG IRGEN] HandleAssignStmt: b=b+12; +[DEBUG IRGEN] EvalExpr: b+12 +[DEBUG IRGEN] visitAddExp: b+12 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x557dc5f62700 +[DEBUG] visitAddExp: left=0x557dc5f62640, right=0x557dc5f62700 +[DEBUG] EvalExpr: success, result = 0x557dc5f62760 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f62000 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f62000, rhs = 0x557dc5f62760 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x557dc5f62920, right=0x557dc5f62580 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f629a0, right=0x557dc5f62a80 +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f62b20, right=0x557dc5f62c00 +[DEBUG] EvalExpr: success, result = 0x557dc5f62ca0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f62ca0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitStmt: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitBlock: {main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;} +[DEBUG IRGEN] visitBlockItem: main=main+b; +[DEBUG IRGEN] visitStmt: main=main+b; +[DEBUG IRGEN] HandleAssignStmt: main=main+b; +[DEBUG IRGEN] EvalExpr: main+b +[DEBUG IRGEN] visitAddExp: main+b +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f63060, right=0x557dc5f630e0 +[DEBUG] EvalExpr: success, result = 0x557dc5f63160 +[DEBUG] HandleAssignStmt: assigning to main +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x557dc5f5ff40 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x557dc5f5ff40, rhs = 0x557dc5f63160 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intmain=b+13; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: main +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 main +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: b+13 +[DEBUG IRGEN] visitAddExp: b+13 +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x557dc5f635f0 +[DEBUG] visitAddExp: left=0x557dc5f63550, right=0x557dc5f635f0 +[DEBUG] EvalExpr: success, result = 0x557dc5f63670 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 main,初始值 0x557dc5f63670 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: main=main+a; +[DEBUG IRGEN] visitStmt: main=main+a; +[DEBUG IRGEN] HandleAssignStmt: main=main+a; +[DEBUG IRGEN] EvalExpr: main+a +[DEBUG IRGEN] visitAddExp: main+a +[DEBUG IRGEN] visitAddExp: main +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x557dc5f63830, right=0x557dc5f62580 +[DEBUG] EvalExpr: success, result = 0x557dc5f638b0 +[DEBUG] HandleAssignStmt: assigning to main +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x557dc5f634b0 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x557dc5f634b0, rhs = 0x557dc5f638b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch+a+b+main; +[DEBUG IRGEN] visitStmt: putch=putch+a+b+main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch+a+b+main; +[DEBUG IRGEN] EvalExpr: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b+main +[DEBUG IRGEN] visitAddExp: putch+a+b +[DEBUG IRGEN] visitAddExp: putch+a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x557dc5f63a50, right=0x557dc5f62580 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f63ad0, right=0x557dc5f63bb0 +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f63c30, right=0x557dc5f63d10 +[DEBUG] EvalExpr: success, result = 0x557dc5f63db0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f63db0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-main; +[DEBUG IRGEN] visitStmt: putch=putch-main; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-main; +[DEBUG IRGEN] EvalExpr: putch-main +[DEBUG IRGEN] visitAddExp: putch-main +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: main +[DEBUG IRGEN] visitPrimaryExp: main +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: main +[DEBUG] visitAddExp: left=0x557dc5f63f70, right=0x557dc5f63ff0 +[DEBUG] EvalExpr: success, result = 0x557dc5f64090 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f64090 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-b; +[DEBUG IRGEN] visitStmt: putch=putch-b; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-b; +[DEBUG IRGEN] EvalExpr: putch-b +[DEBUG IRGEN] visitAddExp: putch-b +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG] visitAddExp: left=0x557dc5f64250, right=0x557dc5f642d0 +[DEBUG] EvalExpr: success, result = 0x557dc5f64370 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f64370 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch=putch-a; +[DEBUG IRGEN] visitStmt: putch=putch-a; +[DEBUG IRGEN] HandleAssignStmt: putch=putch-a; +[DEBUG IRGEN] EvalExpr: putch-a +[DEBUG IRGEN] visitAddExp: putch-a +[DEBUG IRGEN] visitAddExp: putch +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitLVal: constant a +[DEBUG] visitAddExp: left=0x557dc5f64530, right=0x557dc5f62580 +[DEBUG] EvalExpr: success, result = 0x557dc5f645b0 +[DEBUG] HandleAssignStmt: assigning to putch +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f645b0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: returnputch%77; +[DEBUG IRGEN] visitStmt: returnputch%77; +[DEBUG IRGEN] HandleReturnStmt: returnputch%77; +[DEBUG IRGEN] HandleReturnStmt eval exp: putch%77 +[DEBUG IRGEN] EvalExpr: putch%77 +[DEBUG IRGEN] visitAddExp: putch%77 +[DEBUG IRGEN] visitMulExp: putch%77 +[DEBUG IRGEN] visitMulExp: putch +[DEBUG IRGEN] visitPrimaryExp: putch +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: putch +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x557dc5f64ae0 +[DEBUG] EvalExpr: success, result = 0x557dc5f64b60 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @main() { +entry: + %t0 = call void @putch(i32 97) + %t1 = call void @putch(i32 10) + %t2_a = alloca i32 + store i32 1, i32* %t2_a + %t3_putch = alloca i32 + store i32 0, i32* %t3_putch + %t4 = load i32, i32* %t2_a + %t5 = add i32 %t4, 2 + store i32 %t5, i32* %t2_a + %t6_b = alloca i32 + %t7 = load i32, i32* %t2_a + %t8 = add i32 %t7, 3 + store i32 %t8, i32* %t6_b + %t9 = load i32, i32* %t6_b + %t10 = add i32 %t9, 4 + store i32 %t10, i32* %t6_b + %t11 = load i32, i32* %t3_putch + %t12 = load i32, i32* %t2_a + %t13 = add i32 %t11, %t12 + %t14 = load i32, i32* %t6_b + %t15 = add i32 %t13, %t14 + store i32 %t15, i32* %t3_putch + %t16 = load i32, i32* %t6_b + %t17 = add i32 %t16, 5 + store i32 %t17, i32* %t6_b + %t18_main = alloca i32 + %t19 = load i32, i32* %t6_b + %t20 = add i32 %t19, 6 + store i32 %t20, i32* %t18_main + %t21 = load i32, i32* %t2_a + %t22 = load i32, i32* %t18_main + %t23 = add i32 %t21, %t22 + store i32 %t23, i32* %t2_a + %t24 = load i32, i32* %t3_putch + %t25 = load i32, i32* %t2_a + %t26 = add i32 %t24, %t25 + %t27 = load i32, i32* %t6_b + %t28 = add i32 %t26, %t27 + %t29 = load i32, i32* %t18_main + %t30 = add i32 %t28, %t29 + store i32 %t30, i32* %t3_putch + %t31 = load i32, i32* %t6_b + %t32 = load i32, i32* %t2_a + %t33 = add i32 %t31, %t32 + store i32 %t33, i32* %t6_b + %t34_a = alloca i32 + %t35 = load i32, i32* %t18_main + %t36 = add i32 %t35, 7 + store i32 %t36, i32* %t34_a + %t37 = load i32, i32* %t34_a + %t38 = add i32 %t37, 8 + store i32 %t38, i32* %t34_a + %t39 = load i32, i32* %t3_putch + %t40 = load i32, i32* %t34_a + %t41 = add i32 %t39, %t40 + %t42 = load i32, i32* %t6_b + %t43 = add i32 %t41, %t42 + %t44 = load i32, i32* %t18_main + %t45 = add i32 %t43, %t44 + store i32 %t45, i32* %t3_putch + %t46 = load i32, i32* %t6_b + %t47 = load i32, i32* %t34_a + %t48 = add i32 %t46, %t47 + store i32 %t48, i32* %t6_b + %t49_b = alloca i32 + %t50 = load i32, i32* %t18_main + %t51 = add i32 %t50, 9 + store i32 %t51, i32* %t49_b + %t52 = load i32, i32* %t34_a + %t53 = add i32 %t52, 10 + store i32 %t53, i32* %t34_a + %t54 = load i32, i32* %t49_b + %t55 = add i32 %t54, 12 + store i32 %t55, i32* %t49_b + %t56 = load i32, i32* %t3_putch + %t57 = add i32 %t56, 11 + %t58 = load i32, i32* %t49_b + %t59 = add i32 %t57, %t58 + %t60 = load i32, i32* %t18_main + %t61 = add i32 %t59, %t60 + store i32 %t61, i32* %t3_putch + %t62 = load i32, i32* %t18_main + %t63 = load i32, i32* %t49_b + %t64 = add i32 %t62, %t63 + store i32 %t64, i32* %t18_main + %t65_main = alloca i32 + %t66 = load i32, i32* %t49_b + %t67 = add i32 %t66, 13 + store i32 %t67, i32* %t65_main + %t68 = load i32, i32* %t65_main + %t69 = add i32 %t68, 11 + store i32 %t69, i32* %t65_main + %t70 = load i32, i32* %t3_putch + %t71 = add i32 %t70, 11 + %t72 = load i32, i32* %t49_b + %t73 = add i32 %t71, %t72 + %t74 = load i32, i32* %t65_main + %t75 = add i32 %t73, %t74 + store i32 %t75, i32* %t3_putch + %t76 = load i32, i32* %t3_putch + %t77 = load i32, i32* %t18_main + %t78 = sub i32 %t76, %t77 + store i32 %t78, i32* %t3_putch + %t79 = load i32, i32* %t3_putch + %t80 = load i32, i32* %t6_b + %t81 = sub i32 %t79, %t80 + store i32 %t81, i32* %t3_putch + %t82 = load i32, i32* %t3_putch + %t83 = sub i32 %t82, 11 + store i32 %t83, i32* %t3_putch + %t84 = load i32, i32* %t3_putch + %t85 = mod i32 %t84, 77 + ret i32 %t85 +} ========== test/test_case/functional/29_break.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -3038,7 +4830,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -3050,7 +4842,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d5612a1570, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -3061,7 +4853,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -3072,7 +4864,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -3082,7 +4874,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d5612a1570, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+i [DEBUG] visitUnaryExp: sum @@ -3090,20 +4882,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d5612a1570, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -3111,7 +4903,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d56129a0c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -3125,37 +4917,83 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d5612a1570, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {inti;i=0;intsum;sum=0;while(i<100){if(i==50){break;}sum=sum+i;i=i+1;}returnsum;} [DEBUG IRGEN] visitBlockItem: inti; -[DEBUG] visitVarDef: 创建标量变量 i,初始值 0x55d5612b7f50 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 i,初始值 0x558b5a47fb40 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: i=0; [DEBUG IRGEN] visitStmt: i=0; +[DEBUG IRGEN] HandleAssignStmt: i=0; [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x55d5612b7f50 +[DEBUG] EvalExpr: success, result = 0x558b5a47fb40 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x558b5a47cf20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x558b5a47cf20, rhs = 0x558b5a47fb40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intsum; -[DEBUG] visitVarDef: 创建标量变量 sum,初始值 0x55d5612b7f50 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sum +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 sum +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 sum,初始值 0x558b5a47fb40 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: sum=0; [DEBUG IRGEN] visitStmt: sum=0; +[DEBUG IRGEN] HandleAssignStmt: sum=0; [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x55d5612b7f50 +[DEBUG] EvalExpr: success, result = 0x558b5a47fb40 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x558b5a47fe70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x558b5a47fe70, rhs = 0x558b5a47fb40 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} [DEBUG IRGEN] visitStmt: while(i<100){if(i==50){break;}sum=sum+i;i=i+1;} @@ -3172,13 +5010,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 100 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x55d561264f80 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x558b5a480490 [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {if(i==50){break;}sum=sum+i;i=i+1;} @@ -3194,13 +5031,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 50 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x55d5612649a0 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x558b5a4809a0 [DEBUG IF] Creating condbr: %t5 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {break;} @@ -3218,6 +5054,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: sum=sum+i; [DEBUG IRGEN] visitStmt: sum=sum+i; +[DEBUG IRGEN] HandleAssignStmt: sum=sum+i; [DEBUG IRGEN] EvalExpr: sum+i [DEBUG IRGEN] visitAddExp: sum+i [DEBUG IRGEN] visitAddExp: sum @@ -3225,19 +5062,27 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: sum [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: sum [DEBUG] visitLVal: sum [DEBUG IRGEN] visitMulExp: i [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i -[DEBUG] visitAddExp: left=0x55d5612ba830, right=0x55d5612ba940 -[DEBUG] EvalExpr: success, result = 0x55d5612baad0 +[DEBUG] visitAddExp: left=0x558b5a480cf0, right=0x558b5a480e00 +[DEBUG] EvalExpr: success, result = 0x558b5a480f90 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x558b5a47fe70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x558b5a47fe70, rhs = 0x558b5a480f90 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: i=i+1; [DEBUG IRGEN] visitStmt: i=i+1; +[DEBUG IRGEN] HandleAssignStmt: i=i+1; [DEBUG IRGEN] EvalExpr: i+1 [DEBUG IRGEN] visitAddExp: i+1 [DEBUG IRGEN] visitAddExp: i @@ -3245,14 +5090,22 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55d561264bf0 -[DEBUG] visitAddExp: left=0x55d5612bac50, right=0x55d561264bf0 -[DEBUG] EvalExpr: success, result = 0x55d5612bad40 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x558b5a4811e0 +[DEBUG] visitAddExp: left=0x558b5a481110, right=0x558b5a4811e0 +[DEBUG] EvalExpr: success, result = 0x558b5a481260 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x558b5a47cf20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x558b5a47cf20, rhs = 0x558b5a481260 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: merge [DEBUG WHILE] body terminated: 0 [DEBUG WHILE] Adding br to condBlock from body @@ -3271,9 +5124,50 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: sum [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: sum [DEBUG] visitLVal: sum -[DEBUG] EvalExpr: success, result = 0x55d5612bafb0 +[DEBUG] EvalExpr: success, result = 0x558b5a4814d0 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} define i32 @main() { entry: %t0_i = alloca i32 @@ -3338,7 +5232,7 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x57e86ce25080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cad00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -3347,7 +5241,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x57e86ce25850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 4 [DEBUG] visitUnaryExp: 4 @@ -3356,7 +5250,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x57e86ce26000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbc80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -3365,7 +5259,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x57e86ce26320, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbfa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -3383,14 +5277,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x57e86ce26000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbc80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x57e86ce25080, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cad00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: (b-d) [DEBUG] visitPrimaryExp: (b-d) @@ -3400,66 +5294,147 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x57e86ce25850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x57e86ce26320, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbfa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {inta,b,c,d;a=10;b=4;c=2;d=2;return(c+a)*(b-d);} [DEBUG IRGEN] visitBlockItem: inta,b,c,d; -[DEBUG] visitVarDef: 创建标量变量 a,初始值 0x57e86cdf0530 -[DEBUG] visitVarDef: 创建标量变量 b,初始值 0x57e86cdf0530 -[DEBUG] visitVarDef: 创建标量变量 c,初始值 0x57e86cdf0530 -[DEBUG] visitVarDef: 创建标量变量 d,初始值 0x57e86cdf0530 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x560cfc3e0660 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x560cfc3e0660 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 c +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 c,初始值 0x560cfc3e0660 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 d +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 无初始化值,使用0 +[DEBUG] HandleLocalVariable: 创建局部变量 d,初始值 0x560cfc3e0660 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=10; [DEBUG IRGEN] visitStmt: a=10; +[DEBUG IRGEN] HandleAssignStmt: a=10; [DEBUG IRGEN] EvalExpr: 10 [DEBUG IRGEN] visitAddExp: 10 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x57e86cdf01d0 -[DEBUG] EvalExpr: success, result = 0x57e86cdf01d0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560cfc3e0cb0 +[DEBUG] EvalExpr: success, result = 0x560cfc3e0cb0 +[DEBUG] HandleAssignStmt: assigning to a +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x560cfc3de4a0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x560cfc3de4a0, rhs = 0x560cfc3e0cb0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: b=4; [DEBUG IRGEN] visitStmt: b=4; +[DEBUG IRGEN] HandleAssignStmt: b=4; [DEBUG IRGEN] EvalExpr: 4 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x57e86cdf03c0 -[DEBUG] EvalExpr: success, result = 0x57e86cdf03c0 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560cfc3e0ee0 +[DEBUG] EvalExpr: success, result = 0x560cfc3e0ee0 +[DEBUG] HandleAssignStmt: assigning to b +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x560cfc3e07e0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x560cfc3e07e0, rhs = 0x560cfc3e0ee0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: c=2; [DEBUG IRGEN] visitStmt: c=2; +[DEBUG IRGEN] HandleAssignStmt: c=2; [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x57e86cdefbf0 -[DEBUG] EvalExpr: success, result = 0x57e86cdefbf0 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560cfc3e1040 +[DEBUG] EvalExpr: success, result = 0x560cfc3e1040 +[DEBUG] HandleAssignStmt: assigning to c +[DEBUG] HandleAssignStmt: found in storage_map_ for c, ptr = 0x560cfc3e0960 +[DEBUG] HandleAssignStmt: scalar assignment to c, ptr = 0x560cfc3e0960, rhs = 0x560cfc3e1040 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: d=2; [DEBUG IRGEN] visitStmt: d=2; +[DEBUG IRGEN] HandleAssignStmt: d=2; [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x57e86cdefbf0 -[DEBUG] EvalExpr: success, result = 0x57e86cdefbf0 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560cfc3e1040 +[DEBUG] EvalExpr: success, result = 0x560cfc3e1040 +[DEBUG] HandleAssignStmt: assigning to d +[DEBUG] HandleAssignStmt: found in storage_map_ for d, ptr = 0x560cfc3e0b50 +[DEBUG] HandleAssignStmt: scalar assignment to d, ptr = 0x560cfc3e0b50, rhs = 0x560cfc3e1040 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: return(c+a)*(b-d); [DEBUG IRGEN] visitStmt: return(c+a)*(b-d); @@ -3479,16 +5454,14 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: c [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: c [DEBUG] visitLVal: c [DEBUG IRGEN] visitMulExp: a [DEBUG IRGEN] visitPrimaryExp: a [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: a [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x57e86ce39c90, right=0x57e86ce39d10 -[DEBUG] EvalExpr: success, result = 0x57e86ce39e00 +[DEBUG] visitAddExp: left=0x560cfc3e12a0, right=0x560cfc3e1390 +[DEBUG] EvalExpr: success, result = 0x560cfc3e1480 [DEBUG IRGEN] visitPrimaryExp: (b-d) [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting parenthesized expression @@ -3499,17 +5472,57 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: b [DEBUG] visitLVal: b [DEBUG IRGEN] visitMulExp: d [DEBUG IRGEN] visitPrimaryExp: d [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: d [DEBUG] visitLVal: d -[DEBUG] visitAddExp: left=0x57e86ce39ea0, right=0x57e86ce39fb0 -[DEBUG] EvalExpr: success, result = 0x57e86ce3a0c0 -[DEBUG] EvalExpr: success, result = 0x57e86ce3a1a0 +[DEBUG] visitAddExp: left=0x560cfc3e1540, right=0x560cfc3e1650 +[DEBUG] EvalExpr: success, result = 0x560cfc3e1760 +[DEBUG] EvalExpr: success, result = 0x560cfc3e1840 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} define i32 @main() { entry: %t0_a = alloca i32 @@ -3560,55 +5573,55 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 5.5 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: RADIUS, ctx: 0x65443d9dc600 -SymbolTable::addSymbol: stored RADIUS with kind=3, const_def_ctx=0x65443d9dc600 +保存常量定义上下文: RADIUS, ctx: 0x55c563f2b280 +SymbolTable::addSymbol: stored RADIUS with kind=3, const_def_ctx=0x55c563f2b280 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f2b280 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: PI base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 03.141592653589793 [DEBUG] visitPrimaryExp: 03.141592653589793 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: PI, ctx: 0x65443d9e4bd0 -SymbolTable::addSymbol: stored PI with kind=3, const_def_ctx=0x65443d9e4bd0 +保存常量定义上下文: PI, ctx: 0x55c563f33850 +SymbolTable::addSymbol: stored PI with kind=3, const_def_ctx=0x55c563f33850 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f33850 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EPS base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 1e-6 [DEBUG] visitPrimaryExp: 1e-6 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EPS, ctx: 0x65443d9e4320 -SymbolTable::addSymbol: stored EPS with kind=3, const_def_ctx=0x65443d9e4320 +保存常量定义上下文: EPS, ctx: 0x55c563f32fa0 +SymbolTable::addSymbol: stored EPS with kind=3, const_def_ctx=0x55c563f32fa0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x65443d9e4320 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9e4320 +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55c563f32fa0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f32fa0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: PI_HEX base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0x1.921fb6p+1 [DEBUG] visitPrimaryExp: 0x1.921fb6p+1 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: PI_HEX, ctx: 0x65443d9e48f0 -SymbolTable::addSymbol: stored PI_HEX with kind=3, const_def_ctx=0x65443d9e48f0 +保存常量定义上下文: PI_HEX, ctx: 0x55c563f33570 +SymbolTable::addSymbol: stored PI_HEX with kind=3, const_def_ctx=0x55c563f33570 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x65443d9e48f0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9e48f0 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f33570 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: HEX2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0x.AP-3 [DEBUG] visitPrimaryExp: 0x.AP-3 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: HEX2, ctx: 0x65443d9eac40 -SymbolTable::addSymbol: stored HEX2 with kind=3, const_def_ctx=0x65443d9eac40 +保存常量定义上下文: HEX2, ctx: 0x55c563f398c0 +SymbolTable::addSymbol: stored HEX2 with kind=3, const_def_ctx=0x55c563f398c0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x65443d9eac40 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9eac40 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55c563f398c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f398c0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: FACT base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: -.33E+5 @@ -3616,178 +5629,178 @@ CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9eac40 [DEBUG] visitPrimaryExp: .33E+5 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: FACT, ctx: 0x65443d9ed260 -SymbolTable::addSymbol: stored FACT with kind=3, const_def_ctx=0x65443d9ed260 +保存常量定义上下文: FACT, ctx: 0x55c563f3bee0 +SymbolTable::addSymbol: stored FACT with kind=3, const_def_ctx=0x55c563f3bee0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x65443d9ed260 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9ed260 +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55c563f3bee0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3bee0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL1 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4bd0 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9dc600 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9dc600 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL1, ctx: 0x65443d9ef3b0 -SymbolTable::addSymbol: stored EVAL1 with kind=3, const_def_ctx=0x65443d9ef3b0 +保存常量定义上下文: EVAL1, ctx: 0x55c563f3e030 +SymbolTable::addSymbol: stored EVAL1 with kind=3, const_def_ctx=0x55c563f3e030 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x65443d9ef3b0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9ef3b0 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55c563f3e030 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3e030 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 [DEBUG] visitUnaryExp: PI_HEX [DEBUG] visitPrimaryExp: PI_HEX -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x65443d9e48f0 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 CheckLValue: found sym->name = PI_HEX, sym->kind = 3 绑定常量: PI_HEX -> ConstDefContext -CheckLValue 绑定变量: PI_HEX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e48f0 +CheckLValue 绑定变量: PI_HEX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33570 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9dc600 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x65443d9e48f0 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL2, ctx: 0x65443d9f01e0 -SymbolTable::addSymbol: stored EVAL2 with kind=3, const_def_ctx=0x65443d9f01e0 +保存常量定义上下文: EVAL2, ctx: 0x55c563f3ee60 +SymbolTable::addSymbol: stored EVAL2 with kind=3, const_def_ctx=0x55c563f3ee60 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x65443d9f01e0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f01e0 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3ee60 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL3 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4bd0 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9dc600 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL3, ctx: 0x65443d9f32d0 -SymbolTable::addSymbol: stored EVAL3 with kind=3, const_def_ctx=0x65443d9f32d0 +保存常量定义上下文: EVAL3, ctx: 0x55c563f41f50 +SymbolTable::addSymbol: stored EVAL3 with kind=3, const_def_ctx=0x55c563f41f50 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x65443d9f32d0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f32d0 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55c563f41f50 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f41f50 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: CONV1 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 233 [DEBUG] visitPrimaryExp: 233 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: CONV1, ctx: 0x65443d9f7590 -SymbolTable::addSymbol: stored CONV1 with kind=3, const_def_ctx=0x65443d9f7590 +保存常量定义上下文: CONV1, ctx: 0x55c563f46210 +SymbolTable::addSymbol: stored CONV1 with kind=3, const_def_ctx=0x55c563f46210 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x65443d9f7590 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f7590 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55c563f46210 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f46210 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: CONV2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0xfff [DEBUG] visitPrimaryExp: 0xfff [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: CONV2, ctx: 0x65443d9f7d20 -SymbolTable::addSymbol: stored CONV2 with kind=3, const_def_ctx=0x65443d9f7d20 +保存常量定义上下文: CONV2, ctx: 0x55c563f469a0 +SymbolTable::addSymbol: stored CONV2 with kind=3, const_def_ctx=0x55c563f469a0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x65443d9f7d20 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f7d20 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55c563f469a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f469a0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: MAX base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 1e9 [DEBUG] visitPrimaryExp: 1e9 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: MAX, ctx: 0x65443d9f9290 -SymbolTable::addSymbol: stored MAX with kind=3, const_def_ctx=0x65443d9f9290 +保存常量定义上下文: MAX, ctx: 0x55c563f47f10 +SymbolTable::addSymbol: stored MAX with kind=3, const_def_ctx=0x55c563f47f10 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x65443d9f9290 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f9290 +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55c563f47f10 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f47f10 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: TWO base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 2.9 [DEBUG] visitPrimaryExp: 2.9 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: TWO, ctx: 0x65443d9f9ae0 -SymbolTable::addSymbol: stored TWO with kind=3, const_def_ctx=0x65443d9f9ae0 +保存常量定义上下文: TWO, ctx: 0x55c563f48760 +SymbolTable::addSymbol: stored TWO with kind=3, const_def_ctx=0x55c563f48760 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x65443d9f9ae0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9f9ae0 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f48760 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: THREE base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 3.2 [DEBUG] visitPrimaryExp: 3.2 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: THREE, ctx: 0x65443d9fa1b0 -SymbolTable::addSymbol: stored THREE with kind=3, const_def_ctx=0x65443d9fa1b0 +保存常量定义上下文: THREE, ctx: 0x55c563f48e30 +SymbolTable::addSymbol: stored THREE with kind=3, const_def_ctx=0x55c563f48e30 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x65443d9fa1b0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9fa1b0 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f48e30 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: FIVE base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: TWO [DEBUG] visitPrimaryExp: TWO -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x65443d9f9ae0 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 CheckLValue: found sym->name = TWO, sym->kind = 3 绑定常量: TWO -> ConstDefContext -CheckLValue 绑定变量: TWO, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f9ae0 +CheckLValue 绑定变量: TWO, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f48760 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: THREE [DEBUG] visitPrimaryExp: THREE -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x65443d9fa1b0 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 CheckLValue: found sym->name = THREE, sym->kind = 3 绑定常量: THREE -> ConstDefContext -CheckLValue 绑定变量: THREE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9fa1b0 +CheckLValue 绑定变量: THREE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f48e30 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x65443d9f9ae0 -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x65443d9fa1b0 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: FIVE, ctx: 0x65443d9fa990 -SymbolTable::addSymbol: stored FIVE with kind=3, const_def_ctx=0x65443d9fa990 +保存常量定义上下文: FIVE, ctx: 0x55c563f49610 +SymbolTable::addSymbol: stored FIVE with kind=3, const_def_ctx=0x55c563f49610 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x65443d9fa990 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x65443d9fa990 +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55c563f49610 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f49610 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: float_abs 返回类型: float SymbolTable::addSymbol: stored x with kind=2, const_def_ctx=0 @@ -3840,10 +5853,10 @@ SymbolTable::addSymbol: stored radius with kind=2, const_def_ctx=0 [DEBUG] CheckExp: PI*radius*radius+(radius*radius)*PI [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4bd0 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: radius [DEBUG] visitPrimaryExp: radius @@ -3874,10 +5887,10 @@ CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_ dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4bd0 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -3910,10 +5923,10 @@ dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] visitUnaryExp: EPS [DEBUG] visitPrimaryExp: EPS -SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x65443d9e4320 +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55c563f32fa0 CheckLValue: found sym->name = EPS, sym->kind = 3 绑定常量: EPS -> ConstDefContext -CheckLValue 绑定变量: EPS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4320 +CheckLValue 绑定变量: EPS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f32fa0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Return ExpStmt @@ -4109,18 +6122,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: HEX2 [DEBUG] visitUnaryExp: HEX2 [DEBUG] visitPrimaryExp: HEX2 -SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x65443d9eac40 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55c563f398c0 CheckLValue: found sym->name = HEX2, sym->kind = 3 绑定常量: HEX2 -> ConstDefContext -CheckLValue 绑定变量: HEX2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9eac40 +CheckLValue 绑定变量: HEX2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f398c0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: FACT [DEBUG] visitUnaryExp: FACT [DEBUG] visitPrimaryExp: FACT -SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x65443d9ed260 +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55c563f3bee0 CheckLValue: found sym->name = FACT, sym->kind = 3 绑定常量: FACT -> ConstDefContext -CheckLValue 绑定变量: FACT, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9ed260 +CheckLValue 绑定变量: FACT, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3bee0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -4141,18 +6154,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: EVAL1 [DEBUG] visitUnaryExp: EVAL1 [DEBUG] visitPrimaryExp: EVAL1 -SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x65443d9ef3b0 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55c563f3e030 CheckLValue: found sym->name = EVAL1, sym->kind = 3 绑定常量: EVAL1 -> ConstDefContext -CheckLValue 绑定变量: EVAL1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9ef3b0 +CheckLValue 绑定变量: EVAL1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3e030 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: EVAL2 [DEBUG] visitUnaryExp: EVAL2 [DEBUG] visitPrimaryExp: EVAL2 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x65443d9f01e0 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 CheckLValue: found sym->name = EVAL2, sym->kind = 3 绑定常量: EVAL2 -> ConstDefContext -CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f01e0 +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3ee60 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -4173,18 +6186,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: EVAL2 [DEBUG] visitUnaryExp: EVAL2 [DEBUG] visitPrimaryExp: EVAL2 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x65443d9f01e0 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 CheckLValue: found sym->name = EVAL2, sym->kind = 3 绑定常量: EVAL2 -> ConstDefContext -CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f01e0 +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3ee60 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: EVAL3 [DEBUG] visitUnaryExp: EVAL3 [DEBUG] visitPrimaryExp: EVAL3 -SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x65443d9f32d0 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55c563f41f50 CheckLValue: found sym->name = EVAL3, sym->kind = 3 绑定常量: EVAL3 -> ConstDefContext -CheckLValue 绑定变量: EVAL3, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f32d0 +CheckLValue 绑定变量: EVAL3, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f41f50 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -4211,10 +6224,10 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: RADIUS [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x65443d9dc600 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9dc600 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 [DEBUG] CheckExp: circle_area(FIVE) @@ -4226,10 +6239,10 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: FIVE [DEBUG] visitUnaryExp: FIVE [DEBUG] visitPrimaryExp: FIVE -SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x65443d9fa990 +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55c563f49610 CheckLValue: found sym->name = FIVE, sym->kind = 3 绑定常量: FIVE -> ConstDefContext -CheckLValue 绑定变量: FIVE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9fa990 +CheckLValue 绑定变量: FIVE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f49610 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 @@ -4251,18 +6264,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: CONV1 [DEBUG] visitUnaryExp: CONV1 [DEBUG] visitPrimaryExp: CONV1 -SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x65443d9f7590 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55c563f46210 CheckLValue: found sym->name = CONV1, sym->kind = 3 绑定常量: CONV1 -> ConstDefContext -CheckLValue 绑定变量: CONV1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f7590 +CheckLValue 绑定变量: CONV1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f46210 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: CONV2 [DEBUG] visitUnaryExp: CONV2 [DEBUG] visitPrimaryExp: CONV2 -SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x65443d9f7d20 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55c563f469a0 CheckLValue: found sym->name = CONV2, sym->kind = 3 绑定常量: CONV2 -> ConstDefContext -CheckLValue 绑定变量: CONV2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f7d20 +CheckLValue 绑定变量: CONV2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f469a0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -4351,7 +6364,7 @@ SymbolTable::lookup: found getfarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x65443da36e00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -4363,14 +6376,14 @@ SymbolTable::addSymbol: stored len with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x65443da35ef0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: MAX [DEBUG] visitPrimaryExp: MAX -SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x65443d9f9290 +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55c563f47f10 CheckLValue: found sym->name = MAX, sym->kind = 3 绑定常量: MAX -> ConstDefContext -CheckLValue 绑定变量: MAX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9f9290 +CheckLValue 绑定变量: MAX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f47f10 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: input base_type: float is_array: 0 dim_count: 0 @@ -4385,24 +6398,24 @@ SymbolTable::addSymbol: stored input with kind=0, const_def_ctx=0 [DEBUG] CheckExp: PI*input*input [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x65443d9e4bd0 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x65443d9e4bd0 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x65443da3d130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x65443da3d130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 SymbolTable::addSymbol: stored area with kind=0, const_def_ctx=0 [DEBUG] 符号添加完成: area type_kind: 2 is_array: 0 @@ -4419,7 +6432,7 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x65443da3d130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 SymbolTable::addSymbol: stored area_trunc with kind=0, const_def_ctx=0 @@ -4428,7 +6441,7 @@ SymbolTable::addSymbol: stored area_trunc with kind=0, const_def_ctx=0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x65443da36e00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: p [DEBUG] visitUnaryExp: p @@ -4436,7 +6449,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x65443da364b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: arr[p]+input @@ -4445,7 +6458,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x65443da36e00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: p [DEBUG] visitUnaryExp: p @@ -4453,7 +6466,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x65443da364b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: input @@ -4461,7 +6474,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x65443da3d130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: putfloat(area) @@ -4476,7 +6489,7 @@ SymbolTable::lookup: found putfloat in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found area in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = area, sym->kind = 0 绑定变量: area -> VarDefContext -CheckLValue 绑定变量: area, sym->kind: 0, sym->var_def_ctx: 0x65443da3db60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: area, sym->kind: 0, sym->var_def_ctx: 0x55c563f8c7e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] visitStmt: ExpStmt @@ -4503,7 +6516,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found area_trunc in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = area_trunc, sym->kind = 0 绑定变量: area_trunc -> VarDefContext -CheckLValue 绑定变量: area_trunc, sym->kind: 0, sym->var_def_ctx: 0x65443da3e9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: area_trunc, sym->kind: 0, sym->var_def_ctx: 0x55c563f8d640, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -4521,7 +6534,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x65443da35ef0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i*--1e1 [DEBUG] visitUnaryExp: i @@ -4529,7 +6542,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x65443da35ef0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: --1e1 [DEBUG] visitUnaryExp: -1e1 @@ -4539,7 +6552,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x65443da364b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: p+1 [DEBUG] visitUnaryExp: p @@ -4547,7 +6560,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x65443da364b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -4564,7 +6577,7 @@ SymbolTable::lookup: found putfarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x65443da39890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55c563f88510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: arr [DEBUG] visitUnaryExp: arr @@ -4572,7 +6585,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x65443da36e00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -4587,7 +6600,11 @@ dim_count: 1, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [error] [irgen] float常量暂未实现 ========== test/test_case/functional/simple_add.sy ========== @@ -4627,40 +6644,72 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5d4016d0d420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55df9f9d00a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5d4016d114b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df9f9d4130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {inta=1;intb=2;returna+b;} [DEBUG IRGEN] visitBlockItem: inta=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 a +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 1 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5d4016d18980 -[DEBUG] EvalExpr: success, result = 0x5d4016d18980 -[DEBUG] visitVarDef: 创建标量变量 a,初始值 0x5d4016d18980 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55df9f9db600 +[DEBUG] EvalExpr: success, result = 0x55df9f9db600 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x55df9f9db600 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intb=2; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 b +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5d4016d176b0 -[DEBUG] EvalExpr: success, result = 0x5d4016d176b0 -[DEBUG] visitVarDef: 创建标量变量 b,初始值 0x5d4016d176b0 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55df9f9da330 +[DEBUG] EvalExpr: success, result = 0x55df9f9da330 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55df9f9da330 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: returna+b; [DEBUG IRGEN] visitStmt: returna+b; @@ -4673,16 +6722,56 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: a [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: a [DEBUG] visitLVal: a [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: b [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x5d4016d197b0, right=0x5d4016cd8860 -[DEBUG] EvalExpr: success, result = 0x5d4016cd7700 +[DEBUG] visitAddExp: left=0x55df9f9e0200, right=0x55df9f9e0310 +[DEBUG] EvalExpr: success, result = 0x55df9f9e03d0 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} define i32 @main() { entry: %t0_a = alloca i32 @@ -4715,30 +6804,30 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 1024 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x5c8d87b61870 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x5c8d87b61870 +保存常量定义上下文: N, ctx: 0x55cd73dd64f0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55cd73dd64f0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cd73dd64f0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -4750,21 +6839,21 @@ SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -4776,21 +6865,21 @@ SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5c8d87b61870 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -4802,13 +6891,13 @@ SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 [DEBUG] 进入函数: mm 返回类型: void SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 [DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 [DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 1024 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 SymbolTable::addSymbol: stored B with kind=2, const_def_ctx=0 [DEBUG] 添加参数: B type_kind: 3 is_array: 1 dims: 0 1024 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5c8d87b61870 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 SymbolTable::addSymbol: stored C with kind=2, const_def_ctx=0 [DEBUG] 添加参数: C type_kind: 3 is_array: 1 dims: 0 1024 [DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 @@ -4824,7 +6913,7 @@ SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4833,7 +6922,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4844,7 +6933,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -4857,7 +6946,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4868,7 +6957,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -4889,7 +6978,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -4897,7 +6986,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -4907,7 +6996,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -4915,7 +7004,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -4923,7 +7012,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -4931,7 +7020,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -4939,7 +7028,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4948,7 +7037,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4957,7 +7046,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4968,7 +7057,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -4981,7 +7070,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4992,7 +7081,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -5015,7 +7104,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -5023,7 +7112,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 0 @@ -5033,7 +7122,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5041,7 +7130,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5050,7 +7139,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5061,7 +7150,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -5082,7 +7171,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5090,7 +7179,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: C[i][j]+A[i][k]*B[k][j] @@ -5107,7 +7196,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5115,7 +7204,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][k] @@ -5131,7 +7220,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -5139,7 +7228,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: B[k][j] @@ -5155,7 +7244,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5163,14 +7252,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -5178,7 +7267,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b68fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5186,7 +7275,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5194,7 +7283,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b688d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5202,7 +7291,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -5210,7 +7299,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b6db40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5234,7 +7323,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5243,7 +7332,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5254,21 +7343,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5279,21 +7368,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9aec0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -5301,7 +7390,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5309,7 +7398,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -5321,7 +7410,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -5329,7 +7418,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5337,7 +7426,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5345,7 +7434,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5353,7 +7442,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5362,7 +7451,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5373,21 +7462,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5398,21 +7487,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9c070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -5420,7 +7509,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5428,7 +7517,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -5440,7 +7529,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -5448,7 +7537,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5456,7 +7545,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5464,7 +7553,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5478,7 +7567,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5489,7 +7578,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -5507,7 +7596,7 @@ SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -5515,7 +7604,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9aec0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -5524,7 +7613,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9c070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -5533,7 +7622,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9cfc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55cd73e11c40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -5553,7 +7642,7 @@ SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -5561,7 +7650,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9aec0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -5570,7 +7659,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9cfc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55cd73e11c40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -5579,7 +7668,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9c070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -5590,7 +7679,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5598,7 +7687,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5612,7 +7701,7 @@ SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5623,21 +7712,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5648,21 +7737,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9ea20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5c8d87bb5930, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+B[i][j] [DEBUG] visitUnaryExp: ans @@ -5670,14 +7759,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5c8d87bb5930, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: B[i][j] [DEBUG] visitPrimaryExp: B[i][j] SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9c070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -5685,7 +7774,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -5693,14 +7782,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -5708,7 +7797,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9fba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5716,7 +7805,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5724,7 +7813,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5c8d87b9f970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5747,7 +7836,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5c8d87bb5930, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -5771,16 +7860,29 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant N [DEBUG] visitConstDef: scalar constant N -[DEBUG IRGEN] visitAddExp: 1024 -[DEBUG IRGEN] visitMulExp: 1024 -[DEBUG IRGEN] visitPrimaryExp: 1024 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1024 created as 0x5c8d87bc9a10 -[DEBUG] visitConstDef: scalar constant N with value 0x5c8d87bc9a10 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant N = 1024 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/02_mv3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -5805,30 +7907,30 @@ SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 [DEBUG] visitPrimaryExp: 2010 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x5b3ef7c8e9a0 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x5b3ef7c8e9a0 +保存常量定义上下文: N, ctx: 0x555bc566b620 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x555bc566b620 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x555bc566b620 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b3ef7c8e9a0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 [DEBUG] dim[0] = 2010 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b3ef7c8e9a0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 [DEBUG] dim[1] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -5840,12 +7942,12 @@ SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b3ef7c8e9a0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 [DEBUG] dim[0] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -5857,12 +7959,12 @@ SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5b3ef7c8e9a0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 [DEBUG] dim[0] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -5874,7 +7976,7 @@ SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 [DEBUG] 进入函数: mv 返回类型: void SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 [DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x5b3ef7c8e9a0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 [DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 2010 SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 @@ -5891,7 +7993,7 @@ SymbolTable::addSymbol: stored y with kind=0, const_def_ctx=0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c98de0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5900,7 +8002,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c91ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 11 [DEBUG] visitUnaryExp: 11 @@ -5915,7 +8017,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5926,7 +8028,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -5947,7 +8049,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -5957,7 +8059,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -5965,7 +8067,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -5973,7 +8075,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5982,7 +8084,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -5993,7 +8095,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -6006,7 +8108,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6017,7 +8119,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -6040,7 +8142,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -6048,7 +8150,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 0 @@ -6058,7 +8160,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c91ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: x*b[i]+b[j] [DEBUG] visitUnaryExp: x @@ -6066,7 +8168,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c91ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b[i] [DEBUG] visitPrimaryExp: b[i] @@ -6081,7 +8183,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[j] @@ -6097,14 +8199,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c98de0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y-x [DEBUG] visitUnaryExp: y @@ -6112,14 +8214,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c98de0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: x [DEBUG] visitPrimaryExp: x SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7c91ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt @@ -6134,7 +8236,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: res[i]+A[i][j]*b[j] @@ -6151,7 +8253,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][j] @@ -6167,7 +8269,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -6175,7 +8277,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[j] @@ -6191,14 +8293,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -6206,7 +8308,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6214,7 +8316,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6222,7 +8324,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7ca0ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6246,7 +8348,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6257,21 +8359,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc7500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6282,21 +8384,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc7500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cbb770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -6304,7 +8406,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -6312,7 +8414,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc7500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -6324,7 +8426,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc7500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -6332,7 +8434,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc7500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6340,7 +8442,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6348,7 +8450,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6356,7 +8458,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6367,21 +8469,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cb1070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -6389,7 +8491,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -6401,7 +8503,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6409,7 +8511,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6423,7 +8525,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6434,7 +8536,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -6452,7 +8554,7 @@ SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -6460,7 +8562,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cbb770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -6469,7 +8571,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cb1070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -6478,7 +8580,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc5550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -6498,7 +8600,7 @@ SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -6506,7 +8608,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cbb770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -6515,7 +8617,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc5550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -6524,7 +8626,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cb1070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -6535,7 +8637,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6543,7 +8645,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc72d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6566,7 +8668,7 @@ SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc63e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: C [DEBUG] visitUnaryExp: C @@ -6574,7 +8676,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x5b3ef7cc5550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -6589,8 +8691,45 @@ dim_count: 1, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: x +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 x +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: x +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 x +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] visitConstDef: processing constant N +[DEBUG] visitConstDef: scalar constant N +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant N = 2010 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 4040100 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/03_sort1.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -6614,11 +8753,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 16 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: base, ctx: 0x633e62044bb0 -SymbolTable::addSymbol: stored base with kind=3, const_def_ctx=0x633e62044bb0 +保存常量定义上下文: base, ctx: 0x5575a082e830 +SymbolTable::addSymbol: stored base with kind=3, const_def_ctx=0x5575a082e830 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5575a082e830 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: 30000010 @@ -6657,7 +8796,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62051bd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -6680,7 +8819,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62051bd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: ret @@ -6688,13 +8827,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x633e62050af0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x633e62050af0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: arr[i] [DEBUG] visitUnaryExp: arr[i] @@ -6710,14 +8849,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62051bd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62051bd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6725,7 +8864,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62051bd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6739,7 +8878,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x633e62050af0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 getMaxNum has_return: 1 return_type_is_void: 0 @@ -6766,7 +8905,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62069e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: pos [DEBUG] visitPrimaryExp: pos @@ -6789,16 +8928,16 @@ CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62069e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -6806,7 +8945,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e62069e20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6823,10 +8962,10 @@ CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 getNumPos has_return: 1 return_type_is_void: 0 @@ -6842,12 +8981,12 @@ SymbolTable::addSymbol: stored r with kind=2, const_def_ctx=0 [DEBUG] CheckVarDef: head base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6859,12 +8998,12 @@ SymbolTable::addSymbol: stored head with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: tail base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6876,12 +9015,12 @@ SymbolTable::addSymbol: stored tail with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: cnt base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6936,7 +9075,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: r [DEBUG] visitPrimaryExp: r @@ -6949,7 +9088,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(a[i],bitround) [DEBUG] visitUnaryExp: getNumPos(a[i],bitround) @@ -6971,7 +9110,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: bitround @@ -6990,7 +9129,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(a[i],bitround) [DEBUG] visitUnaryExp: getNumPos(a[i],bitround) @@ -7012,7 +9151,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: bitround @@ -7031,7 +9170,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7039,7 +9178,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7047,7 +9186,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7064,7 +9203,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7082,7 +9221,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7092,7 +9231,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -7103,21 +9242,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7125,7 +9264,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i-1] @@ -7134,7 +9273,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -7142,7 +9281,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7151,7 +9290,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7159,7 +9298,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+cnt[i] @@ -7168,7 +9307,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7176,7 +9315,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: cnt[i] @@ -7184,7 +9323,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7192,14 +9331,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7207,7 +9346,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7215,7 +9354,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7226,14 +9365,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: While @@ -7242,7 +9381,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7250,7 +9389,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: tail[i] @@ -7258,7 +9397,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7266,7 +9405,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Block @@ -7285,7 +9424,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7293,7 +9432,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 完全索引,返回元素类型 @@ -7311,7 +9450,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x633e62095250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -7327,7 +9466,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: t base_type: int is_array: 0 dim_count: 0 @@ -7337,7 +9476,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x633e62095250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 SymbolTable::addSymbol: stored t with kind=0, const_def_ctx=0 [DEBUG] 符号添加完成: t type_kind: 1 is_array: 0 @@ -7345,7 +9484,7 @@ SymbolTable::addSymbol: stored t with kind=0, const_def_ctx=0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x633e62095250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a[head[getNumPos(t,bitround)]] [DEBUG] visitUnaryExp: a[head[getNumPos(t,bitround)]] @@ -7361,7 +9500,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -7375,7 +9514,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x633e62098b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -7400,7 +9539,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -7414,7 +9553,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x633e62098b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -7433,13 +9572,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x633e62098b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -7453,7 +9592,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x633e62098b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -7471,7 +9610,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -7485,7 +9624,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x633e62098b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -7511,7 +9650,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7519,7 +9658,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 完全索引,返回元素类型 @@ -7529,13 +9668,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x633e62095250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7543,7 +9682,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+1 @@ -7552,7 +9691,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7560,7 +9699,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -7569,7 +9708,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7577,7 +9716,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e6207a1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7596,7 +9735,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7613,7 +9752,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7631,7 +9770,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7641,7 +9780,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7652,14 +9791,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x633e62044bb0 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x633e62044bb0 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -7668,7 +9807,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -7677,7 +9816,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7685,7 +9824,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i-1] @@ -7694,7 +9833,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -7702,7 +9841,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7711,7 +9850,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7719,7 +9858,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+cnt[i] @@ -7728,7 +9867,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7736,7 +9875,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: cnt[i] @@ -7744,7 +9883,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x633e62073d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7752,7 +9891,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: ExpStmt @@ -7786,7 +9925,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x633e62071a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7794,7 +9933,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i] @@ -7803,7 +9942,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x633e62072ff0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7811,7 +9950,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -7822,7 +9961,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7830,7 +9969,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620abe70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7854,7 +9993,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x633e6208f660, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -7882,7 +10021,7 @@ SymbolTable::lookup: found radixSort in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x633e6208f660, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -7894,7 +10033,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x633e620ba620, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5575a08a42d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 3 形参类型 3 @@ -7912,21 +10051,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x633e620ba620, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5575a08a42d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+i*(a[i]%(2+i)) [DEBUG] visitUnaryExp: ans @@ -7934,14 +10073,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: (a[i]%(2+i)) [DEBUG] visitPrimaryExp: (a[i]%(2+i)) @@ -7951,7 +10090,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x633e6208f660, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7959,7 +10098,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: (2+i) @@ -7972,13 +10111,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7986,7 +10125,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x633e620bd2b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7996,7 +10135,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -8004,7 +10143,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -ans [DEBUG] visitUnaryExp: -ans @@ -8013,7 +10152,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: stoptime() @@ -8034,7 +10173,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x633e620b9ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -8058,16 +10197,28 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant base [DEBUG] visitConstDef: scalar constant base -[DEBUG IRGEN] visitAddExp: 16 -[DEBUG IRGEN] visitMulExp: 16 -[DEBUG IRGEN] visitPrimaryExp: 16 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x633e620c9e20 -[DEBUG] visitConstDef: scalar constant base with value 0x633e620c9e20 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant base = 16 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 30000010 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/2025-MYO-20.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -8154,14 +10305,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -8170,14 +10321,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -8195,7 +10346,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8203,7 +10354,7 @@ dim_count: 2, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 部分索引,返回指针类型 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -8211,7 +10362,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8219,7 +10370,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8227,7 +10378,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8238,14 +10389,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -8254,14 +10405,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -8279,7 +10430,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x60dea5ece060, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8287,7 +10438,7 @@ dim_count: 2, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 部分索引,返回指针类型 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -8295,7 +10446,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8303,7 +10454,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8317,7 +10468,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8328,14 +10479,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -8344,14 +10495,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -8368,21 +10519,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef2ed0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8390,7 +10541,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8398,7 +10549,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef2ed0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: -1 @@ -8409,7 +10560,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef2ed0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8417,7 +10568,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef2ed0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8425,7 +10576,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8433,7 +10584,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8441,7 +10592,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8452,14 +10603,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -8468,14 +10619,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -8492,21 +10643,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5efd3a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x60dea5ece060, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8514,7 +10665,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8522,7 +10673,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5efd3a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: -1 @@ -8533,7 +10684,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5efd3a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8541,7 +10692,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5efd3a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8549,7 +10700,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8557,7 +10708,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8565,7 +10716,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8576,14 +10727,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -8598,21 +10749,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x60dea5ecbe50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8620,7 +10771,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8628,7 +10779,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: A[i][j]*2+B[i][j]*3 @@ -8637,7 +10788,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8645,7 +10796,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8653,7 +10804,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 2 @@ -8663,7 +10814,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x60dea5ece060, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8671,7 +10822,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8679,7 +10830,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 3 @@ -8688,7 +10839,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8696,7 +10847,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f02e50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8704,7 +10855,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8712,7 +10863,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8720,7 +10871,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8731,14 +10882,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -8753,14 +10904,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f0bc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: val base_type: int is_array: 0 dim_count: 0 @@ -8770,7 +10921,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x60dea5ecbe50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8778,7 +10929,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8786,7 +10937,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f0bc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored val with kind=0, const_def_ctx=0 @@ -8795,7 +10946,7 @@ SymbolTable::addSymbol: stored val with kind=0, const_def_ctx=0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: val*val+7 [DEBUG] visitUnaryExp: val @@ -8803,14 +10954,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: val [DEBUG] visitPrimaryExp: val SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -8818,7 +10969,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: val/3 [DEBUG] visitUnaryExp: val @@ -8826,7 +10977,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -8834,7 +10985,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x60dea5ecbe50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8842,7 +10993,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8850,7 +11001,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f0bc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: val @@ -8859,13 +11010,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x60dea5ef9650, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f0bc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8873,7 +11024,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f0bc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8881,7 +11032,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8889,7 +11040,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8897,7 +11048,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8908,14 +11059,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -8930,14 +11081,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f17170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 @@ -8958,21 +11109,21 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x60dea5f18c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x60dea5f195e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+C[i][k]*A[k][j] [DEBUG] visitUnaryExp: sum @@ -8980,14 +11131,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x60dea5f195e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: C[i][k] [DEBUG] visitPrimaryExp: C[i][k] SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x60dea5ecbe50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8995,7 +11146,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -9003,7 +11154,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x60dea5f18c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[k][j] @@ -9011,7 +11162,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -9019,7 +11170,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x60dea5f18c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -9027,14 +11178,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f17170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x60dea5f18c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -9042,7 +11193,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x60dea5f18c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9050,7 +11201,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9058,7 +11209,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -9066,7 +11217,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f17170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -9075,13 +11226,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x60dea5f195e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f17170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -9089,7 +11240,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f17170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9097,7 +11248,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9105,7 +11256,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9127,21 +11278,21 @@ SymbolTable::addSymbol: stored r with kind=0, const_def_ctx=0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x60dea5f21640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: R [DEBUG] visitPrimaryExp: R SymbolTable::lookup: found R in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = R, sym->kind = 0 绑定变量: R -> VarDefContext -CheckLValue 绑定变量: R, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed5830, sym->const_def_ctx: 0 +CheckLValue 绑定变量: R, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6af4b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9152,14 +11303,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -9174,21 +11325,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f244c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed2840, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x60dea5f20a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: total+A[i][j]*A[i][j] [DEBUG] visitUnaryExp: total @@ -9196,14 +11347,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x60dea5f20a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: A[i][j] [DEBUG] visitPrimaryExp: A[i][j] SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9211,7 +11362,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -9219,7 +11370,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f244c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][j] @@ -9227,7 +11378,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x60dea5ec8720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9235,7 +11386,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -9243,14 +11394,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f244c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f244c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -9258,7 +11409,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x60dea5f244c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9266,7 +11417,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9274,7 +11425,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x60dea5ed6160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9282,7 +11433,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x60dea5f21640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: r+1 [DEBUG] visitUnaryExp: r @@ -9290,7 +11441,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x60dea5f21640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9313,7 +11464,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x60dea5f20a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -9337,20 +11488,21 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[DEBUG IRGEN] visitAddExp: 1024 -[DEBUG IRGEN] visitMulExp: 1024 -[DEBUG IRGEN] visitPrimaryExp: 1024 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1024 created as 0x60dea5f2ef60 -[DEBUG] TryEvaluateConstInt: got IR value 0x60dea5f2ef60 -[DEBUG IRGEN] visitAddExp: 1024 -[DEBUG IRGEN] visitMulExp: 1024 -[DEBUG IRGEN] visitPrimaryExp: 1024 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1024 created as 0x60dea5f2ef60 -[DEBUG] TryEvaluateConstInt: got IR value 0x60dea5f2ef60 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: A +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 A +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/fft0.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -9375,11 +11527,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 998244353 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: mod, ctx: 0x6324aa2be060 -SymbolTable::addSymbol: stored mod with kind=3, const_def_ctx=0x6324aa2be060 +保存常量定义上下文: mod, ctx: 0x5650e092ece0 +SymbolTable::addSymbol: stored mod with kind=3, const_def_ctx=0x5650e092ece0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5650e092ece0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 @@ -9389,21 +11541,21 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 [DEBUG] visitPrimaryExp: 2097152 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: maxlen, ctx: 0x6324aa2ee900 -SymbolTable::addSymbol: stored maxlen with kind=3, const_def_ctx=0x6324aa2ee900 +保存常量定义上下文: maxlen, ctx: 0x5650e095f5a0 +SymbolTable::addSymbol: stored maxlen with kind=3, const_def_ctx=0x5650e095f5a0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5650e095f5a0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: temp base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2ee900 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9415,12 +11567,12 @@ SymbolTable::addSymbol: stored temp with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2ee900 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9432,12 +11584,12 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2ee900 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9449,12 +11601,12 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: c base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2ee900 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x6324aa2ee900 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9507,10 +11659,10 @@ CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] CheckVarDef: cur base_type: int is_array: 0 dim_count: 0 @@ -9544,7 +11696,7 @@ SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2d9ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: (cur+cur)%mod [DEBUG] visitUnaryExp: (cur+cur) @@ -9555,21 +11707,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2d9ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: cur [DEBUG] visitPrimaryExp: cur SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2d9ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: If [DEBUG] visitUnaryExp: b @@ -9595,7 +11747,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2d9ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a @@ -9605,10 +11757,10 @@ CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] visitStmt: Return ExpStmt @@ -9621,7 +11773,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2d9ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 multiply has_return: 1 return_type_is_void: 0 @@ -9678,7 +11830,7 @@ SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2e8f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: multiply(cur,cur) [DEBUG] visitUnaryExp: multiply(cur,cur) @@ -9692,7 +11844,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2e8f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: cur [DEBUG] visitUnaryExp: cur @@ -9700,7 +11852,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2e8f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -9731,7 +11883,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2e8f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a [DEBUG] visitUnaryExp: a @@ -9753,7 +11905,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x6324aa2e8f20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 power has_return: 1 return_type_is_void: 0 @@ -9778,7 +11930,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len @@ -9805,7 +11957,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: src[i] @@ -9822,14 +11974,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9837,7 +11989,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9851,7 +12003,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f5110, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 memmove has_return: 1 return_type_is_void: 0 @@ -9893,7 +12045,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -9908,7 +12060,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -9918,7 +12070,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x6324aa2eeb30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i/2 [DEBUG] visitUnaryExp: i @@ -9926,7 +12078,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -9945,7 +12097,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: begin_pos [DEBUG] visitPrimaryExp: begin_pos @@ -9958,7 +12110,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x6324aa2eeb30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: n/2+i/2 [DEBUG] visitUnaryExp: n @@ -9974,7 +12126,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -9993,7 +12145,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: begin_pos [DEBUG] visitPrimaryExp: begin_pos @@ -10006,7 +12158,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10014,7 +12166,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10047,7 +12199,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x6324aa2eeb30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -10189,7 +12341,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10206,7 +12358,7 @@ SymbolTable::addSymbol: stored wn with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -10238,7 +12390,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 @@ -10264,7 +12416,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -10295,7 +12447,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: (x+multiply(wn,y))%mod @@ -10307,7 +12459,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x6324aa3181e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5650e0988e80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: multiply(wn,y) [DEBUG] 函数调用: multiply @@ -10320,7 +12472,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x6324aa316600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y [DEBUG] visitUnaryExp: y @@ -10328,16 +12480,16 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x6324aa319590, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5650e098a230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 @@ -10357,7 +12509,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -10377,7 +12529,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x6324aa3181e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5650e0988e80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: multiply(wn,y) [DEBUG] 函数调用: multiply @@ -10390,7 +12542,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x6324aa316600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y [DEBUG] visitUnaryExp: y @@ -10398,29 +12550,29 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x6324aa319590, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5650e098a230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x6324aa316600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: multiply(wn,w) [DEBUG] visitUnaryExp: multiply(wn,w) @@ -10434,7 +12586,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x6324aa316600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: w [DEBUG] visitUnaryExp: w @@ -10449,7 +12601,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10457,7 +12609,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa302c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10484,7 +12636,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -10503,7 +12655,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f1c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -10519,7 +12671,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -10530,21 +12682,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x6324aa323810, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5650e09944b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x6324aa3246e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5650e0995380, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10553,7 +12705,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: d*2 [DEBUG] visitUnaryExp: d @@ -10561,7 +12713,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10578,7 +12730,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -10590,7 +12742,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,(mod-1)/d) [DEBUG] visitUnaryExp: power(3,(mod-1)/d) @@ -10607,10 +12759,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10619,7 +12771,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -10640,7 +12792,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f1c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -10652,7 +12804,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,(mod-1)/d) [DEBUG] visitUnaryExp: power(3,(mod-1)/d) @@ -10669,10 +12821,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10681,7 +12833,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -10701,21 +12853,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10723,7 +12875,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: multiply(a[i],b[i]) @@ -10738,7 +12890,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10746,7 +12898,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: b[i] @@ -10755,7 +12907,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f1c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10763,7 +12915,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -10772,7 +12924,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10780,7 +12932,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10797,7 +12949,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -10809,7 +12961,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,mod-1-(mod-1)/d) [DEBUG] visitUnaryExp: power(3,mod-1-(mod-1)/d) @@ -10823,10 +12975,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1-(mod-1)/d [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10835,10 +12987,10 @@ dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10847,7 +12999,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -10859,7 +13011,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10870,21 +13022,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10892,7 +13044,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: multiply(a[i],power(d,mod-2)) @@ -10907,7 +13059,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10915,7 +13067,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: power(d,mod-2) @@ -10930,15 +13082,15 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x6324aa2c3730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: mod-2 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x6324aa2be060 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x6324aa2be060 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10950,7 +13102,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10958,7 +13110,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x6324aa32f150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10981,14 +13133,14 @@ SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x6324aa323810, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5650e09944b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x6324aa3246e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5650e0995380, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10998,7 +13150,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x6324aa2f13a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -11013,16 +13165,52 @@ dim_count: 1, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 [DEBUG] visitConstDef: processing constant mod [DEBUG] visitConstDef: scalar constant mod -[DEBUG IRGEN] visitAddExp: 998244353 -[DEBUG IRGEN] visitMulExp: 998244353 -[DEBUG IRGEN] visitPrimaryExp: 998244353 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 998244353 created as 0x6324aa343f30 -[DEBUG] visitConstDef: scalar constant mod with value 0x6324aa343f30 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant mod = 998244353 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: d +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 d +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: d +[DEBUG] HandleGlobalVariable: 无初始化值 +[DEBUG] HandleGlobalVariable: 使用默认初始化值0 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 d +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理常量声明 +[DEBUG] visitConstDef: processing constant maxlen +[DEBUG] visitConstDef: scalar constant maxlen +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] visitConstDef: constant maxlen = 2097152 +[DEBUG] visitConstDef: scalar constant stored, no alloca created +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: temp +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 temp +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/gameoflife-oscillator.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -11090,7 +13278,7 @@ SymbolTable::addSymbol: stored steps with kind=0, const_def_ctx=0 SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -11101,7 +13289,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -11112,7 +13300,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5cb1f55342f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -11143,21 +13331,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553f0a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -11168,14 +13356,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: get base_type: int is_array: 0 dim_count: 0 @@ -11192,7 +13380,7 @@ SymbolTable::addSymbol: stored get with kind=0, const_def_ctx=0 SymbolTable::lookup: found get in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = get, sym->kind = 0 绑定变量: get -> VarDefContext -CheckLValue 绑定变量: get, sym->kind: 0, sym->var_def_ctx: 0x5cb1f55485b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: get, sym->kind: 0, sym->var_def_ctx: 0x563b876801e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 35 [DEBUG] visitPrimaryExp: 35 @@ -11201,7 +13389,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11209,7 +13397,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553f0a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11217,7 +13405,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -11228,7 +13416,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11236,7 +13424,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553f0a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11244,7 +13432,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -11254,7 +13442,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11262,7 +13450,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553e8c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11276,7 +13464,7 @@ SymbolTable::lookup: found getch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553f0a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11284,7 +13472,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f553f0a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11308,21 +13496,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555ad50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555a470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -11333,14 +13521,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555a470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -11349,7 +13537,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11357,7 +13545,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555ad50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11365,7 +13553,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555a470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -11398,7 +13586,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555a470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11406,7 +13594,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555a470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11425,7 +13613,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555ad50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11433,7 +13621,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f555ad50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11457,21 +13645,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5565600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -11482,21 +13670,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11504,7 +13692,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5565600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11512,7 +13700,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sheet2[j][i] @@ -11521,7 +13709,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552b4f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11529,7 +13717,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5565600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11537,14 +13725,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11552,7 +13740,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5564cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11560,7 +13748,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5565600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11568,7 +13756,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5565600, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11596,21 +13784,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533da0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -11621,14 +13809,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5533740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: alive_count base_type: int is_array: 0 dim_count: 0 @@ -11646,7 +13834,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11656,7 +13844,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11674,7 +13862,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11684,7 +13872,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: source[j-1][i+1] @@ -11700,7 +13888,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11710,7 +13898,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11728,7 +13916,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -11736,7 +13924,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11754,7 +13942,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11762,7 +13950,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11780,7 +13968,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11790,7 +13978,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11808,7 +13996,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11818,7 +14006,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: source[j+1][i+1] @@ -11834,7 +14022,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11844,7 +14032,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11865,7 +14053,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11873,7 +14061,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -11883,7 +14071,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = alive_count, sym->kind = 0 绑定变量: alive_count -> VarDefContext -CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5571ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x563b876a96e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -11900,7 +14088,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11908,7 +14096,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -11920,7 +14108,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = alive_count, sym->kind = 0 绑定变量: alive_count -> VarDefContext -CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5571ac0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x563b876a96e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -11937,7 +14125,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11945,7 +14133,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -11964,7 +14152,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11972,7 +14160,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -11982,7 +14170,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11990,7 +14178,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e0e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11998,7 +14186,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -12006,7 +14194,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5cb1f556e9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12030,7 +14218,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5cb1f55342f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -12041,7 +14229,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552cb60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12059,7 +14247,7 @@ SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: sheet2 @@ -12068,7 +14256,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552b4f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -12077,7 +14265,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552cb60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -12096,7 +14284,7 @@ SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552b4f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: sheet1 @@ -12105,7 +14293,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5cb1f5528f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -12114,7 +14302,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552cb60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -12123,7 +14311,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5cb1f55342f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: steps-1 [DEBUG] visitUnaryExp: steps @@ -12131,7 +14319,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5cb1f55342f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12147,7 +14335,7 @@ SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5cb1f552cb60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12174,20 +14362,21 @@ SymbolTable::lookup: found put_map in scope level 1, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[DEBUG IRGEN] visitAddExp: 500 -[DEBUG IRGEN] visitMulExp: 500 -[DEBUG IRGEN] visitPrimaryExp: 500 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 500 created as 0x5cb1f559e870 -[DEBUG] TryEvaluateConstInt: got IR value 0x5cb1f559e870 -[DEBUG IRGEN] visitAddExp: 500 -[DEBUG IRGEN] visitMulExp: 500 -[DEBUG IRGEN] visitPrimaryExp: 500 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 500 created as 0x5cb1f559e870 -[DEBUG] TryEvaluateConstInt: got IR value 0x5cb1f559e870 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sheet1 +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 sheet1 +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 250000 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/if-combine3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -12248,7 +14437,7 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de560fe2d80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -12257,7 +14446,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: m [DEBUG] visitUnaryExp: m @@ -12265,7 +14454,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de560fe2d80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -12275,7 +14464,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de560fe2d80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: m+1 [DEBUG] visitUnaryExp: m @@ -12283,7 +14472,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de560fe2d80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12293,7 +14482,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5de560fdcf80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -12308,7 +14497,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12317,7 +14506,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -12332,7 +14521,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12341,7 +14530,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -12356,7 +14545,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -12365,7 +14554,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -12380,7 +14569,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 4 [DEBUG] visitPrimaryExp: 4 @@ -12389,7 +14578,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 4 [DEBUG] visitUnaryExp: 4 @@ -12404,7 +14593,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -12413,7 +14602,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 5 [DEBUG] visitUnaryExp: 5 @@ -12428,7 +14617,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 6 [DEBUG] visitPrimaryExp: 6 @@ -12437,7 +14626,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 6 [DEBUG] visitUnaryExp: 6 @@ -12452,7 +14641,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -12461,7 +14650,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 7 [DEBUG] visitUnaryExp: 7 @@ -12476,7 +14665,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 8 [DEBUG] visitPrimaryExp: 8 @@ -12485,7 +14674,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 8 [DEBUG] visitUnaryExp: 8 @@ -12500,7 +14689,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 9 [DEBUG] visitPrimaryExp: 9 @@ -12509,7 +14698,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 9 [DEBUG] visitUnaryExp: 9 @@ -12524,7 +14713,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -12533,7 +14722,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -12548,7 +14737,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11 [DEBUG] visitPrimaryExp: 11 @@ -12557,7 +14746,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 11 [DEBUG] visitUnaryExp: 11 @@ -12572,7 +14761,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 12 [DEBUG] visitPrimaryExp: 12 @@ -12581,7 +14770,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 12 [DEBUG] visitUnaryExp: 12 @@ -12596,7 +14785,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 13 [DEBUG] visitPrimaryExp: 13 @@ -12605,7 +14794,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 13 [DEBUG] visitUnaryExp: 13 @@ -12620,7 +14809,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 14 [DEBUG] visitPrimaryExp: 14 @@ -12629,7 +14818,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 14 [DEBUG] visitUnaryExp: 14 @@ -12644,7 +14833,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 15 [DEBUG] visitPrimaryExp: 15 @@ -12653,7 +14842,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 15 [DEBUG] visitUnaryExp: 15 @@ -12668,7 +14857,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 16 [DEBUG] visitPrimaryExp: 16 @@ -12677,7 +14866,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 16 [DEBUG] visitUnaryExp: 16 @@ -12692,7 +14881,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 17 [DEBUG] visitPrimaryExp: 17 @@ -12701,7 +14890,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 17 [DEBUG] visitUnaryExp: 17 @@ -12716,7 +14905,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 18 [DEBUG] visitPrimaryExp: 18 @@ -12725,7 +14914,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 18 [DEBUG] visitUnaryExp: 18 @@ -12740,7 +14929,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 19 [DEBUG] visitPrimaryExp: 19 @@ -12749,7 +14938,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 19 [DEBUG] visitUnaryExp: 19 @@ -12764,7 +14953,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 20 [DEBUG] visitPrimaryExp: 20 @@ -12773,7 +14962,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 20 [DEBUG] visitUnaryExp: 20 @@ -12788,7 +14977,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 21 [DEBUG] visitPrimaryExp: 21 @@ -12797,7 +14986,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 21 [DEBUG] visitUnaryExp: 21 @@ -12812,7 +15001,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 22 [DEBUG] visitPrimaryExp: 22 @@ -12821,7 +15010,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 22 [DEBUG] visitUnaryExp: 22 @@ -12836,7 +15025,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 23 [DEBUG] visitPrimaryExp: 23 @@ -12845,7 +15034,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 23 [DEBUG] visitUnaryExp: 23 @@ -12860,7 +15049,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 24 [DEBUG] visitPrimaryExp: 24 @@ -12869,7 +15058,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 24 [DEBUG] visitUnaryExp: 24 @@ -12884,7 +15073,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 25 [DEBUG] visitPrimaryExp: 25 @@ -12893,7 +15082,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 25 [DEBUG] visitUnaryExp: 25 @@ -12908,7 +15097,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 26 [DEBUG] visitPrimaryExp: 26 @@ -12917,7 +15106,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 26 [DEBUG] visitUnaryExp: 26 @@ -12932,7 +15121,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 27 [DEBUG] visitPrimaryExp: 27 @@ -12941,7 +15130,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 27 [DEBUG] visitUnaryExp: 27 @@ -12956,7 +15145,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 28 [DEBUG] visitPrimaryExp: 28 @@ -12965,7 +15154,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 28 [DEBUG] visitUnaryExp: 28 @@ -12980,7 +15169,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 29 [DEBUG] visitPrimaryExp: 29 @@ -12989,7 +15178,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 29 [DEBUG] visitUnaryExp: 29 @@ -13004,7 +15193,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 30 [DEBUG] visitPrimaryExp: 30 @@ -13013,7 +15202,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 30 [DEBUG] visitUnaryExp: 30 @@ -13028,7 +15217,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 31 [DEBUG] visitPrimaryExp: 31 @@ -13037,7 +15226,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 31 [DEBUG] visitUnaryExp: 31 @@ -13052,7 +15241,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 32 [DEBUG] visitPrimaryExp: 32 @@ -13061,7 +15250,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 32 [DEBUG] visitUnaryExp: 32 @@ -13076,7 +15265,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 33 [DEBUG] visitPrimaryExp: 33 @@ -13085,7 +15274,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 33 [DEBUG] visitUnaryExp: 33 @@ -13100,7 +15289,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 34 [DEBUG] visitPrimaryExp: 34 @@ -13109,7 +15298,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 34 [DEBUG] visitUnaryExp: 34 @@ -13124,7 +15313,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 35 [DEBUG] visitPrimaryExp: 35 @@ -13133,7 +15322,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 35 [DEBUG] visitUnaryExp: 35 @@ -13148,7 +15337,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 36 [DEBUG] visitPrimaryExp: 36 @@ -13157,7 +15346,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 36 [DEBUG] visitUnaryExp: 36 @@ -13172,7 +15361,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 37 [DEBUG] visitPrimaryExp: 37 @@ -13181,7 +15370,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 37 [DEBUG] visitUnaryExp: 37 @@ -13196,7 +15385,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 38 [DEBUG] visitPrimaryExp: 38 @@ -13205,7 +15394,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 38 [DEBUG] visitUnaryExp: 38 @@ -13220,7 +15409,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 39 [DEBUG] visitPrimaryExp: 39 @@ -13229,7 +15418,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 39 [DEBUG] visitUnaryExp: 39 @@ -13244,7 +15433,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 40 [DEBUG] visitPrimaryExp: 40 @@ -13253,7 +15442,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 40 [DEBUG] visitUnaryExp: 40 @@ -13268,7 +15457,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 41 [DEBUG] visitPrimaryExp: 41 @@ -13277,7 +15466,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 41 [DEBUG] visitUnaryExp: 41 @@ -13292,7 +15481,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 42 [DEBUG] visitPrimaryExp: 42 @@ -13301,7 +15490,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 42 [DEBUG] visitUnaryExp: 42 @@ -13316,7 +15505,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 43 [DEBUG] visitPrimaryExp: 43 @@ -13325,7 +15514,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 43 [DEBUG] visitUnaryExp: 43 @@ -13340,7 +15529,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 44 [DEBUG] visitPrimaryExp: 44 @@ -13349,7 +15538,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 44 [DEBUG] visitUnaryExp: 44 @@ -13364,7 +15553,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 45 [DEBUG] visitPrimaryExp: 45 @@ -13373,7 +15562,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 45 [DEBUG] visitUnaryExp: 45 @@ -13388,7 +15577,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 46 [DEBUG] visitPrimaryExp: 46 @@ -13397,7 +15586,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 46 [DEBUG] visitUnaryExp: 46 @@ -13412,7 +15601,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 47 [DEBUG] visitPrimaryExp: 47 @@ -13421,7 +15610,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 47 [DEBUG] visitUnaryExp: 47 @@ -13436,7 +15625,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 48 [DEBUG] visitPrimaryExp: 48 @@ -13445,7 +15634,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 48 [DEBUG] visitUnaryExp: 48 @@ -13460,7 +15649,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 49 [DEBUG] visitPrimaryExp: 49 @@ -13469,7 +15658,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 49 [DEBUG] visitUnaryExp: 49 @@ -13484,7 +15673,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -13493,7 +15682,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 50 [DEBUG] visitUnaryExp: 50 @@ -13508,7 +15697,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 51 [DEBUG] visitPrimaryExp: 51 @@ -13517,7 +15706,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 51 [DEBUG] visitUnaryExp: 51 @@ -13532,7 +15721,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 52 [DEBUG] visitPrimaryExp: 52 @@ -13541,7 +15730,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 52 [DEBUG] visitUnaryExp: 52 @@ -13556,7 +15745,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 53 [DEBUG] visitPrimaryExp: 53 @@ -13565,7 +15754,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 53 [DEBUG] visitUnaryExp: 53 @@ -13580,7 +15769,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 54 [DEBUG] visitPrimaryExp: 54 @@ -13589,7 +15778,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 54 [DEBUG] visitUnaryExp: 54 @@ -13604,7 +15793,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 55 [DEBUG] visitPrimaryExp: 55 @@ -13613,7 +15802,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 55 [DEBUG] visitUnaryExp: 55 @@ -13628,7 +15817,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 56 [DEBUG] visitPrimaryExp: 56 @@ -13637,7 +15826,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 56 [DEBUG] visitUnaryExp: 56 @@ -13652,7 +15841,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 57 [DEBUG] visitPrimaryExp: 57 @@ -13661,7 +15850,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 57 [DEBUG] visitUnaryExp: 57 @@ -13676,7 +15865,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 58 [DEBUG] visitPrimaryExp: 58 @@ -13685,7 +15874,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 58 [DEBUG] visitUnaryExp: 58 @@ -13700,7 +15889,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 59 [DEBUG] visitPrimaryExp: 59 @@ -13709,7 +15898,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 59 [DEBUG] visitUnaryExp: 59 @@ -13724,7 +15913,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 60 [DEBUG] visitPrimaryExp: 60 @@ -13733,7 +15922,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 60 [DEBUG] visitUnaryExp: 60 @@ -13748,7 +15937,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 61 [DEBUG] visitPrimaryExp: 61 @@ -13757,7 +15946,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 61 [DEBUG] visitUnaryExp: 61 @@ -13772,7 +15961,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 62 [DEBUG] visitPrimaryExp: 62 @@ -13781,7 +15970,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 62 [DEBUG] visitUnaryExp: 62 @@ -13796,7 +15985,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 63 [DEBUG] visitPrimaryExp: 63 @@ -13805,7 +15994,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 63 [DEBUG] visitUnaryExp: 63 @@ -13820,7 +16009,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 64 [DEBUG] visitPrimaryExp: 64 @@ -13829,7 +16018,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 64 [DEBUG] visitUnaryExp: 64 @@ -13844,7 +16033,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 65 [DEBUG] visitPrimaryExp: 65 @@ -13853,7 +16042,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 65 [DEBUG] visitUnaryExp: 65 @@ -13868,7 +16057,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 66 [DEBUG] visitPrimaryExp: 66 @@ -13877,7 +16066,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 66 [DEBUG] visitUnaryExp: 66 @@ -13892,7 +16081,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 67 [DEBUG] visitPrimaryExp: 67 @@ -13901,7 +16090,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 67 [DEBUG] visitUnaryExp: 67 @@ -13916,7 +16105,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 68 [DEBUG] visitPrimaryExp: 68 @@ -13925,7 +16114,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 68 [DEBUG] visitUnaryExp: 68 @@ -13940,7 +16129,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 69 [DEBUG] visitPrimaryExp: 69 @@ -13949,7 +16138,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 69 [DEBUG] visitUnaryExp: 69 @@ -13964,7 +16153,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 70 [DEBUG] visitPrimaryExp: 70 @@ -13973,7 +16162,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 70 [DEBUG] visitUnaryExp: 70 @@ -13988,7 +16177,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 71 [DEBUG] visitPrimaryExp: 71 @@ -13997,7 +16186,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 71 [DEBUG] visitUnaryExp: 71 @@ -14012,7 +16201,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 72 [DEBUG] visitPrimaryExp: 72 @@ -14021,7 +16210,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 72 [DEBUG] visitUnaryExp: 72 @@ -14036,7 +16225,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 73 [DEBUG] visitPrimaryExp: 73 @@ -14045,7 +16234,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 73 [DEBUG] visitUnaryExp: 73 @@ -14060,7 +16249,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 74 [DEBUG] visitPrimaryExp: 74 @@ -14069,7 +16258,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 74 [DEBUG] visitUnaryExp: 74 @@ -14084,7 +16273,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 75 [DEBUG] visitPrimaryExp: 75 @@ -14093,7 +16282,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 75 [DEBUG] visitUnaryExp: 75 @@ -14108,7 +16297,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 76 [DEBUG] visitPrimaryExp: 76 @@ -14117,7 +16306,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 76 [DEBUG] visitUnaryExp: 76 @@ -14132,7 +16321,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 77 [DEBUG] visitPrimaryExp: 77 @@ -14141,7 +16330,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 77 [DEBUG] visitUnaryExp: 77 @@ -14156,7 +16345,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 78 [DEBUG] visitPrimaryExp: 78 @@ -14165,7 +16354,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 78 [DEBUG] visitUnaryExp: 78 @@ -14180,7 +16369,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 79 [DEBUG] visitPrimaryExp: 79 @@ -14189,7 +16378,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 79 [DEBUG] visitUnaryExp: 79 @@ -14204,7 +16393,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 80 [DEBUG] visitPrimaryExp: 80 @@ -14213,7 +16402,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 80 [DEBUG] visitUnaryExp: 80 @@ -14228,7 +16417,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 81 [DEBUG] visitPrimaryExp: 81 @@ -14237,7 +16426,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 81 [DEBUG] visitUnaryExp: 81 @@ -14252,7 +16441,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 82 [DEBUG] visitPrimaryExp: 82 @@ -14261,7 +16450,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 82 [DEBUG] visitUnaryExp: 82 @@ -14276,7 +16465,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 83 [DEBUG] visitPrimaryExp: 83 @@ -14285,7 +16474,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 83 [DEBUG] visitUnaryExp: 83 @@ -14300,7 +16489,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 84 [DEBUG] visitPrimaryExp: 84 @@ -14309,7 +16498,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 84 [DEBUG] visitUnaryExp: 84 @@ -14324,7 +16513,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 85 [DEBUG] visitPrimaryExp: 85 @@ -14333,7 +16522,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 85 [DEBUG] visitUnaryExp: 85 @@ -14348,7 +16537,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 86 [DEBUG] visitPrimaryExp: 86 @@ -14357,7 +16546,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 86 [DEBUG] visitUnaryExp: 86 @@ -14372,7 +16561,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 87 [DEBUG] visitPrimaryExp: 87 @@ -14381,7 +16570,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 87 [DEBUG] visitUnaryExp: 87 @@ -14396,7 +16585,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 88 [DEBUG] visitPrimaryExp: 88 @@ -14405,7 +16594,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 88 [DEBUG] visitUnaryExp: 88 @@ -14420,7 +16609,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 89 [DEBUG] visitPrimaryExp: 89 @@ -14429,7 +16618,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 89 [DEBUG] visitUnaryExp: 89 @@ -14444,7 +16633,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 90 [DEBUG] visitPrimaryExp: 90 @@ -14453,7 +16642,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 90 [DEBUG] visitUnaryExp: 90 @@ -14468,7 +16657,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 91 [DEBUG] visitPrimaryExp: 91 @@ -14477,7 +16666,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 91 [DEBUG] visitUnaryExp: 91 @@ -14492,7 +16681,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 92 [DEBUG] visitPrimaryExp: 92 @@ -14501,7 +16690,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 92 [DEBUG] visitUnaryExp: 92 @@ -14516,7 +16705,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 93 [DEBUG] visitPrimaryExp: 93 @@ -14525,7 +16714,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 93 [DEBUG] visitUnaryExp: 93 @@ -14540,7 +16729,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 94 [DEBUG] visitPrimaryExp: 94 @@ -14549,7 +16738,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 94 [DEBUG] visitUnaryExp: 94 @@ -14564,7 +16753,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 95 [DEBUG] visitPrimaryExp: 95 @@ -14573,7 +16762,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 95 [DEBUG] visitUnaryExp: 95 @@ -14588,7 +16777,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 96 [DEBUG] visitPrimaryExp: 96 @@ -14597,7 +16786,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 96 [DEBUG] visitUnaryExp: 96 @@ -14612,7 +16801,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 97 [DEBUG] visitPrimaryExp: 97 @@ -14621,7 +16810,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 97 [DEBUG] visitUnaryExp: 97 @@ -14636,7 +16825,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 98 [DEBUG] visitPrimaryExp: 98 @@ -14645,7 +16834,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 98 [DEBUG] visitUnaryExp: 98 @@ -14660,7 +16849,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5de560fddb80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 99 [DEBUG] visitPrimaryExp: 99 @@ -14669,7 +16858,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 99 [DEBUG] visitUnaryExp: 99 @@ -14682,7 +16871,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5de560fdcf80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -14690,7 +16879,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5de560fdcf80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14706,7 +16895,7 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de5610b8890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -14715,7 +16904,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5de560fd9900, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+s[m] [DEBUG] visitUnaryExp: sum @@ -14723,14 +16912,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5de560fd9900, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: s[m] [DEBUG] visitPrimaryExp: s[m] SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x5de560fdf1f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: m [DEBUG] visitUnaryExp: m @@ -14738,14 +16927,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de5610b8890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de5610b8890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: m+1 [DEBUG] visitUnaryExp: m @@ -14753,7 +16942,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5de5610b8890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14761,7 +16950,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5de560fd9900, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum%65535 [DEBUG] visitUnaryExp: sum @@ -14769,7 +16958,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5de560fd9900, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 65535 [DEBUG] visitPrimaryExp: 65535 @@ -14783,7 +16972,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5de560fd9900, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 func has_return: 1 return_type_is_void: 0 @@ -14821,7 +17010,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found loopcount in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = loopcount, sym->kind = 0 绑定变量: loopcount -> VarDefContext -CheckLValue 绑定变量: loopcount, sym->kind: 0, sym->var_def_ctx: 0x5de5610c14c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: loopcount, sym->kind: 0, sym->var_def_ctx: 0x562c37d9b140, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -14852,54 +17041,125 @@ SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: func [DEBUG IRGEN] visitBlock: {intsum=0;inti=200;intj=0;ints[100];intm=0;while(m<100){s[m]=0;m=m+1;}while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;}returnsum;} [DEBUG IRGEN] visitBlockItem: intsum=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sum +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 sum +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x5de560fa5870 -[DEBUG] visitVarDef: 创建标量变量 sum,初始值 0x5de560fa5870 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 sum,初始值 0x562c37dae750 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: inti=200; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 200 [DEBUG IRGEN] visitAddExp: 200 [DEBUG IRGEN] visitMulExp: 200 [DEBUG IRGEN] visitPrimaryExp: 200 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 200 created as 0x5de560f951c0 -[DEBUG] EvalExpr: success, result = 0x5de560f951c0 -[DEBUG] visitVarDef: 创建标量变量 i,初始值 0x5de560f951c0 +[DEBUG] visitPrimaryExp: constant int 200 created as 0x562c37daa200 +[DEBUG] EvalExpr: success, result = 0x562c37daa200 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 i,初始值 0x562c37daa200 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intj=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: j +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 j +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x5de560fa5870 -[DEBUG] visitVarDef: 创建标量变量 j,初始值 0x5de560fa5870 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 j,初始值 0x562c37dae750 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: ints[100]; -[DEBUG IRGEN] visitAddExp: 100 -[DEBUG IRGEN] visitMulExp: 100 -[DEBUG IRGEN] visitPrimaryExp: 100 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x5de560f94ff0 -[DEBUG] TryEvaluateConstInt: got IR value 0x5de560f94ff0 -[DEBUG] visitVarDef: 创建数组 s,维度 16,总大小 16 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: s +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 s +[DEBUG] HandleLocalVariable: 处理局部数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleLocalVariable: 数组总大小: 100 +[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 +[DEBUG] HandleLocalVariable: 无初始化,全部初始化为0 +[DEBUG] HandleLocalVariable: 存储数组引用 +[DEBUG] HandleLocalVariable: 创建局部数组 s,维度 100,总大小 100 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 m +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x5de560fa5870 -[DEBUG] visitVarDef: 创建标量变量 m,初始值 0x5de560fa5870 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 m,初始值 0x562c37dae750 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: while(m<100){s[m]=0;m=m+1;} [DEBUG IRGEN] visitStmt: while(m<100){s[m]=0;m=m+1;} @@ -14916,28 +17176,39 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: m [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: m [DEBUG] visitLVal: m [DEBUG IRGEN] visitAddExp: 100 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x5de560f94ff0 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x562c37dd4500 [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {s[m]=0;m=m+1;} [DEBUG IRGEN] visitBlock: {s[m]=0;m=m+1;} [DEBUG IRGEN] visitBlockItem: s[m]=0; [DEBUG IRGEN] visitStmt: s[m]=0; +[DEBUG IRGEN] HandleAssignStmt: s[m]=0; [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x5de560fa5870 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: m +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG] EvalExpr: success, result = 0x562c37dd4770 [DEBUG] current insert block: while.body [DEBUG IRGEN] visitBlockItem: m=m+1; [DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] HandleAssignStmt: m=m+1; [DEBUG IRGEN] EvalExpr: m+1 [DEBUG IRGEN] visitAddExp: m+1 [DEBUG IRGEN] visitAddExp: m @@ -14945,14 +17216,22 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: m [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: m [DEBUG] visitLVal: m [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5de560f94e90 -[DEBUG] visitAddExp: left=0x5de5610f2740, right=0x5de560f94e90 -[DEBUG] EvalExpr: success, result = 0x5de5610f27c0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] visitAddExp: left=0x562c37dd4970, right=0x562c37dd49f0 +[DEBUG] EvalExpr: success, result = 0x562c37dd4a50 +[DEBUG] HandleAssignStmt: assigning to m +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x562c37dd40d0 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x562c37dd40d0, rhs = 0x562c37dd4a50 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: while.body [DEBUG WHILE] body terminated: 0 [DEBUG WHILE] Adding br to condBlock from body @@ -14976,14 +17255,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: j [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: j [DEBUG] visitLVal: j [DEBUG IRGEN] visitAddExp: n [DEBUG IRGEN] visitMulExp: n [DEBUG IRGEN] visitPrimaryExp: n [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: n [DEBUG] visitLVal: n [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body @@ -15000,26 +17277,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5de560f94e90 -[DEBUG IF] Creating condbr: %t29 -> then, merge +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG IF] Creating condbr: %t115 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[1]=1; [DEBUG IRGEN] visitStmt: s[1]=1; +[DEBUG IRGEN] HandleAssignStmt: s[1]=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] EvalExpr: success, result = 0x562c37dd49f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 1 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5de560f94e90 -[DEBUG] EvalExpr: success, result = 0x5de560f94e90 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] EvalExpr: success, result = 0x562c37dd49f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15032,26 +17318,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5de560f93770 -[DEBUG IF] Creating condbr: %t31 -> then, merge +[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 +[DEBUG IF] Creating condbr: %t118 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[2]=2; [DEBUG IRGEN] visitStmt: s[2]=2; +[DEBUG IRGEN] HandleAssignStmt: s[2]=2; +[DEBUG IRGEN] EvalExpr: 2 +[DEBUG IRGEN] visitAddExp: 2 +[DEBUG IRGEN] visitMulExp: 2 +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 +[DEBUG] EvalExpr: success, result = 0x562c37dd4d30 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x5de560f93770 -[DEBUG] EvalExpr: success, result = 0x5de560f93770 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 +[DEBUG] EvalExpr: success, result = 0x562c37dd4d30 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15064,26 +17359,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5de560f94c60 -[DEBUG IF] Creating condbr: %t33 -> then, merge +[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 +[DEBUG IF] Creating condbr: %t121 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[3]=3; [DEBUG IRGEN] visitStmt: s[3]=3; +[DEBUG IRGEN] HandleAssignStmt: s[3]=3; +[DEBUG IRGEN] EvalExpr: 3 +[DEBUG IRGEN] visitAddExp: 3 +[DEBUG IRGEN] visitMulExp: 3 +[DEBUG IRGEN] visitPrimaryExp: 3 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 +[DEBUG] EvalExpr: success, result = 0x562c37dd60c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 3 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x5de560f94c60 -[DEBUG] EvalExpr: success, result = 0x5de560f94c60 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 +[DEBUG] EvalExpr: success, result = 0x562c37dd60c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15096,26 +17400,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5de5610f3f10 -[DEBUG IF] Creating condbr: %t35 -> then, merge +[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 +[DEBUG IF] Creating condbr: %t124 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[4]=4; [DEBUG IRGEN] visitStmt: s[4]=4; +[DEBUG IRGEN] HandleAssignStmt: s[4]=4; +[DEBUG IRGEN] EvalExpr: 4 +[DEBUG IRGEN] visitAddExp: 4 +[DEBUG IRGEN] visitMulExp: 4 +[DEBUG IRGEN] visitPrimaryExp: 4 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 +[DEBUG] EvalExpr: success, result = 0x562c37dd6810 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 4 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x5de5610f3f10 -[DEBUG] EvalExpr: success, result = 0x5de5610f3f10 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 +[DEBUG] EvalExpr: success, result = 0x562c37dd6810 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15128,26 +17441,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 5 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x5de5610f4440 -[DEBUG IF] Creating condbr: %t37 -> then, merge +[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 +[DEBUG IF] Creating condbr: %t127 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[5]=5; [DEBUG IRGEN] visitStmt: s[5]=5; +[DEBUG IRGEN] HandleAssignStmt: s[5]=5; +[DEBUG IRGEN] EvalExpr: 5 +[DEBUG IRGEN] visitAddExp: 5 +[DEBUG IRGEN] visitMulExp: 5 +[DEBUG IRGEN] visitPrimaryExp: 5 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 +[DEBUG] EvalExpr: success, result = 0x562c37dd6f50 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 5 [DEBUG IRGEN] visitAddExp: 5 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x5de5610f4440 -[DEBUG] EvalExpr: success, result = 0x5de5610f4440 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 +[DEBUG] EvalExpr: success, result = 0x562c37dd6f50 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15160,26 +17482,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 6 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x5de5610f4970 -[DEBUG IF] Creating condbr: %t39 -> then, merge +[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 +[DEBUG IF] Creating condbr: %t130 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[6]=6; [DEBUG IRGEN] visitStmt: s[6]=6; +[DEBUG IRGEN] HandleAssignStmt: s[6]=6; +[DEBUG IRGEN] EvalExpr: 6 +[DEBUG IRGEN] visitAddExp: 6 +[DEBUG IRGEN] visitMulExp: 6 +[DEBUG IRGEN] visitPrimaryExp: 6 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 +[DEBUG] EvalExpr: success, result = 0x562c37dd7690 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 6 [DEBUG IRGEN] visitAddExp: 6 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x5de5610f4970 -[DEBUG] EvalExpr: success, result = 0x5de5610f4970 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 +[DEBUG] EvalExpr: success, result = 0x562c37dd7690 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15192,26 +17523,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x5de5610f4e50 -[DEBUG IF] Creating condbr: %t41 -> then, merge +[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 +[DEBUG IF] Creating condbr: %t133 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[7]=7; [DEBUG IRGEN] visitStmt: s[7]=7; +[DEBUG IRGEN] HandleAssignStmt: s[7]=7; +[DEBUG IRGEN] EvalExpr: 7 +[DEBUG IRGEN] visitAddExp: 7 +[DEBUG IRGEN] visitMulExp: 7 +[DEBUG IRGEN] visitPrimaryExp: 7 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 +[DEBUG] EvalExpr: success, result = 0x562c37dd7ce0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 7 [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x5de5610f4e50 -[DEBUG] EvalExpr: success, result = 0x5de5610f4e50 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 +[DEBUG] EvalExpr: success, result = 0x562c37dd7ce0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15224,26 +17564,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 8 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x5de5610f52b0 -[DEBUG IF] Creating condbr: %t43 -> then, merge +[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 +[DEBUG IF] Creating condbr: %t136 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[8]=8; [DEBUG IRGEN] visitStmt: s[8]=8; +[DEBUG IRGEN] HandleAssignStmt: s[8]=8; +[DEBUG IRGEN] EvalExpr: 8 +[DEBUG IRGEN] visitAddExp: 8 +[DEBUG IRGEN] visitMulExp: 8 +[DEBUG IRGEN] visitPrimaryExp: 8 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 +[DEBUG] EvalExpr: success, result = 0x562c37dd83c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 8 [DEBUG IRGEN] visitAddExp: 8 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x5de5610f52b0 -[DEBUG] EvalExpr: success, result = 0x5de5610f52b0 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 +[DEBUG] EvalExpr: success, result = 0x562c37dd83c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15256,26 +17605,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 9 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x5de5610f58a0 -[DEBUG IF] Creating condbr: %t45 -> then, merge +[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 +[DEBUG IF] Creating condbr: %t139 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[9]=9; [DEBUG IRGEN] visitStmt: s[9]=9; +[DEBUG IRGEN] HandleAssignStmt: s[9]=9; [DEBUG IRGEN] EvalExpr: 9 [DEBUG IRGEN] visitAddExp: 9 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x5de5610f58a0 -[DEBUG] EvalExpr: success, result = 0x5de5610f58a0 +[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 +[DEBUG] EvalExpr: success, result = 0x562c37dd8c30 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 9 +[DEBUG IRGEN] visitAddExp: 9 +[DEBUG IRGEN] visitMulExp: 9 +[DEBUG IRGEN] visitPrimaryExp: 9 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 +[DEBUG] EvalExpr: success, result = 0x562c37dd8c30 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15288,26 +17646,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 10 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x5de5610f5ed0 -[DEBUG IF] Creating condbr: %t47 -> then, merge +[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 +[DEBUG IF] Creating condbr: %t142 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[10]=10; [DEBUG IRGEN] visitStmt: s[10]=10; +[DEBUG IRGEN] HandleAssignStmt: s[10]=10; +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 +[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 10 [DEBUG IRGEN] visitAddExp: 10 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x5de5610f5ed0 -[DEBUG] EvalExpr: success, result = 0x5de5610f5ed0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 +[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15320,26 +17687,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 11 [DEBUG IRGEN] visitMulExp: 11 [DEBUG IRGEN] visitPrimaryExp: 11 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 11 created as 0x5de5610f6370 -[DEBUG IF] Creating condbr: %t49 -> then, merge +[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 +[DEBUG IF] Creating condbr: %t145 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[11]=11; [DEBUG IRGEN] visitStmt: s[11]=11; +[DEBUG IRGEN] HandleAssignStmt: s[11]=11; +[DEBUG IRGEN] EvalExpr: 11 +[DEBUG IRGEN] visitAddExp: 11 +[DEBUG IRGEN] visitMulExp: 11 +[DEBUG IRGEN] visitPrimaryExp: 11 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 +[DEBUG] EvalExpr: success, result = 0x562c37dd9b80 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 11 [DEBUG IRGEN] visitAddExp: 11 [DEBUG IRGEN] visitMulExp: 11 [DEBUG IRGEN] visitPrimaryExp: 11 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 11 created as 0x5de5610f6370 -[DEBUG] EvalExpr: success, result = 0x5de5610f6370 +[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 +[DEBUG] EvalExpr: success, result = 0x562c37dd9b80 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15352,26 +17728,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 12 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x5de5610f6810 -[DEBUG IF] Creating condbr: %t51 -> then, merge +[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 +[DEBUG IF] Creating condbr: %t148 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[12]=12; [DEBUG IRGEN] visitStmt: s[12]=12; +[DEBUG IRGEN] HandleAssignStmt: s[12]=12; [DEBUG IRGEN] EvalExpr: 12 [DEBUG IRGEN] visitAddExp: 12 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x5de5610f6810 -[DEBUG] EvalExpr: success, result = 0x5de5610f6810 +[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 +[DEBUG] EvalExpr: success, result = 0x562c37dda260 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 12 +[DEBUG IRGEN] visitAddExp: 12 +[DEBUG IRGEN] visitMulExp: 12 +[DEBUG IRGEN] visitPrimaryExp: 12 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 +[DEBUG] EvalExpr: success, result = 0x562c37dda260 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15384,26 +17769,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 13 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x5de5610f6cb0 -[DEBUG IF] Creating condbr: %t53 -> then, merge +[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 +[DEBUG IF] Creating condbr: %t151 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[13]=13; [DEBUG IRGEN] visitStmt: s[13]=13; +[DEBUG IRGEN] HandleAssignStmt: s[13]=13; +[DEBUG IRGEN] EvalExpr: 13 +[DEBUG IRGEN] visitAddExp: 13 +[DEBUG IRGEN] visitMulExp: 13 +[DEBUG IRGEN] visitPrimaryExp: 13 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 +[DEBUG] EvalExpr: success, result = 0x562c37dda8d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 13 [DEBUG IRGEN] visitAddExp: 13 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x5de5610f6cb0 -[DEBUG] EvalExpr: success, result = 0x5de5610f6cb0 +[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 +[DEBUG] EvalExpr: success, result = 0x562c37dda8d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15416,26 +17810,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 14 [DEBUG IRGEN] visitMulExp: 14 [DEBUG IRGEN] visitPrimaryExp: 14 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 14 created as 0x5de5610f7150 -[DEBUG IF] Creating condbr: %t55 -> then, merge +[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 +[DEBUG IF] Creating condbr: %t154 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[14]=14; [DEBUG IRGEN] visitStmt: s[14]=14; +[DEBUG IRGEN] HandleAssignStmt: s[14]=14; +[DEBUG IRGEN] EvalExpr: 14 +[DEBUG IRGEN] visitAddExp: 14 +[DEBUG IRGEN] visitMulExp: 14 +[DEBUG IRGEN] visitPrimaryExp: 14 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 +[DEBUG] EvalExpr: success, result = 0x562c37ddafb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 14 [DEBUG IRGEN] visitAddExp: 14 [DEBUG IRGEN] visitMulExp: 14 [DEBUG IRGEN] visitPrimaryExp: 14 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 14 created as 0x5de5610f7150 -[DEBUG] EvalExpr: success, result = 0x5de5610f7150 +[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 +[DEBUG] EvalExpr: success, result = 0x562c37ddafb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15448,26 +17851,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 15 [DEBUG IRGEN] visitMulExp: 15 [DEBUG IRGEN] visitPrimaryExp: 15 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 15 created as 0x5de5610f7820 -[DEBUG IF] Creating condbr: %t57 -> then, merge +[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 +[DEBUG IF] Creating condbr: %t157 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[15]=15; [DEBUG IRGEN] visitStmt: s[15]=15; +[DEBUG IRGEN] HandleAssignStmt: s[15]=15; +[DEBUG IRGEN] EvalExpr: 15 +[DEBUG IRGEN] visitAddExp: 15 +[DEBUG IRGEN] visitMulExp: 15 +[DEBUG IRGEN] visitPrimaryExp: 15 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 +[DEBUG] EvalExpr: success, result = 0x562c37ddb690 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 15 [DEBUG IRGEN] visitAddExp: 15 [DEBUG IRGEN] visitMulExp: 15 [DEBUG IRGEN] visitPrimaryExp: 15 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 15 created as 0x5de5610f7820 -[DEBUG] EvalExpr: success, result = 0x5de5610f7820 +[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 +[DEBUG] EvalExpr: success, result = 0x562c37ddb690 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15480,26 +17892,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 16 [DEBUG IRGEN] visitMulExp: 16 [DEBUG IRGEN] visitPrimaryExp: 16 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x5de5610f7de0 -[DEBUG IF] Creating condbr: %t59 -> then, merge +[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 +[DEBUG IF] Creating condbr: %t160 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[16]=16; [DEBUG IRGEN] visitStmt: s[16]=16; +[DEBUG IRGEN] HandleAssignStmt: s[16]=16; +[DEBUG IRGEN] EvalExpr: 16 +[DEBUG IRGEN] visitAddExp: 16 +[DEBUG IRGEN] visitMulExp: 16 +[DEBUG IRGEN] visitPrimaryExp: 16 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 +[DEBUG] EvalExpr: success, result = 0x562c37ddbd70 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 16 [DEBUG IRGEN] visitAddExp: 16 [DEBUG IRGEN] visitMulExp: 16 [DEBUG IRGEN] visitPrimaryExp: 16 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x5de5610f7de0 -[DEBUG] EvalExpr: success, result = 0x5de5610f7de0 +[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 +[DEBUG] EvalExpr: success, result = 0x562c37ddbd70 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15512,26 +17933,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 17 [DEBUG IRGEN] visitMulExp: 17 [DEBUG IRGEN] visitPrimaryExp: 17 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 17 created as 0x5de5610f86b0 -[DEBUG IF] Creating condbr: %t61 -> then, merge +[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 +[DEBUG IF] Creating condbr: %t163 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[17]=17; [DEBUG IRGEN] visitStmt: s[17]=17; +[DEBUG IRGEN] HandleAssignStmt: s[17]=17; +[DEBUG IRGEN] EvalExpr: 17 +[DEBUG IRGEN] visitAddExp: 17 +[DEBUG IRGEN] visitMulExp: 17 +[DEBUG IRGEN] visitPrimaryExp: 17 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 +[DEBUG] EvalExpr: success, result = 0x562c37ddc760 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 17 [DEBUG IRGEN] visitAddExp: 17 [DEBUG IRGEN] visitMulExp: 17 [DEBUG IRGEN] visitPrimaryExp: 17 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 17 created as 0x5de5610f86b0 -[DEBUG] EvalExpr: success, result = 0x5de5610f86b0 +[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 +[DEBUG] EvalExpr: success, result = 0x562c37ddc760 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15544,26 +17974,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 18 [DEBUG IRGEN] visitMulExp: 18 [DEBUG IRGEN] visitPrimaryExp: 18 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 18 created as 0x5de5610f8f80 -[DEBUG IF] Creating condbr: %t63 -> then, merge +[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 +[DEBUG IF] Creating condbr: %t166 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[18]=18; [DEBUG IRGEN] visitStmt: s[18]=18; +[DEBUG IRGEN] HandleAssignStmt: s[18]=18; +[DEBUG IRGEN] EvalExpr: 18 +[DEBUG IRGEN] visitAddExp: 18 +[DEBUG IRGEN] visitMulExp: 18 +[DEBUG IRGEN] visitPrimaryExp: 18 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 +[DEBUG] EvalExpr: success, result = 0x562c37ddd150 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 18 [DEBUG IRGEN] visitAddExp: 18 [DEBUG IRGEN] visitMulExp: 18 [DEBUG IRGEN] visitPrimaryExp: 18 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 18 created as 0x5de5610f8f80 -[DEBUG] EvalExpr: success, result = 0x5de5610f8f80 +[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 +[DEBUG] EvalExpr: success, result = 0x562c37ddd150 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15576,26 +18015,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 19 [DEBUG IRGEN] visitMulExp: 19 [DEBUG IRGEN] visitPrimaryExp: 19 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 19 created as 0x5de5610f9540 -[DEBUG IF] Creating condbr: %t65 -> then, merge +[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 +[DEBUG IF] Creating condbr: %t169 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[19]=19; [DEBUG IRGEN] visitStmt: s[19]=19; +[DEBUG IRGEN] HandleAssignStmt: s[19]=19; +[DEBUG IRGEN] EvalExpr: 19 +[DEBUG IRGEN] visitAddExp: 19 +[DEBUG IRGEN] visitMulExp: 19 +[DEBUG IRGEN] visitPrimaryExp: 19 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 +[DEBUG] EvalExpr: success, result = 0x562c37ddd830 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 19 [DEBUG IRGEN] visitAddExp: 19 [DEBUG IRGEN] visitMulExp: 19 [DEBUG IRGEN] visitPrimaryExp: 19 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 19 created as 0x5de5610f9540 -[DEBUG] EvalExpr: success, result = 0x5de5610f9540 +[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 +[DEBUG] EvalExpr: success, result = 0x562c37ddd830 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15608,26 +18056,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 20 [DEBUG IRGEN] visitMulExp: 20 [DEBUG IRGEN] visitPrimaryExp: 20 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20 created as 0x5de5610f9b00 -[DEBUG IF] Creating condbr: %t67 -> then, merge +[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 +[DEBUG IF] Creating condbr: %t172 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[20]=20; [DEBUG IRGEN] visitStmt: s[20]=20; +[DEBUG IRGEN] HandleAssignStmt: s[20]=20; +[DEBUG IRGEN] EvalExpr: 20 +[DEBUG IRGEN] visitAddExp: 20 +[DEBUG IRGEN] visitMulExp: 20 +[DEBUG IRGEN] visitPrimaryExp: 20 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 +[DEBUG] EvalExpr: success, result = 0x562c37dddf10 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 20 [DEBUG IRGEN] visitAddExp: 20 [DEBUG IRGEN] visitMulExp: 20 [DEBUG IRGEN] visitPrimaryExp: 20 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20 created as 0x5de5610f9b00 -[DEBUG] EvalExpr: success, result = 0x5de5610f9b00 +[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 +[DEBUG] EvalExpr: success, result = 0x562c37dddf10 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15640,26 +18097,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 21 [DEBUG IRGEN] visitMulExp: 21 [DEBUG IRGEN] visitPrimaryExp: 21 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 21 created as 0x5de5610fa0c0 -[DEBUG IF] Creating condbr: %t69 -> then, merge +[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 +[DEBUG IF] Creating condbr: %t175 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[21]=21; [DEBUG IRGEN] visitStmt: s[21]=21; +[DEBUG IRGEN] HandleAssignStmt: s[21]=21; +[DEBUG IRGEN] EvalExpr: 21 +[DEBUG IRGEN] visitAddExp: 21 +[DEBUG IRGEN] visitMulExp: 21 +[DEBUG IRGEN] visitPrimaryExp: 21 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 +[DEBUG] EvalExpr: success, result = 0x562c37dde5f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 21 [DEBUG IRGEN] visitAddExp: 21 [DEBUG IRGEN] visitMulExp: 21 [DEBUG IRGEN] visitPrimaryExp: 21 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 21 created as 0x5de5610fa0c0 -[DEBUG] EvalExpr: success, result = 0x5de5610fa0c0 +[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 +[DEBUG] EvalExpr: success, result = 0x562c37dde5f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15672,26 +18138,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 22 [DEBUG IRGEN] visitMulExp: 22 [DEBUG IRGEN] visitPrimaryExp: 22 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 22 created as 0x5de5610fa680 -[DEBUG IF] Creating condbr: %t71 -> then, merge +[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 +[DEBUG IF] Creating condbr: %t178 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[22]=22; [DEBUG IRGEN] visitStmt: s[22]=22; +[DEBUG IRGEN] HandleAssignStmt: s[22]=22; +[DEBUG IRGEN] EvalExpr: 22 +[DEBUG IRGEN] visitAddExp: 22 +[DEBUG IRGEN] visitMulExp: 22 +[DEBUG IRGEN] visitPrimaryExp: 22 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 +[DEBUG] EvalExpr: success, result = 0x562c37ddecd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 22 [DEBUG IRGEN] visitAddExp: 22 [DEBUG IRGEN] visitMulExp: 22 [DEBUG IRGEN] visitPrimaryExp: 22 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 22 created as 0x5de5610fa680 -[DEBUG] EvalExpr: success, result = 0x5de5610fa680 +[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 +[DEBUG] EvalExpr: success, result = 0x562c37ddecd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15704,26 +18179,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 23 [DEBUG IRGEN] visitMulExp: 23 [DEBUG IRGEN] visitPrimaryExp: 23 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 23 created as 0x5de5610fac40 -[DEBUG IF] Creating condbr: %t73 -> then, merge +[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 +[DEBUG IF] Creating condbr: %t181 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[23]=23; [DEBUG IRGEN] visitStmt: s[23]=23; +[DEBUG IRGEN] HandleAssignStmt: s[23]=23; +[DEBUG IRGEN] EvalExpr: 23 +[DEBUG IRGEN] visitAddExp: 23 +[DEBUG IRGEN] visitMulExp: 23 +[DEBUG IRGEN] visitPrimaryExp: 23 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 +[DEBUG] EvalExpr: success, result = 0x562c37ddf3b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 23 [DEBUG IRGEN] visitAddExp: 23 [DEBUG IRGEN] visitMulExp: 23 [DEBUG IRGEN] visitPrimaryExp: 23 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 23 created as 0x5de5610fac40 -[DEBUG] EvalExpr: success, result = 0x5de5610fac40 +[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 +[DEBUG] EvalExpr: success, result = 0x562c37ddf3b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15736,26 +18220,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 24 [DEBUG IRGEN] visitMulExp: 24 [DEBUG IRGEN] visitPrimaryExp: 24 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 24 created as 0x5de5610fb200 -[DEBUG IF] Creating condbr: %t75 -> then, merge +[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 +[DEBUG IF] Creating condbr: %t184 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[24]=24; [DEBUG IRGEN] visitStmt: s[24]=24; +[DEBUG IRGEN] HandleAssignStmt: s[24]=24; +[DEBUG IRGEN] EvalExpr: 24 +[DEBUG IRGEN] visitAddExp: 24 +[DEBUG IRGEN] visitMulExp: 24 +[DEBUG IRGEN] visitPrimaryExp: 24 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 +[DEBUG] EvalExpr: success, result = 0x562c37ddfa90 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 24 [DEBUG IRGEN] visitAddExp: 24 [DEBUG IRGEN] visitMulExp: 24 [DEBUG IRGEN] visitPrimaryExp: 24 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 24 created as 0x5de5610fb200 -[DEBUG] EvalExpr: success, result = 0x5de5610fb200 +[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 +[DEBUG] EvalExpr: success, result = 0x562c37ddfa90 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15768,26 +18261,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 25 [DEBUG IRGEN] visitMulExp: 25 [DEBUG IRGEN] visitPrimaryExp: 25 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 25 created as 0x5de5610fb7c0 -[DEBUG IF] Creating condbr: %t77 -> then, merge +[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 +[DEBUG IF] Creating condbr: %t187 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[25]=25; [DEBUG IRGEN] visitStmt: s[25]=25; +[DEBUG IRGEN] HandleAssignStmt: s[25]=25; [DEBUG IRGEN] EvalExpr: 25 [DEBUG IRGEN] visitAddExp: 25 [DEBUG IRGEN] visitMulExp: 25 [DEBUG IRGEN] visitPrimaryExp: 25 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 25 created as 0x5de5610fb7c0 -[DEBUG] EvalExpr: success, result = 0x5de5610fb7c0 +[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 +[DEBUG] EvalExpr: success, result = 0x562c37de0170 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 25 +[DEBUG IRGEN] visitAddExp: 25 +[DEBUG IRGEN] visitMulExp: 25 +[DEBUG IRGEN] visitPrimaryExp: 25 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 +[DEBUG] EvalExpr: success, result = 0x562c37de0170 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15800,26 +18302,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 26 [DEBUG IRGEN] visitMulExp: 26 [DEBUG IRGEN] visitPrimaryExp: 26 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 26 created as 0x5de5610fbd80 -[DEBUG IF] Creating condbr: %t79 -> then, merge +[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 +[DEBUG IF] Creating condbr: %t190 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[26]=26; [DEBUG IRGEN] visitStmt: s[26]=26; +[DEBUG IRGEN] HandleAssignStmt: s[26]=26; +[DEBUG IRGEN] EvalExpr: 26 +[DEBUG IRGEN] visitAddExp: 26 +[DEBUG IRGEN] visitMulExp: 26 +[DEBUG IRGEN] visitPrimaryExp: 26 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 +[DEBUG] EvalExpr: success, result = 0x562c37dd23d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 26 [DEBUG IRGEN] visitAddExp: 26 [DEBUG IRGEN] visitMulExp: 26 [DEBUG IRGEN] visitPrimaryExp: 26 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 26 created as 0x5de5610fbd80 -[DEBUG] EvalExpr: success, result = 0x5de5610fbd80 +[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 +[DEBUG] EvalExpr: success, result = 0x562c37dd23d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15832,26 +18343,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 27 [DEBUG IRGEN] visitMulExp: 27 [DEBUG IRGEN] visitPrimaryExp: 27 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 27 created as 0x5de5610fc340 -[DEBUG IF] Creating condbr: %t81 -> then, merge +[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 +[DEBUG IF] Creating condbr: %t193 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[27]=27; [DEBUG IRGEN] visitStmt: s[27]=27; +[DEBUG IRGEN] HandleAssignStmt: s[27]=27; +[DEBUG IRGEN] EvalExpr: 27 +[DEBUG IRGEN] visitAddExp: 27 +[DEBUG IRGEN] visitMulExp: 27 +[DEBUG IRGEN] visitPrimaryExp: 27 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 +[DEBUG] EvalExpr: success, result = 0x562c37dd2ab0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 27 [DEBUG IRGEN] visitAddExp: 27 [DEBUG IRGEN] visitMulExp: 27 [DEBUG IRGEN] visitPrimaryExp: 27 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 27 created as 0x5de5610fc340 -[DEBUG] EvalExpr: success, result = 0x5de5610fc340 +[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 +[DEBUG] EvalExpr: success, result = 0x562c37dd2ab0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15864,26 +18384,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 28 [DEBUG IRGEN] visitMulExp: 28 [DEBUG IRGEN] visitPrimaryExp: 28 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 28 created as 0x5de5610fc900 -[DEBUG IF] Creating condbr: %t83 -> then, merge +[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 +[DEBUG IF] Creating condbr: %t196 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[28]=28; [DEBUG IRGEN] visitStmt: s[28]=28; +[DEBUG IRGEN] HandleAssignStmt: s[28]=28; [DEBUG IRGEN] EvalExpr: 28 [DEBUG IRGEN] visitAddExp: 28 [DEBUG IRGEN] visitMulExp: 28 [DEBUG IRGEN] visitPrimaryExp: 28 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 28 created as 0x5de5610fc900 -[DEBUG] EvalExpr: success, result = 0x5de5610fc900 +[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 +[DEBUG] EvalExpr: success, result = 0x562c37de2210 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 28 +[DEBUG IRGEN] visitAddExp: 28 +[DEBUG IRGEN] visitMulExp: 28 +[DEBUG IRGEN] visitPrimaryExp: 28 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 +[DEBUG] EvalExpr: success, result = 0x562c37de2210 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15896,26 +18425,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 29 [DEBUG IRGEN] visitMulExp: 29 [DEBUG IRGEN] visitPrimaryExp: 29 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 29 created as 0x5de5610fd0a0 -[DEBUG IF] Creating condbr: %t85 -> then, merge +[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 +[DEBUG IF] Creating condbr: %t199 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[29]=29; [DEBUG IRGEN] visitStmt: s[29]=29; +[DEBUG IRGEN] HandleAssignStmt: s[29]=29; +[DEBUG IRGEN] EvalExpr: 29 +[DEBUG IRGEN] visitAddExp: 29 +[DEBUG IRGEN] visitMulExp: 29 +[DEBUG IRGEN] visitPrimaryExp: 29 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 +[DEBUG] EvalExpr: success, result = 0x562c37de2ad0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 29 [DEBUG IRGEN] visitAddExp: 29 [DEBUG IRGEN] visitMulExp: 29 [DEBUG IRGEN] visitPrimaryExp: 29 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 29 created as 0x5de5610fd0a0 -[DEBUG] EvalExpr: success, result = 0x5de5610fd0a0 +[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 +[DEBUG] EvalExpr: success, result = 0x562c37de2ad0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15928,26 +18466,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 30 [DEBUG IRGEN] visitMulExp: 30 [DEBUG IRGEN] visitPrimaryExp: 30 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 30 created as 0x5de5610fd660 -[DEBUG IF] Creating condbr: %t87 -> then, merge +[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 +[DEBUG IF] Creating condbr: %t202 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[30]=30; [DEBUG IRGEN] visitStmt: s[30]=30; +[DEBUG IRGEN] HandleAssignStmt: s[30]=30; +[DEBUG IRGEN] EvalExpr: 30 +[DEBUG IRGEN] visitAddExp: 30 +[DEBUG IRGEN] visitMulExp: 30 +[DEBUG IRGEN] visitPrimaryExp: 30 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 +[DEBUG] EvalExpr: success, result = 0x562c37de31b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 30 [DEBUG IRGEN] visitAddExp: 30 [DEBUG IRGEN] visitMulExp: 30 [DEBUG IRGEN] visitPrimaryExp: 30 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 30 created as 0x5de5610fd660 -[DEBUG] EvalExpr: success, result = 0x5de5610fd660 +[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 +[DEBUG] EvalExpr: success, result = 0x562c37de31b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15960,26 +18507,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 31 [DEBUG IRGEN] visitMulExp: 31 [DEBUG IRGEN] visitPrimaryExp: 31 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 31 created as 0x5de5610fe030 -[DEBUG IF] Creating condbr: %t89 -> then, merge +[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 +[DEBUG IF] Creating condbr: %t205 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[31]=31; [DEBUG IRGEN] visitStmt: s[31]=31; +[DEBUG IRGEN] HandleAssignStmt: s[31]=31; +[DEBUG IRGEN] EvalExpr: 31 +[DEBUG IRGEN] visitAddExp: 31 +[DEBUG IRGEN] visitMulExp: 31 +[DEBUG IRGEN] visitPrimaryExp: 31 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 +[DEBUG] EvalExpr: success, result = 0x562c37de3ca0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 31 [DEBUG IRGEN] visitAddExp: 31 [DEBUG IRGEN] visitMulExp: 31 [DEBUG IRGEN] visitPrimaryExp: 31 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 31 created as 0x5de5610fe030 -[DEBUG] EvalExpr: success, result = 0x5de5610fe030 +[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 +[DEBUG] EvalExpr: success, result = 0x562c37de3ca0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -15992,26 +18548,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 32 [DEBUG IRGEN] visitMulExp: 32 [DEBUG IRGEN] visitPrimaryExp: 32 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 32 created as 0x5de5610fe5f0 -[DEBUG IF] Creating condbr: %t91 -> then, merge +[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 +[DEBUG IF] Creating condbr: %t208 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[32]=32; [DEBUG IRGEN] visitStmt: s[32]=32; +[DEBUG IRGEN] HandleAssignStmt: s[32]=32; +[DEBUG IRGEN] EvalExpr: 32 +[DEBUG IRGEN] visitAddExp: 32 +[DEBUG IRGEN] visitMulExp: 32 +[DEBUG IRGEN] visitPrimaryExp: 32 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 +[DEBUG] EvalExpr: success, result = 0x562c37de4380 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 32 [DEBUG IRGEN] visitAddExp: 32 [DEBUG IRGEN] visitMulExp: 32 [DEBUG IRGEN] visitPrimaryExp: 32 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 32 created as 0x5de5610fe5f0 -[DEBUG] EvalExpr: success, result = 0x5de5610fe5f0 +[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 +[DEBUG] EvalExpr: success, result = 0x562c37de4380 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16024,26 +18589,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 33 [DEBUG IRGEN] visitMulExp: 33 [DEBUG IRGEN] visitPrimaryExp: 33 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 33 created as 0x5de5610ff7d0 -[DEBUG IF] Creating condbr: %t93 -> then, merge +[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 +[DEBUG IF] Creating condbr: %t211 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[33]=33; [DEBUG IRGEN] visitStmt: s[33]=33; +[DEBUG IRGEN] HandleAssignStmt: s[33]=33; +[DEBUG IRGEN] EvalExpr: 33 +[DEBUG IRGEN] visitAddExp: 33 +[DEBUG IRGEN] visitMulExp: 33 +[DEBUG IRGEN] visitPrimaryExp: 33 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 +[DEBUG] EvalExpr: success, result = 0x562c37de5680 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 33 [DEBUG IRGEN] visitAddExp: 33 [DEBUG IRGEN] visitMulExp: 33 [DEBUG IRGEN] visitPrimaryExp: 33 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 33 created as 0x5de5610ff7d0 -[DEBUG] EvalExpr: success, result = 0x5de5610ff7d0 +[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 +[DEBUG] EvalExpr: success, result = 0x562c37de5680 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16056,26 +18630,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 34 [DEBUG IRGEN] visitMulExp: 34 [DEBUG IRGEN] visitPrimaryExp: 34 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 34 created as 0x5de5610ffd90 -[DEBUG IF] Creating condbr: %t95 -> then, merge +[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 +[DEBUG IF] Creating condbr: %t214 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[34]=34; [DEBUG IRGEN] visitStmt: s[34]=34; +[DEBUG IRGEN] HandleAssignStmt: s[34]=34; +[DEBUG IRGEN] EvalExpr: 34 +[DEBUG IRGEN] visitAddExp: 34 +[DEBUG IRGEN] visitMulExp: 34 +[DEBUG IRGEN] visitPrimaryExp: 34 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 +[DEBUG] EvalExpr: success, result = 0x562c37de5d60 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 34 [DEBUG IRGEN] visitAddExp: 34 [DEBUG IRGEN] visitMulExp: 34 [DEBUG IRGEN] visitPrimaryExp: 34 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 34 created as 0x5de5610ffd90 -[DEBUG] EvalExpr: success, result = 0x5de5610ffd90 +[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 +[DEBUG] EvalExpr: success, result = 0x562c37de5d60 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16088,26 +18671,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 35 [DEBUG IRGEN] visitMulExp: 35 [DEBUG IRGEN] visitPrimaryExp: 35 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 35 created as 0x5de561100350 -[DEBUG IF] Creating condbr: %t97 -> then, merge +[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 +[DEBUG IF] Creating condbr: %t217 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[35]=35; [DEBUG IRGEN] visitStmt: s[35]=35; +[DEBUG IRGEN] HandleAssignStmt: s[35]=35; +[DEBUG IRGEN] EvalExpr: 35 +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 +[DEBUG] EvalExpr: success, result = 0x562c37de6440 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 35 [DEBUG IRGEN] visitAddExp: 35 [DEBUG IRGEN] visitMulExp: 35 [DEBUG IRGEN] visitPrimaryExp: 35 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 35 created as 0x5de561100350 -[DEBUG] EvalExpr: success, result = 0x5de561100350 +[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 +[DEBUG] EvalExpr: success, result = 0x562c37de6440 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16120,26 +18712,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 36 [DEBUG IRGEN] visitMulExp: 36 [DEBUG IRGEN] visitPrimaryExp: 36 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 36 created as 0x5de561100910 -[DEBUG IF] Creating condbr: %t99 -> then, merge +[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 +[DEBUG IF] Creating condbr: %t220 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[36]=36; [DEBUG IRGEN] visitStmt: s[36]=36; +[DEBUG IRGEN] HandleAssignStmt: s[36]=36; +[DEBUG IRGEN] EvalExpr: 36 +[DEBUG IRGEN] visitAddExp: 36 +[DEBUG IRGEN] visitMulExp: 36 +[DEBUG IRGEN] visitPrimaryExp: 36 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 +[DEBUG] EvalExpr: success, result = 0x562c37de6b20 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 36 [DEBUG IRGEN] visitAddExp: 36 [DEBUG IRGEN] visitMulExp: 36 [DEBUG IRGEN] visitPrimaryExp: 36 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 36 created as 0x5de561100910 -[DEBUG] EvalExpr: success, result = 0x5de561100910 +[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 +[DEBUG] EvalExpr: success, result = 0x562c37de6b20 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16152,26 +18753,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 37 [DEBUG IRGEN] visitMulExp: 37 [DEBUG IRGEN] visitPrimaryExp: 37 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 37 created as 0x5de561100ed0 -[DEBUG IF] Creating condbr: %t101 -> then, merge +[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 +[DEBUG IF] Creating condbr: %t223 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[37]=37; [DEBUG IRGEN] visitStmt: s[37]=37; +[DEBUG IRGEN] HandleAssignStmt: s[37]=37; +[DEBUG IRGEN] EvalExpr: 37 +[DEBUG IRGEN] visitAddExp: 37 +[DEBUG IRGEN] visitMulExp: 37 +[DEBUG IRGEN] visitPrimaryExp: 37 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 +[DEBUG] EvalExpr: success, result = 0x562c37de7200 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 37 [DEBUG IRGEN] visitAddExp: 37 [DEBUG IRGEN] visitMulExp: 37 [DEBUG IRGEN] visitPrimaryExp: 37 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 37 created as 0x5de561100ed0 -[DEBUG] EvalExpr: success, result = 0x5de561100ed0 +[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 +[DEBUG] EvalExpr: success, result = 0x562c37de7200 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16184,26 +18794,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 38 [DEBUG IRGEN] visitMulExp: 38 [DEBUG IRGEN] visitPrimaryExp: 38 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 38 created as 0x5de561101490 -[DEBUG IF] Creating condbr: %t103 -> then, merge +[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 +[DEBUG IF] Creating condbr: %t226 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[38]=38; [DEBUG IRGEN] visitStmt: s[38]=38; +[DEBUG IRGEN] HandleAssignStmt: s[38]=38; +[DEBUG IRGEN] EvalExpr: 38 +[DEBUG IRGEN] visitAddExp: 38 +[DEBUG IRGEN] visitMulExp: 38 +[DEBUG IRGEN] visitPrimaryExp: 38 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 +[DEBUG] EvalExpr: success, result = 0x562c37de78e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 38 [DEBUG IRGEN] visitAddExp: 38 [DEBUG IRGEN] visitMulExp: 38 [DEBUG IRGEN] visitPrimaryExp: 38 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 38 created as 0x5de561101490 -[DEBUG] EvalExpr: success, result = 0x5de561101490 +[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 +[DEBUG] EvalExpr: success, result = 0x562c37de78e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16216,26 +18835,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 39 [DEBUG IRGEN] visitMulExp: 39 [DEBUG IRGEN] visitPrimaryExp: 39 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 39 created as 0x5de561101a50 -[DEBUG IF] Creating condbr: %t105 -> then, merge +[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 +[DEBUG IF] Creating condbr: %t229 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[39]=39; [DEBUG IRGEN] visitStmt: s[39]=39; +[DEBUG IRGEN] HandleAssignStmt: s[39]=39; +[DEBUG IRGEN] EvalExpr: 39 +[DEBUG IRGEN] visitAddExp: 39 +[DEBUG IRGEN] visitMulExp: 39 +[DEBUG IRGEN] visitPrimaryExp: 39 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 +[DEBUG] EvalExpr: success, result = 0x562c37de7fc0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 39 [DEBUG IRGEN] visitAddExp: 39 [DEBUG IRGEN] visitMulExp: 39 [DEBUG IRGEN] visitPrimaryExp: 39 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 39 created as 0x5de561101a50 -[DEBUG] EvalExpr: success, result = 0x5de561101a50 +[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 +[DEBUG] EvalExpr: success, result = 0x562c37de7fc0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16248,26 +18876,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 40 [DEBUG IRGEN] visitMulExp: 40 [DEBUG IRGEN] visitPrimaryExp: 40 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 40 created as 0x5de561102010 -[DEBUG IF] Creating condbr: %t107 -> then, merge +[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 +[DEBUG IF] Creating condbr: %t232 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[40]=40; [DEBUG IRGEN] visitStmt: s[40]=40; +[DEBUG IRGEN] HandleAssignStmt: s[40]=40; +[DEBUG IRGEN] EvalExpr: 40 +[DEBUG IRGEN] visitAddExp: 40 +[DEBUG IRGEN] visitMulExp: 40 +[DEBUG IRGEN] visitPrimaryExp: 40 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 +[DEBUG] EvalExpr: success, result = 0x562c37de86a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 40 [DEBUG IRGEN] visitAddExp: 40 [DEBUG IRGEN] visitMulExp: 40 [DEBUG IRGEN] visitPrimaryExp: 40 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 40 created as 0x5de561102010 -[DEBUG] EvalExpr: success, result = 0x5de561102010 +[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 +[DEBUG] EvalExpr: success, result = 0x562c37de86a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16280,26 +18917,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 41 [DEBUG IRGEN] visitMulExp: 41 [DEBUG IRGEN] visitPrimaryExp: 41 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 41 created as 0x5de5611025d0 -[DEBUG IF] Creating condbr: %t109 -> then, merge +[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 +[DEBUG IF] Creating condbr: %t235 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[41]=41; [DEBUG IRGEN] visitStmt: s[41]=41; +[DEBUG IRGEN] HandleAssignStmt: s[41]=41; +[DEBUG IRGEN] EvalExpr: 41 +[DEBUG IRGEN] visitAddExp: 41 +[DEBUG IRGEN] visitMulExp: 41 +[DEBUG IRGEN] visitPrimaryExp: 41 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 +[DEBUG] EvalExpr: success, result = 0x562c37de8d80 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 41 [DEBUG IRGEN] visitAddExp: 41 [DEBUG IRGEN] visitMulExp: 41 [DEBUG IRGEN] visitPrimaryExp: 41 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 41 created as 0x5de5611025d0 -[DEBUG] EvalExpr: success, result = 0x5de5611025d0 +[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 +[DEBUG] EvalExpr: success, result = 0x562c37de8d80 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16312,26 +18958,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 42 [DEBUG IRGEN] visitMulExp: 42 [DEBUG IRGEN] visitPrimaryExp: 42 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 42 created as 0x5de561102b90 -[DEBUG IF] Creating condbr: %t111 -> then, merge +[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 +[DEBUG IF] Creating condbr: %t238 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[42]=42; [DEBUG IRGEN] visitStmt: s[42]=42; +[DEBUG IRGEN] HandleAssignStmt: s[42]=42; +[DEBUG IRGEN] EvalExpr: 42 +[DEBUG IRGEN] visitAddExp: 42 +[DEBUG IRGEN] visitMulExp: 42 +[DEBUG IRGEN] visitPrimaryExp: 42 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 +[DEBUG] EvalExpr: success, result = 0x562c37de9460 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 42 [DEBUG IRGEN] visitAddExp: 42 [DEBUG IRGEN] visitMulExp: 42 [DEBUG IRGEN] visitPrimaryExp: 42 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 42 created as 0x5de561102b90 -[DEBUG] EvalExpr: success, result = 0x5de561102b90 +[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 +[DEBUG] EvalExpr: success, result = 0x562c37de9460 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16344,26 +18999,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 43 [DEBUG IRGEN] visitMulExp: 43 [DEBUG IRGEN] visitPrimaryExp: 43 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 43 created as 0x5de561103150 -[DEBUG IF] Creating condbr: %t113 -> then, merge +[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 +[DEBUG IF] Creating condbr: %t241 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[43]=43; [DEBUG IRGEN] visitStmt: s[43]=43; +[DEBUG IRGEN] HandleAssignStmt: s[43]=43; [DEBUG IRGEN] EvalExpr: 43 [DEBUG IRGEN] visitAddExp: 43 [DEBUG IRGEN] visitMulExp: 43 [DEBUG IRGEN] visitPrimaryExp: 43 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 43 created as 0x5de561103150 -[DEBUG] EvalExpr: success, result = 0x5de561103150 +[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 +[DEBUG] EvalExpr: success, result = 0x562c37de9b40 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 43 +[DEBUG IRGEN] visitAddExp: 43 +[DEBUG IRGEN] visitMulExp: 43 +[DEBUG IRGEN] visitPrimaryExp: 43 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 +[DEBUG] EvalExpr: success, result = 0x562c37de9b40 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16376,26 +19040,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 44 [DEBUG IRGEN] visitMulExp: 44 [DEBUG IRGEN] visitPrimaryExp: 44 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 44 created as 0x5de561103710 -[DEBUG IF] Creating condbr: %t115 -> then, merge +[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 +[DEBUG IF] Creating condbr: %t244 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[44]=44; [DEBUG IRGEN] visitStmt: s[44]=44; +[DEBUG IRGEN] HandleAssignStmt: s[44]=44; +[DEBUG IRGEN] EvalExpr: 44 +[DEBUG IRGEN] visitAddExp: 44 +[DEBUG IRGEN] visitMulExp: 44 +[DEBUG IRGEN] visitPrimaryExp: 44 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 +[DEBUG] EvalExpr: success, result = 0x562c37dea220 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 44 [DEBUG IRGEN] visitAddExp: 44 [DEBUG IRGEN] visitMulExp: 44 [DEBUG IRGEN] visitPrimaryExp: 44 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 44 created as 0x5de561103710 -[DEBUG] EvalExpr: success, result = 0x5de561103710 +[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 +[DEBUG] EvalExpr: success, result = 0x562c37dea220 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16408,26 +19081,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 45 [DEBUG IRGEN] visitMulExp: 45 [DEBUG IRGEN] visitPrimaryExp: 45 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 45 created as 0x5de561103cd0 -[DEBUG IF] Creating condbr: %t117 -> then, merge +[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 +[DEBUG IF] Creating condbr: %t247 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[45]=45; [DEBUG IRGEN] visitStmt: s[45]=45; +[DEBUG IRGEN] HandleAssignStmt: s[45]=45; +[DEBUG IRGEN] EvalExpr: 45 +[DEBUG IRGEN] visitAddExp: 45 +[DEBUG IRGEN] visitMulExp: 45 +[DEBUG IRGEN] visitPrimaryExp: 45 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 +[DEBUG] EvalExpr: success, result = 0x562c37dea900 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 45 [DEBUG IRGEN] visitAddExp: 45 [DEBUG IRGEN] visitMulExp: 45 [DEBUG IRGEN] visitPrimaryExp: 45 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 45 created as 0x5de561103cd0 -[DEBUG] EvalExpr: success, result = 0x5de561103cd0 +[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 +[DEBUG] EvalExpr: success, result = 0x562c37dea900 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16440,26 +19122,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 46 [DEBUG IRGEN] visitMulExp: 46 [DEBUG IRGEN] visitPrimaryExp: 46 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 46 created as 0x5de561104290 -[DEBUG IF] Creating condbr: %t119 -> then, merge +[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 +[DEBUG IF] Creating condbr: %t250 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[46]=46; [DEBUG IRGEN] visitStmt: s[46]=46; +[DEBUG IRGEN] HandleAssignStmt: s[46]=46; [DEBUG IRGEN] EvalExpr: 46 [DEBUG IRGEN] visitAddExp: 46 [DEBUG IRGEN] visitMulExp: 46 [DEBUG IRGEN] visitPrimaryExp: 46 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 46 created as 0x5de561104290 -[DEBUG] EvalExpr: success, result = 0x5de561104290 +[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 +[DEBUG] EvalExpr: success, result = 0x562c37deafe0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 46 +[DEBUG IRGEN] visitAddExp: 46 +[DEBUG IRGEN] visitMulExp: 46 +[DEBUG IRGEN] visitPrimaryExp: 46 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 +[DEBUG] EvalExpr: success, result = 0x562c37deafe0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16472,26 +19163,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 47 [DEBUG IRGEN] visitMulExp: 47 [DEBUG IRGEN] visitPrimaryExp: 47 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 47 created as 0x5de561104850 -[DEBUG IF] Creating condbr: %t121 -> then, merge +[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 +[DEBUG IF] Creating condbr: %t253 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[47]=47; [DEBUG IRGEN] visitStmt: s[47]=47; +[DEBUG IRGEN] HandleAssignStmt: s[47]=47; +[DEBUG IRGEN] EvalExpr: 47 +[DEBUG IRGEN] visitAddExp: 47 +[DEBUG IRGEN] visitMulExp: 47 +[DEBUG IRGEN] visitPrimaryExp: 47 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 +[DEBUG] EvalExpr: success, result = 0x562c37deb6c0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 47 [DEBUG IRGEN] visitAddExp: 47 [DEBUG IRGEN] visitMulExp: 47 [DEBUG IRGEN] visitPrimaryExp: 47 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 47 created as 0x5de561104850 -[DEBUG] EvalExpr: success, result = 0x5de561104850 +[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 +[DEBUG] EvalExpr: success, result = 0x562c37deb6c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16504,26 +19204,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 48 [DEBUG IRGEN] visitMulExp: 48 [DEBUG IRGEN] visitPrimaryExp: 48 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 48 created as 0x5de561104e10 -[DEBUG IF] Creating condbr: %t123 -> then, merge +[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 +[DEBUG IF] Creating condbr: %t256 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[48]=48; [DEBUG IRGEN] visitStmt: s[48]=48; +[DEBUG IRGEN] HandleAssignStmt: s[48]=48; +[DEBUG IRGEN] EvalExpr: 48 +[DEBUG IRGEN] visitAddExp: 48 +[DEBUG IRGEN] visitMulExp: 48 +[DEBUG IRGEN] visitPrimaryExp: 48 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 +[DEBUG] EvalExpr: success, result = 0x562c37debda0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 48 [DEBUG IRGEN] visitAddExp: 48 [DEBUG IRGEN] visitMulExp: 48 [DEBUG IRGEN] visitPrimaryExp: 48 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 48 created as 0x5de561104e10 -[DEBUG] EvalExpr: success, result = 0x5de561104e10 +[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 +[DEBUG] EvalExpr: success, result = 0x562c37debda0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16536,26 +19245,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 49 [DEBUG IRGEN] visitMulExp: 49 [DEBUG IRGEN] visitPrimaryExp: 49 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 49 created as 0x5de5611053d0 -[DEBUG IF] Creating condbr: %t125 -> then, merge +[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 +[DEBUG IF] Creating condbr: %t259 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[49]=49; [DEBUG IRGEN] visitStmt: s[49]=49; +[DEBUG IRGEN] HandleAssignStmt: s[49]=49; [DEBUG IRGEN] EvalExpr: 49 [DEBUG IRGEN] visitAddExp: 49 [DEBUG IRGEN] visitMulExp: 49 [DEBUG IRGEN] visitPrimaryExp: 49 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 49 created as 0x5de5611053d0 -[DEBUG] EvalExpr: success, result = 0x5de5611053d0 +[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 +[DEBUG] EvalExpr: success, result = 0x562c37dec480 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 49 +[DEBUG IRGEN] visitAddExp: 49 +[DEBUG IRGEN] visitMulExp: 49 +[DEBUG IRGEN] visitPrimaryExp: 49 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 +[DEBUG] EvalExpr: success, result = 0x562c37dec480 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16568,26 +19286,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 50 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x5de561105990 -[DEBUG IF] Creating condbr: %t127 -> then, merge +[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 +[DEBUG IF] Creating condbr: %t262 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[50]=50; [DEBUG IRGEN] visitStmt: s[50]=50; +[DEBUG IRGEN] HandleAssignStmt: s[50]=50; +[DEBUG IRGEN] EvalExpr: 50 +[DEBUG IRGEN] visitAddExp: 50 +[DEBUG IRGEN] visitMulExp: 50 +[DEBUG IRGEN] visitPrimaryExp: 50 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 +[DEBUG] EvalExpr: success, result = 0x562c37decb60 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 50 [DEBUG IRGEN] visitAddExp: 50 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x5de561105990 -[DEBUG] EvalExpr: success, result = 0x5de561105990 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 +[DEBUG] EvalExpr: success, result = 0x562c37decb60 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16600,26 +19327,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 51 [DEBUG IRGEN] visitMulExp: 51 [DEBUG IRGEN] visitPrimaryExp: 51 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 51 created as 0x5de561105f50 -[DEBUG IF] Creating condbr: %t129 -> then, merge +[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 +[DEBUG IF] Creating condbr: %t265 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[51]=51; [DEBUG IRGEN] visitStmt: s[51]=51; +[DEBUG IRGEN] HandleAssignStmt: s[51]=51; +[DEBUG IRGEN] EvalExpr: 51 +[DEBUG IRGEN] visitAddExp: 51 +[DEBUG IRGEN] visitMulExp: 51 +[DEBUG IRGEN] visitPrimaryExp: 51 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 +[DEBUG] EvalExpr: success, result = 0x562c37ded240 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 51 [DEBUG IRGEN] visitAddExp: 51 [DEBUG IRGEN] visitMulExp: 51 [DEBUG IRGEN] visitPrimaryExp: 51 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 51 created as 0x5de561105f50 -[DEBUG] EvalExpr: success, result = 0x5de561105f50 +[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 +[DEBUG] EvalExpr: success, result = 0x562c37ded240 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16632,26 +19368,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 52 [DEBUG IRGEN] visitMulExp: 52 [DEBUG IRGEN] visitPrimaryExp: 52 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 52 created as 0x5de561106510 -[DEBUG IF] Creating condbr: %t131 -> then, merge +[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 +[DEBUG IF] Creating condbr: %t268 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[52]=52; [DEBUG IRGEN] visitStmt: s[52]=52; +[DEBUG IRGEN] HandleAssignStmt: s[52]=52; [DEBUG IRGEN] EvalExpr: 52 [DEBUG IRGEN] visitAddExp: 52 [DEBUG IRGEN] visitMulExp: 52 [DEBUG IRGEN] visitPrimaryExp: 52 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 52 created as 0x5de561106510 -[DEBUG] EvalExpr: success, result = 0x5de561106510 +[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 +[DEBUG] EvalExpr: success, result = 0x562c37ded920 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 52 +[DEBUG IRGEN] visitAddExp: 52 +[DEBUG IRGEN] visitMulExp: 52 +[DEBUG IRGEN] visitPrimaryExp: 52 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 +[DEBUG] EvalExpr: success, result = 0x562c37ded920 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16664,26 +19409,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 53 [DEBUG IRGEN] visitMulExp: 53 [DEBUG IRGEN] visitPrimaryExp: 53 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 53 created as 0x5de561106ad0 -[DEBUG IF] Creating condbr: %t133 -> then, merge +[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 +[DEBUG IF] Creating condbr: %t271 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[53]=53; [DEBUG IRGEN] visitStmt: s[53]=53; +[DEBUG IRGEN] HandleAssignStmt: s[53]=53; +[DEBUG IRGEN] EvalExpr: 53 +[DEBUG IRGEN] visitAddExp: 53 +[DEBUG IRGEN] visitMulExp: 53 +[DEBUG IRGEN] visitPrimaryExp: 53 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 +[DEBUG] EvalExpr: success, result = 0x562c37dee000 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 53 [DEBUG IRGEN] visitAddExp: 53 [DEBUG IRGEN] visitMulExp: 53 [DEBUG IRGEN] visitPrimaryExp: 53 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 53 created as 0x5de561106ad0 -[DEBUG] EvalExpr: success, result = 0x5de561106ad0 +[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 +[DEBUG] EvalExpr: success, result = 0x562c37dee000 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16696,26 +19450,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 54 [DEBUG IRGEN] visitMulExp: 54 [DEBUG IRGEN] visitPrimaryExp: 54 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 54 created as 0x5de561107090 -[DEBUG IF] Creating condbr: %t135 -> then, merge +[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 +[DEBUG IF] Creating condbr: %t274 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[54]=54; [DEBUG IRGEN] visitStmt: s[54]=54; +[DEBUG IRGEN] HandleAssignStmt: s[54]=54; +[DEBUG IRGEN] EvalExpr: 54 +[DEBUG IRGEN] visitAddExp: 54 +[DEBUG IRGEN] visitMulExp: 54 +[DEBUG IRGEN] visitPrimaryExp: 54 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 +[DEBUG] EvalExpr: success, result = 0x562c37dee6e0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 54 [DEBUG IRGEN] visitAddExp: 54 [DEBUG IRGEN] visitMulExp: 54 [DEBUG IRGEN] visitPrimaryExp: 54 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 54 created as 0x5de561107090 -[DEBUG] EvalExpr: success, result = 0x5de561107090 +[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 +[DEBUG] EvalExpr: success, result = 0x562c37dee6e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16728,26 +19491,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 55 [DEBUG IRGEN] visitMulExp: 55 [DEBUG IRGEN] visitPrimaryExp: 55 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 55 created as 0x5de561107650 -[DEBUG IF] Creating condbr: %t137 -> then, merge +[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 +[DEBUG IF] Creating condbr: %t277 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[55]=55; [DEBUG IRGEN] visitStmt: s[55]=55; +[DEBUG IRGEN] HandleAssignStmt: s[55]=55; [DEBUG IRGEN] EvalExpr: 55 [DEBUG IRGEN] visitAddExp: 55 [DEBUG IRGEN] visitMulExp: 55 [DEBUG IRGEN] visitPrimaryExp: 55 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 55 created as 0x5de561107650 -[DEBUG] EvalExpr: success, result = 0x5de561107650 +[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 +[DEBUG] EvalExpr: success, result = 0x562c37deedc0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 55 +[DEBUG IRGEN] visitAddExp: 55 +[DEBUG IRGEN] visitMulExp: 55 +[DEBUG IRGEN] visitPrimaryExp: 55 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 +[DEBUG] EvalExpr: success, result = 0x562c37deedc0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16760,26 +19532,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 56 [DEBUG IRGEN] visitMulExp: 56 [DEBUG IRGEN] visitPrimaryExp: 56 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 56 created as 0x5de561107c10 -[DEBUG IF] Creating condbr: %t139 -> then, merge +[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 +[DEBUG IF] Creating condbr: %t280 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[56]=56; [DEBUG IRGEN] visitStmt: s[56]=56; +[DEBUG IRGEN] HandleAssignStmt: s[56]=56; +[DEBUG IRGEN] EvalExpr: 56 +[DEBUG IRGEN] visitAddExp: 56 +[DEBUG IRGEN] visitMulExp: 56 +[DEBUG IRGEN] visitPrimaryExp: 56 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 +[DEBUG] EvalExpr: success, result = 0x562c37def4a0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 56 [DEBUG IRGEN] visitAddExp: 56 [DEBUG IRGEN] visitMulExp: 56 [DEBUG IRGEN] visitPrimaryExp: 56 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 56 created as 0x5de561107c10 -[DEBUG] EvalExpr: success, result = 0x5de561107c10 +[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 +[DEBUG] EvalExpr: success, result = 0x562c37def4a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16792,26 +19573,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 57 [DEBUG IRGEN] visitMulExp: 57 [DEBUG IRGEN] visitPrimaryExp: 57 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 57 created as 0x5de5611081d0 -[DEBUG IF] Creating condbr: %t141 -> then, merge +[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 +[DEBUG IF] Creating condbr: %t283 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[57]=57; [DEBUG IRGEN] visitStmt: s[57]=57; +[DEBUG IRGEN] HandleAssignStmt: s[57]=57; +[DEBUG IRGEN] EvalExpr: 57 +[DEBUG IRGEN] visitAddExp: 57 +[DEBUG IRGEN] visitMulExp: 57 +[DEBUG IRGEN] visitPrimaryExp: 57 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 +[DEBUG] EvalExpr: success, result = 0x562c37defb80 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 57 [DEBUG IRGEN] visitAddExp: 57 [DEBUG IRGEN] visitMulExp: 57 [DEBUG IRGEN] visitPrimaryExp: 57 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 57 created as 0x5de5611081d0 -[DEBUG] EvalExpr: success, result = 0x5de5611081d0 +[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 +[DEBUG] EvalExpr: success, result = 0x562c37defb80 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16824,26 +19614,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 58 [DEBUG IRGEN] visitMulExp: 58 [DEBUG IRGEN] visitPrimaryExp: 58 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 58 created as 0x5de561108790 -[DEBUG IF] Creating condbr: %t143 -> then, merge +[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 +[DEBUG IF] Creating condbr: %t286 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[58]=58; [DEBUG IRGEN] visitStmt: s[58]=58; +[DEBUG IRGEN] HandleAssignStmt: s[58]=58; [DEBUG IRGEN] EvalExpr: 58 [DEBUG IRGEN] visitAddExp: 58 [DEBUG IRGEN] visitMulExp: 58 [DEBUG IRGEN] visitPrimaryExp: 58 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 58 created as 0x5de561108790 -[DEBUG] EvalExpr: success, result = 0x5de561108790 +[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 +[DEBUG] EvalExpr: success, result = 0x562c37df0260 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 58 +[DEBUG IRGEN] visitAddExp: 58 +[DEBUG IRGEN] visitMulExp: 58 +[DEBUG IRGEN] visitPrimaryExp: 58 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 +[DEBUG] EvalExpr: success, result = 0x562c37df0260 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16856,26 +19655,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 59 [DEBUG IRGEN] visitMulExp: 59 [DEBUG IRGEN] visitPrimaryExp: 59 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 59 created as 0x5de561108d50 -[DEBUG IF] Creating condbr: %t145 -> then, merge +[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 +[DEBUG IF] Creating condbr: %t289 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[59]=59; [DEBUG IRGEN] visitStmt: s[59]=59; +[DEBUG IRGEN] HandleAssignStmt: s[59]=59; +[DEBUG IRGEN] EvalExpr: 59 +[DEBUG IRGEN] visitAddExp: 59 +[DEBUG IRGEN] visitMulExp: 59 +[DEBUG IRGEN] visitPrimaryExp: 59 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 +[DEBUG] EvalExpr: success, result = 0x562c37df0940 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 59 [DEBUG IRGEN] visitAddExp: 59 [DEBUG IRGEN] visitMulExp: 59 [DEBUG IRGEN] visitPrimaryExp: 59 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 59 created as 0x5de561108d50 -[DEBUG] EvalExpr: success, result = 0x5de561108d50 +[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 +[DEBUG] EvalExpr: success, result = 0x562c37df0940 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16888,26 +19696,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 60 [DEBUG IRGEN] visitMulExp: 60 [DEBUG IRGEN] visitPrimaryExp: 60 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 60 created as 0x5de561109310 -[DEBUG IF] Creating condbr: %t147 -> then, merge +[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 +[DEBUG IF] Creating condbr: %t292 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[60]=60; [DEBUG IRGEN] visitStmt: s[60]=60; +[DEBUG IRGEN] HandleAssignStmt: s[60]=60; +[DEBUG IRGEN] EvalExpr: 60 +[DEBUG IRGEN] visitAddExp: 60 +[DEBUG IRGEN] visitMulExp: 60 +[DEBUG IRGEN] visitPrimaryExp: 60 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 +[DEBUG] EvalExpr: success, result = 0x562c37df1020 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 60 [DEBUG IRGEN] visitAddExp: 60 [DEBUG IRGEN] visitMulExp: 60 [DEBUG IRGEN] visitPrimaryExp: 60 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 60 created as 0x5de561109310 -[DEBUG] EvalExpr: success, result = 0x5de561109310 +[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 +[DEBUG] EvalExpr: success, result = 0x562c37df1020 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16920,26 +19737,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 61 [DEBUG IRGEN] visitMulExp: 61 [DEBUG IRGEN] visitPrimaryExp: 61 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 61 created as 0x5de5611098d0 -[DEBUG IF] Creating condbr: %t149 -> then, merge +[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 +[DEBUG IF] Creating condbr: %t295 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[61]=61; [DEBUG IRGEN] visitStmt: s[61]=61; +[DEBUG IRGEN] HandleAssignStmt: s[61]=61; [DEBUG IRGEN] EvalExpr: 61 [DEBUG IRGEN] visitAddExp: 61 [DEBUG IRGEN] visitMulExp: 61 [DEBUG IRGEN] visitPrimaryExp: 61 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 61 created as 0x5de5611098d0 -[DEBUG] EvalExpr: success, result = 0x5de5611098d0 +[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 +[DEBUG] EvalExpr: success, result = 0x562c37df1700 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 61 +[DEBUG IRGEN] visitAddExp: 61 +[DEBUG IRGEN] visitMulExp: 61 +[DEBUG IRGEN] visitPrimaryExp: 61 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 +[DEBUG] EvalExpr: success, result = 0x562c37df1700 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16952,26 +19778,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 62 [DEBUG IRGEN] visitMulExp: 62 [DEBUG IRGEN] visitPrimaryExp: 62 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 62 created as 0x5de56110a6a0 -[DEBUG IF] Creating condbr: %t151 -> then, merge +[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 +[DEBUG IF] Creating condbr: %t298 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[62]=62; [DEBUG IRGEN] visitStmt: s[62]=62; +[DEBUG IRGEN] HandleAssignStmt: s[62]=62; +[DEBUG IRGEN] EvalExpr: 62 +[DEBUG IRGEN] visitAddExp: 62 +[DEBUG IRGEN] visitMulExp: 62 +[DEBUG IRGEN] visitPrimaryExp: 62 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 +[DEBUG] EvalExpr: success, result = 0x562c37df25f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 62 [DEBUG IRGEN] visitAddExp: 62 [DEBUG IRGEN] visitMulExp: 62 [DEBUG IRGEN] visitPrimaryExp: 62 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 62 created as 0x5de56110a6a0 -[DEBUG] EvalExpr: success, result = 0x5de56110a6a0 +[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 +[DEBUG] EvalExpr: success, result = 0x562c37df25f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -16984,26 +19819,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 63 [DEBUG IRGEN] visitMulExp: 63 [DEBUG IRGEN] visitPrimaryExp: 63 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 63 created as 0x5de56110ac60 -[DEBUG IF] Creating condbr: %t153 -> then, merge +[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 +[DEBUG IF] Creating condbr: %t301 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[63]=63; [DEBUG IRGEN] visitStmt: s[63]=63; +[DEBUG IRGEN] HandleAssignStmt: s[63]=63; +[DEBUG IRGEN] EvalExpr: 63 +[DEBUG IRGEN] visitAddExp: 63 +[DEBUG IRGEN] visitMulExp: 63 +[DEBUG IRGEN] visitPrimaryExp: 63 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 +[DEBUG] EvalExpr: success, result = 0x562c37df2cd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 63 [DEBUG IRGEN] visitAddExp: 63 [DEBUG IRGEN] visitMulExp: 63 [DEBUG IRGEN] visitPrimaryExp: 63 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 63 created as 0x5de56110ac60 -[DEBUG] EvalExpr: success, result = 0x5de56110ac60 +[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 +[DEBUG] EvalExpr: success, result = 0x562c37df2cd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17016,26 +19860,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 64 [DEBUG IRGEN] visitMulExp: 64 [DEBUG IRGEN] visitPrimaryExp: 64 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 64 created as 0x5de56110b220 -[DEBUG IF] Creating condbr: %t155 -> then, merge +[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 +[DEBUG IF] Creating condbr: %t304 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[64]=64; [DEBUG IRGEN] visitStmt: s[64]=64; +[DEBUG IRGEN] HandleAssignStmt: s[64]=64; [DEBUG IRGEN] EvalExpr: 64 [DEBUG IRGEN] visitAddExp: 64 [DEBUG IRGEN] visitMulExp: 64 [DEBUG IRGEN] visitPrimaryExp: 64 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 64 created as 0x5de56110b220 -[DEBUG] EvalExpr: success, result = 0x5de56110b220 +[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 +[DEBUG] EvalExpr: success, result = 0x562c37df33b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 64 +[DEBUG IRGEN] visitAddExp: 64 +[DEBUG IRGEN] visitMulExp: 64 +[DEBUG IRGEN] visitPrimaryExp: 64 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 +[DEBUG] EvalExpr: success, result = 0x562c37df33b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17048,26 +19901,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 65 [DEBUG IRGEN] visitMulExp: 65 [DEBUG IRGEN] visitPrimaryExp: 65 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65 created as 0x5de5610febb0 -[DEBUG IF] Creating condbr: %t157 -> then, merge +[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 +[DEBUG IF] Creating condbr: %t307 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[65]=65; [DEBUG IRGEN] visitStmt: s[65]=65; +[DEBUG IRGEN] HandleAssignStmt: s[65]=65; +[DEBUG IRGEN] EvalExpr: 65 +[DEBUG IRGEN] visitAddExp: 65 +[DEBUG IRGEN] visitMulExp: 65 +[DEBUG IRGEN] visitPrimaryExp: 65 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 +[DEBUG] EvalExpr: success, result = 0x562c37de4a60 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 65 [DEBUG IRGEN] visitAddExp: 65 [DEBUG IRGEN] visitMulExp: 65 [DEBUG IRGEN] visitPrimaryExp: 65 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65 created as 0x5de5610febb0 -[DEBUG] EvalExpr: success, result = 0x5de5610febb0 +[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 +[DEBUG] EvalExpr: success, result = 0x562c37de4a60 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17080,26 +19942,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 66 [DEBUG IRGEN] visitMulExp: 66 [DEBUG IRGEN] visitPrimaryExp: 66 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 66 created as 0x5de5610ff350 -[DEBUG IF] Creating condbr: %t159 -> then, merge +[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 +[DEBUG IF] Creating condbr: %t310 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[66]=66; [DEBUG IRGEN] visitStmt: s[66]=66; +[DEBUG IRGEN] HandleAssignStmt: s[66]=66; +[DEBUG IRGEN] EvalExpr: 66 +[DEBUG IRGEN] visitAddExp: 66 +[DEBUG IRGEN] visitMulExp: 66 +[DEBUG IRGEN] visitPrimaryExp: 66 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 +[DEBUG] EvalExpr: success, result = 0x562c37de4bd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 66 [DEBUG IRGEN] visitAddExp: 66 [DEBUG IRGEN] visitMulExp: 66 [DEBUG IRGEN] visitPrimaryExp: 66 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 66 created as 0x5de5610ff350 -[DEBUG] EvalExpr: success, result = 0x5de5610ff350 +[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 +[DEBUG] EvalExpr: success, result = 0x562c37de4bd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17112,26 +19983,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 67 [DEBUG IRGEN] visitMulExp: 67 [DEBUG IRGEN] visitPrimaryExp: 67 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 67 created as 0x5de56110d000 -[DEBUG IF] Creating condbr: %t161 -> then, merge +[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 +[DEBUG IF] Creating condbr: %t313 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[67]=67; [DEBUG IRGEN] visitStmt: s[67]=67; +[DEBUG IRGEN] HandleAssignStmt: s[67]=67; [DEBUG IRGEN] EvalExpr: 67 [DEBUG IRGEN] visitAddExp: 67 [DEBUG IRGEN] visitMulExp: 67 [DEBUG IRGEN] visitPrimaryExp: 67 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 67 created as 0x5de56110d000 -[DEBUG] EvalExpr: success, result = 0x5de56110d000 +[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 +[DEBUG] EvalExpr: success, result = 0x562c37df5450 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 67 +[DEBUG IRGEN] visitAddExp: 67 +[DEBUG IRGEN] visitMulExp: 67 +[DEBUG IRGEN] visitPrimaryExp: 67 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 +[DEBUG] EvalExpr: success, result = 0x562c37df5450 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17144,26 +20024,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 68 [DEBUG IRGEN] visitMulExp: 68 [DEBUG IRGEN] visitPrimaryExp: 68 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 68 created as 0x5de56110d5c0 -[DEBUG IF] Creating condbr: %t163 -> then, merge +[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 +[DEBUG IF] Creating condbr: %t316 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[68]=68; [DEBUG IRGEN] visitStmt: s[68]=68; +[DEBUG IRGEN] HandleAssignStmt: s[68]=68; +[DEBUG IRGEN] EvalExpr: 68 +[DEBUG IRGEN] visitAddExp: 68 +[DEBUG IRGEN] visitMulExp: 68 +[DEBUG IRGEN] visitPrimaryExp: 68 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 +[DEBUG] EvalExpr: success, result = 0x562c37df5b30 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 68 [DEBUG IRGEN] visitAddExp: 68 [DEBUG IRGEN] visitMulExp: 68 [DEBUG IRGEN] visitPrimaryExp: 68 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 68 created as 0x5de56110d5c0 -[DEBUG] EvalExpr: success, result = 0x5de56110d5c0 +[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 +[DEBUG] EvalExpr: success, result = 0x562c37df5b30 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17176,26 +20065,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 69 [DEBUG IRGEN] visitMulExp: 69 [DEBUG IRGEN] visitPrimaryExp: 69 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 69 created as 0x5de56110db80 -[DEBUG IF] Creating condbr: %t165 -> then, merge +[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 +[DEBUG IF] Creating condbr: %t319 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[69]=69; [DEBUG IRGEN] visitStmt: s[69]=69; +[DEBUG IRGEN] HandleAssignStmt: s[69]=69; +[DEBUG IRGEN] EvalExpr: 69 +[DEBUG IRGEN] visitAddExp: 69 +[DEBUG IRGEN] visitMulExp: 69 +[DEBUG IRGEN] visitPrimaryExp: 69 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 +[DEBUG] EvalExpr: success, result = 0x562c37df6210 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 69 [DEBUG IRGEN] visitAddExp: 69 [DEBUG IRGEN] visitMulExp: 69 [DEBUG IRGEN] visitPrimaryExp: 69 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 69 created as 0x5de56110db80 -[DEBUG] EvalExpr: success, result = 0x5de56110db80 +[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 +[DEBUG] EvalExpr: success, result = 0x562c37df6210 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17208,26 +20106,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 70 [DEBUG IRGEN] visitMulExp: 70 [DEBUG IRGEN] visitPrimaryExp: 70 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 70 created as 0x5de56110e140 -[DEBUG IF] Creating condbr: %t167 -> then, merge +[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 +[DEBUG IF] Creating condbr: %t322 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[70]=70; [DEBUG IRGEN] visitStmt: s[70]=70; +[DEBUG IRGEN] HandleAssignStmt: s[70]=70; [DEBUG IRGEN] EvalExpr: 70 [DEBUG IRGEN] visitAddExp: 70 [DEBUG IRGEN] visitMulExp: 70 [DEBUG IRGEN] visitPrimaryExp: 70 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 70 created as 0x5de56110e140 -[DEBUG] EvalExpr: success, result = 0x5de56110e140 +[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 +[DEBUG] EvalExpr: success, result = 0x562c37df68f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 70 +[DEBUG IRGEN] visitAddExp: 70 +[DEBUG IRGEN] visitMulExp: 70 +[DEBUG IRGEN] visitPrimaryExp: 70 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 +[DEBUG] EvalExpr: success, result = 0x562c37df68f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17240,26 +20147,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 71 [DEBUG IRGEN] visitMulExp: 71 [DEBUG IRGEN] visitPrimaryExp: 71 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 71 created as 0x5de56110e700 -[DEBUG IF] Creating condbr: %t169 -> then, merge +[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 +[DEBUG IF] Creating condbr: %t325 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[71]=71; [DEBUG IRGEN] visitStmt: s[71]=71; +[DEBUG IRGEN] HandleAssignStmt: s[71]=71; +[DEBUG IRGEN] EvalExpr: 71 +[DEBUG IRGEN] visitAddExp: 71 +[DEBUG IRGEN] visitMulExp: 71 +[DEBUG IRGEN] visitPrimaryExp: 71 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 +[DEBUG] EvalExpr: success, result = 0x562c37df6fd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 71 [DEBUG IRGEN] visitAddExp: 71 [DEBUG IRGEN] visitMulExp: 71 [DEBUG IRGEN] visitPrimaryExp: 71 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 71 created as 0x5de56110e700 -[DEBUG] EvalExpr: success, result = 0x5de56110e700 +[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 +[DEBUG] EvalExpr: success, result = 0x562c37df6fd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17272,26 +20188,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 72 [DEBUG IRGEN] visitMulExp: 72 [DEBUG IRGEN] visitPrimaryExp: 72 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 72 created as 0x5de56110ecc0 -[DEBUG IF] Creating condbr: %t171 -> then, merge +[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 +[DEBUG IF] Creating condbr: %t328 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[72]=72; [DEBUG IRGEN] visitStmt: s[72]=72; +[DEBUG IRGEN] HandleAssignStmt: s[72]=72; +[DEBUG IRGEN] EvalExpr: 72 +[DEBUG IRGEN] visitAddExp: 72 +[DEBUG IRGEN] visitMulExp: 72 +[DEBUG IRGEN] visitPrimaryExp: 72 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 +[DEBUG] EvalExpr: success, result = 0x562c37df76b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 72 [DEBUG IRGEN] visitAddExp: 72 [DEBUG IRGEN] visitMulExp: 72 [DEBUG IRGEN] visitPrimaryExp: 72 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 72 created as 0x5de56110ecc0 -[DEBUG] EvalExpr: success, result = 0x5de56110ecc0 +[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 +[DEBUG] EvalExpr: success, result = 0x562c37df76b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17304,26 +20229,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 73 [DEBUG IRGEN] visitMulExp: 73 [DEBUG IRGEN] visitPrimaryExp: 73 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 73 created as 0x5de56110f280 -[DEBUG IF] Creating condbr: %t173 -> then, merge +[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 +[DEBUG IF] Creating condbr: %t331 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[73]=73; [DEBUG IRGEN] visitStmt: s[73]=73; +[DEBUG IRGEN] HandleAssignStmt: s[73]=73; [DEBUG IRGEN] EvalExpr: 73 [DEBUG IRGEN] visitAddExp: 73 [DEBUG IRGEN] visitMulExp: 73 [DEBUG IRGEN] visitPrimaryExp: 73 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 73 created as 0x5de56110f280 -[DEBUG] EvalExpr: success, result = 0x5de56110f280 +[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 +[DEBUG] EvalExpr: success, result = 0x562c37df7d90 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 73 +[DEBUG IRGEN] visitAddExp: 73 +[DEBUG IRGEN] visitMulExp: 73 +[DEBUG IRGEN] visitPrimaryExp: 73 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 +[DEBUG] EvalExpr: success, result = 0x562c37df7d90 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17336,26 +20270,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 74 [DEBUG IRGEN] visitMulExp: 74 [DEBUG IRGEN] visitPrimaryExp: 74 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 74 created as 0x5de56110f840 -[DEBUG IF] Creating condbr: %t175 -> then, merge +[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 +[DEBUG IF] Creating condbr: %t334 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[74]=74; [DEBUG IRGEN] visitStmt: s[74]=74; +[DEBUG IRGEN] HandleAssignStmt: s[74]=74; +[DEBUG IRGEN] EvalExpr: 74 +[DEBUG IRGEN] visitAddExp: 74 +[DEBUG IRGEN] visitMulExp: 74 +[DEBUG IRGEN] visitPrimaryExp: 74 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 +[DEBUG] EvalExpr: success, result = 0x562c37df8470 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 74 [DEBUG IRGEN] visitAddExp: 74 [DEBUG IRGEN] visitMulExp: 74 [DEBUG IRGEN] visitPrimaryExp: 74 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 74 created as 0x5de56110f840 -[DEBUG] EvalExpr: success, result = 0x5de56110f840 +[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 +[DEBUG] EvalExpr: success, result = 0x562c37df8470 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17368,26 +20311,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 75 [DEBUG IRGEN] visitMulExp: 75 [DEBUG IRGEN] visitPrimaryExp: 75 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 75 created as 0x5de56110fe00 -[DEBUG IF] Creating condbr: %t177 -> then, merge +[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 +[DEBUG IF] Creating condbr: %t337 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[75]=75; [DEBUG IRGEN] visitStmt: s[75]=75; +[DEBUG IRGEN] HandleAssignStmt: s[75]=75; +[DEBUG IRGEN] EvalExpr: 75 +[DEBUG IRGEN] visitAddExp: 75 +[DEBUG IRGEN] visitMulExp: 75 +[DEBUG IRGEN] visitPrimaryExp: 75 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 +[DEBUG] EvalExpr: success, result = 0x562c37df8b50 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 75 [DEBUG IRGEN] visitAddExp: 75 [DEBUG IRGEN] visitMulExp: 75 [DEBUG IRGEN] visitPrimaryExp: 75 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 75 created as 0x5de56110fe00 -[DEBUG] EvalExpr: success, result = 0x5de56110fe00 +[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 +[DEBUG] EvalExpr: success, result = 0x562c37df8b50 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} @@ -17400,26 +20352,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 76 [DEBUG IRGEN] visitMulExp: 76 [DEBUG IRGEN] visitPrimaryExp: 76 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 76 created as 0x5de5611103c0 -[DEBUG IF] Creating condbr: %t179 -> then, merge +[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 +[DEBUG IF] Creating condbr: %t340 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[76]=76; [DEBUG IRGEN] visitStmt: s[76]=76; +[DEBUG IRGEN] HandleAssignStmt: s[76]=76; [DEBUG IRGEN] EvalExpr: 76 [DEBUG IRGEN] visitAddExp: 76 [DEBUG IRGEN] visitMulExp: 76 [DEBUG IRGEN] visitPrimaryExp: 76 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 76 created as 0x5de5611103c0 -[DEBUG] EvalExpr: success, result = 0x5de5611103c0 +[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 +[DEBUG] EvalExpr: success, result = 0x562c37df9230 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 76 +[DEBUG IRGEN] visitAddExp: 76 +[DEBUG IRGEN] visitMulExp: 76 +[DEBUG IRGEN] visitPrimaryExp: 76 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 +[DEBUG] EvalExpr: success, result = 0x562c37df9230 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} @@ -17432,26 +20393,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 77 [DEBUG IRGEN] visitMulExp: 77 [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x5de561110980 -[DEBUG IF] Creating condbr: %t181 -> then, merge +[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 +[DEBUG IF] Creating condbr: %t343 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[77]=77; [DEBUG IRGEN] visitStmt: s[77]=77; +[DEBUG IRGEN] HandleAssignStmt: s[77]=77; +[DEBUG IRGEN] EvalExpr: 77 +[DEBUG IRGEN] visitAddExp: 77 +[DEBUG IRGEN] visitMulExp: 77 +[DEBUG IRGEN] visitPrimaryExp: 77 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 +[DEBUG] EvalExpr: success, result = 0x562c37df9910 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 77 [DEBUG IRGEN] visitAddExp: 77 [DEBUG IRGEN] visitMulExp: 77 [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x5de561110980 -[DEBUG] EvalExpr: success, result = 0x5de561110980 +[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 +[DEBUG] EvalExpr: success, result = 0x562c37df9910 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} @@ -17464,26 +20434,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 78 [DEBUG IRGEN] visitMulExp: 78 [DEBUG IRGEN] visitPrimaryExp: 78 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 78 created as 0x5de561110f40 -[DEBUG IF] Creating condbr: %t183 -> then, merge +[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 +[DEBUG IF] Creating condbr: %t346 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[78]=78; [DEBUG IRGEN] visitStmt: s[78]=78; +[DEBUG IRGEN] HandleAssignStmt: s[78]=78; +[DEBUG IRGEN] EvalExpr: 78 +[DEBUG IRGEN] visitAddExp: 78 +[DEBUG IRGEN] visitMulExp: 78 +[DEBUG IRGEN] visitPrimaryExp: 78 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 +[DEBUG] EvalExpr: success, result = 0x562c37df9ff0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 78 [DEBUG IRGEN] visitAddExp: 78 [DEBUG IRGEN] visitMulExp: 78 [DEBUG IRGEN] visitPrimaryExp: 78 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 78 created as 0x5de561110f40 -[DEBUG] EvalExpr: success, result = 0x5de561110f40 +[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 +[DEBUG] EvalExpr: success, result = 0x562c37df9ff0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} @@ -17496,26 +20475,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 79 [DEBUG IRGEN] visitMulExp: 79 [DEBUG IRGEN] visitPrimaryExp: 79 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 79 created as 0x5de561111500 -[DEBUG IF] Creating condbr: %t185 -> then, merge +[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 +[DEBUG IF] Creating condbr: %t349 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[79]=79; [DEBUG IRGEN] visitStmt: s[79]=79; +[DEBUG IRGEN] HandleAssignStmt: s[79]=79; [DEBUG IRGEN] EvalExpr: 79 [DEBUG IRGEN] visitAddExp: 79 [DEBUG IRGEN] visitMulExp: 79 [DEBUG IRGEN] visitPrimaryExp: 79 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 79 created as 0x5de561111500 -[DEBUG] EvalExpr: success, result = 0x5de561111500 +[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 +[DEBUG] EvalExpr: success, result = 0x562c37dfa6d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 79 +[DEBUG IRGEN] visitAddExp: 79 +[DEBUG IRGEN] visitMulExp: 79 +[DEBUG IRGEN] visitPrimaryExp: 79 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 +[DEBUG] EvalExpr: success, result = 0x562c37dfa6d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} @@ -17528,26 +20516,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 80 [DEBUG IRGEN] visitMulExp: 80 [DEBUG IRGEN] visitPrimaryExp: 80 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 80 created as 0x5de561111ac0 -[DEBUG IF] Creating condbr: %t187 -> then, merge +[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 +[DEBUG IF] Creating condbr: %t352 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[80]=80; [DEBUG IRGEN] visitStmt: s[80]=80; +[DEBUG IRGEN] HandleAssignStmt: s[80]=80; +[DEBUG IRGEN] EvalExpr: 80 +[DEBUG IRGEN] visitAddExp: 80 +[DEBUG IRGEN] visitMulExp: 80 +[DEBUG IRGEN] visitPrimaryExp: 80 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 +[DEBUG] EvalExpr: success, result = 0x562c37dfadb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 80 [DEBUG IRGEN] visitAddExp: 80 [DEBUG IRGEN] visitMulExp: 80 [DEBUG IRGEN] visitPrimaryExp: 80 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 80 created as 0x5de561111ac0 -[DEBUG] EvalExpr: success, result = 0x5de561111ac0 +[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 +[DEBUG] EvalExpr: success, result = 0x562c37dfadb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} @@ -17560,26 +20557,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 81 [DEBUG IRGEN] visitMulExp: 81 [DEBUG IRGEN] visitPrimaryExp: 81 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 81 created as 0x5de561112080 -[DEBUG IF] Creating condbr: %t189 -> then, merge +[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 +[DEBUG IF] Creating condbr: %t355 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[81]=81; [DEBUG IRGEN] visitStmt: s[81]=81; +[DEBUG IRGEN] HandleAssignStmt: s[81]=81; +[DEBUG IRGEN] EvalExpr: 81 +[DEBUG IRGEN] visitAddExp: 81 +[DEBUG IRGEN] visitMulExp: 81 +[DEBUG IRGEN] visitPrimaryExp: 81 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 +[DEBUG] EvalExpr: success, result = 0x562c37dfb490 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 81 [DEBUG IRGEN] visitAddExp: 81 [DEBUG IRGEN] visitMulExp: 81 [DEBUG IRGEN] visitPrimaryExp: 81 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 81 created as 0x5de561112080 -[DEBUG] EvalExpr: success, result = 0x5de561112080 +[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 +[DEBUG] EvalExpr: success, result = 0x562c37dfb490 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} @@ -17592,26 +20598,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 82 [DEBUG IRGEN] visitMulExp: 82 [DEBUG IRGEN] visitPrimaryExp: 82 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 82 created as 0x5de561112640 -[DEBUG IF] Creating condbr: %t191 -> then, merge +[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 +[DEBUG IF] Creating condbr: %t358 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[82]=82; [DEBUG IRGEN] visitStmt: s[82]=82; +[DEBUG IRGEN] HandleAssignStmt: s[82]=82; [DEBUG IRGEN] EvalExpr: 82 [DEBUG IRGEN] visitAddExp: 82 [DEBUG IRGEN] visitMulExp: 82 [DEBUG IRGEN] visitPrimaryExp: 82 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 82 created as 0x5de561112640 -[DEBUG] EvalExpr: success, result = 0x5de561112640 +[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 +[DEBUG] EvalExpr: success, result = 0x562c37dfbb70 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 82 +[DEBUG IRGEN] visitAddExp: 82 +[DEBUG IRGEN] visitMulExp: 82 +[DEBUG IRGEN] visitPrimaryExp: 82 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 +[DEBUG] EvalExpr: success, result = 0x562c37dfbb70 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} @@ -17624,26 +20639,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 83 [DEBUG IRGEN] visitMulExp: 83 [DEBUG IRGEN] visitPrimaryExp: 83 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 83 created as 0x5de561112c00 -[DEBUG IF] Creating condbr: %t193 -> then, merge +[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 +[DEBUG IF] Creating condbr: %t361 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[83]=83; [DEBUG IRGEN] visitStmt: s[83]=83; +[DEBUG IRGEN] HandleAssignStmt: s[83]=83; +[DEBUG IRGEN] EvalExpr: 83 +[DEBUG IRGEN] visitAddExp: 83 +[DEBUG IRGEN] visitMulExp: 83 +[DEBUG IRGEN] visitPrimaryExp: 83 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 +[DEBUG] EvalExpr: success, result = 0x562c37dfc250 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 83 [DEBUG IRGEN] visitAddExp: 83 [DEBUG IRGEN] visitMulExp: 83 [DEBUG IRGEN] visitPrimaryExp: 83 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 83 created as 0x5de561112c00 -[DEBUG] EvalExpr: success, result = 0x5de561112c00 +[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 +[DEBUG] EvalExpr: success, result = 0x562c37dfc250 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} @@ -17656,26 +20680,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 84 [DEBUG IRGEN] visitMulExp: 84 [DEBUG IRGEN] visitPrimaryExp: 84 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 84 created as 0x5de5611131c0 -[DEBUG IF] Creating condbr: %t195 -> then, merge +[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 +[DEBUG IF] Creating condbr: %t364 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[84]=84; [DEBUG IRGEN] visitStmt: s[84]=84; +[DEBUG IRGEN] HandleAssignStmt: s[84]=84; +[DEBUG IRGEN] EvalExpr: 84 +[DEBUG IRGEN] visitAddExp: 84 +[DEBUG IRGEN] visitMulExp: 84 +[DEBUG IRGEN] visitPrimaryExp: 84 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 +[DEBUG] EvalExpr: success, result = 0x562c37dfc930 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 84 [DEBUG IRGEN] visitAddExp: 84 [DEBUG IRGEN] visitMulExp: 84 [DEBUG IRGEN] visitPrimaryExp: 84 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 84 created as 0x5de5611131c0 -[DEBUG] EvalExpr: success, result = 0x5de5611131c0 +[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 +[DEBUG] EvalExpr: success, result = 0x562c37dfc930 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} @@ -17688,26 +20721,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 85 [DEBUG IRGEN] visitMulExp: 85 [DEBUG IRGEN] visitPrimaryExp: 85 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 85 created as 0x5de561113780 -[DEBUG IF] Creating condbr: %t197 -> then, merge +[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 +[DEBUG IF] Creating condbr: %t367 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[85]=85; [DEBUG IRGEN] visitStmt: s[85]=85; +[DEBUG IRGEN] HandleAssignStmt: s[85]=85; [DEBUG IRGEN] EvalExpr: 85 [DEBUG IRGEN] visitAddExp: 85 [DEBUG IRGEN] visitMulExp: 85 [DEBUG IRGEN] visitPrimaryExp: 85 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 85 created as 0x5de561113780 -[DEBUG] EvalExpr: success, result = 0x5de561113780 +[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 +[DEBUG] EvalExpr: success, result = 0x562c37dfd010 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 85 +[DEBUG IRGEN] visitAddExp: 85 +[DEBUG IRGEN] visitMulExp: 85 +[DEBUG IRGEN] visitPrimaryExp: 85 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 +[DEBUG] EvalExpr: success, result = 0x562c37dfd010 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} @@ -17720,26 +20762,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 86 [DEBUG IRGEN] visitMulExp: 86 [DEBUG IRGEN] visitPrimaryExp: 86 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 86 created as 0x5de561113d40 -[DEBUG IF] Creating condbr: %t199 -> then, merge +[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 +[DEBUG IF] Creating condbr: %t370 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[86]=86; [DEBUG IRGEN] visitStmt: s[86]=86; +[DEBUG IRGEN] HandleAssignStmt: s[86]=86; +[DEBUG IRGEN] EvalExpr: 86 +[DEBUG IRGEN] visitAddExp: 86 +[DEBUG IRGEN] visitMulExp: 86 +[DEBUG IRGEN] visitPrimaryExp: 86 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 +[DEBUG] EvalExpr: success, result = 0x562c37dfd6f0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 86 [DEBUG IRGEN] visitAddExp: 86 [DEBUG IRGEN] visitMulExp: 86 [DEBUG IRGEN] visitPrimaryExp: 86 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 86 created as 0x5de561113d40 -[DEBUG] EvalExpr: success, result = 0x5de561113d40 +[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 +[DEBUG] EvalExpr: success, result = 0x562c37dfd6f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} @@ -17752,26 +20803,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 87 [DEBUG IRGEN] visitMulExp: 87 [DEBUG IRGEN] visitPrimaryExp: 87 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 87 created as 0x5de561114300 -[DEBUG IF] Creating condbr: %t201 -> then, merge +[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 +[DEBUG IF] Creating condbr: %t373 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[87]=87; [DEBUG IRGEN] visitStmt: s[87]=87; +[DEBUG IRGEN] HandleAssignStmt: s[87]=87; +[DEBUG IRGEN] EvalExpr: 87 +[DEBUG IRGEN] visitAddExp: 87 +[DEBUG IRGEN] visitMulExp: 87 +[DEBUG IRGEN] visitPrimaryExp: 87 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 +[DEBUG] EvalExpr: success, result = 0x562c37dfddd0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 87 [DEBUG IRGEN] visitAddExp: 87 [DEBUG IRGEN] visitMulExp: 87 [DEBUG IRGEN] visitPrimaryExp: 87 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 87 created as 0x5de561114300 -[DEBUG] EvalExpr: success, result = 0x5de561114300 +[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 +[DEBUG] EvalExpr: success, result = 0x562c37dfddd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} @@ -17784,26 +20844,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 88 [DEBUG IRGEN] visitMulExp: 88 [DEBUG IRGEN] visitPrimaryExp: 88 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 88 created as 0x5de5611148c0 -[DEBUG IF] Creating condbr: %t203 -> then, merge +[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 +[DEBUG IF] Creating condbr: %t376 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[88]=88; [DEBUG IRGEN] visitStmt: s[88]=88; +[DEBUG IRGEN] HandleAssignStmt: s[88]=88; [DEBUG IRGEN] EvalExpr: 88 [DEBUG IRGEN] visitAddExp: 88 [DEBUG IRGEN] visitMulExp: 88 [DEBUG IRGEN] visitPrimaryExp: 88 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 88 created as 0x5de5611148c0 -[DEBUG] EvalExpr: success, result = 0x5de5611148c0 +[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 +[DEBUG] EvalExpr: success, result = 0x562c37dfe4b0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 88 +[DEBUG IRGEN] visitAddExp: 88 +[DEBUG IRGEN] visitMulExp: 88 +[DEBUG IRGEN] visitPrimaryExp: 88 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 +[DEBUG] EvalExpr: success, result = 0x562c37dfe4b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} @@ -17816,26 +20885,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 89 [DEBUG IRGEN] visitMulExp: 89 [DEBUG IRGEN] visitPrimaryExp: 89 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 89 created as 0x5de561114e80 -[DEBUG IF] Creating condbr: %t205 -> then, merge +[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 +[DEBUG IF] Creating condbr: %t379 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[89]=89; [DEBUG IRGEN] visitStmt: s[89]=89; +[DEBUG IRGEN] HandleAssignStmt: s[89]=89; +[DEBUG IRGEN] EvalExpr: 89 +[DEBUG IRGEN] visitAddExp: 89 +[DEBUG IRGEN] visitMulExp: 89 +[DEBUG IRGEN] visitPrimaryExp: 89 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 +[DEBUG] EvalExpr: success, result = 0x562c37dfeb90 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 89 [DEBUG IRGEN] visitAddExp: 89 [DEBUG IRGEN] visitMulExp: 89 [DEBUG IRGEN] visitPrimaryExp: 89 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 89 created as 0x5de561114e80 -[DEBUG] EvalExpr: success, result = 0x5de561114e80 +[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 +[DEBUG] EvalExpr: success, result = 0x562c37dfeb90 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} @@ -17848,26 +20926,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 90 [DEBUG IRGEN] visitMulExp: 90 [DEBUG IRGEN] visitPrimaryExp: 90 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 90 created as 0x5de561115440 -[DEBUG IF] Creating condbr: %t207 -> then, merge +[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 +[DEBUG IF] Creating condbr: %t382 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[90]=90; [DEBUG IRGEN] visitStmt: s[90]=90; +[DEBUG IRGEN] HandleAssignStmt: s[90]=90; +[DEBUG IRGEN] EvalExpr: 90 +[DEBUG IRGEN] visitAddExp: 90 +[DEBUG IRGEN] visitMulExp: 90 +[DEBUG IRGEN] visitPrimaryExp: 90 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 +[DEBUG] EvalExpr: success, result = 0x562c37dff270 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 90 [DEBUG IRGEN] visitAddExp: 90 [DEBUG IRGEN] visitMulExp: 90 [DEBUG IRGEN] visitPrimaryExp: 90 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 90 created as 0x5de561115440 -[DEBUG] EvalExpr: success, result = 0x5de561115440 +[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 +[DEBUG] EvalExpr: success, result = 0x562c37dff270 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} @@ -17880,26 +20967,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 91 [DEBUG IRGEN] visitMulExp: 91 [DEBUG IRGEN] visitPrimaryExp: 91 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 91 created as 0x5de561115a00 -[DEBUG IF] Creating condbr: %t209 -> then, merge +[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 +[DEBUG IF] Creating condbr: %t385 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} [DEBUG IRGEN] visitBlock: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[91]=91; [DEBUG IRGEN] visitStmt: s[91]=91; +[DEBUG IRGEN] HandleAssignStmt: s[91]=91; [DEBUG IRGEN] EvalExpr: 91 [DEBUG IRGEN] visitAddExp: 91 [DEBUG IRGEN] visitMulExp: 91 [DEBUG IRGEN] visitPrimaryExp: 91 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 91 created as 0x5de561115a00 -[DEBUG] EvalExpr: success, result = 0x5de561115a00 +[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 +[DEBUG] EvalExpr: success, result = 0x562c37dff950 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 91 +[DEBUG IRGEN] visitAddExp: 91 +[DEBUG IRGEN] visitMulExp: 91 +[DEBUG IRGEN] visitPrimaryExp: 91 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 +[DEBUG] EvalExpr: success, result = 0x562c37dff950 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} @@ -17912,26 +21008,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 92 [DEBUG IRGEN] visitMulExp: 92 [DEBUG IRGEN] visitPrimaryExp: 92 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 92 created as 0x5de561115fc0 -[DEBUG IF] Creating condbr: %t211 -> then, merge +[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 +[DEBUG IF] Creating condbr: %t388 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} [DEBUG IRGEN] visitBlock: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} [DEBUG IRGEN] visitBlockItem: s[92]=92; [DEBUG IRGEN] visitStmt: s[92]=92; +[DEBUG IRGEN] HandleAssignStmt: s[92]=92; +[DEBUG IRGEN] EvalExpr: 92 +[DEBUG IRGEN] visitAddExp: 92 +[DEBUG IRGEN] visitMulExp: 92 +[DEBUG IRGEN] visitPrimaryExp: 92 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 +[DEBUG] EvalExpr: success, result = 0x562c37e00030 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 92 [DEBUG IRGEN] visitAddExp: 92 [DEBUG IRGEN] visitMulExp: 92 [DEBUG IRGEN] visitPrimaryExp: 92 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 92 created as 0x5de561115fc0 -[DEBUG] EvalExpr: success, result = 0x5de561115fc0 +[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 +[DEBUG] EvalExpr: success, result = 0x562c37e00030 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} [DEBUG IRGEN] visitStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} @@ -17944,26 +21049,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 93 [DEBUG IRGEN] visitMulExp: 93 [DEBUG IRGEN] visitPrimaryExp: 93 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 93 created as 0x5de561116580 -[DEBUG IF] Creating condbr: %t213 -> then, merge +[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 +[DEBUG IF] Creating condbr: %t391 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} [DEBUG IRGEN] visitBlock: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} [DEBUG IRGEN] visitBlockItem: s[93]=93; [DEBUG IRGEN] visitStmt: s[93]=93; +[DEBUG IRGEN] HandleAssignStmt: s[93]=93; +[DEBUG IRGEN] EvalExpr: 93 +[DEBUG IRGEN] visitAddExp: 93 +[DEBUG IRGEN] visitMulExp: 93 +[DEBUG IRGEN] visitPrimaryExp: 93 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 +[DEBUG] EvalExpr: success, result = 0x562c37e00710 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 93 [DEBUG IRGEN] visitAddExp: 93 [DEBUG IRGEN] visitMulExp: 93 [DEBUG IRGEN] visitPrimaryExp: 93 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 93 created as 0x5de561116580 -[DEBUG] EvalExpr: success, result = 0x5de561116580 +[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 +[DEBUG] EvalExpr: success, result = 0x562c37e00710 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} [DEBUG IRGEN] visitStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} @@ -17976,26 +21090,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 94 [DEBUG IRGEN] visitMulExp: 94 [DEBUG IRGEN] visitPrimaryExp: 94 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 94 created as 0x5de561116b40 -[DEBUG IF] Creating condbr: %t215 -> then, merge +[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 +[DEBUG IF] Creating condbr: %t394 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} [DEBUG IRGEN] visitBlock: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} [DEBUG IRGEN] visitBlockItem: s[94]=94; [DEBUG IRGEN] visitStmt: s[94]=94; +[DEBUG IRGEN] HandleAssignStmt: s[94]=94; [DEBUG IRGEN] EvalExpr: 94 [DEBUG IRGEN] visitAddExp: 94 [DEBUG IRGEN] visitMulExp: 94 [DEBUG IRGEN] visitPrimaryExp: 94 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 94 created as 0x5de561116b40 -[DEBUG] EvalExpr: success, result = 0x5de561116b40 +[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 +[DEBUG] EvalExpr: success, result = 0x562c37e00df0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 94 +[DEBUG IRGEN] visitAddExp: 94 +[DEBUG IRGEN] visitMulExp: 94 +[DEBUG IRGEN] visitPrimaryExp: 94 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 +[DEBUG] EvalExpr: success, result = 0x562c37e00df0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} [DEBUG IRGEN] visitStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} @@ -18008,26 +21131,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 95 [DEBUG IRGEN] visitMulExp: 95 [DEBUG IRGEN] visitPrimaryExp: 95 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 95 created as 0x5de561117100 -[DEBUG IF] Creating condbr: %t217 -> then, merge +[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 +[DEBUG IF] Creating condbr: %t397 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} [DEBUG IRGEN] visitBlock: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} [DEBUG IRGEN] visitBlockItem: s[95]=95; [DEBUG IRGEN] visitStmt: s[95]=95; +[DEBUG IRGEN] HandleAssignStmt: s[95]=95; +[DEBUG IRGEN] EvalExpr: 95 +[DEBUG IRGEN] visitAddExp: 95 +[DEBUG IRGEN] visitMulExp: 95 +[DEBUG IRGEN] visitPrimaryExp: 95 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 +[DEBUG] EvalExpr: success, result = 0x562c37e014d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 95 [DEBUG IRGEN] visitAddExp: 95 [DEBUG IRGEN] visitMulExp: 95 [DEBUG IRGEN] visitPrimaryExp: 95 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 95 created as 0x5de561117100 -[DEBUG] EvalExpr: success, result = 0x5de561117100 +[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 +[DEBUG] EvalExpr: success, result = 0x562c37e014d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} [DEBUG IRGEN] visitStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} @@ -18040,26 +21172,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 96 [DEBUG IRGEN] visitMulExp: 96 [DEBUG IRGEN] visitPrimaryExp: 96 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 96 created as 0x5de5611176c0 -[DEBUG IF] Creating condbr: %t219 -> then, merge +[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 +[DEBUG IF] Creating condbr: %t400 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} [DEBUG IRGEN] visitBlock: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} [DEBUG IRGEN] visitBlockItem: s[96]=96; [DEBUG IRGEN] visitStmt: s[96]=96; +[DEBUG IRGEN] HandleAssignStmt: s[96]=96; +[DEBUG IRGEN] EvalExpr: 96 +[DEBUG IRGEN] visitAddExp: 96 +[DEBUG IRGEN] visitMulExp: 96 +[DEBUG IRGEN] visitPrimaryExp: 96 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 +[DEBUG] EvalExpr: success, result = 0x562c37e01bb0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 96 [DEBUG IRGEN] visitAddExp: 96 [DEBUG IRGEN] visitMulExp: 96 [DEBUG IRGEN] visitPrimaryExp: 96 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 96 created as 0x5de5611176c0 -[DEBUG] EvalExpr: success, result = 0x5de5611176c0 +[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 +[DEBUG] EvalExpr: success, result = 0x562c37e01bb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} [DEBUG IRGEN] visitStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} @@ -18072,26 +21213,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 97 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x5de561117fa0 -[DEBUG IF] Creating condbr: %t221 -> then, merge +[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 +[DEBUG IF] Creating condbr: %t403 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} [DEBUG IRGEN] visitBlock: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} [DEBUG IRGEN] visitBlockItem: s[97]=97; [DEBUG IRGEN] visitStmt: s[97]=97; +[DEBUG IRGEN] HandleAssignStmt: s[97]=97; [DEBUG IRGEN] EvalExpr: 97 [DEBUG IRGEN] visitAddExp: 97 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x5de561117fa0 -[DEBUG] EvalExpr: success, result = 0x5de561117fa0 +[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 +[DEBUG] EvalExpr: success, result = 0x562c37e02660 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG IRGEN] EvalExpr: 97 +[DEBUG IRGEN] visitAddExp: 97 +[DEBUG IRGEN] visitMulExp: 97 +[DEBUG IRGEN] visitPrimaryExp: 97 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 +[DEBUG] EvalExpr: success, result = 0x562c37e02660 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>98){s[98]=98;if(i>99){s[99]=99;}} [DEBUG IRGEN] visitStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} @@ -18104,26 +21254,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 98 [DEBUG IRGEN] visitMulExp: 98 [DEBUG IRGEN] visitPrimaryExp: 98 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 98 created as 0x5de561118520 -[DEBUG IF] Creating condbr: %t223 -> then, merge +[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 +[DEBUG IF] Creating condbr: %t406 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[98]=98;if(i>99){s[99]=99;}} [DEBUG IRGEN] visitBlock: {s[98]=98;if(i>99){s[99]=99;}} [DEBUG IRGEN] visitBlockItem: s[98]=98; [DEBUG IRGEN] visitStmt: s[98]=98; +[DEBUG IRGEN] HandleAssignStmt: s[98]=98; +[DEBUG IRGEN] EvalExpr: 98 +[DEBUG IRGEN] visitAddExp: 98 +[DEBUG IRGEN] visitMulExp: 98 +[DEBUG IRGEN] visitPrimaryExp: 98 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 +[DEBUG] EvalExpr: success, result = 0x562c37e02cf0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 98 [DEBUG IRGEN] visitAddExp: 98 [DEBUG IRGEN] visitMulExp: 98 [DEBUG IRGEN] visitPrimaryExp: 98 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 98 created as 0x5de561118520 -[DEBUG] EvalExpr: success, result = 0x5de561118520 +[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 +[DEBUG] EvalExpr: success, result = 0x562c37e02cf0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>99){s[99]=99;} [DEBUG IRGEN] visitStmt: if(i>99){s[99]=99;} @@ -18136,26 +21295,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: i [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: i [DEBUG] visitLVal: i [DEBUG IRGEN] visitAddExp: 99 [DEBUG IRGEN] visitMulExp: 99 [DEBUG IRGEN] visitPrimaryExp: 99 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 99 created as 0x5de561118ae0 -[DEBUG IF] Creating condbr: %t225 -> then, merge +[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 +[DEBUG IF] Creating condbr: %t409 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[99]=99;} [DEBUG IRGEN] visitBlock: {s[99]=99;} [DEBUG IRGEN] visitBlockItem: s[99]=99; [DEBUG IRGEN] visitStmt: s[99]=99; +[DEBUG IRGEN] HandleAssignStmt: s[99]=99; +[DEBUG IRGEN] EvalExpr: 99 +[DEBUG IRGEN] visitAddExp: 99 +[DEBUG IRGEN] visitMulExp: 99 +[DEBUG IRGEN] visitPrimaryExp: 99 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 +[DEBUG] EvalExpr: success, result = 0x562c37e033d0 +[DEBUG] HandleAssignStmt: assigning to s +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 [DEBUG IRGEN] EvalExpr: 99 [DEBUG IRGEN] visitAddExp: 99 [DEBUG IRGEN] visitMulExp: 99 [DEBUG IRGEN] visitPrimaryExp: 99 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 99 created as 0x5de561118ae0 -[DEBUG] EvalExpr: success, result = 0x5de561118ae0 +[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 +[DEBUG] EvalExpr: success, result = 0x562c37e033d0 [DEBUG] current insert block: then [DEBUG IF] then branch terminated: 0 [DEBUG IF] Adding br to merge block from then @@ -18852,6 +22020,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: j=j+1; [DEBUG IRGEN] visitStmt: j=j+1; +[DEBUG IRGEN] HandleAssignStmt: j=j+1; [DEBUG IRGEN] EvalExpr: j+1 [DEBUG IRGEN] visitAddExp: j+1 [DEBUG IRGEN] visitAddExp: j @@ -18859,23 +22028,46 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: j [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: j [DEBUG] visitLVal: j [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5de560f94e90 -[DEBUG] visitAddExp: left=0x5de56111d260, right=0x5de560f94e90 -[DEBUG] EvalExpr: success, result = 0x5de56111d300 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] visitAddExp: left=0x562c37e07ce0, right=0x562c37dd49f0 +[DEBUG] EvalExpr: success, result = 0x562c37e07dd0 +[DEBUG] HandleAssignStmt: assigning to j +[DEBUG] HandleAssignStmt: found in storage_map_ for j, ptr = 0x562c37dcbd80 +[DEBUG] HandleAssignStmt: scalar assignment to j, ptr = 0x562c37dcbd80, rhs = 0x562c37e07dd0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: intm=0; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: m +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 m +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x5de560fa5870 -[DEBUG] visitVarDef: 创建标量变量 m,初始值 0x5de560fa5870 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 m,初始值 0x562c37dae750 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: while(m<100){sum=sum+s[m];m=m+1;} [DEBUG IRGEN] visitStmt: while(m<100){sum=sum+s[m];m=m+1;} @@ -18892,19 +22084,19 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: m [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: m [DEBUG] visitLVal: m [DEBUG IRGEN] visitAddExp: 100 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x5de560f94ff0 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x562c37dd4500 [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {sum=sum+s[m];m=m+1;} [DEBUG IRGEN] visitBlock: {sum=sum+s[m];m=m+1;} [DEBUG IRGEN] visitBlockItem: sum=sum+s[m]; [DEBUG IRGEN] visitStmt: sum=sum+s[m]; +[DEBUG IRGEN] HandleAssignStmt: sum=sum+s[m]; [DEBUG IRGEN] EvalExpr: sum+s[m] [DEBUG IRGEN] visitAddExp: sum+s[m] [DEBUG IRGEN] visitAddExp: sum @@ -18912,19 +22104,35 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: sum [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: sum [DEBUG] visitLVal: sum [DEBUG IRGEN] visitMulExp: s[m] [DEBUG IRGEN] visitPrimaryExp: s[m] [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: s[m] [DEBUG] visitLVal: s -[DEBUG] visitAddExp: left=0x5de56111dbf0, right=0x5de56111dcb0 -[DEBUG] EvalExpr: success, result = 0x5de56111dd70 +[DEBUG IRGEN] EvalExpr: m +[DEBUG IRGEN] visitAddExp: m +[DEBUG IRGEN] visitMulExp: m +[DEBUG IRGEN] visitPrimaryExp: m +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: m +[DEBUG] EvalExpr: success, result = 0x562c37e086f0 +[DEBUG] visitAddExp: left=0x562c37e08630, right=0x562c37e08860 +[DEBUG] EvalExpr: success, result = 0x562c37e088e0 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x562c37c6e670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x562c37c6e670, rhs = 0x562c37e088e0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: while.body [DEBUG IRGEN] visitBlockItem: m=m+1; [DEBUG IRGEN] visitStmt: m=m+1; +[DEBUG IRGEN] HandleAssignStmt: m=m+1; [DEBUG IRGEN] EvalExpr: m+1 [DEBUG IRGEN] visitAddExp: m+1 [DEBUG IRGEN] visitAddExp: m @@ -18932,14 +22140,22 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: m [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: m [DEBUG] visitLVal: m [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x5de560f94e90 -[DEBUG] visitAddExp: left=0x5de56111def0, right=0x5de560f94e90 -[DEBUG] EvalExpr: success, result = 0x5de56111df70 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] visitAddExp: left=0x562c37e08b40, right=0x562c37dd49f0 +[DEBUG] EvalExpr: success, result = 0x562c37e08bc0 +[DEBUG] HandleAssignStmt: assigning to m +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x562c37e07f40 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x562c37e07f40, rhs = 0x562c37e08bc0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: while.body [DEBUG WHILE] body terminated: 0 [DEBUG WHILE] Adding br to condBlock from body @@ -18950,6 +22166,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] current insert block: while.exit [DEBUG IRGEN] visitBlockItem: sum=sum%65535; [DEBUG IRGEN] visitStmt: sum=sum%65535; +[DEBUG IRGEN] HandleAssignStmt: sum=sum%65535; [DEBUG IRGEN] EvalExpr: sum%65535 [DEBUG IRGEN] visitAddExp: sum%65535 [DEBUG IRGEN] visitMulExp: sum%65535 @@ -18957,12 +22174,20 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: sum [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: sum [DEBUG] visitLVal: sum [DEBUG IRGEN] visitPrimaryExp: 65535 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65535 created as 0x5de56111e240 -[DEBUG] EvalExpr: success, result = 0x5de56111e2c0 +[DEBUG] visitPrimaryExp: constant int 65535 created as 0x562c37e08f20 +[DEBUG] EvalExpr: success, result = 0x562c37e08fa0 +[DEBUG] HandleAssignStmt: assigning to sum +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x562c37c6e670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x562c37c6e670, rhs = 0x562c37e08fa0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 [DEBUG] current insert block: while.exit [DEBUG WHILE] body terminated: 0 [DEBUG WHILE] Adding br to condBlock from body @@ -18981,9 +22206,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitPrimaryExp: sum [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal -[DEBUG IRGEN] visitLVal: sum [DEBUG] visitLVal: sum -[DEBUG] EvalExpr: success, result = 0x5de56111e560 +[DEBUG] EvalExpr: success, result = 0x562c37e09240 [DEBUG IRGEN] visitFuncDef: main [DEBUG IRGEN] visitBlock: {starttime();intloopcount=getint();putint(func(loopcount));putch(10);stoptime();return0;} [DEBUG IRGEN] visitBlockItem: starttime(); @@ -18991,8 +22215,1201 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] EvalExpr: starttime() [DEBUG IRGEN] visitAddExp: starttime() [DEBUG IRGEN] visitMulExp: starttime() -[ERROR] Exception in EvalExpr: [irgen] 未找到函数: starttime -[error] [irgen] 未找到函数: starttime +[DEBUG IRGEN] visitCallExp: 调用函数 starttime +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intloopcount=getint(); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: loopcount +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 loopcount +[DEBUG] HandleLocalVariable: 处理局部标量变量 +[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 +[DEBUG] HandleLocalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562c37e09560 +[DEBUG] EvalExpr: success, result = 0x562c37e09560 +[DEBUG] HandleLocalVariable: 获取到初始化值 +[DEBUG] HandleLocalVariable: 创建局部变量 loopcount,初始值 0x562c37e09560 +[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putint(func(loopcount)); +[DEBUG IRGEN] visitStmt: putint(func(loopcount)); +[DEBUG IRGEN] EvalExpr: putint(func(loopcount)) +[DEBUG IRGEN] visitAddExp: putint(func(loopcount)) +[DEBUG IRGEN] visitMulExp: putint(func(loopcount)) +[DEBUG IRGEN] visitCallExp: 调用函数 putint +[DEBUG IRGEN] EvalExpr: func(loopcount) +[DEBUG IRGEN] visitAddExp: func(loopcount) +[DEBUG IRGEN] visitMulExp: func(loopcount) +[DEBUG IRGEN] visitCallExp: 调用函数 func +[DEBUG IRGEN] EvalExpr: loopcount +[DEBUG IRGEN] visitAddExp: loopcount +[DEBUG IRGEN] visitMulExp: loopcount +[DEBUG IRGEN] visitPrimaryExp: loopcount +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: loopcount +[DEBUG] EvalExpr: success, result = 0x562c37e096b0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562c37e09750 +[DEBUG] EvalExpr: success, result = 0x562c37e09750 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: putch(10); +[DEBUG IRGEN] visitStmt: putch(10); +[DEBUG IRGEN] EvalExpr: putch(10) +[DEBUG IRGEN] visitAddExp: putch(10) +[DEBUG IRGEN] visitMulExp: putch(10) +[DEBUG IRGEN] visitCallExp: 调用函数 putch +[DEBUG IRGEN] EvalExpr: 10 +[DEBUG IRGEN] visitAddExp: 10 +[DEBUG IRGEN] visitMulExp: 10 +[DEBUG IRGEN] visitPrimaryExp: 10 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 +[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 +[DEBUG IRGEN] visitCallExp: 收集到 1 个参数 +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: stoptime(); +[DEBUG IRGEN] visitStmt: stoptime(); +[DEBUG IRGEN] EvalExpr: stoptime() +[DEBUG IRGEN] visitAddExp: stoptime() +[DEBUG IRGEN] visitMulExp: stoptime() +[DEBUG IRGEN] visitCallExp: 调用函数 stoptime +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: return0; +[DEBUG IRGEN] visitStmt: return0; +[DEBUG IRGEN] HandleReturnStmt: return0; +[DEBUG IRGEN] HandleReturnStmt eval exp: 0 +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x562c37dae750 +define i32 @getint() { +entry: +} +define i32 @getch() { +entry: +} +define i32 @getarray() { +entry: +} +define void @putint() { +entry: +} +define void @putch() { +entry: +} +define void @putarray() { +entry: +} +define void @puts() { +entry: +} +define void @_sysy_starttime() { +entry: +} +define void @_sysy_stoptime() { +entry: +} +define void @starttime() { +entry: +} +define void @stoptime() { +entry: +} +define i32 @read_map() { +entry: +} +define i32 @float_eq() { +entry: +} +define i32* @memset() { +entry: +} +define i32 @func(i32 %n) { +entry: + %t0 = alloca i32 + store i32 %n, i32* %t0 + %t1_sum = alloca i32 + store i32 0, i32* %t1_sum + %t2_i = alloca i32 + store i32 200, i32* %t2_i + %t3_j = alloca i32 + store i32 0, i32* %t3_j + %t4_s_0 = alloca i32 + %t5_s_1 = alloca i32 + %t6_s_2 = alloca i32 + %t7_s_3 = alloca i32 + %t8_s_4 = alloca i32 + %t9_s_5 = alloca i32 + %t10_s_6 = alloca i32 + %t11_s_7 = alloca i32 + %t12_s_8 = alloca i32 + %t13_s_9 = alloca i32 + %t14_s_10 = alloca i32 + %t15_s_11 = alloca i32 + %t16_s_12 = alloca i32 + %t17_s_13 = alloca i32 + %t18_s_14 = alloca i32 + %t19_s_15 = alloca i32 + %t20_s_16 = alloca i32 + %t21_s_17 = alloca i32 + %t22_s_18 = alloca i32 + %t23_s_19 = alloca i32 + %t24_s_20 = alloca i32 + %t25_s_21 = alloca i32 + %t26_s_22 = alloca i32 + %t27_s_23 = alloca i32 + %t28_s_24 = alloca i32 + %t29_s_25 = alloca i32 + %t30_s_26 = alloca i32 + %t31_s_27 = alloca i32 + %t32_s_28 = alloca i32 + %t33_s_29 = alloca i32 + %t34_s_30 = alloca i32 + %t35_s_31 = alloca i32 + %t36_s_32 = alloca i32 + %t37_s_33 = alloca i32 + %t38_s_34 = alloca i32 + %t39_s_35 = alloca i32 + %t40_s_36 = alloca i32 + %t41_s_37 = alloca i32 + %t42_s_38 = alloca i32 + %t43_s_39 = alloca i32 + %t44_s_40 = alloca i32 + %t45_s_41 = alloca i32 + %t46_s_42 = alloca i32 + %t47_s_43 = alloca i32 + %t48_s_44 = alloca i32 + %t49_s_45 = alloca i32 + %t50_s_46 = alloca i32 + %t51_s_47 = alloca i32 + %t52_s_48 = alloca i32 + %t53_s_49 = alloca i32 + %t54_s_50 = alloca i32 + %t55_s_51 = alloca i32 + %t56_s_52 = alloca i32 + %t57_s_53 = alloca i32 + %t58_s_54 = alloca i32 + %t59_s_55 = alloca i32 + %t60_s_56 = alloca i32 + %t61_s_57 = alloca i32 + %t62_s_58 = alloca i32 + %t63_s_59 = alloca i32 + %t64_s_60 = alloca i32 + %t65_s_61 = alloca i32 + %t66_s_62 = alloca i32 + %t67_s_63 = alloca i32 + %t68_s_64 = alloca i32 + %t69_s_65 = alloca i32 + %t70_s_66 = alloca i32 + %t71_s_67 = alloca i32 + %t72_s_68 = alloca i32 + %t73_s_69 = alloca i32 + %t74_s_70 = alloca i32 + %t75_s_71 = alloca i32 + %t76_s_72 = alloca i32 + %t77_s_73 = alloca i32 + %t78_s_74 = alloca i32 + %t79_s_75 = alloca i32 + %t80_s_76 = alloca i32 + %t81_s_77 = alloca i32 + %t82_s_78 = alloca i32 + %t83_s_79 = alloca i32 + %t84_s_80 = alloca i32 + %t85_s_81 = alloca i32 + %t86_s_82 = alloca i32 + %t87_s_83 = alloca i32 + %t88_s_84 = alloca i32 + %t89_s_85 = alloca i32 + %t90_s_86 = alloca i32 + %t91_s_87 = alloca i32 + %t92_s_88 = alloca i32 + %t93_s_89 = alloca i32 + %t94_s_90 = alloca i32 + %t95_s_91 = alloca i32 + %t96_s_92 = alloca i32 + %t97_s_93 = alloca i32 + %t98_s_94 = alloca i32 + %t99_s_95 = alloca i32 + %t100_s_96 = alloca i32 + %t101_s_97 = alloca i32 + %t102_s_98 = alloca i32 + %t103_s_99 = alloca i32 + store i32 0, i32* %t4_s_0 + store i32 0, i32* %t5_s_1 + store i32 0, i32* %t6_s_2 + store i32 0, i32* %t7_s_3 + store i32 0, i32* %t8_s_4 + store i32 0, i32* %t9_s_5 + store i32 0, i32* %t10_s_6 + store i32 0, i32* %t11_s_7 + store i32 0, i32* %t12_s_8 + store i32 0, i32* %t13_s_9 + store i32 0, i32* %t14_s_10 + store i32 0, i32* %t15_s_11 + store i32 0, i32* %t16_s_12 + store i32 0, i32* %t17_s_13 + store i32 0, i32* %t18_s_14 + store i32 0, i32* %t19_s_15 + store i32 0, i32* %t20_s_16 + store i32 0, i32* %t21_s_17 + store i32 0, i32* %t22_s_18 + store i32 0, i32* %t23_s_19 + store i32 0, i32* %t24_s_20 + store i32 0, i32* %t25_s_21 + store i32 0, i32* %t26_s_22 + store i32 0, i32* %t27_s_23 + store i32 0, i32* %t28_s_24 + store i32 0, i32* %t29_s_25 + store i32 0, i32* %t30_s_26 + store i32 0, i32* %t31_s_27 + store i32 0, i32* %t32_s_28 + store i32 0, i32* %t33_s_29 + store i32 0, i32* %t34_s_30 + store i32 0, i32* %t35_s_31 + store i32 0, i32* %t36_s_32 + store i32 0, i32* %t37_s_33 + store i32 0, i32* %t38_s_34 + store i32 0, i32* %t39_s_35 + store i32 0, i32* %t40_s_36 + store i32 0, i32* %t41_s_37 + store i32 0, i32* %t42_s_38 + store i32 0, i32* %t43_s_39 + store i32 0, i32* %t44_s_40 + store i32 0, i32* %t45_s_41 + store i32 0, i32* %t46_s_42 + store i32 0, i32* %t47_s_43 + store i32 0, i32* %t48_s_44 + store i32 0, i32* %t49_s_45 + store i32 0, i32* %t50_s_46 + store i32 0, i32* %t51_s_47 + store i32 0, i32* %t52_s_48 + store i32 0, i32* %t53_s_49 + store i32 0, i32* %t54_s_50 + store i32 0, i32* %t55_s_51 + store i32 0, i32* %t56_s_52 + store i32 0, i32* %t57_s_53 + store i32 0, i32* %t58_s_54 + store i32 0, i32* %t59_s_55 + store i32 0, i32* %t60_s_56 + store i32 0, i32* %t61_s_57 + store i32 0, i32* %t62_s_58 + store i32 0, i32* %t63_s_59 + store i32 0, i32* %t64_s_60 + store i32 0, i32* %t65_s_61 + store i32 0, i32* %t66_s_62 + store i32 0, i32* %t67_s_63 + store i32 0, i32* %t68_s_64 + store i32 0, i32* %t69_s_65 + store i32 0, i32* %t70_s_66 + store i32 0, i32* %t71_s_67 + store i32 0, i32* %t72_s_68 + store i32 0, i32* %t73_s_69 + store i32 0, i32* %t74_s_70 + store i32 0, i32* %t75_s_71 + store i32 0, i32* %t76_s_72 + store i32 0, i32* %t77_s_73 + store i32 0, i32* %t78_s_74 + store i32 0, i32* %t79_s_75 + store i32 0, i32* %t80_s_76 + store i32 0, i32* %t81_s_77 + store i32 0, i32* %t82_s_78 + store i32 0, i32* %t83_s_79 + store i32 0, i32* %t84_s_80 + store i32 0, i32* %t85_s_81 + store i32 0, i32* %t86_s_82 + store i32 0, i32* %t87_s_83 + store i32 0, i32* %t88_s_84 + store i32 0, i32* %t89_s_85 + store i32 0, i32* %t90_s_86 + store i32 0, i32* %t91_s_87 + store i32 0, i32* %t92_s_88 + store i32 0, i32* %t93_s_89 + store i32 0, i32* %t94_s_90 + store i32 0, i32* %t95_s_91 + store i32 0, i32* %t96_s_92 + store i32 0, i32* %t97_s_93 + store i32 0, i32* %t98_s_94 + store i32 0, i32* %t99_s_95 + store i32 0, i32* %t100_s_96 + store i32 0, i32* %t101_s_97 + store i32 0, i32* %t102_s_98 + store i32 0, i32* %t103_s_99 + %t104_m = alloca i32 + store i32 0, i32* %t104_m + br label %while.cond +while.cond: + %t105 = load i32, i32* %t104_m + %t106 = icmp slt i32 %t105, 100 + br i1 %t106, label %while.body, label %while.exit +while.body: + %t107 = load i32, i32* %t104_m + %t108 = getelementptr i32* (%t4_s_0, 0, %t107) + store i32 0, i32* %t108 + %t109 = load i32, i32* %t104_m + %t110 = add i32 %t109, 1 + store i32 %t110, i32* %t104_m + br label %while.cond +while.exit: + br label %while.cond +while.cond: + %t111 = load i32, i32* %t3_j + %t112 = load i32, i32* %t0 + %t113 = icmp slt i32 %t111, %t112 + br i1 %t113, label %while.body, label %while.exit +while.body: + %t114 = load i32, i32* %t2_i + %t115 = icmp sgt i32 %t114, 1 + br i1 %t115, label %then, label %merge +while.exit: + %t425 = load i32, i32* %t1_sum + ret i32 %t425 +then: + %t116 = getelementptr i32* (%t4_s_0, 0, 1) + store i32 1, i32* %t116 + %t117 = load i32, i32* %t2_i + %t118 = icmp sgt i32 %t117, 2 + br i1 %t118, label %then, label %merge +merge: + %t411 = load i32, i32* %t3_j + %t412 = add i32 %t411, 1 + store i32 %t412, i32* %t3_j + %t413_m = alloca i32 + store i32 0, i32* %t413_m + br label %while.cond +then: + %t119 = getelementptr i32* (%t4_s_0, 0, 2) + store i32 2, i32* %t119 + %t120 = load i32, i32* %t2_i + %t121 = icmp sgt i32 %t120, 3 + br i1 %t121, label %then, label %merge +merge: + br label %merge +then: + %t122 = getelementptr i32* (%t4_s_0, 0, 3) + store i32 3, i32* %t122 + %t123 = load i32, i32* %t2_i + %t124 = icmp sgt i32 %t123, 4 + br i1 %t124, label %then, label %merge +merge: + br label %merge +then: + %t125 = getelementptr i32* (%t4_s_0, 0, 4) + store i32 4, i32* %t125 + %t126 = load i32, i32* %t2_i + %t127 = icmp sgt i32 %t126, 5 + br i1 %t127, label %then, label %merge +merge: + br label %merge +then: + %t128 = getelementptr i32* (%t4_s_0, 0, 5) + store i32 5, i32* %t128 + %t129 = load i32, i32* %t2_i + %t130 = icmp sgt i32 %t129, 6 + br i1 %t130, label %then, label %merge +merge: + br label %merge +then: + %t131 = getelementptr i32* (%t4_s_0, 0, 6) + store i32 6, i32* %t131 + %t132 = load i32, i32* %t2_i + %t133 = icmp sgt i32 %t132, 7 + br i1 %t133, label %then, label %merge +merge: + br label %merge +then: + %t134 = getelementptr i32* (%t4_s_0, 0, 7) + store i32 7, i32* %t134 + %t135 = load i32, i32* %t2_i + %t136 = icmp sgt i32 %t135, 8 + br i1 %t136, label %then, label %merge +merge: + br label %merge +then: + %t137 = getelementptr i32* (%t4_s_0, 0, 8) + store i32 8, i32* %t137 + %t138 = load i32, i32* %t2_i + %t139 = icmp sgt i32 %t138, 9 + br i1 %t139, label %then, label %merge +merge: + br label %merge +then: + %t140 = getelementptr i32* (%t4_s_0, 0, 9) + store i32 9, i32* %t140 + %t141 = load i32, i32* %t2_i + %t142 = icmp sgt i32 %t141, 10 + br i1 %t142, label %then, label %merge +merge: + br label %merge +then: + %t143 = getelementptr i32* (%t4_s_0, 0, 10) + store i32 10, i32* %t143 + %t144 = load i32, i32* %t2_i + %t145 = icmp sgt i32 %t144, 11 + br i1 %t145, label %then, label %merge +merge: + br label %merge +then: + %t146 = getelementptr i32* (%t4_s_0, 0, 11) + store i32 11, i32* %t146 + %t147 = load i32, i32* %t2_i + %t148 = icmp sgt i32 %t147, 12 + br i1 %t148, label %then, label %merge +merge: + br label %merge +then: + %t149 = getelementptr i32* (%t4_s_0, 0, 12) + store i32 12, i32* %t149 + %t150 = load i32, i32* %t2_i + %t151 = icmp sgt i32 %t150, 13 + br i1 %t151, label %then, label %merge +merge: + br label %merge +then: + %t152 = getelementptr i32* (%t4_s_0, 0, 13) + store i32 13, i32* %t152 + %t153 = load i32, i32* %t2_i + %t154 = icmp sgt i32 %t153, 14 + br i1 %t154, label %then, label %merge +merge: + br label %merge +then: + %t155 = getelementptr i32* (%t4_s_0, 0, 14) + store i32 14, i32* %t155 + %t156 = load i32, i32* %t2_i + %t157 = icmp sgt i32 %t156, 15 + br i1 %t157, label %then, label %merge +merge: + br label %merge +then: + %t158 = getelementptr i32* (%t4_s_0, 0, 15) + store i32 15, i32* %t158 + %t159 = load i32, i32* %t2_i + %t160 = icmp sgt i32 %t159, 16 + br i1 %t160, label %then, label %merge +merge: + br label %merge +then: + %t161 = getelementptr i32* (%t4_s_0, 0, 16) + store i32 16, i32* %t161 + %t162 = load i32, i32* %t2_i + %t163 = icmp sgt i32 %t162, 17 + br i1 %t163, label %then, label %merge +merge: + br label %merge +then: + %t164 = getelementptr i32* (%t4_s_0, 0, 17) + store i32 17, i32* %t164 + %t165 = load i32, i32* %t2_i + %t166 = icmp sgt i32 %t165, 18 + br i1 %t166, label %then, label %merge +merge: + br label %merge +then: + %t167 = getelementptr i32* (%t4_s_0, 0, 18) + store i32 18, i32* %t167 + %t168 = load i32, i32* %t2_i + %t169 = icmp sgt i32 %t168, 19 + br i1 %t169, label %then, label %merge +merge: + br label %merge +then: + %t170 = getelementptr i32* (%t4_s_0, 0, 19) + store i32 19, i32* %t170 + %t171 = load i32, i32* %t2_i + %t172 = icmp sgt i32 %t171, 20 + br i1 %t172, label %then, label %merge +merge: + br label %merge +then: + %t173 = getelementptr i32* (%t4_s_0, 0, 20) + store i32 20, i32* %t173 + %t174 = load i32, i32* %t2_i + %t175 = icmp sgt i32 %t174, 21 + br i1 %t175, label %then, label %merge +merge: + br label %merge +then: + %t176 = getelementptr i32* (%t4_s_0, 0, 21) + store i32 21, i32* %t176 + %t177 = load i32, i32* %t2_i + %t178 = icmp sgt i32 %t177, 22 + br i1 %t178, label %then, label %merge +merge: + br label %merge +then: + %t179 = getelementptr i32* (%t4_s_0, 0, 22) + store i32 22, i32* %t179 + %t180 = load i32, i32* %t2_i + %t181 = icmp sgt i32 %t180, 23 + br i1 %t181, label %then, label %merge +merge: + br label %merge +then: + %t182 = getelementptr i32* (%t4_s_0, 0, 23) + store i32 23, i32* %t182 + %t183 = load i32, i32* %t2_i + %t184 = icmp sgt i32 %t183, 24 + br i1 %t184, label %then, label %merge +merge: + br label %merge +then: + %t185 = getelementptr i32* (%t4_s_0, 0, 24) + store i32 24, i32* %t185 + %t186 = load i32, i32* %t2_i + %t187 = icmp sgt i32 %t186, 25 + br i1 %t187, label %then, label %merge +merge: + br label %merge +then: + %t188 = getelementptr i32* (%t4_s_0, 0, 25) + store i32 25, i32* %t188 + %t189 = load i32, i32* %t2_i + %t190 = icmp sgt i32 %t189, 26 + br i1 %t190, label %then, label %merge +merge: + br label %merge +then: + %t191 = getelementptr i32* (%t4_s_0, 0, 26) + store i32 26, i32* %t191 + %t192 = load i32, i32* %t2_i + %t193 = icmp sgt i32 %t192, 27 + br i1 %t193, label %then, label %merge +merge: + br label %merge +then: + %t194 = getelementptr i32* (%t4_s_0, 0, 27) + store i32 27, i32* %t194 + %t195 = load i32, i32* %t2_i + %t196 = icmp sgt i32 %t195, 28 + br i1 %t196, label %then, label %merge +merge: + br label %merge +then: + %t197 = getelementptr i32* (%t4_s_0, 0, 28) + store i32 28, i32* %t197 + %t198 = load i32, i32* %t2_i + %t199 = icmp sgt i32 %t198, 29 + br i1 %t199, label %then, label %merge +merge: + br label %merge +then: + %t200 = getelementptr i32* (%t4_s_0, 0, 29) + store i32 29, i32* %t200 + %t201 = load i32, i32* %t2_i + %t202 = icmp sgt i32 %t201, 30 + br i1 %t202, label %then, label %merge +merge: + br label %merge +then: + %t203 = getelementptr i32* (%t4_s_0, 0, 30) + store i32 30, i32* %t203 + %t204 = load i32, i32* %t2_i + %t205 = icmp sgt i32 %t204, 31 + br i1 %t205, label %then, label %merge +merge: + br label %merge +then: + %t206 = getelementptr i32* (%t4_s_0, 0, 31) + store i32 31, i32* %t206 + %t207 = load i32, i32* %t2_i + %t208 = icmp sgt i32 %t207, 32 + br i1 %t208, label %then, label %merge +merge: + br label %merge +then: + %t209 = getelementptr i32* (%t4_s_0, 0, 32) + store i32 32, i32* %t209 + %t210 = load i32, i32* %t2_i + %t211 = icmp sgt i32 %t210, 33 + br i1 %t211, label %then, label %merge +merge: + br label %merge +then: + %t212 = getelementptr i32* (%t4_s_0, 0, 33) + store i32 33, i32* %t212 + %t213 = load i32, i32* %t2_i + %t214 = icmp sgt i32 %t213, 34 + br i1 %t214, label %then, label %merge +merge: + br label %merge +then: + %t215 = getelementptr i32* (%t4_s_0, 0, 34) + store i32 34, i32* %t215 + %t216 = load i32, i32* %t2_i + %t217 = icmp sgt i32 %t216, 35 + br i1 %t217, label %then, label %merge +merge: + br label %merge +then: + %t218 = getelementptr i32* (%t4_s_0, 0, 35) + store i32 35, i32* %t218 + %t219 = load i32, i32* %t2_i + %t220 = icmp sgt i32 %t219, 36 + br i1 %t220, label %then, label %merge +merge: + br label %merge +then: + %t221 = getelementptr i32* (%t4_s_0, 0, 36) + store i32 36, i32* %t221 + %t222 = load i32, i32* %t2_i + %t223 = icmp sgt i32 %t222, 37 + br i1 %t223, label %then, label %merge +merge: + br label %merge +then: + %t224 = getelementptr i32* (%t4_s_0, 0, 37) + store i32 37, i32* %t224 + %t225 = load i32, i32* %t2_i + %t226 = icmp sgt i32 %t225, 38 + br i1 %t226, label %then, label %merge +merge: + br label %merge +then: + %t227 = getelementptr i32* (%t4_s_0, 0, 38) + store i32 38, i32* %t227 + %t228 = load i32, i32* %t2_i + %t229 = icmp sgt i32 %t228, 39 + br i1 %t229, label %then, label %merge +merge: + br label %merge +then: + %t230 = getelementptr i32* (%t4_s_0, 0, 39) + store i32 39, i32* %t230 + %t231 = load i32, i32* %t2_i + %t232 = icmp sgt i32 %t231, 40 + br i1 %t232, label %then, label %merge +merge: + br label %merge +then: + %t233 = getelementptr i32* (%t4_s_0, 0, 40) + store i32 40, i32* %t233 + %t234 = load i32, i32* %t2_i + %t235 = icmp sgt i32 %t234, 41 + br i1 %t235, label %then, label %merge +merge: + br label %merge +then: + %t236 = getelementptr i32* (%t4_s_0, 0, 41) + store i32 41, i32* %t236 + %t237 = load i32, i32* %t2_i + %t238 = icmp sgt i32 %t237, 42 + br i1 %t238, label %then, label %merge +merge: + br label %merge +then: + %t239 = getelementptr i32* (%t4_s_0, 0, 42) + store i32 42, i32* %t239 + %t240 = load i32, i32* %t2_i + %t241 = icmp sgt i32 %t240, 43 + br i1 %t241, label %then, label %merge +merge: + br label %merge +then: + %t242 = getelementptr i32* (%t4_s_0, 0, 43) + store i32 43, i32* %t242 + %t243 = load i32, i32* %t2_i + %t244 = icmp sgt i32 %t243, 44 + br i1 %t244, label %then, label %merge +merge: + br label %merge +then: + %t245 = getelementptr i32* (%t4_s_0, 0, 44) + store i32 44, i32* %t245 + %t246 = load i32, i32* %t2_i + %t247 = icmp sgt i32 %t246, 45 + br i1 %t247, label %then, label %merge +merge: + br label %merge +then: + %t248 = getelementptr i32* (%t4_s_0, 0, 45) + store i32 45, i32* %t248 + %t249 = load i32, i32* %t2_i + %t250 = icmp sgt i32 %t249, 46 + br i1 %t250, label %then, label %merge +merge: + br label %merge +then: + %t251 = getelementptr i32* (%t4_s_0, 0, 46) + store i32 46, i32* %t251 + %t252 = load i32, i32* %t2_i + %t253 = icmp sgt i32 %t252, 47 + br i1 %t253, label %then, label %merge +merge: + br label %merge +then: + %t254 = getelementptr i32* (%t4_s_0, 0, 47) + store i32 47, i32* %t254 + %t255 = load i32, i32* %t2_i + %t256 = icmp sgt i32 %t255, 48 + br i1 %t256, label %then, label %merge +merge: + br label %merge +then: + %t257 = getelementptr i32* (%t4_s_0, 0, 48) + store i32 48, i32* %t257 + %t258 = load i32, i32* %t2_i + %t259 = icmp sgt i32 %t258, 49 + br i1 %t259, label %then, label %merge +merge: + br label %merge +then: + %t260 = getelementptr i32* (%t4_s_0, 0, 49) + store i32 49, i32* %t260 + %t261 = load i32, i32* %t2_i + %t262 = icmp sgt i32 %t261, 50 + br i1 %t262, label %then, label %merge +merge: + br label %merge +then: + %t263 = getelementptr i32* (%t4_s_0, 0, 50) + store i32 50, i32* %t263 + %t264 = load i32, i32* %t2_i + %t265 = icmp sgt i32 %t264, 51 + br i1 %t265, label %then, label %merge +merge: + br label %merge +then: + %t266 = getelementptr i32* (%t4_s_0, 0, 51) + store i32 51, i32* %t266 + %t267 = load i32, i32* %t2_i + %t268 = icmp sgt i32 %t267, 52 + br i1 %t268, label %then, label %merge +merge: + br label %merge +then: + %t269 = getelementptr i32* (%t4_s_0, 0, 52) + store i32 52, i32* %t269 + %t270 = load i32, i32* %t2_i + %t271 = icmp sgt i32 %t270, 53 + br i1 %t271, label %then, label %merge +merge: + br label %merge +then: + %t272 = getelementptr i32* (%t4_s_0, 0, 53) + store i32 53, i32* %t272 + %t273 = load i32, i32* %t2_i + %t274 = icmp sgt i32 %t273, 54 + br i1 %t274, label %then, label %merge +merge: + br label %merge +then: + %t275 = getelementptr i32* (%t4_s_0, 0, 54) + store i32 54, i32* %t275 + %t276 = load i32, i32* %t2_i + %t277 = icmp sgt i32 %t276, 55 + br i1 %t277, label %then, label %merge +merge: + br label %merge +then: + %t278 = getelementptr i32* (%t4_s_0, 0, 55) + store i32 55, i32* %t278 + %t279 = load i32, i32* %t2_i + %t280 = icmp sgt i32 %t279, 56 + br i1 %t280, label %then, label %merge +merge: + br label %merge +then: + %t281 = getelementptr i32* (%t4_s_0, 0, 56) + store i32 56, i32* %t281 + %t282 = load i32, i32* %t2_i + %t283 = icmp sgt i32 %t282, 57 + br i1 %t283, label %then, label %merge +merge: + br label %merge +then: + %t284 = getelementptr i32* (%t4_s_0, 0, 57) + store i32 57, i32* %t284 + %t285 = load i32, i32* %t2_i + %t286 = icmp sgt i32 %t285, 58 + br i1 %t286, label %then, label %merge +merge: + br label %merge +then: + %t287 = getelementptr i32* (%t4_s_0, 0, 58) + store i32 58, i32* %t287 + %t288 = load i32, i32* %t2_i + %t289 = icmp sgt i32 %t288, 59 + br i1 %t289, label %then, label %merge +merge: + br label %merge +then: + %t290 = getelementptr i32* (%t4_s_0, 0, 59) + store i32 59, i32* %t290 + %t291 = load i32, i32* %t2_i + %t292 = icmp sgt i32 %t291, 60 + br i1 %t292, label %then, label %merge +merge: + br label %merge +then: + %t293 = getelementptr i32* (%t4_s_0, 0, 60) + store i32 60, i32* %t293 + %t294 = load i32, i32* %t2_i + %t295 = icmp sgt i32 %t294, 61 + br i1 %t295, label %then, label %merge +merge: + br label %merge +then: + %t296 = getelementptr i32* (%t4_s_0, 0, 61) + store i32 61, i32* %t296 + %t297 = load i32, i32* %t2_i + %t298 = icmp sgt i32 %t297, 62 + br i1 %t298, label %then, label %merge +merge: + br label %merge +then: + %t299 = getelementptr i32* (%t4_s_0, 0, 62) + store i32 62, i32* %t299 + %t300 = load i32, i32* %t2_i + %t301 = icmp sgt i32 %t300, 63 + br i1 %t301, label %then, label %merge +merge: + br label %merge +then: + %t302 = getelementptr i32* (%t4_s_0, 0, 63) + store i32 63, i32* %t302 + %t303 = load i32, i32* %t2_i + %t304 = icmp sgt i32 %t303, 64 + br i1 %t304, label %then, label %merge +merge: + br label %merge +then: + %t305 = getelementptr i32* (%t4_s_0, 0, 64) + store i32 64, i32* %t305 + %t306 = load i32, i32* %t2_i + %t307 = icmp sgt i32 %t306, 65 + br i1 %t307, label %then, label %merge +merge: + br label %merge +then: + %t308 = getelementptr i32* (%t4_s_0, 0, 65) + store i32 65, i32* %t308 + %t309 = load i32, i32* %t2_i + %t310 = icmp sgt i32 %t309, 66 + br i1 %t310, label %then, label %merge +merge: + br label %merge +then: + %t311 = getelementptr i32* (%t4_s_0, 0, 66) + store i32 66, i32* %t311 + %t312 = load i32, i32* %t2_i + %t313 = icmp sgt i32 %t312, 67 + br i1 %t313, label %then, label %merge +merge: + br label %merge +then: + %t314 = getelementptr i32* (%t4_s_0, 0, 67) + store i32 67, i32* %t314 + %t315 = load i32, i32* %t2_i + %t316 = icmp sgt i32 %t315, 68 + br i1 %t316, label %then, label %merge +merge: + br label %merge +then: + %t317 = getelementptr i32* (%t4_s_0, 0, 68) + store i32 68, i32* %t317 + %t318 = load i32, i32* %t2_i + %t319 = icmp sgt i32 %t318, 69 + br i1 %t319, label %then, label %merge +merge: + br label %merge +then: + %t320 = getelementptr i32* (%t4_s_0, 0, 69) + store i32 69, i32* %t320 + %t321 = load i32, i32* %t2_i + %t322 = icmp sgt i32 %t321, 70 + br i1 %t322, label %then, label %merge +merge: + br label %merge +then: + %t323 = getelementptr i32* (%t4_s_0, 0, 70) + store i32 70, i32* %t323 + %t324 = load i32, i32* %t2_i + %t325 = icmp sgt i32 %t324, 71 + br i1 %t325, label %then, label %merge +merge: + br label %merge +then: + %t326 = getelementptr i32* (%t4_s_0, 0, 71) + store i32 71, i32* %t326 + %t327 = load i32, i32* %t2_i + %t328 = icmp sgt i32 %t327, 72 + br i1 %t328, label %then, label %merge +merge: + br label %merge +then: + %t329 = getelementptr i32* (%t4_s_0, 0, 72) + store i32 72, i32* %t329 + %t330 = load i32, i32* %t2_i + %t331 = icmp sgt i32 %t330, 73 + br i1 %t331, label %then, label %merge +merge: + br label %merge +then: + %t332 = getelementptr i32* (%t4_s_0, 0, 73) + store i32 73, i32* %t332 + %t333 = load i32, i32* %t2_i + %t334 = icmp sgt i32 %t333, 74 + br i1 %t334, label %then, label %merge +merge: + br label %merge +then: + %t335 = getelementptr i32* (%t4_s_0, 0, 74) + store i32 74, i32* %t335 + %t336 = load i32, i32* %t2_i + %t337 = icmp sgt i32 %t336, 75 + br i1 %t337, label %then, label %merge +merge: + br label %merge +then: + %t338 = getelementptr i32* (%t4_s_0, 0, 75) + store i32 75, i32* %t338 + %t339 = load i32, i32* %t2_i + %t340 = icmp sgt i32 %t339, 76 + br i1 %t340, label %then, label %merge +merge: + br label %merge +then: + %t341 = getelementptr i32* (%t4_s_0, 0, 76) + store i32 76, i32* %t341 + %t342 = load i32, i32* %t2_i + %t343 = icmp sgt i32 %t342, 77 + br i1 %t343, label %then, label %merge +merge: + br label %merge +then: + %t344 = getelementptr i32* (%t4_s_0, 0, 77) + store i32 77, i32* %t344 + %t345 = load i32, i32* %t2_i + %t346 = icmp sgt i32 %t345, 78 + br i1 %t346, label %then, label %merge +merge: + br label %merge +then: + %t347 = getelementptr i32* (%t4_s_0, 0, 78) + store i32 78, i32* %t347 + %t348 = load i32, i32* %t2_i + %t349 = icmp sgt i32 %t348, 79 + br i1 %t349, label %then, label %merge +merge: + br label %merge +then: + %t350 = getelementptr i32* (%t4_s_0, 0, 79) + store i32 79, i32* %t350 + %t351 = load i32, i32* %t2_i + %t352 = icmp sgt i32 %t351, 80 + br i1 %t352, label %then, label %merge +merge: + br label %merge +then: + %t353 = getelementptr i32* (%t4_s_0, 0, 80) + store i32 80, i32* %t353 + %t354 = load i32, i32* %t2_i + %t355 = icmp sgt i32 %t354, 81 + br i1 %t355, label %then, label %merge +merge: + br label %merge +then: + %t356 = getelementptr i32* (%t4_s_0, 0, 81) + store i32 81, i32* %t356 + %t357 = load i32, i32* %t2_i + %t358 = icmp sgt i32 %t357, 82 + br i1 %t358, label %then, label %merge +merge: + br label %merge +then: + %t359 = getelementptr i32* (%t4_s_0, 0, 82) + store i32 82, i32* %t359 + %t360 = load i32, i32* %t2_i + %t361 = icmp sgt i32 %t360, 83 + br i1 %t361, label %then, label %merge +merge: + br label %merge +then: + %t362 = getelementptr i32* (%t4_s_0, 0, 83) + store i32 83, i32* %t362 + %t363 = load i32, i32* %t2_i + %t364 = icmp sgt i32 %t363, 84 + br i1 %t364, label %then, label %merge +merge: + br label %merge +then: + %t365 = getelementptr i32* (%t4_s_0, 0, 84) + store i32 84, i32* %t365 + %t366 = load i32, i32* %t2_i + %t367 = icmp sgt i32 %t366, 85 + br i1 %t367, label %then, label %merge +merge: + br label %merge +then: + %t368 = getelementptr i32* (%t4_s_0, 0, 85) + store i32 85, i32* %t368 + %t369 = load i32, i32* %t2_i + %t370 = icmp sgt i32 %t369, 86 + br i1 %t370, label %then, label %merge +merge: + br label %merge +then: + %t371 = getelementptr i32* (%t4_s_0, 0, 86) + store i32 86, i32* %t371 + %t372 = load i32, i32* %t2_i + %t373 = icmp sgt i32 %t372, 87 + br i1 %t373, label %then, label %merge +merge: + br label %merge +then: + %t374 = getelementptr i32* (%t4_s_0, 0, 87) + store i32 87, i32* %t374 + %t375 = load i32, i32* %t2_i + %t376 = icmp sgt i32 %t375, 88 + br i1 %t376, label %then, label %merge +merge: + br label %merge +then: + %t377 = getelementptr i32* (%t4_s_0, 0, 88) + store i32 88, i32* %t377 + %t378 = load i32, i32* %t2_i + %t379 = icmp sgt i32 %t378, 89 + br i1 %t379, label %then, label %merge +merge: + br label %merge +then: + %t380 = getelementptr i32* (%t4_s_0, 0, 89) + store i32 89, i32* %t380 + %t381 = load i32, i32* %t2_i + %t382 = icmp sgt i32 %t381, 90 + br i1 %t382, label %then, label %merge +merge: + br label %merge +then: + %t383 = getelementptr i32* (%t4_s_0, 0, 90) + store i32 90, i32* %t383 + %t384 = load i32, i32* %t2_i + %t385 = icmp sgt i32 %t384, 91 + br i1 %t385, label %then, label %merge +merge: + br label %merge +then: + %t386 = getelementptr i32* (%t4_s_0, 0, 91) + store i32 91, i32* %t386 + %t387 = load i32, i32* %t2_i + %t388 = icmp sgt i32 %t387, 92 + br i1 %t388, label %then, label %merge +merge: + br label %merge +then: + %t389 = getelementptr i32* (%t4_s_0, 0, 92) + store i32 92, i32* %t389 + %t390 = load i32, i32* %t2_i + %t391 = icmp sgt i32 %t390, 93 + br i1 %t391, label %then, label %merge +merge: + br label %merge +then: + %t392 = getelementptr i32* (%t4_s_0, 0, 93) + store i32 93, i32* %t392 + %t393 = load i32, i32* %t2_i + %t394 = icmp sgt i32 %t393, 94 + br i1 %t394, label %then, label %merge +merge: + br label %merge +then: + %t395 = getelementptr i32* (%t4_s_0, 0, 94) + store i32 94, i32* %t395 + %t396 = load i32, i32* %t2_i + %t397 = icmp sgt i32 %t396, 95 + br i1 %t397, label %then, label %merge +merge: + br label %merge +then: + %t398 = getelementptr i32* (%t4_s_0, 0, 95) + store i32 95, i32* %t398 + %t399 = load i32, i32* %t2_i + %t400 = icmp sgt i32 %t399, 96 + br i1 %t400, label %then, label %merge +merge: + br label %merge +then: + %t401 = getelementptr i32* (%t4_s_0, 0, 96) + store i32 96, i32* %t401 + %t402 = load i32, i32* %t2_i + %t403 = icmp sgt i32 %t402, 97 + br i1 %t403, label %then, label %merge +merge: + br label %merge +then: + %t404 = getelementptr i32* (%t4_s_0, 0, 97) + store i32 97, i32* %t404 + %t405 = load i32, i32* %t2_i + %t406 = icmp sgt i32 %t405, 98 + br i1 %t406, label %then, label %merge +merge: + br label %merge +then: + %t407 = getelementptr i32* (%t4_s_0, 0, 98) + store i32 98, i32* %t407 + %t408 = load i32, i32* %t2_i + %t409 = icmp sgt i32 %t408, 99 + br i1 %t409, label %then, label %merge +merge: + br label %merge +then: + %t410 = getelementptr i32* (%t4_s_0, 0, 99) + store i32 99, i32* %t410 + br label %merge +merge: + br label %merge +while.cond: + %t414 = load i32, i32* %t413_m + %t415 = icmp slt i32 %t414, 100 + br i1 %t415, label %while.body, label %while.exit +while.body: + %t416 = load i32, i32* %t1_sum + %t417 = load i32, i32* %t413_m + %t418 = getelementptr i32* (%t4_s_0, 0, %t417) + %t419 = load i32, i32* %t418 + %t420 = add i32 %t416, %t419 + store i32 %t420, i32* %t1_sum + %t421 = load i32, i32* %t413_m + %t422 = add i32 %t421, 1 + store i32 %t422, i32* %t413_m + br label %while.cond +while.exit: + %t423 = load i32, i32* %t1_sum + %t424 = mod i32 %t423, 65535 + store i32 %t424, i32* %t1_sum + br label %while.cond +} +define i32 @main() { +entry: + %t426 = call void @starttime() + %t427_loopcount = alloca i32 + %t428 = call i32 @getint() + store i32 %t428, i32* %t427_loopcount + %t429 = load i32, i32* %t427_loopcount + %t430 = call i32 @func(i32 %t429) + %t431 = call void @putint(i32 %t430) + %t432 = call void @putch(i32 10) + %t433 = call void @stoptime() + ret i32 0 +} ========== test/test_case/performance/large_loop_array_2.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -19040,7 +23457,7 @@ SymbolTable::addSymbol: stored accumulator with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad525640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: length [DEBUG] visitPrimaryExp: length @@ -19053,7 +23470,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x562bad522a70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: accumulator+x[i]*y[i] [DEBUG] visitUnaryExp: accumulator @@ -19061,7 +23478,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x562bad522a70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: x[i] [DEBUG] visitPrimaryExp: x[i] @@ -19076,7 +23493,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad525640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: y[i] @@ -19092,14 +23509,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad525640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad525640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -19107,7 +23524,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad525640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19121,7 +23538,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x562bad522a70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 loop has_return: 1 return_type_is_void: 0 @@ -19198,14 +23615,14 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad541380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: COUNT [DEBUG] visitPrimaryExp: COUNT SymbolTable::lookup: found COUNT in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = COUNT, sym->kind = 0 绑定变量: COUNT -> VarDefContext -CheckLValue 绑定变量: COUNT, sym->kind: 0, sym->var_def_ctx: 0x562bad51ffb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: COUNT, sym->kind: 0, sym->var_def_ctx: 0x56429ddffc30, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -19214,7 +23631,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad541380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -19223,7 +23640,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x562bad5462f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0.0 [DEBUG] visitUnaryExp: 0.0 @@ -19232,7 +23649,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x562bad546f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1.0 [DEBUG] visitUnaryExp: 1.0 @@ -19242,7 +23659,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x562bad5462f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+0.1 [DEBUG] visitUnaryExp: a @@ -19250,7 +23667,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x562bad5462f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0.1 [DEBUG] visitPrimaryExp: 0.1 @@ -19258,7 +23675,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x562bad546f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+0.2 [DEBUG] visitUnaryExp: b @@ -19266,7 +23683,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x562bad546f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0.2 [DEBUG] visitPrimaryExp: 0.2 @@ -19276,21 +23693,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x562bad542cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x56429de22940, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x562bad543a60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x56429de236e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -19298,7 +23715,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: a+j @@ -19307,20 +23724,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x562bad5462f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x562bad544970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x56429de245f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -19328,7 +23745,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: b+j @@ -19337,20 +23754,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x562bad546f10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -19358,7 +23775,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562bad5423f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19366,7 +23783,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x562bad53a7b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: total+loop(x,y,len) [DEBUG] visitUnaryExp: total @@ -19374,7 +23791,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x562bad53a7b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: loop(x,y,len) [DEBUG] 函数调用: loop @@ -19387,7 +23804,7 @@ SymbolTable::lookup: found loop in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x562bad543a60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x56429de236e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: y @@ -19396,7 +23813,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x562bad544970, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x56429de245f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: len @@ -19405,7 +23822,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x562bad542cc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x56429de22940, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -19414,7 +23831,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad541380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -19422,7 +23839,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562bad541380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19441,7 +23858,7 @@ SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x562bad53a7b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11442437121638400.000000 [DEBUG] visitPrimaryExp: 11442437121638400.000000 @@ -19455,7 +23872,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x562bad53a7b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11442437121638400.000000 [DEBUG] visitPrimaryExp: 11442437121638400.000000 @@ -19504,8 +23921,36 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: COUNT +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 COUNT +[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: COUNT +[DEBUG] HandleGlobalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 500000 +[DEBUG IRGEN] visitAddExp: 500000 +[DEBUG IRGEN] visitMulExp: 500000 +[DEBUG IRGEN] visitPrimaryExp: 500000 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 500000 created as 0x56429de43190 +[DEBUG] EvalExpr: success, result = 0x56429de43190 +[DEBUG] HandleGlobalVariable: 获取到常量初始化值 +[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 +[DEBUG] HandleGlobalVariable: 存储全局变量引用 +[DEBUG] HandleGlobalVariable: 创建全局变量 COUNT +[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: loop +[error] [ir] AllocaInst 当前只支持 i32* ========== test/test_case/performance/transpose0.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -19585,21 +24030,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: colsize [DEBUG] visitPrimaryExp: colsize SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = colsize, sym->kind = 0 绑定变量: colsize -> VarDefContext -CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x566a91816960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x55e49499b5e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -19610,7 +24055,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -19625,21 +24070,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -19647,7 +24092,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19667,7 +24112,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -19680,7 +24125,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored curr with kind=0, const_def_ctx=0 @@ -19697,21 +24142,21 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: colsize [DEBUG] visitPrimaryExp: colsize SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = colsize, sym->kind = 0 绑定变量: colsize -> VarDefContext -CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x566a91816960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x55e49499b5e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: matrix[i*rowsize+j] @@ -19728,7 +24173,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -19741,7 +24186,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt @@ -19756,7 +24201,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -19769,7 +24214,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: curr @@ -19778,13 +24223,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found curr in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = curr, sym->kind = 0 绑定变量: curr -> VarDefContext -CheckLValue 绑定变量: curr, sym->kind: 0, sym->var_def_ctx: 0x566a918348a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: curr, sym->kind: 0, sym->var_def_ctx: 0x55e4949b95a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -19792,7 +24237,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x566a9181e580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19800,7 +24245,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -19808,7 +24253,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a9181eb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19844,7 +24289,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x566a918184c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55e49499d140, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -19868,21 +24313,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x566a918466e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55e4949cb2f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x566a918130c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -19890,7 +24335,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: i @@ -19899,13 +24344,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -19913,7 +24358,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -19921,7 +24366,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -19932,14 +24377,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x566a91847640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55e4949cc250, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -19955,7 +24400,7 @@ SymbolTable::lookup: found transpose in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x566a918466e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55e4949cb2f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: matrix [DEBUG] visitUnaryExp: matrix @@ -19963,7 +24408,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x566a918130c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: a[i] @@ -19972,7 +24417,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x566a918184c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55e49499d140, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -19980,7 +24425,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -19990,7 +24435,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -19998,7 +24443,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20012,7 +24457,7 @@ SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -20023,21 +24468,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x566a91847640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55e4949cc250, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+i*i*matrix[i] [DEBUG] visitUnaryExp: ans @@ -20045,28 +24490,28 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: matrix[i] [DEBUG] visitPrimaryExp: matrix[i] SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x566a918130c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -20074,14 +24519,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -20089,7 +24534,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x566a91848dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20099,7 +24544,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -20107,7 +24552,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -ans [DEBUG] visitUnaryExp: -ans @@ -20116,7 +24561,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: stoptime() @@ -20137,7 +24582,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x566a91852030, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -20161,14 +24606,20 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit -[DEBUG IRGEN] visitAddExp: 20000000 -[DEBUG IRGEN] visitMulExp: 20000000 -[DEBUG IRGEN] visitPrimaryExp: 20000000 -[DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20000000 created as 0x566a91860c50 -[DEBUG] TryEvaluateConstInt: got IR value 0x566a91860c50 -[error] [ir] IRBuilder 未设置插入点 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: matrix +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 matrix +[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 20000000 +[error] [irgen] 全局数组大小无效 ========== test/test_case/performance/vector_mul3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -20278,7 +24729,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348912160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -20291,7 +24742,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348913f90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[i]*u[i] [DEBUG] visitUnaryExp: sum @@ -20299,7 +24750,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348913f90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[i] [DEBUG] visitPrimaryExp: v[i] @@ -20314,7 +24765,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348912160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: u[i] @@ -20330,14 +24781,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348912160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348912160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -20345,7 +24796,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348912160, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20359,7 +24810,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348913f90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 Vectordot has_return: 1 return_type_is_void: 0 @@ -20394,7 +24845,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348923880, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -20409,7 +24860,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x6233489247a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -20422,7 +24873,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348925050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[j]/func(i,j) [DEBUG] visitUnaryExp: sum @@ -20430,7 +24881,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348925050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[j] [DEBUG] visitPrimaryExp: v[j] @@ -20445,7 +24896,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x6233489247a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: func(i,j) @@ -20459,7 +24910,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348923880, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -20467,7 +24918,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x6233489247a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -20475,7 +24926,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x6233489247a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -20483,7 +24934,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x6233489247a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20499,7 +24950,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348923880, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -20508,13 +24959,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348925050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348923880, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -20522,7 +24973,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348923880, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20558,7 +25009,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348920d90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -20573,7 +25024,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x623348931dd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -20586,7 +25037,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348932730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[j]/func(j,i) [DEBUG] visitUnaryExp: sum @@ -20594,7 +25045,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348932730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[j] [DEBUG] visitPrimaryExp: v[j] @@ -20609,7 +25060,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x623348931dd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: func(j,i) @@ -20623,7 +25074,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x623348931dd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -20631,7 +25082,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348920d90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -20639,7 +25090,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x623348931dd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -20647,7 +25098,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x623348931dd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20663,7 +25114,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348920d90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -20672,13 +25123,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x623348932730, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348920d90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -20686,7 +25137,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x623348920d90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20780,7 +25231,7 @@ SymbolTable::addSymbol: stored input with kind=2, const_def_ctx=0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -20793,7 +25244,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1e-6 [DEBUG] visitPrimaryExp: 1e-6 @@ -20802,7 +25253,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -20815,7 +25266,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: -1e-6 [DEBUG] visitUnaryExp: 1e-6 @@ -20825,7 +25276,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: (temp+input/temp)/2 [DEBUG] visitUnaryExp: (temp+input/temp) @@ -20836,7 +25287,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -20849,7 +25300,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -20863,7 +25314,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x62334893dfd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 my_sqrt has_return: 1 return_type_is_void: 0 @@ -20880,7 +25331,7 @@ SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -20889,7 +25340,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2000 [DEBUG] visitUnaryExp: 2000 @@ -20942,21 +25393,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x623348931510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -20964,7 +25415,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -20974,7 +25425,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -20982,7 +25433,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -20990,7 +25441,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -21001,7 +25452,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1000 [DEBUG] visitPrimaryExp: 1000 @@ -21019,7 +25470,7 @@ SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x623348931510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -21028,7 +25479,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x6233489317a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -21037,7 +25488,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: Vectortmp [DEBUG] visitUnaryExp: Vectortmp @@ -21045,7 +25496,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = Vectortmp, sym->kind = 0 绑定变量: Vectortmp -> VarDefContext -CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x62334894f0b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x5558119c9d30, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -21065,7 +25516,7 @@ SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x6233489317a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorA @@ -21074,7 +25525,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x623348931510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -21083,7 +25534,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: Vectortmp [DEBUG] visitUnaryExp: Vectortmp @@ -21091,7 +25542,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = Vectortmp, sym->kind = 0 绑定变量: Vectortmp -> VarDefContext -CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x62334894f0b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x5558119c9d30, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -21102,7 +25553,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -21110,7 +25561,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x62334894f9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -21139,7 +25590,7 @@ SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x623348931510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -21148,7 +25599,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x6233489317a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -21157,7 +25608,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -21173,7 +25624,7 @@ SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x6233489317a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -21182,7 +25633,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x6233489317a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -21191,7 +25642,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x623348947500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -21205,7 +25656,7 @@ SymbolTable::addSymbol: stored result with kind=0, const_def_ctx=0 SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = result, sym->kind = 0 绑定变量: result -> VarDefContext -CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x623348957c10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x5558119d2890, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1.000000 [DEBUG] visitPrimaryExp: 1.000000 @@ -21216,7 +25667,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = result, sym->kind = 0 绑定变量: result -> VarDefContext -CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x623348957c10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x5558119d2890, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1.000000 [DEBUG] visitPrimaryExp: 1.000000 @@ -21268,6 +25719,10 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 +[DEBUG IRGEN] 添加运行时库函数声明 +[DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 [error] [irgen] 当前仅支持 int 类型变量 diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 70d6296..4cbdf25 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -343,34 +343,120 @@ std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { return ctx->lOrExp()->accept(this); } -ir::Value* IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { +std::any IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法函数调用")); } std::string funcName = ctx->Ident()->getText(); + std::cout << "[DEBUG IRGEN] visitCallExp: 调用函数 " << funcName << std::endl; - // 语义检查(如果需要) - // auto* funcDecl = sema_.ResolveFuncCall(ctx); - // if (!funcDecl) throw ... + // 查找函数对象 + ir::Function* callee = module_.FindFunction(funcName); + + // 如果没找到,可能是运行时函数还没声明,尝试动态声明 + if (!callee) { + std::cout << "[DEBUG IRGEN] 函数 " << funcName << " 未找到,尝试动态声明" << std::endl; + + // 根据函数名动态创建运行时函数声明 + callee = CreateRuntimeFunctionDecl(funcName); + if (!callee) { + throw std::runtime_error(FormatError("irgen", "未找到函数: " + funcName)); + } + } // 收集实参 std::vector args; if (ctx->funcRParams()) { auto argList = ctx->funcRParams()->accept(this); - args = std::any_cast>(argList); + try { + args = std::any_cast>(argList); + std::cout << "[DEBUG IRGEN] visitCallExp: 收集到 " << args.size() << " 个参数" << std::endl; + } catch (const std::bad_any_cast& e) { + std::cerr << "[ERROR] visitCallExp: 函数调用参数类型错误: " << e.what() << std::endl; + } } - // 查找函数对象 - ir::Function* callee = module_.FindFunction(funcName); - if (!callee) { - throw std::runtime_error(FormatError("irgen", "未找到函数: " + funcName)); + // 生成调用指令 + ir::Value* callResult = builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); + + // 如果函数返回 void,返回一个默认值(用于表达式上下文) + if (callResult->GetType()->IsVoid()) { + // void 函数调用不产生值,但我们返回一个 0 常量以保持类型一致性 + return static_cast(builder_.CreateConstInt(0)); } + + std::cout << "[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 " << (void*)callResult << std::endl; + return static_cast(callResult); +} - // 生成调用指令 - return builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); +// 动态创建运行时函数声明的辅助函数 +ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) { + std::cout << "[DEBUG IRGEN] CreateRuntimeFunctionDecl: " << funcName << std::endl; + + // 根据常见运行时函数名创建对应的函数类型 + if (funcName == "getint" || funcName == "getch") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + } + else if (funcName == "putint" || funcName == "putch") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "getarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + } + else if (funcName == "putarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "puts") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "starttime" || funcName == "stoptime") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + } + else if (funcName == "_sysy_starttime" || funcName == "_sysy_stoptime") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "read_map") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + } + else if (funcName == "float_eq") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetFloatType(), ir::Type::GetFloatType()})); + } + else if (funcName == "memset") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetPtrInt32Type(), + ir::Type::GetInt32Type(), + ir::Type::GetInt32Type()})); + } + + // 其他函数不支持动态创建 + return nullptr; } + // 实现一元表达式 std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { if (!ctx) { diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index feebafa..64771f7 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -26,7 +26,83 @@ IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) : module_(module), sema_(sema), func_(nullptr), - builder_(module.GetContext(), nullptr) {} + builder_(module.GetContext(), nullptr) { + AddRuntimeFunctions(); + } + +void IRGenImpl::AddRuntimeFunctions() { + std::cout << "[DEBUG IRGEN] 添加运行时库函数声明" << std::endl; + + // 输入函数(返回 int) + module_.CreateFunction("getint", + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + module_.CreateFunction("getch", + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + + // getarray(int* a, int n): int + module_.CreateFunction("getarray", + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + + // 输出函数(返回 void) + module_.CreateFunction("putint", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("putch", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + + // putarray(int n, int* a): void + module_.CreateFunction("putarray", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrInt32Type()})); + + // 字符串输出(暂时用 int* 替代 char*) + module_.CreateFunction("puts", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + + // 时间测量函数(SysY 标准库) + module_.CreateFunction("_sysy_starttime", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("_sysy_stoptime", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type()})); + + // 简化版本 + module_.CreateFunction("starttime", + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + module_.CreateFunction("stoptime", + ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); + + // 其他可能需要的函数 + module_.CreateFunction("read_map", + ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + + // 浮点数 + module_.CreateFunction("float_eq", + ir::Type::GetFunctionType( + ir::Type::GetInt32Type(), + {ir::Type::GetFloatType(), ir::Type::GetFloatType()})); + + // 内存操作函数 + module_.CreateFunction("memset", + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetPtrInt32Type(), + ir::Type::GetInt32Type(), + ir::Type::GetInt32Type()})); + + std::cout << "[DEBUG IRGEN] 运行时库函数声明完成" << std::endl; +} // 修正:没有 mainFuncDef,通过函数名找到 main std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { From c8f40ea09a9dd85aee2c34d3bc3a790179162005 Mon Sep 17 00:00:00 2001 From: potapo <2720187907@qq.com> Date: Wed, 1 Apr 2026 11:46:58 +0800 Subject: [PATCH 38/39] =?UTF-8?q?=E6=B5=AE=E7=82=B9=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=EF=BC=8C=E5=B8=B8=E9=87=8F=E5=AD=98=E5=9C=A8=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 87 + result.txt | 6104 ++++++++++++++++++++++----------------- src/ir/IRBuilder.cpp | 145 +- src/ir/IRPrinter.cpp | 9 + src/irgen/IRGenDecl.cpp | 405 +-- src/irgen/IRGenExp.cpp | 241 +- src/irgen/IRGenFunc.cpp | 102 +- src/irgen/IRGenStmt.cpp | 55 +- 8 files changed, 4243 insertions(+), 2905 deletions(-) diff --git a/include/ir/IR.h b/include/ir/IR.h index d252ab3..20a2e64 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -320,6 +320,12 @@ enum class Opcode { Div, Mod, And, Or, Not, GEP, + FAdd, FSub, FMul, FDiv, + FCmp, + SIToFP, // 整数转浮点 + FPToSI, // 浮点转整数 + FPExt, // 浮点扩展 + FPTrunc, // 浮点截断 }; // ZExt 和 Trunc 是零扩展和截断指令,SysY 的 int (i32) vs LLVM IR 的比较结果 (i1)。 @@ -569,6 +575,42 @@ class BranchInst : public Instruction { Predicate pred_; }; +class FcmpInst : public Instruction { + public: + enum class Predicate { + FALSE, // Always false + OEQ, // Ordered and equal + OGT, // Ordered and greater than + OGE, // Ordered and greater than or equal + OLT, // Ordered and less than + OLE, // Ordered and less than or equal + ONE, // Ordered and not equal + ORD, // Ordered (no nans) + UNO, // Unordered (isnan(x) || isnan(y)) + UEQ, // Unordered or equal + UGT, // Unordered or greater than + UGE, // Unordered or greater than or equal + ULT, // Unordered or less than + ULE, // Unordered or less than or equal + UNE, // Unordered or not equal + TRUE // Always true + }; + + FcmpInst(Predicate pred, Value* lhs, Value* rhs, + std::shared_ptr i1_ty, std::string name) + : Instruction(Opcode::FCmp, i1_ty, name), pred_(pred) { + AddOperand(lhs); + AddOperand(rhs); + } + + Predicate GetPredicate() const { return pred_; } + Value* GetLhs() const { return GetOperand(0); } + Value* GetRhs() const { return GetOperand(1); } + + private: + Predicate pred_; +}; + // ZExtInst - 零扩展指令 class ZExtInst : public Instruction { public: @@ -728,6 +770,32 @@ class Module { std::vector> globals_; }; +// SIToFP - 整数转浮点 +class SIToFPInst : public Instruction { + public: + SIToFPInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::SIToFP, target_ty, name) { + AddOperand(value); + } + + Value* GetValue() const { + return GetOperand(0); + } +}; + +// FPToSI - 浮点转整数 +class FPToSIInst : public Instruction { + public: + FPToSIInst(Value* value, std::shared_ptr target_ty, std::string name = "") + : Instruction(Opcode::FPToSI, target_ty, name) { + AddOperand(value); + } + + Value* GetValue() const { + return GetOperand(0); + } +}; + class IRBuilder { public: IRBuilder(Context& ctx, BasicBlock* bb); @@ -791,6 +859,25 @@ class IRBuilder { GEPInst* CreateGEP(Value* base, const std::vector& indices, const std::string& name); + // 浮点运算 + BinaryInst* CreateFAdd(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFSub(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFMul(Value* lhs, Value* rhs, const std::string& name); + BinaryInst* CreateFDiv(Value* lhs, Value* rhs, const std::string& name); + + // 浮点比较 + FcmpInst* CreateFCmpOEQ(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpONE(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOLT(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOLE(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOGT(Value* lhs, Value* rhs, const std::string& name); + FcmpInst* CreateFCmpOGE(Value* lhs, Value* rhs, const std::string& name); + + // 类型转换 + SIToFPInst* CreateSIToFP(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); + FPToSIInst* CreateFPToSI(Value* value, std::shared_ptr target_ty, + const std::string& name = ""); private: Context& ctx_; BasicBlock* insert_block_; diff --git a/result.txt b/result.txt index d94ad8d..893ee2e 100644 --- a/result.txt +++ b/result.txt @@ -47,23 +47,23 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] 初始化值数量: 8 [DEBUG] 期望元素数量: 8 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x55cf3c928b00 +保存常量定义上下文: a, ctx: 0x55aa3d9d1b00 [DEBUG] 数组常量,不存储单个常量值 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55cf3c928b00 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55aa3d9d1b00 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55cf3c928b00 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cf3c928b00 +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55aa3d9d1b00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55aa3d9d1b00 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: N base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x55cf3c9332c0 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55cf3c9332c0 +保存常量定义上下文: N, ctx: 0x55aa3d9dc2c0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55aa3d9dc2c0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cf3c9332c0 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55aa3d9dc2c0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: 4 @@ -120,14 +120,14 @@ SymbolTable::addSymbol: stored c with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: d base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cf3c9332c0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55aa3d9dc2c0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 -SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c9332c0 +SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55aa3d9dc2c0 [DEBUG] dim[0] = 4 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -152,10 +152,10 @@ SymbolTable::lookup: found N in scope level 3, kind=3, const_def_ctx=0x55cf3c933 [DEBUG] CheckExp: a[3][0] [DEBUG] visitUnaryExp: a[3][0] [DEBUG] visitPrimaryExp: a[3][0] -SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55cf3c928b00 +SymbolTable::lookup: found a in scope level 3, kind=3, const_def_ctx=0x55aa3d9d1b00 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cf3c928b00 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55aa3d9d1b00 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -190,7 +190,7 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55cf3c939a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9e2a40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -205,7 +205,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55cf3c935f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9def60, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -244,7 +244,7 @@ SymbolTable::addSymbol: stored e with kind=0, const_def_ctx=0 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -261,7 +261,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -278,7 +278,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found e in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = e, sym->kind = 0 绑定变量: e -> VarDefContext -CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55cf3c942470, sym->const_def_ctx: 0 +CheckLValue 绑定变量: e, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9eb470, sym->const_def_ctx: 0 dim_count: 3, subscript_count: 3 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -295,7 +295,7 @@ dim_count: 3, subscript_count: 3 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55cf3c939a40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55aa3d9e2a40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -311,49 +311,46 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55aa3da01cd0 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {constinta[4][2]={{1,2},{3,4},{},7};constintN=3;intb[4][2]={};intc[4][2]={1,2,3,4,5,6,7,8};intd[N+1][2]={1,2,{3},{5},a[3][0],8};inte[4][2][1]={{d[2][1],{c[2][1]}},{3,4},{5,6},{7,8}};returne[3][1][0]+e[0][0][0]+e[0][1][0]+d[3][0];} [DEBUG IRGEN] visitBlockItem: constinta[4][2]={{1,2},{3,4},{},7}; [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant a -[DEBUG] visitConstDef: array constant a [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x55cf3c9593c0 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55aa3da023c0 [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x55cf3c959460 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55aa3da02460 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: constintN=3; [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant N -[DEBUG] visitConstDef: scalar constant N [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant N = 3 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intb[4][2]={}; @@ -364,18 +361,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部数组变量 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] HandleLocalVariable: 数组总大小: 8 -[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 -[DEBUG] HandleLocalVariable: 处理数组初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 空初始化列表 -[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: 0 -[DEBUG] HandleLocalVariable: 存储数组引用 -[DEBUG] HandleLocalVariable: 创建局部数组 b,维度 4×2,总大小 8 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intc[4][2]={1,2,3,4,5,6,7,8}; @@ -386,12 +375,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 c -[DEBUG] HandleLocalVariable: 处理局部数组变量 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] HandleLocalVariable: 数组总大小: 8 -[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 -[DEBUG] HandleLocalVariable: 处理数组初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理聚合初始化 [DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 @@ -402,8 +387,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 -[DEBUG] EvalExpr: success, result = 0x55cf3c959190 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 +[DEBUG] EvalExpr: success, result = 0x55aa3da02190 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -412,8 +397,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 -[DEBUG] EvalExpr: success, result = 0x55cf3c959210 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 +[DEBUG] EvalExpr: success, result = 0x55aa3da02210 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -422,8 +407,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 -[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -432,8 +417,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x55cf3c9593c0 -[DEBUG] EvalExpr: success, result = 0x55cf3c9593c0 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55aa3da023c0 +[DEBUG] EvalExpr: success, result = 0x55aa3da023c0 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -442,8 +427,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x55cf3c95a700 -[DEBUG] EvalExpr: success, result = 0x55cf3c95a700 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55aa3da036a0 +[DEBUG] EvalExpr: success, result = 0x55aa3da036a0 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -452,8 +437,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x55cf3c95a7b0 -[DEBUG] EvalExpr: success, result = 0x55cf3c95a7b0 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x55aa3da03750 +[DEBUG] EvalExpr: success, result = 0x55aa3da03750 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -462,8 +447,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x55cf3c959460 -[DEBUG] EvalExpr: success, result = 0x55cf3c959460 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x55aa3da02460 +[DEBUG] EvalExpr: success, result = 0x55aa3da02460 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -472,14 +457,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x55cf3c95a810 -[DEBUG] EvalExpr: success, result = 0x55cf3c95a810 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x55aa3da037b0 +[DEBUG] EvalExpr: success, result = 0x55aa3da037b0 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] ProcessNestedInitVals: 共获取 8 个初始化值 -[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: 8 -[DEBUG] HandleLocalVariable: 存储数组引用 -[DEBUG] HandleLocalVariable: 创建局部数组 c,维度 4×2,总大小 8 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intd[N+1][2]={1,2,{3},{5},a[3][0],8}; @@ -490,12 +471,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 d -[DEBUG] HandleLocalVariable: 处理局部数组变量 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] HandleLocalVariable: 数组总大小: 8 -[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 -[DEBUG] HandleLocalVariable: 处理数组初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理聚合初始化 [DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值 @@ -506,8 +483,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55cf3c959190 -[DEBUG] EvalExpr: success, result = 0x55cf3c959190 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55aa3da02190 +[DEBUG] EvalExpr: success, result = 0x55aa3da02190 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 @@ -516,8 +493,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x55cf3c959210 -[DEBUG] EvalExpr: success, result = 0x55cf3c959210 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55aa3da02210 +[DEBUG] EvalExpr: success, result = 0x55aa3da02210 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理聚合初始化 @@ -529,8 +506,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 -[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 [DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 @@ -544,8 +521,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x55cf3c95a700 -[DEBUG] EvalExpr: success, result = 0x55cf3c95a700 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x55aa3da036a0 +[DEBUG] EvalExpr: success, result = 0x55aa3da036a0 [DEBUG] ProcessNestedInitVals: 获取到单个值 [DEBUG] ProcessNestedInitVals: 共获取 1 个初始化值 [DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: 1 @@ -563,16 +540,16 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x55cf3c959360 -[DEBUG] EvalExpr: success, result = 0x55cf3c959360 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x55aa3da02360 +[DEBUG] EvalExpr: success, result = 0x55aa3da02360 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x55cf3c9594c0 -[ERROR] Exception in EvalExpr: [ir] 不支持的指针类型 -[error] [ir] 不支持的指针类型 +[DEBUG] EvalExpr: success, result = 0x55aa3da024c0 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[error] [ir] LoadInst 当前只支持从 i32* 加载 ========== test/test_case/functional/09_func_defn.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -630,7 +607,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558432321720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11b720, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -639,7 +616,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558432324180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11e180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: func(a) [DEBUG] visitUnaryExp: func(a) @@ -653,7 +630,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558432321720, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11b720, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: Return ExpStmt @@ -666,7 +643,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558432324180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55ea0f11e180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -681,16 +658,15 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 a -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: a -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 a -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG IRGEN] visitFuncDef: func +[DEBUG] visitFuncDef: 创建函数 func,返回类型: int,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x55ea0f131b40 +[DEBUG] visitFuncDef: 为函数 func 添加参数 p,类型: int32 +[DEBUG] visitFuncDef: 参数 p 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {p=p-1;returnp;} [DEBUG IRGEN] visitBlockItem: p=p-1; [DEBUG IRGEN] visitStmt: p=p-1; @@ -706,12 +682,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x558432337f00 -[DEBUG] visitAddExp: left=0x558432337e40, right=0x558432337f00 -[DEBUG] EvalExpr: success, result = 0x558432337f60 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55ea0f131f00 +[DEBUG] visitAddExp: left=0x55ea0f131e40, type=int, right=0x55ea0f131f00, type=int +[DEBUG] EvalExpr: success, result = 0x55ea0f131f60 [DEBUG] HandleAssignStmt: assigning to p -[DEBUG] HandleAssignStmt: found in param_map_ for p, ptr = 0x558432335d40 -[DEBUG] HandleAssignStmt: scalar assignment to p, ptr = 0x558432335d40, rhs = 0x558432337f60 +[DEBUG] HandleAssignStmt: found in param_map_ for p, ptr = 0x55ea0f12fd40 +[DEBUG] HandleAssignStmt: scalar assignment to p, ptr = 0x55ea0f12fd40, rhs = 0x55ea0f131f60 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -722,7 +698,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnp; [DEBUG IRGEN] visitStmt: returnp; [DEBUG IRGEN] HandleReturnStmt: returnp; -[DEBUG IRGEN] HandleReturnStmt eval exp: p [DEBUG IRGEN] EvalExpr: p [DEBUG IRGEN] visitAddExp: p [DEBUG IRGEN] visitMulExp: p @@ -730,8 +705,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: p -[DEBUG] EvalExpr: success, result = 0x558432338150 +[DEBUG] EvalExpr: success, result = 0x55ea0f132150 +[DEBUG] visitFuncDef: 函数 func 生成完成 [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55ea0f132290 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {intb;a=10;b=func(a);returnb;} [DEBUG IRGEN] visitBlockItem: intb; [DEBUG] visitDecl: 开始处理声明 @@ -741,11 +720,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x5584323379e0 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=10; @@ -756,11 +730,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x558432338590 -[DEBUG] EvalExpr: success, result = 0x558432338590 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x55ea0f132590 +[DEBUG] EvalExpr: success, result = 0x55ea0f132590 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in global_map_ for a, ptr = 0x558432337930 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x558432337930, rhs = 0x558432338590 +[DEBUG] HandleAssignStmt: found in global_map_ for a, ptr = 0x55ea0f131930 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55ea0f131930, rhs = 0x55ea0f132590 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -782,13 +756,13 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] EvalExpr: success, result = 0x5584323386b0 +[DEBUG] EvalExpr: success, result = 0x55ea0f1326b0 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x558432338770 -[DEBUG] EvalExpr: success, result = 0x558432338770 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x55ea0f132770 +[DEBUG] EvalExpr: success, result = 0x55ea0f132770 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5584323383f0 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5584323383f0, rhs = 0x558432338770 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55ea0f1323f0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55ea0f1323f0, rhs = 0x55ea0f132770 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -799,7 +773,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnb; [DEBUG IRGEN] visitStmt: returnb; [DEBUG IRGEN] HandleReturnStmt: returnb; -[DEBUG IRGEN] HandleReturnStmt eval exp: b [DEBUG IRGEN] EvalExpr: b [DEBUG IRGEN] visitAddExp: b [DEBUG IRGEN] visitMulExp: b @@ -807,7 +780,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] EvalExpr: success, result = 0x558432338980 +[DEBUG] EvalExpr: success, result = 0x55ea0f132980 +[DEBUG] visitFuncDef: 函数 main 生成完成 @a = global i32 0 define i32 @getint() { entry: @@ -898,7 +872,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2da60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558443521a60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -907,7 +881,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2e230, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558443522230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -1 [DEBUG] visitUnaryExp: -1 @@ -923,14 +897,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2da60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x558443521a60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55bc2cd2e230, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x558443522230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -939,6 +913,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x558443533370 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {inta,b;a=10;b=-1;returna+b;} [DEBUG IRGEN] visitBlockItem: inta,b; [DEBUG] visitDecl: 开始处理声明 @@ -948,21 +925,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 a -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x55bc2cd35b10 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: b [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55bc2cd35b10 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=10; @@ -973,11 +940,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x55bc2cd3c380 -[DEBUG] EvalExpr: success, result = 0x55bc2cd3c380 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x558443530380 +[DEBUG] EvalExpr: success, result = 0x558443530380 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x55bc2ccf8a30 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55bc2ccf8a30, rhs = 0x55bc2cd3c380 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5584434eca30 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5584434eca30, rhs = 0x558443530380 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -993,11 +960,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: -1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55bc2cd3b1a0 -[DEBUG] EvalExpr: success, result = 0x55bc2cd3f980 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55844352f1a0 +[DEBUG] EvalExpr: success, result = 0x558443533980 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55bc2cd3f690 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55bc2cd3f690, rhs = 0x55bc2cd3f980 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x558443533690 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x558443533690, rhs = 0x558443533980 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -1008,7 +975,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returna+b; [DEBUG IRGEN] visitStmt: returna+b; [DEBUG IRGEN] HandleReturnStmt: returna+b; -[DEBUG IRGEN] HandleReturnStmt eval exp: a+b [DEBUG IRGEN] EvalExpr: a+b [DEBUG IRGEN] visitAddExp: a+b [DEBUG IRGEN] visitAddExp: a @@ -1022,8 +988,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x55bc2cd3fb00, right=0x55bc2cd3fbf0 -[DEBUG] EvalExpr: success, result = 0x55bc2cd3fd70 +[DEBUG] visitAddExp: left=0x558443533b00, type=int, right=0x558443533bf0, type=int +[DEBUG] EvalExpr: success, result = 0x558443533d70 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -1100,11 +1067,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 10 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x55df262785d0 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55df262785d0 +保存常量定义上下文: a, ctx: 0x55c7457585d0 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x55c7457585d0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55df262785d0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55df262785d0 +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55c7457585d0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c7457585d0 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: main 返回类型: int [DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 @@ -1114,7 +1081,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df2627f9e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55c74575f9e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -1129,14 +1096,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df2627f9e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55c74575f9e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55df262785d0 +SymbolTable::lookup: found a in scope level 1, kind=3, const_def_ctx=0x55c7457585d0 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55df262785d0 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c7457585d0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -1146,13 +1113,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant a -[DEBUG] visitConstDef: scalar constant a [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant a = 10 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55c74576d2b0 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {intb;b=2;returnb-a;} [DEBUG IRGEN] visitBlockItem: intb; [DEBUG] visitDecl: 开始处理声明 @@ -1162,11 +1128,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55df26285860 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: b=2; @@ -1177,11 +1138,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x55df2628d5b0 -[DEBUG] EvalExpr: success, result = 0x55df2628d5b0 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55c74576d5b0 +[DEBUG] EvalExpr: success, result = 0x55c74576d5b0 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55df26245be0 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55df26245be0, rhs = 0x55df2628d5b0 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55c745725be0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55c745725be0, rhs = 0x55c74576d5b0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -1192,7 +1153,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnb-a; [DEBUG IRGEN] visitStmt: returnb-a; [DEBUG IRGEN] HandleReturnStmt: returnb-a; -[DEBUG IRGEN] HandleReturnStmt eval exp: b-a [DEBUG IRGEN] EvalExpr: b-a [DEBUG IRGEN] visitAddExp: b-a [DEBUG IRGEN] visitAddExp: b @@ -1207,8 +1167,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a [DEBUG] visitLVal: constant a -[DEBUG] visitAddExp: left=0x55df2628d710, right=0x55df26285ed0 -[DEBUG] EvalExpr: success, result = 0x55df2628d800 +[DEBUG] visitAddExp: left=0x55c74576d710, type=int, right=0x55c745765ed0, type=int +[DEBUG] EvalExpr: success, result = 0x55c74576d800 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -1284,33 +1245,33 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 4 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: V, ctx: 0x55c5b2283130 -SymbolTable::addSymbol: stored V with kind=3, const_def_ctx=0x55c5b2283130 +保存常量定义上下文: V, ctx: 0x5563e32d4130 +SymbolTable::addSymbol: stored V with kind=3, const_def_ctx=0x5563e32d4130 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32d4130 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: space base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 32 [DEBUG] visitPrimaryExp: 32 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: space, ctx: 0x55c5b2289e00 -SymbolTable::addSymbol: stored space with kind=3, const_def_ctx=0x55c5b2289e00 +保存常量定义上下文: space, ctx: 0x5563e32dae00 +SymbolTable::addSymbol: stored space with kind=3, const_def_ctx=0x5563e32dae00 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2289e00 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32dae00 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: LF base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: LF, ctx: 0x55c5b2289f80 -SymbolTable::addSymbol: stored LF with kind=3, const_def_ctx=0x55c5b2289f80 +保存常量定义上下文: LF, ctx: 0x5563e32daf80 +SymbolTable::addSymbol: stored LF with kind=3, const_def_ctx=0x5563e32daf80 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x55c5b2289f80 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c5b2289f80 +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5563e32daf80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5563e32daf80 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: printSolution 返回类型: void SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 @@ -1327,14 +1288,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -1358,7 +1319,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -1372,17 +1333,17 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: space [DEBUG] visitUnaryExp: space [DEBUG] visitPrimaryExp: space -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 CheckLValue: found sym->name = space, sym->kind = 3 绑定常量: space -> ConstDefContext -CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289e00 +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32dae00 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -1390,7 +1351,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b2283ba0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32d4ba0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1404,10 +1365,10 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: LF [DEBUG] visitUnaryExp: LF [DEBUG] visitPrimaryExp: LF -SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x55c5b2289f80 +SymbolTable::lookup: found LF in scope level 1, kind=3, const_def_ctx=0x5563e32daf80 CheckLValue: found sym->name = LF, sym->kind = 3 绑定常量: LF -> ConstDefContext -CheckLValue 绑定变量: LF, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289f80 +CheckLValue 绑定变量: LF, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32daf80 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 函数 printSolution has_return: 0 return_type_is_void: 1 @@ -1455,10 +1416,10 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] CheckExp: space [DEBUG] visitUnaryExp: space [DEBUG] visitPrimaryExp: space -SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x55c5b2289e00 +SymbolTable::lookup: found space in scope level 1, kind=3, const_def_ctx=0x5563e32dae00 CheckLValue: found sym->name = space, sym->kind = 3 绑定常量: space -> ConstDefContext -CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2289e00 +CheckLValue 绑定变量: space, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32dae00 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -1518,7 +1479,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 函数 printMessage has_return: 0 return_type_is_void: 1 [DEBUG] 进入函数: isSafe 返回类型: int -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 [DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 SymbolTable::addSymbol: stored color with kind=2, const_def_ctx=0 @@ -1535,14 +1496,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -1552,7 +1513,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1564,14 +1525,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -1588,7 +1549,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -1596,7 +1557,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: color[j] @@ -1612,7 +1573,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: color[i] @@ -1628,7 +1589,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Return ExpStmt @@ -1643,7 +1604,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -1651,7 +1612,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22add40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e32fed40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1659,7 +1620,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -1667,7 +1628,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22ac310, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e32fd310, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1681,7 +1642,7 @@ dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 isSafe has_return: 1 return_type_is_void: 0 [DEBUG] 进入函数: graphColoring 返回类型: int -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 SymbolTable::addSymbol: stored graph with kind=2, const_def_ctx=0 [DEBUG] 添加参数: graph type_kind: 3 is_array: 1 dims: 0 4 SymbolTable::addSymbol: stored m with kind=2, const_def_ctx=0 @@ -1699,10 +1660,10 @@ CheckLValue 绑定变量: i, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -1777,7 +1738,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m @@ -1806,7 +1767,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: If [DEBUG] visitUnaryExp: graphColoring(graph,m,i+1,color) @@ -1881,7 +1842,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -1889,7 +1850,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55c5b22c2cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5563e3313cf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -1906,21 +1867,21 @@ dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: graph base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 [DEBUG] dim[0] = 4 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 [DEBUG] dim[1] = 4 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -1986,12 +1947,12 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: color base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 [DEBUG] dim[0] = 4 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -2012,21 +1973,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: V [DEBUG] visitPrimaryExp: V -SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x55c5b2283130 +SymbolTable::lookup: found V in scope level 1, kind=3, const_def_ctx=0x5563e32d4130 CheckLValue: found sym->name = V, sym->kind = 3 绑定常量: V -> ConstDefContext -CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c5b2283130 +CheckLValue 绑定变量: V, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5563e32d4130 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = color, sym->kind = 0 绑定变量: color -> VarDefContext -CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6410, sym->const_def_ctx: 0 +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5563e3327410, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2034,7 +1995,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -2044,7 +2005,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2052,7 +2013,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5563e3327b90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2069,7 +2030,7 @@ SymbolTable::lookup: found graphColoring in scope level 1, kind=1, const_def_ctx SymbolTable::lookup: found graph in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = graph, sym->kind = 0 绑定变量: graph -> VarDefContext -CheckLValue 绑定变量: graph, sym->kind: 0, sym->var_def_ctx: 0x55c5b22cd1e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: graph, sym->kind: 0, sym->var_def_ctx: 0x5563e331e1e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: m @@ -2078,7 +2039,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d5b30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5563e3326b30, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2089,7 +2050,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found color in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = color, sym->kind = 0 绑定变量: color -> VarDefContext -CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x55c5b22d6410, sym->const_def_ctx: 0 +CheckLValue 绑定变量: color, sym->kind: 0, sym->var_def_ctx: 0x5563e3327410, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -2117,30 +2078,21 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant V -[DEBUG] visitConstDef: scalar constant V [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant V = 4 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant space -[DEBUG] visitConstDef: scalar constant space [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant space = 32 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant LF -[DEBUG] visitConstDef: scalar constant LF [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant LF = 10 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG IRGEN] visitFuncDef: printSolution -[error] [ir] StoreInst 当前只支持存储 i32 +[DEBUG] visitFuncDef: 创建函数 printSolution,返回类型: void,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x5563e333b480 +[DEBUG] visitFuncDef: 为函数 printSolution 添加参数 color,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 ========== test/test_case/functional/22_matrix_multiply.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -2162,30 +2114,30 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 100 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: MAX_SIZE, ctx: 0x5568ea0b5f80 -SymbolTable::addSymbol: stored MAX_SIZE with kind=3, const_def_ctx=0x5568ea0b5f80 +保存常量定义上下文: MAX_SIZE, ctx: 0x5627a389bf80 +SymbolTable::addSymbol: stored MAX_SIZE with kind=3, const_def_ctx=0x5627a389bf80 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5627a389bf80 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -2197,21 +2149,21 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -2223,21 +2175,21 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: res base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[0] = 100 [DEBUG] visitUnaryExp: MAX_SIZE [DEBUG] visitPrimaryExp: MAX_SIZE -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 CheckLValue: found sym->name = MAX_SIZE, sym->kind = 3 绑定常量: MAX_SIZE -> ConstDefContext -CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5568ea0b5f80 +CheckLValue 绑定变量: MAX_SIZE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5627a389bf80 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5568ea0b5f80 +SymbolTable::lookup: found MAX_SIZE in scope level 1, kind=3, const_def_ctx=0x5627a389bf80 [DEBUG] dim[1] = 100 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -2271,14 +2223,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -2293,14 +2245,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 @@ -2315,21 +2267,21 @@ SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n1 [DEBUG] visitPrimaryExp: n1 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2337,7 +2289,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2345,7 +2297,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: res[i][j]+a[i][k]*b[k][j] @@ -2354,7 +2306,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2362,7 +2314,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2370,7 +2322,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: a[i][k] @@ -2378,7 +2330,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bb5e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5627a38a15e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2386,7 +2338,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -2394,7 +2346,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[k][j] @@ -2402,7 +2354,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5568ea0be9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5627a38a49c0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -2410,7 +2362,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2418,14 +2370,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -2433,7 +2385,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d54d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x5627a38bb4d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2441,7 +2393,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2449,7 +2401,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0d3c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38b9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2457,7 +2409,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2465,7 +2417,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c9d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38afd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2481,7 +2433,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2492,7 +2444,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2503,7 +2455,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2514,21 +2466,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2539,21 +2491,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n1 [DEBUG] visitPrimaryExp: n1 SymbolTable::lookup: found n1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n1, sym->kind = 0 绑定变量: n1 -> VarDefContext -CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n1, sym->kind: 0, sym->var_def_ctx: 0x5627a38aca80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bb5e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5627a38a15e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2561,7 +2513,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2569,7 +2521,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -2581,7 +2533,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2589,7 +2541,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2597,7 +2549,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2605,7 +2557,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2613,7 +2565,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m2, sym->kind = 0 绑定变量: m2 -> VarDefContext -CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c71e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5627a38ad1e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2624,7 +2576,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -2635,7 +2587,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2646,21 +2598,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m2 [DEBUG] visitPrimaryExp: m2 SymbolTable::lookup: found m2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m2, sym->kind = 0 绑定变量: m2 -> VarDefContext -CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c71e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m2, sym->kind: 0, sym->var_def_ctx: 0x5627a38ad1e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2671,21 +2623,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5568ea0be9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5627a38a49c0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2693,7 +2645,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2701,7 +2653,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -2713,7 +2665,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2721,7 +2673,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2729,7 +2681,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2737,7 +2689,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2751,7 +2703,7 @@ SymbolTable::lookup: found matrix_multiply in scope level 1, kind=1, const_def_c SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2762,21 +2714,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m1 [DEBUG] visitPrimaryExp: m1 SymbolTable::lookup: found m1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m1, sym->kind = 0 绑定变量: m1 -> VarDefContext -CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6d70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m1, sym->kind: 0, sym->var_def_ctx: 0x5627a38acd70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -2787,14 +2739,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n2 [DEBUG] visitPrimaryExp: n2 SymbolTable::lookup: found n2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n2, sym->kind = 0 绑定变量: n2 -> VarDefContext -CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5568ea0c6fc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n2, sym->kind: 0, sym->var_def_ctx: 0x5627a38acfc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -2810,7 +2762,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found res in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = res, sym->kind = 0 绑定变量: res -> VarDefContext -CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5568ea0bf1d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: res, sym->kind: 0, sym->var_def_ctx: 0x5627a38a51d0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -2818,7 +2770,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -2826,7 +2778,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -2845,7 +2797,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -2853,7 +2805,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3dc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9dc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2872,7 +2824,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -2880,7 +2832,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5568ea0e3bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627a38c9bc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -2899,11 +2851,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant MAX_SIZE -[DEBUG] visitConstDef: scalar constant MAX_SIZE [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant MAX_SIZE = 100 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -2912,29 +2860,23 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 a -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 10000 [DEBUG] HandleGlobalVariable: 创建全局数组: a [DEBUG] HandleGlobalVariable: 设置全局数组初始化器 -[DEBUG] HandleGlobalVariable: 存储全局数组引用 -[DEBUG] HandleGlobalVariable: 创建全局数组 a,总大小 10000 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: b [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 b -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 b 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 10000 [DEBUG] HandleGlobalVariable: 创建全局数组: b [DEBUG] HandleGlobalVariable: 设置全局数组初始化器 -[DEBUG] HandleGlobalVariable: 存储全局数组引用 -[DEBUG] HandleGlobalVariable: 创建全局数组 b,总大小 10000 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -2943,15 +2885,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 res -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 res 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 10000 [DEBUG] HandleGlobalVariable: 创建全局数组: res [DEBUG] HandleGlobalVariable: 设置全局数组初始化器 -[DEBUG] HandleGlobalVariable: 存储全局数组引用 -[DEBUG] HandleGlobalVariable: 创建全局数组 res,总大小 10000 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -2960,55 +2899,34 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 n1 -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 n1 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: n1 -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 n1 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: m1 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 m1 -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 m1 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: m1 -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 m1 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: n2 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 n2 -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 n2 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: n2 -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 n2 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: m2 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 m2 -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 m2 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: m2 -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 m2 -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG IRGEN] visitFuncDef: matrix_multiply +[DEBUG] visitFuncDef: 创建函数 matrix_multiply,返回类型: void,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5627a3926f10 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {inti=0;while(iname = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+2 [DEBUG] visitUnaryExp: a @@ -3252,7 +3155,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -3263,7 +3166,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -3273,7 +3176,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+4 [DEBUG] visitUnaryExp: b @@ -3281,7 +3184,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 4 [DEBUG] visitPrimaryExp: 4 @@ -3289,7 +3192,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b [DEBUG] visitUnaryExp: putch @@ -3297,28 +3200,28 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+5 [DEBUG] visitUnaryExp: b @@ -3326,7 +3229,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -3337,7 +3240,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 6 [DEBUG] visitPrimaryExp: 6 @@ -3347,7 +3250,7 @@ SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+main [DEBUG] visitUnaryExp: a @@ -3355,20 +3258,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -3376,35 +3279,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+a [DEBUG] visitUnaryExp: b @@ -3412,14 +3315,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: a base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: main+7 @@ -3428,7 +3331,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -3438,7 +3341,7 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+8 [DEBUG] visitUnaryExp: a @@ -3446,7 +3349,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 8 [DEBUG] visitPrimaryExp: 8 @@ -3454,7 +3357,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -3462,35 +3365,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+a [DEBUG] visitUnaryExp: b @@ -3498,14 +3401,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: b base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: main+9 @@ -3514,7 +3417,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 9 [DEBUG] visitPrimaryExp: 9 @@ -3524,7 +3427,7 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+10 [DEBUG] visitUnaryExp: a @@ -3532,7 +3435,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f40910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642be910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -3541,17 +3444,17 @@ dim_count: 0, subscript_count: 0 [DEBUG] visitPrimaryExp: 11 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: a, ctx: 0x557dc5f47b30 -SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x557dc5f47b30 +保存常量定义上下文: a, ctx: 0x5635642c5b30 +SymbolTable::addSymbol: stored a with kind=3, const_def_ctx=0x5635642c5b30 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x557dc5f47b30 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x5635642c5b30 [DEBUG] 常量符号添加完成 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+12 [DEBUG] visitUnaryExp: b @@ -3559,7 +3462,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 12 [DEBUG] visitPrimaryExp: 12 @@ -3567,7 +3470,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -3575,35 +3478,35 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: main+b [DEBUG] visitUnaryExp: main @@ -3611,14 +3514,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckVarDef: main base_type: int is_array: 0 dim_count: 0 [DEBUG] CheckExp: b+13 @@ -3627,7 +3530,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 13 [DEBUG] visitPrimaryExp: 13 @@ -3637,7 +3540,7 @@ SymbolTable::addSymbol: stored main with kind=0, const_def_ctx=0 SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: main+a [DEBUG] visitUnaryExp: main @@ -3645,20 +3548,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch+a+b+main [DEBUG] visitUnaryExp: putch @@ -3666,34 +3569,34 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a -SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x557dc5f47b30 +SymbolTable::lookup: found a in scope level 7, kind=3, const_def_ctx=0x5635642c5b30 CheckLValue: found sym->name = a, sym->kind = 3 绑定常量: a -> ConstDefContext -CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x557dc5f47b30 +CheckLValue 绑定变量: a, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5635642c5b30 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f44510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642c2510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 8, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3f630, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642bd630, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-main [DEBUG] visitUnaryExp: putch @@ -3701,20 +3604,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: main [DEBUG] visitPrimaryExp: main SymbolTable::lookup: found main in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = main, sym->kind = 0 绑定变量: main -> VarDefContext -CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x557dc5f3c9c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: main, sym->kind: 0, sym->var_def_ctx: 0x5635642ba9c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-b [DEBUG] visitUnaryExp: putch @@ -3722,20 +3625,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x557dc5f36a20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5635642b4a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: putch-a [DEBUG] visitUnaryExp: putch @@ -3743,14 +3646,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x557dc5f25910, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5635642a3910, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Return ExpStmt [DEBUG] 检测到 return 语句 @@ -3762,7 +3665,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found putch in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = putch, sym->kind = 0 绑定变量: putch -> VarDefContext -CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x557dc5f33010, sym->const_def_ctx: 0 +CheckLValue 绑定变量: putch, sym->kind: 0, sym->var_def_ctx: 0x5635642b1010, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 77 [DEBUG] visitPrimaryExp: 77 @@ -3773,6 +3676,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5635642db4b0 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {putch(97);putch(10);inta=1,putch=0;{a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}}returnputch%77;} [DEBUG IRGEN] visitBlockItem: putch(97); [DEBUG IRGEN] visitStmt: putch(97); @@ -3785,10 +3691,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x557dc5f5e5b0 -[DEBUG] EvalExpr: success, result = 0x557dc5f5e5b0 +[DEBUG] visitPrimaryExp: constant int 97 created as 0x5635642dc5b0 +[DEBUG] EvalExpr: success, result = 0x5635642dc5b0 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 +[DEBUG] EvalExpr: success, result = 0x5635642dc670 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: putch(10); [DEBUG IRGEN] visitStmt: putch(10); @@ -3801,10 +3707,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x557dc5f5e6f0 -[DEBUG] EvalExpr: success, result = 0x557dc5f5e6f0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x5635642dc6f0 +[DEBUG] EvalExpr: success, result = 0x5635642dc6f0 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 +[DEBUG] EvalExpr: success, result = 0x5635642dc670 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: inta=1,putch=0; [DEBUG] visitDecl: 开始处理声明 @@ -3814,9 +3720,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 a -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 1 @@ -3824,19 +3727,13 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x557dc5f5e890 -[DEBUG] EvalExpr: success, result = 0x557dc5f5e890 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x557dc5f5e890 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x5635642dc890 +[DEBUG] EvalExpr: success, result = 0x5635642dc890 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: putch [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 putch -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 @@ -3844,10 +3741,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x557dc5f5e670 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 putch,初始值 0x557dc5f5e670 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] EvalExpr: success, result = 0x5635642dc670 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: {a=a+2;intb=a+3;b=b+4;putch=putch+a+b;{b=b+5;intmain=b+6;a=a+main;putch=putch+a+b+main;{b=b+a;inta=main+7;a=a+8;putch=putch+a+b+main;{b=b+a;intb=main+9;a=a+10;constinta=11;b=b+12;putch=putch+a+b+main;{main=main+b;intmain=b+13;main=main+a;putch=putch+a+b+main;}putch=putch-main;}putch=putch-b;}putch=putch-a;}} @@ -3867,12 +3761,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x557dc5f5edb0 -[DEBUG] visitAddExp: left=0x557dc5f5ecf0, right=0x557dc5f5edb0 -[DEBUG] EvalExpr: success, result = 0x557dc5f5ee10 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x5635642dcdb0 +[DEBUG] visitAddExp: left=0x5635642dccf0, type=int, right=0x5635642dcdb0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dce10 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f553d0 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f553d0, rhs = 0x557dc5f5ee10 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642d33d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642d33d0, rhs = 0x5635642dce10 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -3888,9 +3782,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: a+3 @@ -3904,12 +3795,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x557dc5f5f180 -[DEBUG] visitAddExp: left=0x557dc5f5f0e0, right=0x557dc5f5f180 -[DEBUG] EvalExpr: success, result = 0x557dc5f5f200 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x557dc5f5f200 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x5635642dd180 +[DEBUG] visitAddExp: left=0x5635642dd0e0, type=int, right=0x5635642dd180, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd200 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: b=b+4; @@ -3926,12 +3814,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x557dc5f5f480 -[DEBUG] visitAddExp: left=0x557dc5f5f3c0, right=0x557dc5f5f480 -[DEBUG] EvalExpr: success, result = 0x557dc5f5f4e0 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x5635642dd480 +[DEBUG] visitAddExp: left=0x5635642dd3c0, type=int, right=0x5635642dd480, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd4e0 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f5f4e0 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642dd4e0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -3956,17 +3844,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x557dc5f5f6a0, right=0x557dc5f5f720 +[DEBUG] visitAddExp: left=0x5635642dd6a0, type=int, right=0x5635642dd720, type=int [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f5f870, right=0x557dc5f5f950 -[DEBUG] EvalExpr: success, result = 0x557dc5f5f9f0 +[DEBUG] visitAddExp: left=0x5635642dd870, type=int, right=0x5635642dd950, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dd9f0 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f5f9f0 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642dd9f0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -3991,12 +3879,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x557dc5f5fd20 -[DEBUG] visitAddExp: left=0x557dc5f5fbd0, right=0x557dc5f5fd20 -[DEBUG] EvalExpr: success, result = 0x557dc5f5fd80 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x5635642ddd20 +[DEBUG] visitAddExp: left=0x5635642ddbd0, type=int, right=0x5635642ddd20, type=int +[DEBUG] EvalExpr: success, result = 0x5635642ddd80 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f5fd80 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642ddd80 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4012,9 +3900,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 main -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: b+6 @@ -4028,12 +3913,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x557dc5f60080 -[DEBUG] visitAddExp: left=0x557dc5f5ffe0, right=0x557dc5f60080 -[DEBUG] EvalExpr: success, result = 0x557dc5f60100 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 main,初始值 0x557dc5f60100 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x5635642de080 +[DEBUG] visitAddExp: left=0x5635642ddfe0, type=int, right=0x5635642de080, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de100 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=a+main; @@ -4052,11 +3934,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f602c0, right=0x557dc5f60340 -[DEBUG] EvalExpr: success, result = 0x557dc5f60420 +[DEBUG] visitAddExp: left=0x5635642de2c0, type=int, right=0x5635642de340, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de420 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f553d0 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f553d0, rhs = 0x557dc5f60420 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642d33d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642d33d0, rhs = 0x5635642de420 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4082,23 +3964,23 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x557dc5f605c0, right=0x557dc5f60640 +[DEBUG] visitAddExp: left=0x5635642de5c0, type=int, right=0x5635642de640, type=int [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f606e0, right=0x557dc5f607c0 +[DEBUG] visitAddExp: left=0x5635642de6e0, type=int, right=0x5635642de7c0, type=int [DEBUG IRGEN] visitMulExp: main [DEBUG IRGEN] visitPrimaryExp: main [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f60860, right=0x557dc5f60940 -[DEBUG] EvalExpr: success, result = 0x557dc5f609e0 +[DEBUG] visitAddExp: left=0x5635642de860, type=int, right=0x5635642de940, type=int +[DEBUG] EvalExpr: success, result = 0x5635642de9e0 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f609e0 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642de9e0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4125,11 +4007,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x557dc5f60ce0, right=0x557dc5f60d60 -[DEBUG] EvalExpr: success, result = 0x557dc5f60f70 +[DEBUG] visitAddExp: left=0x5635642dece0, type=int, right=0x5635642ded60, type=int +[DEBUG] EvalExpr: success, result = 0x5635642def70 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f60f70 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642def70 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4145,9 +4027,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 a -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: main+7 @@ -4161,12 +4040,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x557dc5f61210 -[DEBUG] visitAddExp: left=0x557dc5f61170, right=0x557dc5f61210 -[DEBUG] EvalExpr: success, result = 0x557dc5f61290 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x557dc5f61290 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x5635642df210 +[DEBUG] visitAddExp: left=0x5635642df170, type=int, right=0x5635642df210, type=int +[DEBUG] EvalExpr: success, result = 0x5635642df290 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=a+8; @@ -4183,12 +4059,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x557dc5f614d0 -[DEBUG] visitAddExp: left=0x557dc5f61450, right=0x557dc5f614d0 -[DEBUG] EvalExpr: success, result = 0x557dc5f61530 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x5635642df4d0 +[DEBUG] visitAddExp: left=0x5635642df450, type=int, right=0x5635642df4d0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642df530 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f610d0 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f610d0, rhs = 0x557dc5f61530 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642df0d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642df0d0, rhs = 0x5635642df530 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4214,23 +4090,23 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x557dc5f616f0, right=0x557dc5f61770 +[DEBUG] visitAddExp: left=0x5635642df6f0, type=int, right=0x5635642df770, type=int [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f61810, right=0x557dc5f618f0 +[DEBUG] visitAddExp: left=0x5635642df810, type=int, right=0x5635642df8f0, type=int [DEBUG IRGEN] visitMulExp: main [DEBUG IRGEN] visitPrimaryExp: main [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f61990, right=0x557dc5f61a70 -[DEBUG] EvalExpr: success, result = 0x557dc5f61b10 +[DEBUG] visitAddExp: left=0x5635642df990, type=int, right=0x5635642dfa70, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dfb10 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f61b10 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642dfb10 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4257,11 +4133,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x557dc5f61d40, right=0x557dc5f61dc0 -[DEBUG] EvalExpr: success, result = 0x557dc5f61e40 +[DEBUG] visitAddExp: left=0x5635642dfd40, type=int, right=0x5635642dfdc0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642dfe40 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f5f040 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f5f040, rhs = 0x557dc5f61e40 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642dd040 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642dd040, rhs = 0x5635642dfe40 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4277,9 +4153,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: main+9 @@ -4293,12 +4166,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x557dc5f62140 -[DEBUG] visitAddExp: left=0x557dc5f620a0, right=0x557dc5f62140 -[DEBUG] EvalExpr: success, result = 0x557dc5f621c0 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x557dc5f621c0 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 9 created as 0x5635642e0140 +[DEBUG] visitAddExp: left=0x5635642e00a0, type=int, right=0x5635642e0140, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e01c0 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=a+10; @@ -4315,12 +4185,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x557dc5f5e6f0 -[DEBUG] visitAddExp: left=0x557dc5f62380, right=0x557dc5f5e6f0 -[DEBUG] EvalExpr: success, result = 0x557dc5f62400 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x5635642dc6f0 +[DEBUG] visitAddExp: left=0x5635642e0380, type=int, right=0x5635642dc6f0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0400 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x557dc5f610d0 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x557dc5f610d0, rhs = 0x557dc5f62400 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x5635642df0d0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x5635642df0d0, rhs = 0x5635642e0400 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4331,11 +4201,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: constinta=11; [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant a -[DEBUG] visitConstDef: scalar constant a [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant a = 11 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: b=b+12; @@ -4352,12 +4218,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x557dc5f62700 -[DEBUG] visitAddExp: left=0x557dc5f62640, right=0x557dc5f62700 -[DEBUG] EvalExpr: success, result = 0x557dc5f62760 +[DEBUG] visitPrimaryExp: constant int 12 created as 0x5635642e0700 +[DEBUG] visitAddExp: left=0x5635642e0640, type=int, right=0x5635642e0700, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0760 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x557dc5f62000 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x557dc5f62000, rhs = 0x557dc5f62760 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x5635642e0000 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x5635642e0000, rhs = 0x5635642e0760 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4384,23 +4250,23 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a [DEBUG] visitLVal: constant a -[DEBUG] visitAddExp: left=0x557dc5f62920, right=0x557dc5f62580 +[DEBUG] visitAddExp: left=0x5635642e0920, type=int, right=0x5635642e0580, type=int [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f629a0, right=0x557dc5f62a80 +[DEBUG] visitAddExp: left=0x5635642e09a0, type=int, right=0x5635642e0a80, type=int [DEBUG IRGEN] visitMulExp: main [DEBUG IRGEN] visitPrimaryExp: main [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f62b20, right=0x557dc5f62c00 -[DEBUG] EvalExpr: success, result = 0x557dc5f62ca0 +[DEBUG] visitAddExp: left=0x5635642e0b20, type=int, right=0x5635642e0c00, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e0ca0 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f62ca0 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e0ca0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4427,11 +4293,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f63060, right=0x557dc5f630e0 -[DEBUG] EvalExpr: success, result = 0x557dc5f63160 +[DEBUG] visitAddExp: left=0x5635642e1060, type=int, right=0x5635642e10e0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1160 [DEBUG] HandleAssignStmt: assigning to main -[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x557dc5f5ff40 -[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x557dc5f5ff40, rhs = 0x557dc5f63160 +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x5635642ddf40 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x5635642ddf40, rhs = 0x5635642e1160 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4447,9 +4313,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 main -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: b+13 @@ -4463,12 +4326,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x557dc5f635f0 -[DEBUG] visitAddExp: left=0x557dc5f63550, right=0x557dc5f635f0 -[DEBUG] EvalExpr: success, result = 0x557dc5f63670 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 main,初始值 0x557dc5f63670 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 13 created as 0x5635642e15f0 +[DEBUG] visitAddExp: left=0x5635642e1550, type=int, right=0x5635642e15f0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1670 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: main=main+a; @@ -4488,11 +4348,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a [DEBUG] visitLVal: constant a -[DEBUG] visitAddExp: left=0x557dc5f63830, right=0x557dc5f62580 -[DEBUG] EvalExpr: success, result = 0x557dc5f638b0 +[DEBUG] visitAddExp: left=0x5635642e1830, type=int, right=0x5635642e0580, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e18b0 [DEBUG] HandleAssignStmt: assigning to main -[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x557dc5f634b0 -[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x557dc5f634b0, rhs = 0x557dc5f638b0 +[DEBUG] HandleAssignStmt: found in storage_map_ for main, ptr = 0x5635642e14b0 +[DEBUG] HandleAssignStmt: scalar assignment to main, ptr = 0x5635642e14b0, rhs = 0x5635642e18b0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4519,23 +4379,23 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a [DEBUG] visitLVal: constant a -[DEBUG] visitAddExp: left=0x557dc5f63a50, right=0x557dc5f62580 +[DEBUG] visitAddExp: left=0x5635642e1a50, type=int, right=0x5635642e0580, type=int [DEBUG IRGEN] visitMulExp: b [DEBUG IRGEN] visitPrimaryExp: b [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f63ad0, right=0x557dc5f63bb0 +[DEBUG] visitAddExp: left=0x5635642e1ad0, type=int, right=0x5635642e1bb0, type=int [DEBUG IRGEN] visitMulExp: main [DEBUG IRGEN] visitPrimaryExp: main [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f63c30, right=0x557dc5f63d10 -[DEBUG] EvalExpr: success, result = 0x557dc5f63db0 +[DEBUG] visitAddExp: left=0x5635642e1c30, type=int, right=0x5635642e1d10, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e1db0 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f63db0 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e1db0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4560,11 +4420,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: main -[DEBUG] visitAddExp: left=0x557dc5f63f70, right=0x557dc5f63ff0 -[DEBUG] EvalExpr: success, result = 0x557dc5f64090 +[DEBUG] visitAddExp: left=0x5635642e1f70, type=int, right=0x5635642e1ff0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2090 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f64090 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e2090 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4589,11 +4449,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x557dc5f64250, right=0x557dc5f642d0 -[DEBUG] EvalExpr: success, result = 0x557dc5f64370 +[DEBUG] visitAddExp: left=0x5635642e2250, type=int, right=0x5635642e22d0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2370 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f64370 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e2370 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4619,11 +4479,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a [DEBUG] visitLVal: constant a -[DEBUG] visitAddExp: left=0x557dc5f64530, right=0x557dc5f62580 -[DEBUG] EvalExpr: success, result = 0x557dc5f645b0 +[DEBUG] visitAddExp: left=0x5635642e2530, type=int, right=0x5635642e0580, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e25b0 [DEBUG] HandleAssignStmt: assigning to putch -[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x557dc5f5e9d0 -[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x557dc5f5e9d0, rhs = 0x557dc5f645b0 +[DEBUG] HandleAssignStmt: found in storage_map_ for putch, ptr = 0x5635642dc9d0 +[DEBUG] HandleAssignStmt: scalar assignment to putch, ptr = 0x5635642dc9d0, rhs = 0x5635642e25b0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4636,7 +4496,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnputch%77; [DEBUG IRGEN] visitStmt: returnputch%77; [DEBUG IRGEN] HandleReturnStmt: returnputch%77; -[DEBUG IRGEN] HandleReturnStmt eval exp: putch%77 [DEBUG IRGEN] EvalExpr: putch%77 [DEBUG IRGEN] visitAddExp: putch%77 [DEBUG IRGEN] visitMulExp: putch%77 @@ -4647,8 +4506,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitLVal: putch [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x557dc5f64ae0 -[DEBUG] EvalExpr: success, result = 0x557dc5f64b60 +[DEBUG] visitPrimaryExp: constant int 77 created as 0x5635642e2ae0 +[DEBUG] visitMulExp: left=0x5635642e2a60, type=int, right=0x5635642e2ae0, type=int +[DEBUG] EvalExpr: success, result = 0x5635642e2b60 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -4830,7 +4691,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4842,7 +4703,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -4853,7 +4714,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -4864,7 +4725,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -4874,7 +4735,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+i [DEBUG] visitUnaryExp: sum @@ -4882,20 +4743,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -4903,7 +4764,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x558b5a45ed40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5635d7c34d40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -4917,7 +4778,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x558b5a4661f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5635d7c3c1f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -4926,6 +4787,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x5635d7c55790 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {inti;i=0;intsum;sum=0;while(i<100){if(i==50){break;}sum=sum+i;i=i+1;}returnsum;} [DEBUG IRGEN] visitBlockItem: inti; [DEBUG] visitDecl: 开始处理声明 @@ -4935,11 +4799,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 i -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 i,初始值 0x558b5a47fb40 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: i=0; @@ -4950,10 +4809,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x558b5a47fb40 +[DEBUG] EvalExpr: success, result = 0x5635d7c55b40 [DEBUG] HandleAssignStmt: assigning to i -[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x558b5a47cf20 -[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x558b5a47cf20, rhs = 0x558b5a47fb40 +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x5635d7c52f20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x5635d7c52f20, rhs = 0x5635d7c55b40 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -4969,11 +4828,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 sum -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 sum,初始值 0x558b5a47fb40 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: sum=0; @@ -4984,10 +4838,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x558b5a47fb40 +[DEBUG] EvalExpr: success, result = 0x5635d7c55b40 [DEBUG] HandleAssignStmt: assigning to sum -[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x558b5a47fe70 -[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x558b5a47fe70, rhs = 0x558b5a47fb40 +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x5635d7c55e70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x5635d7c55e70, rhs = 0x5635d7c55b40 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5015,7 +4869,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x558b5a480490 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x5635d7c56490 +[DEBUG] visitRelExp: left=0x5635d7c563a0, type=int, right=0x5635d7c56490, type=int [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {if(i==50){break;}sum=sum+i;i=i+1;} @@ -5036,7 +4891,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x558b5a4809a0 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x5635d7c569a0 +[DEBUG] visitEqExp: left=0x5635d7c56920, type=int, right=0x5635d7c569a0, type=int [DEBUG IF] Creating condbr: %t5 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {break;} @@ -5068,11 +4924,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: i -[DEBUG] visitAddExp: left=0x558b5a480cf0, right=0x558b5a480e00 -[DEBUG] EvalExpr: success, result = 0x558b5a480f90 +[DEBUG] visitAddExp: left=0x5635d7c56cf0, type=int, right=0x5635d7c56e00, type=int +[DEBUG] EvalExpr: success, result = 0x5635d7c56f90 [DEBUG] HandleAssignStmt: assigning to sum -[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x558b5a47fe70 -[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x558b5a47fe70, rhs = 0x558b5a480f90 +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x5635d7c55e70 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x5635d7c55e70, rhs = 0x5635d7c56f90 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5094,12 +4950,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x558b5a4811e0 -[DEBUG] visitAddExp: left=0x558b5a481110, right=0x558b5a4811e0 -[DEBUG] EvalExpr: success, result = 0x558b5a481260 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x5635d7c571e0 +[DEBUG] visitAddExp: left=0x5635d7c57110, type=int, right=0x5635d7c571e0, type=int +[DEBUG] EvalExpr: success, result = 0x5635d7c57260 [DEBUG] HandleAssignStmt: assigning to i -[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x558b5a47cf20 -[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x558b5a47cf20, rhs = 0x558b5a481260 +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x5635d7c52f20 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x5635d7c52f20, rhs = 0x5635d7c57260 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5117,7 +4973,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnsum; [DEBUG IRGEN] visitStmt: returnsum; [DEBUG IRGEN] HandleReturnStmt: returnsum; -[DEBUG IRGEN] HandleReturnStmt eval exp: sum [DEBUG IRGEN] EvalExpr: sum [DEBUG IRGEN] visitAddExp: sum [DEBUG IRGEN] visitMulExp: sum @@ -5125,7 +4980,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: sum -[DEBUG] EvalExpr: success, result = 0x558b5a4814d0 +[DEBUG] EvalExpr: success, result = 0x5635d7c574d0 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -5232,7 +5088,7 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cad00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55b313a55d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -5241,7 +5097,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cb4d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55b313a564d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 4 [DEBUG] visitUnaryExp: 4 @@ -5250,7 +5106,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbc80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55b313a56c80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -5259,7 +5115,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbfa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55b313a56fa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -5277,14 +5133,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found c in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = c, sym->kind = 0 绑定变量: c -> VarDefContext -CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbc80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: c, sym->kind: 0, sym->var_def_ctx: 0x55b313a56c80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cad00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55b313a55d00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: (b-d) [DEBUG] visitPrimaryExp: (b-d) @@ -5294,14 +5150,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cb4d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55b313a564d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x560cfc3cbfa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55b313a56fa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -5310,6 +5166,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55b313a6b220 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {inta,b,c,d;a=10;b=4;c=2;d=2;return(c+a)*(b-d);} [DEBUG IRGEN] visitBlockItem: inta,b,c,d; [DEBUG] visitDecl: 开始处理声明 @@ -5319,41 +5178,21 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 a -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x560cfc3e0660 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: b [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x560cfc3e0660 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: c [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 c -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 c,初始值 0x560cfc3e0660 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitVarDef: 开始处理变量定义 [DEBUG] visitVarDef: 变量名称: d [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 d -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 无初始化值,使用0 -[DEBUG] HandleLocalVariable: 创建局部变量 d,初始值 0x560cfc3e0660 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: a=10; @@ -5364,11 +5203,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x560cfc3e0cb0 -[DEBUG] EvalExpr: success, result = 0x560cfc3e0cb0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x55b313a6bcb0 +[DEBUG] EvalExpr: success, result = 0x55b313a6bcb0 [DEBUG] HandleAssignStmt: assigning to a -[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x560cfc3de4a0 -[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x560cfc3de4a0, rhs = 0x560cfc3e0cb0 +[DEBUG] HandleAssignStmt: found in storage_map_ for a, ptr = 0x55b313a694a0 +[DEBUG] HandleAssignStmt: scalar assignment to a, ptr = 0x55b313a694a0, rhs = 0x55b313a6bcb0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5384,11 +5223,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x560cfc3e0ee0 -[DEBUG] EvalExpr: success, result = 0x560cfc3e0ee0 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x55b313a6bee0 +[DEBUG] EvalExpr: success, result = 0x55b313a6bee0 [DEBUG] HandleAssignStmt: assigning to b -[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x560cfc3e07e0 -[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x560cfc3e07e0, rhs = 0x560cfc3e0ee0 +[DEBUG] HandleAssignStmt: found in storage_map_ for b, ptr = 0x55b313a6b7e0 +[DEBUG] HandleAssignStmt: scalar assignment to b, ptr = 0x55b313a6b7e0, rhs = 0x55b313a6bee0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5404,11 +5243,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x560cfc3e1040 -[DEBUG] EvalExpr: success, result = 0x560cfc3e1040 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55b313a6c040 +[DEBUG] EvalExpr: success, result = 0x55b313a6c040 [DEBUG] HandleAssignStmt: assigning to c -[DEBUG] HandleAssignStmt: found in storage_map_ for c, ptr = 0x560cfc3e0960 -[DEBUG] HandleAssignStmt: scalar assignment to c, ptr = 0x560cfc3e0960, rhs = 0x560cfc3e1040 +[DEBUG] HandleAssignStmt: found in storage_map_ for c, ptr = 0x55b313a6b960 +[DEBUG] HandleAssignStmt: scalar assignment to c, ptr = 0x55b313a6b960, rhs = 0x55b313a6c040 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5424,11 +5263,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x560cfc3e1040 -[DEBUG] EvalExpr: success, result = 0x560cfc3e1040 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55b313a6c040 +[DEBUG] EvalExpr: success, result = 0x55b313a6c040 [DEBUG] HandleAssignStmt: assigning to d -[DEBUG] HandleAssignStmt: found in storage_map_ for d, ptr = 0x560cfc3e0b50 -[DEBUG] HandleAssignStmt: scalar assignment to d, ptr = 0x560cfc3e0b50, rhs = 0x560cfc3e1040 +[DEBUG] HandleAssignStmt: found in storage_map_ for d, ptr = 0x55b313a6bb50 +[DEBUG] HandleAssignStmt: scalar assignment to d, ptr = 0x55b313a6bb50, rhs = 0x55b313a6c040 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -5439,7 +5278,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: return(c+a)*(b-d); [DEBUG IRGEN] visitStmt: return(c+a)*(b-d); [DEBUG IRGEN] HandleReturnStmt: return(c+a)*(b-d); -[DEBUG IRGEN] HandleReturnStmt eval exp: (c+a)*(b-d) [DEBUG IRGEN] EvalExpr: (c+a)*(b-d) [DEBUG IRGEN] visitAddExp: (c+a)*(b-d) [DEBUG IRGEN] visitMulExp: (c+a)*(b-d) @@ -5460,8 +5298,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: a -[DEBUG] visitAddExp: left=0x560cfc3e12a0, right=0x560cfc3e1390 -[DEBUG] EvalExpr: success, result = 0x560cfc3e1480 +[DEBUG] visitAddExp: left=0x55b313a6c2a0, type=int, right=0x55b313a6c390, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c480 [DEBUG IRGEN] visitPrimaryExp: (b-d) [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting parenthesized expression @@ -5478,9 +5316,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: d -[DEBUG] visitAddExp: left=0x560cfc3e1540, right=0x560cfc3e1650 -[DEBUG] EvalExpr: success, result = 0x560cfc3e1760 -[DEBUG] EvalExpr: success, result = 0x560cfc3e1840 +[DEBUG] visitAddExp: left=0x55b313a6c540, type=int, right=0x55b313a6c650, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c760 +[DEBUG] visitMulExp: left=0x55b313a6c480, type=int, right=0x55b313a6c760, type=int +[DEBUG] EvalExpr: success, result = 0x55b313a6c840 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -5573,55 +5413,55 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 5.5 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: RADIUS, ctx: 0x55c563f2b280 -SymbolTable::addSymbol: stored RADIUS with kind=3, const_def_ctx=0x55c563f2b280 +保存常量定义上下文: RADIUS, ctx: 0x55db9d7e0280 +SymbolTable::addSymbol: stored RADIUS with kind=3, const_def_ctx=0x55db9d7e0280 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e0280 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: PI base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 03.141592653589793 [DEBUG] visitPrimaryExp: 03.141592653589793 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: PI, ctx: 0x55c563f33850 -SymbolTable::addSymbol: stored PI with kind=3, const_def_ctx=0x55c563f33850 +保存常量定义上下文: PI, ctx: 0x55db9d7e8850 +SymbolTable::addSymbol: stored PI with kind=3, const_def_ctx=0x55db9d7e8850 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e8850 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EPS base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 1e-6 [DEBUG] visitPrimaryExp: 1e-6 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EPS, ctx: 0x55c563f32fa0 -SymbolTable::addSymbol: stored EPS with kind=3, const_def_ctx=0x55c563f32fa0 +保存常量定义上下文: EPS, ctx: 0x55db9d7e7fa0 +SymbolTable::addSymbol: stored EPS with kind=3, const_def_ctx=0x55db9d7e7fa0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55c563f32fa0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f32fa0 +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55db9d7e7fa0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e7fa0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: PI_HEX base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0x1.921fb6p+1 [DEBUG] visitPrimaryExp: 0x1.921fb6p+1 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: PI_HEX, ctx: 0x55c563f33570 -SymbolTable::addSymbol: stored PI_HEX with kind=3, const_def_ctx=0x55c563f33570 +保存常量定义上下文: PI_HEX, ctx: 0x55db9d7e8570 +SymbolTable::addSymbol: stored PI_HEX with kind=3, const_def_ctx=0x55db9d7e8570 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f33570 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7e8570 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: HEX2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0x.AP-3 [DEBUG] visitPrimaryExp: 0x.AP-3 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: HEX2, ctx: 0x55c563f398c0 -SymbolTable::addSymbol: stored HEX2 with kind=3, const_def_ctx=0x55c563f398c0 +保存常量定义上下文: HEX2, ctx: 0x55db9d7ee8c0 +SymbolTable::addSymbol: stored HEX2 with kind=3, const_def_ctx=0x55db9d7ee8c0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55c563f398c0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f398c0 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55db9d7ee8c0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7ee8c0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: FACT base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: -.33E+5 @@ -5629,178 +5469,178 @@ CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f398c0 [DEBUG] visitPrimaryExp: .33E+5 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: FACT, ctx: 0x55c563f3bee0 -SymbolTable::addSymbol: stored FACT with kind=3, const_def_ctx=0x55c563f3bee0 +保存常量定义上下文: FACT, ctx: 0x55db9d7f0ee0 +SymbolTable::addSymbol: stored FACT with kind=3, const_def_ctx=0x55db9d7f0ee0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55c563f3bee0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3bee0 +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55db9d7f0ee0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f0ee0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL1 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL1, ctx: 0x55c563f3e030 -SymbolTable::addSymbol: stored EVAL1 with kind=3, const_def_ctx=0x55c563f3e030 +保存常量定义上下文: EVAL1, ctx: 0x55db9d7f3030 +SymbolTable::addSymbol: stored EVAL1 with kind=3, const_def_ctx=0x55db9d7f3030 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55c563f3e030 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3e030 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3030 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f3030 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 [DEBUG] visitUnaryExp: PI_HEX [DEBUG] visitPrimaryExp: PI_HEX -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 CheckLValue: found sym->name = PI_HEX, sym->kind = 3 绑定常量: PI_HEX -> ConstDefContext -CheckLValue 绑定变量: PI_HEX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33570 +CheckLValue 绑定变量: PI_HEX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8570 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55c563f33570 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found PI_HEX in scope level 1, kind=3, const_def_ctx=0x55db9d7e8570 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL2, ctx: 0x55c563f3ee60 -SymbolTable::addSymbol: stored EVAL2 with kind=3, const_def_ctx=0x55c563f3ee60 +保存常量定义上下文: EVAL2, ctx: 0x55db9d7f3e60 +SymbolTable::addSymbol: stored EVAL2 with kind=3, const_def_ctx=0x55db9d7f3e60 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f3ee60 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f3e60 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: EVAL3 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: EVAL3, ctx: 0x55c563f41f50 -SymbolTable::addSymbol: stored EVAL3 with kind=3, const_def_ctx=0x55c563f41f50 +保存常量定义上下文: EVAL3, ctx: 0x55db9d7f6f50 +SymbolTable::addSymbol: stored EVAL3 with kind=3, const_def_ctx=0x55db9d7f6f50 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55c563f41f50 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f41f50 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55db9d7f6f50 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7f6f50 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: CONV1 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 233 [DEBUG] visitPrimaryExp: 233 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: CONV1, ctx: 0x55c563f46210 -SymbolTable::addSymbol: stored CONV1 with kind=3, const_def_ctx=0x55c563f46210 +保存常量定义上下文: CONV1, ctx: 0x55db9d7fb210 +SymbolTable::addSymbol: stored CONV1 with kind=3, const_def_ctx=0x55db9d7fb210 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55c563f46210 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f46210 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb210 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fb210 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: CONV2 base_type: float is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 0xfff [DEBUG] visitPrimaryExp: 0xfff [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: CONV2, ctx: 0x55c563f469a0 -SymbolTable::addSymbol: stored CONV2 with kind=3, const_def_ctx=0x55c563f469a0 +保存常量定义上下文: CONV2, ctx: 0x55db9d7fb9a0 +SymbolTable::addSymbol: stored CONV2 with kind=3, const_def_ctx=0x55db9d7fb9a0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55c563f469a0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f469a0 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb9a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fb9a0 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: MAX base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 1e9 [DEBUG] visitPrimaryExp: 1e9 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: MAX, ctx: 0x55c563f47f10 -SymbolTable::addSymbol: stored MAX with kind=3, const_def_ctx=0x55c563f47f10 +保存常量定义上下文: MAX, ctx: 0x55db9d7fcf10 +SymbolTable::addSymbol: stored MAX with kind=3, const_def_ctx=0x55db9d7fcf10 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55c563f47f10 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f47f10 +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55db9d7fcf10 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fcf10 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: TWO base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 2.9 [DEBUG] visitPrimaryExp: 2.9 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: TWO, ctx: 0x55c563f48760 -SymbolTable::addSymbol: stored TWO with kind=3, const_def_ctx=0x55c563f48760 +保存常量定义上下文: TWO, ctx: 0x55db9d7fd760 +SymbolTable::addSymbol: stored TWO with kind=3, const_def_ctx=0x55db9d7fd760 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f48760 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fd760 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: THREE base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: 3.2 [DEBUG] visitPrimaryExp: 3.2 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: THREE, ctx: 0x55c563f48e30 -SymbolTable::addSymbol: stored THREE with kind=3, const_def_ctx=0x55c563f48e30 +保存常量定义上下文: THREE, ctx: 0x55db9d7fde30 +SymbolTable::addSymbol: stored THREE with kind=3, const_def_ctx=0x55db9d7fde30 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f48e30 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fde30 [DEBUG] 常量符号添加完成 [DEBUG] CheckConstDef: FIVE base_type: int is_array: 0 dim_count: 0 [DEBUG] visitUnaryExp: TWO [DEBUG] visitPrimaryExp: TWO -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 CheckLValue: found sym->name = TWO, sym->kind = 3 绑定常量: TWO -> ConstDefContext -CheckLValue 绑定变量: TWO, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f48760 +CheckLValue 绑定变量: TWO, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fd760 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: THREE [DEBUG] visitPrimaryExp: THREE -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 CheckLValue: found sym->name = THREE, sym->kind = 3 绑定常量: THREE -> ConstDefContext -CheckLValue 绑定变量: THREE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f48e30 +CheckLValue 绑定变量: THREE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fde30 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55c563f48760 -SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55c563f48e30 +SymbolTable::lookup: found TWO in scope level 1, kind=3, const_def_ctx=0x55db9d7fd760 +SymbolTable::lookup: found THREE in scope level 1, kind=3, const_def_ctx=0x55db9d7fde30 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: FIVE, ctx: 0x55c563f49610 -SymbolTable::addSymbol: stored FIVE with kind=3, const_def_ctx=0x55c563f49610 +保存常量定义上下文: FIVE, ctx: 0x55db9d7fe610 +SymbolTable::addSymbol: stored FIVE with kind=3, const_def_ctx=0x55db9d7fe610 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55c563f49610 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55c563f49610 +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55db9d7fe610 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55db9d7fe610 [DEBUG] 常量符号添加完成 [DEBUG] 进入函数: float_abs 返回类型: float SymbolTable::addSymbol: stored x with kind=2, const_def_ctx=0 @@ -5853,10 +5693,10 @@ SymbolTable::addSymbol: stored radius with kind=2, const_def_ctx=0 [DEBUG] CheckExp: PI*radius*radius+(radius*radius)*PI [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: radius [DEBUG] visitPrimaryExp: radius @@ -5887,10 +5727,10 @@ CheckLValue 绑定变量: radius, sym->kind: 2, sym->var_def_ctx: 0, sym->const_ dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -5923,10 +5763,10 @@ dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] visitUnaryExp: EPS [DEBUG] visitPrimaryExp: EPS -SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55c563f32fa0 +SymbolTable::lookup: found EPS in scope level 1, kind=3, const_def_ctx=0x55db9d7e7fa0 CheckLValue: found sym->name = EPS, sym->kind = 3 绑定常量: EPS -> ConstDefContext -CheckLValue 绑定变量: EPS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f32fa0 +CheckLValue 绑定变量: EPS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e7fa0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Return ExpStmt @@ -6122,18 +5962,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: HEX2 [DEBUG] visitUnaryExp: HEX2 [DEBUG] visitPrimaryExp: HEX2 -SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55c563f398c0 +SymbolTable::lookup: found HEX2 in scope level 1, kind=3, const_def_ctx=0x55db9d7ee8c0 CheckLValue: found sym->name = HEX2, sym->kind = 3 绑定常量: HEX2 -> ConstDefContext -CheckLValue 绑定变量: HEX2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f398c0 +CheckLValue 绑定变量: HEX2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7ee8c0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: FACT [DEBUG] visitUnaryExp: FACT [DEBUG] visitPrimaryExp: FACT -SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55c563f3bee0 +SymbolTable::lookup: found FACT in scope level 1, kind=3, const_def_ctx=0x55db9d7f0ee0 CheckLValue: found sym->name = FACT, sym->kind = 3 绑定常量: FACT -> ConstDefContext -CheckLValue 绑定变量: FACT, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3bee0 +CheckLValue 绑定变量: FACT, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f0ee0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -6154,18 +5994,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: EVAL1 [DEBUG] visitUnaryExp: EVAL1 [DEBUG] visitPrimaryExp: EVAL1 -SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55c563f3e030 +SymbolTable::lookup: found EVAL1 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3030 CheckLValue: found sym->name = EVAL1, sym->kind = 3 绑定常量: EVAL1 -> ConstDefContext -CheckLValue 绑定变量: EVAL1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3e030 +CheckLValue 绑定变量: EVAL1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3030 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: EVAL2 [DEBUG] visitUnaryExp: EVAL2 [DEBUG] visitPrimaryExp: EVAL2 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 CheckLValue: found sym->name = EVAL2, sym->kind = 3 绑定常量: EVAL2 -> ConstDefContext -CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3ee60 +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3e60 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -6186,18 +6026,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: EVAL2 [DEBUG] visitUnaryExp: EVAL2 [DEBUG] visitPrimaryExp: EVAL2 -SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55c563f3ee60 +SymbolTable::lookup: found EVAL2 in scope level 1, kind=3, const_def_ctx=0x55db9d7f3e60 CheckLValue: found sym->name = EVAL2, sym->kind = 3 绑定常量: EVAL2 -> ConstDefContext -CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f3ee60 +CheckLValue 绑定变量: EVAL2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f3e60 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: EVAL3 [DEBUG] visitUnaryExp: EVAL3 [DEBUG] visitPrimaryExp: EVAL3 -SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55c563f41f50 +SymbolTable::lookup: found EVAL3 in scope level 1, kind=3, const_def_ctx=0x55db9d7f6f50 CheckLValue: found sym->name = EVAL3, sym->kind = 3 绑定常量: EVAL3 -> ConstDefContext -CheckLValue 绑定变量: EVAL3, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f41f50 +CheckLValue 绑定变量: EVAL3, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7f6f50 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -6224,10 +6064,10 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: RADIUS [DEBUG] visitUnaryExp: RADIUS [DEBUG] visitPrimaryExp: RADIUS -SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55c563f2b280 +SymbolTable::lookup: found RADIUS in scope level 1, kind=3, const_def_ctx=0x55db9d7e0280 CheckLValue: found sym->name = RADIUS, sym->kind = 3 绑定常量: RADIUS -> ConstDefContext -CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f2b280 +CheckLValue 绑定变量: RADIUS, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e0280 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 [DEBUG] CheckExp: circle_area(FIVE) @@ -6239,10 +6079,10 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: FIVE [DEBUG] visitUnaryExp: FIVE [DEBUG] visitPrimaryExp: FIVE -SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55c563f49610 +SymbolTable::lookup: found FIVE in scope level 1, kind=3, const_def_ctx=0x55db9d7fe610 CheckLValue: found sym->name = FIVE, sym->kind = 3 绑定常量: FIVE -> ConstDefContext -CheckLValue 绑定变量: FIVE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f49610 +CheckLValue 绑定变量: FIVE, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fe610 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 @@ -6264,18 +6104,18 @@ SymbolTable::lookup: found float_eq in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: CONV1 [DEBUG] visitUnaryExp: CONV1 [DEBUG] visitPrimaryExp: CONV1 -SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55c563f46210 +SymbolTable::lookup: found CONV1 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb210 CheckLValue: found sym->name = CONV1, sym->kind = 3 绑定常量: CONV1 -> ConstDefContext -CheckLValue 绑定变量: CONV1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f46210 +CheckLValue 绑定变量: CONV1, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fb210 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: CONV2 [DEBUG] visitUnaryExp: CONV2 [DEBUG] visitPrimaryExp: CONV2 -SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55c563f469a0 +SymbolTable::lookup: found CONV2 in scope level 1, kind=3, const_def_ctx=0x55db9d7fb9a0 CheckLValue: found sym->name = CONV2, sym->kind = 3 绑定常量: CONV2 -> ConstDefContext -CheckLValue 绑定变量: CONV2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f469a0 +CheckLValue 绑定变量: CONV2, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fb9a0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] 检查参数 1: 实参类型 2 形参类型 2 @@ -6364,7 +6204,7 @@ SymbolTable::lookup: found getfarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -6376,14 +6216,14 @@ SymbolTable::addSymbol: stored len with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: MAX [DEBUG] visitPrimaryExp: MAX -SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55c563f47f10 +SymbolTable::lookup: found MAX in scope level 1, kind=3, const_def_ctx=0x55db9d7fcf10 CheckLValue: found sym->name = MAX, sym->kind = 3 绑定常量: MAX -> ConstDefContext -CheckLValue 绑定变量: MAX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f47f10 +CheckLValue 绑定变量: MAX, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7fcf10 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: input base_type: float is_array: 0 dim_count: 0 @@ -6398,24 +6238,24 @@ SymbolTable::addSymbol: stored input with kind=0, const_def_ctx=0 [DEBUG] CheckExp: PI*input*input [DEBUG] visitUnaryExp: PI [DEBUG] visitPrimaryExp: PI -SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55c563f33850 +SymbolTable::lookup: found PI in scope level 1, kind=3, const_def_ctx=0x55db9d7e8850 CheckLValue: found sym->name = PI, sym->kind = 3 绑定常量: PI -> ConstDefContext -CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55c563f33850 +CheckLValue 绑定变量: PI, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55db9d7e8850 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 SymbolTable::addSymbol: stored area with kind=0, const_def_ctx=0 [DEBUG] 符号添加完成: area type_kind: 2 is_array: 0 @@ -6432,7 +6272,7 @@ SymbolTable::lookup: found circle_area in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 SymbolTable::addSymbol: stored area_trunc with kind=0, const_def_ctx=0 @@ -6441,7 +6281,7 @@ SymbolTable::addSymbol: stored area_trunc with kind=0, const_def_ctx=0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: p [DEBUG] visitUnaryExp: p @@ -6449,7 +6289,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: arr[p]+input @@ -6458,7 +6298,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: p [DEBUG] visitUnaryExp: p @@ -6466,7 +6306,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: input @@ -6474,7 +6314,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found input in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = input, sym->kind = 0 绑定变量: input -> VarDefContext -CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55c563f8bdb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: input, sym->kind: 0, sym->var_def_ctx: 0x55db9d840db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: putfloat(area) @@ -6489,7 +6329,7 @@ SymbolTable::lookup: found putfloat in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found area in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = area, sym->kind = 0 绑定变量: area -> VarDefContext -CheckLValue 绑定变量: area, sym->kind: 0, sym->var_def_ctx: 0x55c563f8c7e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: area, sym->kind: 0, sym->var_def_ctx: 0x55db9d8417e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 2 [DEBUG] visitStmt: ExpStmt @@ -6516,7 +6356,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found area_trunc in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = area_trunc, sym->kind = 0 绑定变量: area_trunc -> VarDefContext -CheckLValue 绑定变量: area_trunc, sym->kind: 0, sym->var_def_ctx: 0x55c563f8d640, sym->const_def_ctx: 0 +CheckLValue 绑定变量: area_trunc, sym->kind: 0, sym->var_def_ctx: 0x55db9d842640, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 2 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -6534,7 +6374,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i*--1e1 [DEBUG] visitUnaryExp: i @@ -6542,7 +6382,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55c563f84b70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55db9d839b70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: --1e1 [DEBUG] visitUnaryExp: -1e1 @@ -6552,7 +6392,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: p+1 [DEBUG] visitUnaryExp: p @@ -6560,7 +6400,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found p in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = p, sym->kind = 0 绑定变量: p -> VarDefContext -CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55c563f85130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: p, sym->kind: 0, sym->var_def_ctx: 0x55db9d83a130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -6577,7 +6417,7 @@ SymbolTable::lookup: found putfarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55c563f88510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55db9d83d510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: arr [DEBUG] visitUnaryExp: arr @@ -6585,7 +6425,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found arr in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = arr, sym->kind = 0 绑定变量: arr -> VarDefContext -CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55c563f85a80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: arr, sym->kind: 0, sym->var_def_ctx: 0x55db9d83aa80, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -6644,14 +6484,14 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55df9f9d00a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55a29de3d0a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b [DEBUG] visitPrimaryExp: b SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55df9f9d4130, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55a29de41130, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 main has_return: 1 return_type_is_void: 0 @@ -6660,6 +6500,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55a29de4ce40 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {inta=1;intb=2;returna+b;} [DEBUG IRGEN] visitBlockItem: inta=1; [DEBUG] visitDecl: 开始处理声明 @@ -6669,9 +6512,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 a -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 1 @@ -6679,11 +6519,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x55df9f9db600 -[DEBUG] EvalExpr: success, result = 0x55df9f9db600 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 a,初始值 0x55df9f9db600 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55a29de48600 +[DEBUG] EvalExpr: success, result = 0x55a29de48600 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intb=2; @@ -6694,9 +6531,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 b -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 2 @@ -6704,17 +6538,13 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x55df9f9da330 -[DEBUG] EvalExpr: success, result = 0x55df9f9da330 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 b,初始值 0x55df9f9da330 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55a29de47330 +[DEBUG] EvalExpr: success, result = 0x55a29de47330 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: returna+b; [DEBUG IRGEN] visitStmt: returna+b; [DEBUG IRGEN] HandleReturnStmt: returna+b; -[DEBUG IRGEN] HandleReturnStmt eval exp: a+b [DEBUG IRGEN] EvalExpr: a+b [DEBUG IRGEN] visitAddExp: a+b [DEBUG IRGEN] visitAddExp: a @@ -6728,8 +6558,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: b -[DEBUG] visitAddExp: left=0x55df9f9e0200, right=0x55df9f9e0310 -[DEBUG] EvalExpr: success, result = 0x55df9f9e03d0 +[DEBUG] visitAddExp: left=0x55a29de4d200, type=int, right=0x55a29de4d310, type=int +[DEBUG] EvalExpr: success, result = 0x55a29de4d3d0 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -6804,30 +6635,30 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 1024 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x55cd73dd64f0 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x55cd73dd64f0 +保存常量定义上下文: N, ctx: 0x562c650374f0 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x562c650374f0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x562c650374f0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6839,21 +6670,21 @@ SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6865,21 +6696,21 @@ SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[0] = 1024 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55cd73dd64f0 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x562c650374f0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 [DEBUG] dim[1] = 1024 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -6891,13 +6722,13 @@ SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 [DEBUG] 进入函数: mm 返回类型: void SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 [DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 [DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 1024 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 SymbolTable::addSymbol: stored B with kind=2, const_def_ctx=0 [DEBUG] 添加参数: B type_kind: 3 is_array: 1 dims: 0 1024 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x55cd73dd64f0 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x562c650374f0 SymbolTable::addSymbol: stored C with kind=2, const_def_ctx=0 [DEBUG] 添加参数: C type_kind: 3 is_array: 1 dims: 0 1024 [DEBUG] CheckVarDef: i base_type: int is_array: 0 dim_count: 0 @@ -6913,7 +6744,7 @@ SymbolTable::addSymbol: stored k with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6922,7 +6753,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6933,7 +6764,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -6946,7 +6777,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -6957,7 +6788,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -6978,7 +6809,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -6986,7 +6817,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -6996,7 +6827,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -7004,7 +6835,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7012,7 +6843,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7020,7 +6851,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7028,7 +6859,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7037,7 +6868,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7046,7 +6877,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7057,7 +6888,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -7070,7 +6901,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7081,7 +6912,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -7104,7 +6935,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -7112,7 +6943,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 0 @@ -7122,7 +6953,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7130,7 +6961,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7139,7 +6970,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7150,7 +6981,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -7171,7 +7002,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7179,7 +7010,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: C[i][j]+A[i][k]*B[k][j] @@ -7196,7 +7027,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7204,7 +7035,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][k] @@ -7220,7 +7051,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -7228,7 +7059,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: B[k][j] @@ -7244,7 +7075,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7252,14 +7083,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -7267,7 +7098,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73dddc40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c6503ec40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7275,7 +7106,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7283,7 +7114,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73ddd550, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c6503e550, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7291,7 +7122,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -7299,7 +7130,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55cd73de27c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x562c650437c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7323,7 +7154,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7332,7 +7163,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7343,21 +7174,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7368,21 +7199,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7390,7 +7221,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7398,7 +7229,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -7410,7 +7241,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -7418,7 +7249,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7426,7 +7257,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7434,7 +7265,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7442,7 +7273,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7451,7 +7282,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7462,21 +7293,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7487,21 +7318,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7509,7 +7340,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7517,7 +7348,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -7529,7 +7360,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -7537,7 +7368,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7545,7 +7376,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7553,7 +7384,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7567,7 +7398,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7578,7 +7409,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -7596,7 +7427,7 @@ SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -7604,7 +7435,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -7613,7 +7444,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -7622,7 +7453,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55cd73e11c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x562c65072c40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -7642,7 +7473,7 @@ SymbolTable::lookup: found mm in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -7650,7 +7481,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55cd73e0fb40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x562c65070b40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -7659,7 +7490,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55cd73e11c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x562c65072c40, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -7668,7 +7499,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -7679,7 +7510,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7687,7 +7518,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7701,7 +7532,7 @@ SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7712,21 +7543,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -7737,21 +7568,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55cd73e136a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x562c650746a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+B[i][j] [DEBUG] visitUnaryExp: ans @@ -7759,14 +7590,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: B[i][j] [DEBUG] visitPrimaryExp: B[i][j] SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55cd73e10cf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x562c65071cf0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -7774,7 +7605,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -7782,14 +7613,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -7797,7 +7628,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55cd73e14820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c65075820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7805,7 +7636,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -7813,7 +7644,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55cd73e145f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c650755f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -7836,7 +7667,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55cd73e2a5b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x562c6508b5b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -7865,11 +7696,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant N -[DEBUG] visitConstDef: scalar constant N [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant N = 1024 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -7878,11 +7705,48 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 A -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 1048576 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: mm +[DEBUG] visitFuncDef: 创建函数 mm,返回类型: void,参数数量: 4 +[DEBUG] visitFuncDef: 函数对象地址: 0x562c650a3b70 +[DEBUG] visitFuncDef: 为函数 mm 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 mm 添加参数 A,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 ========== test/test_case/performance/02_mv3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -7907,30 +7771,30 @@ SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 [DEBUG] visitPrimaryExp: 2010 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: N, ctx: 0x555bc566b620 -SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x555bc566b620 +保存常量定义上下文: N, ctx: 0x559802e25620 +SymbolTable::addSymbol: stored N with kind=3, const_def_ctx=0x559802e25620 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x559802e25620 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: A base_type: int is_array: 1 dim_count: 2 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 [DEBUG] dim[0] = 2010 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 [DEBUG] dim[1] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -7942,12 +7806,12 @@ SymbolTable::addSymbol: stored A with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: B base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 [DEBUG] dim[0] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -7959,12 +7823,12 @@ SymbolTable::addSymbol: stored B with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: C base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: N [DEBUG] visitPrimaryExp: N -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 CheckLValue: found sym->name = N, sym->kind = 3 绑定常量: N -> ConstDefContext -CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x555bc566b620 +CheckLValue 绑定变量: N, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x559802e25620 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 [DEBUG] dim[0] = 2010 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -7976,7 +7840,7 @@ SymbolTable::addSymbol: stored C with kind=0, const_def_ctx=0 [DEBUG] 进入函数: mv 返回类型: void SymbolTable::addSymbol: stored n with kind=2, const_def_ctx=0 [DEBUG] 添加参数: n type_kind: 1 is_array: 0 dims: -SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x555bc566b620 +SymbolTable::lookup: found N in scope level 1, kind=3, const_def_ctx=0x559802e25620 SymbolTable::addSymbol: stored A with kind=2, const_def_ctx=0 [DEBUG] 添加参数: A type_kind: 3 is_array: 1 dims: 0 2010 SymbolTable::addSymbol: stored b with kind=2, const_def_ctx=0 @@ -7993,7 +7857,7 @@ SymbolTable::addSymbol: stored y with kind=0, const_def_ctx=0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8002,7 +7866,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 11 [DEBUG] visitUnaryExp: 11 @@ -8017,7 +7881,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8028,7 +7892,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -8049,7 +7913,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -8059,7 +7923,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8067,7 +7931,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8075,7 +7939,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8084,7 +7948,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8095,7 +7959,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -8108,7 +7972,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8119,7 +7983,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -8142,7 +8006,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8150,7 +8014,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 0 @@ -8160,7 +8024,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: x*b[i]+b[j] [DEBUG] visitUnaryExp: x @@ -8168,7 +8032,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: b[i] [DEBUG] visitPrimaryExp: b[i] @@ -8183,7 +8047,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[j] @@ -8199,14 +8063,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y-x [DEBUG] visitUnaryExp: y @@ -8214,14 +8078,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555bc5675a60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x559802e2fa60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: x [DEBUG] visitPrimaryExp: x SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555bc566e960, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x559802e28960, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt @@ -8236,7 +8100,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: res[i]+A[i][j]*b[j] @@ -8253,7 +8117,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][j] @@ -8269,7 +8133,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8277,7 +8141,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: b[j] @@ -8293,14 +8157,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8308,7 +8172,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc567daa0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e37aa0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8316,7 +8180,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8324,7 +8188,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc567d820, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e37820, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8348,7 +8212,7 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8359,21 +8223,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8384,21 +8248,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8406,7 +8270,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -8414,7 +8278,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -8426,7 +8290,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -8434,7 +8298,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555bc56a4170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x559802e5e170, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8442,7 +8306,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8450,7 +8314,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8458,7 +8322,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8469,21 +8333,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -8491,7 +8355,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: getint() @@ -8503,7 +8367,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8511,7 +8375,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8525,7 +8389,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -8536,7 +8400,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -8554,7 +8418,7 @@ SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -8562,7 +8426,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -8571,7 +8435,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -8580,7 +8444,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -8600,7 +8464,7 @@ SymbolTable::lookup: found mv in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: A [DEBUG] visitUnaryExp: A @@ -8608,7 +8472,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x555bc56983e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x559802e523e0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: C @@ -8617,7 +8481,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: B @@ -8626,7 +8490,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x555bc568dce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x559802e47ce0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -8637,7 +8501,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8645,7 +8509,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3f40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x559802e5df40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8668,7 +8532,7 @@ SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x555bc56a3050, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x559802e5d050, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: C [DEBUG] visitUnaryExp: C @@ -8676,7 +8540,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x555bc56a21c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x559802e5c1c0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -8701,22 +8565,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 x -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 x 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: x -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 x -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant N -[DEBUG] visitConstDef: scalar constant N [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant N = 2010 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -8725,11 +8579,46 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 A -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 4040100 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2010 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2010 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: mv +[DEBUG] visitFuncDef: 创建函数 mv,返回类型: void,参数数量: 4 +[DEBUG] visitFuncDef: 函数对象地址: 0x559802e7db20 +[DEBUG] visitFuncDef: 为函数 mv 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 mv 添加参数 A,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 ========== test/test_case/performance/03_sort1.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -8753,11 +8642,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 16 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: base, ctx: 0x5575a082e830 -SymbolTable::addSymbol: stored base with kind=3, const_def_ctx=0x5575a082e830 +保存常量定义上下文: base, ctx: 0x563bb8523830 +SymbolTable::addSymbol: stored base with kind=3, const_def_ctx=0x563bb8523830 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x563bb8523830 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: 30000010 @@ -8796,7 +8685,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -8819,7 +8708,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: ret @@ -8827,13 +8716,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: arr[i] [DEBUG] visitUnaryExp: arr[i] @@ -8849,14 +8738,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8864,7 +8753,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a083b850, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8530850, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8878,7 +8767,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ret in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ret, sym->kind = 0 绑定变量: ret -> VarDefContext -CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x5575a083a770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ret, sym->kind: 0, sym->var_def_ctx: 0x563bb852f770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 getMaxNum has_return: 1 return_type_is_void: 0 @@ -8905,7 +8794,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: pos [DEBUG] visitPrimaryExp: pos @@ -8928,16 +8817,16 @@ CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -8945,7 +8834,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0853ae0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8548ae0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -8962,10 +8851,10 @@ CheckLValue 绑定变量: num, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 getNumPos has_return: 1 return_type_is_void: 0 @@ -8981,12 +8870,12 @@ SymbolTable::addSymbol: stored r with kind=2, const_def_ctx=0 [DEBUG] CheckVarDef: head base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -8998,12 +8887,12 @@ SymbolTable::addSymbol: stored head with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: tail base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9015,12 +8904,12 @@ SymbolTable::addSymbol: stored tail with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: cnt base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 [DEBUG] dim[0] = 16 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -9075,7 +8964,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: r [DEBUG] visitPrimaryExp: r @@ -9088,7 +8977,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(a[i],bitround) [DEBUG] visitUnaryExp: getNumPos(a[i],bitround) @@ -9110,7 +8999,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: bitround @@ -9129,7 +9018,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(a[i],bitround) [DEBUG] visitUnaryExp: getNumPos(a[i],bitround) @@ -9151,7 +9040,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: bitround @@ -9170,7 +9059,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9178,7 +9067,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9186,7 +9075,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9203,7 +9092,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9221,7 +9110,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9231,7 +9120,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -9242,21 +9131,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9264,7 +9153,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i-1] @@ -9273,7 +9162,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -9281,7 +9170,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9290,7 +9179,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9298,7 +9187,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+cnt[i] @@ -9307,7 +9196,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9315,7 +9204,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: cnt[i] @@ -9323,7 +9212,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9331,14 +9220,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9346,7 +9235,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9354,7 +9243,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9365,14 +9254,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: While @@ -9381,7 +9270,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9389,7 +9278,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: tail[i] @@ -9397,7 +9286,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9405,7 +9294,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Block @@ -9424,7 +9313,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9432,7 +9321,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 完全索引,返回元素类型 @@ -9450,7 +9339,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -9466,7 +9355,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: t base_type: int is_array: 0 dim_count: 0 @@ -9476,7 +9365,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 SymbolTable::addSymbol: stored t with kind=0, const_def_ctx=0 [DEBUG] 符号添加完成: t type_kind: 1 is_array: 0 @@ -9484,7 +9373,7 @@ SymbolTable::addSymbol: stored t with kind=0, const_def_ctx=0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a[head[getNumPos(t,bitround)]] [DEBUG] visitUnaryExp: a[head[getNumPos(t,bitround)]] @@ -9500,7 +9389,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -9514,7 +9403,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -9539,7 +9428,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -9553,7 +9442,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -9572,13 +9461,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -9592,7 +9481,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -9610,7 +9499,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: getNumPos(t,bitround) [DEBUG] visitUnaryExp: getNumPos(t,bitround) @@ -9624,7 +9513,7 @@ SymbolTable::lookup: found getNumPos in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found t in scope level 7, kind=0, const_def_ctx=0 CheckLValue: found sym->name = t, sym->kind = 0 绑定变量: t -> VarDefContext -CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x5575a08827f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: t, sym->kind: 0, sym->var_def_ctx: 0x563bb85777f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: bitround [DEBUG] visitUnaryExp: bitround @@ -9650,7 +9539,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9658,7 +9547,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 完全索引,返回元素类型 @@ -9668,13 +9557,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found v in scope level 6, kind=0, const_def_ctx=0 CheckLValue: found sym->name = v, sym->kind = 0 绑定变量: v -> VarDefContext -CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x5575a087ef10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: v, sym->kind: 0, sym->var_def_ctx: 0x563bb8573f10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9682,7 +9571,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+1 @@ -9691,7 +9580,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9699,7 +9588,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -9708,7 +9597,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9716,7 +9605,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0863eb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb8558eb0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9735,7 +9624,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9752,7 +9641,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9770,7 +9659,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9780,7 +9669,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -9791,14 +9680,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: base [DEBUG] visitPrimaryExp: base -SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x5575a082e830 +SymbolTable::lookup: found base in scope level 1, kind=3, const_def_ctx=0x563bb8523830 CheckLValue: found sym->name = base, sym->kind = 3 绑定常量: base -> ConstDefContext -CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5575a082e830 +CheckLValue 绑定变量: base, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x563bb8523830 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -9807,7 +9696,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -9816,7 +9705,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9824,7 +9713,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i-1] @@ -9833,7 +9722,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -9841,7 +9730,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9850,7 +9739,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9858,7 +9747,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: head[i]+cnt[i] @@ -9867,7 +9756,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9875,7 +9764,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: cnt[i] @@ -9883,7 +9772,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cnt in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cnt, sym->kind = 0 绑定变量: cnt -> VarDefContext -CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x5575a085d9f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cnt, sym->kind: 0, sym->var_def_ctx: 0x563bb85529f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9891,7 +9780,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: ExpStmt @@ -9925,7 +9814,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found head in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = head, sym->kind = 0 绑定变量: head -> VarDefContext -CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x5575a085b700, sym->const_def_ctx: 0 +CheckLValue 绑定变量: head, sym->kind: 0, sym->var_def_ctx: 0x563bb8550700, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9933,7 +9822,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: tail[i] @@ -9942,7 +9831,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found tail in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = tail, sym->kind = 0 绑定变量: tail -> VarDefContext -CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x5575a085ccb0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: tail, sym->kind: 0, sym->var_def_ctx: 0x563bb8551cb0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -9950,7 +9839,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -9961,7 +9850,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -9969,7 +9858,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a0895b20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb858ab20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -9993,7 +9882,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -10021,7 +9910,7 @@ SymbolTable::lookup: found radixSort in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -10033,7 +9922,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5575a08a42d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x563bb85992d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 3 形参类型 3 @@ -10051,21 +9940,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5575a08a42d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x563bb85992d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+i*(a[i]%(2+i)) [DEBUG] visitUnaryExp: ans @@ -10073,14 +9962,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: (a[i]%(2+i)) [DEBUG] visitPrimaryExp: (a[i]%(2+i)) @@ -10090,7 +9979,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5575a0879320, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x563bb856e320, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10098,7 +9987,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: (2+i) @@ -10111,13 +10000,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10125,7 +10014,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5575a08a6f60, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563bb859bf60, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10135,7 +10024,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -10143,7 +10032,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -ans [DEBUG] visitUnaryExp: -ans @@ -10152,7 +10041,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: stoptime() @@ -10173,7 +10062,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5575a08a3770, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x563bb8598770, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -10202,11 +10091,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant base -[DEBUG] visitConstDef: scalar constant base [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant base = 16 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -10215,10 +10100,29 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 a -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 30000010 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: ans +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 ans +[DEBUG] HandleGlobalVariable: 变量 ans 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: ans +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: getMaxNum +[DEBUG] visitFuncDef: 创建函数 getMaxNum,返回类型: int,参数数量: 2 +[DEBUG] visitFuncDef: 函数对象地址: 0x563bb85b5b10 +[DEBUG] visitFuncDef: 为函数 getMaxNum 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 getMaxNum 添加参数 arr,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 ========== test/test_case/performance/2025-MYO-20.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -10305,14 +10209,14 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -10321,14 +10225,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10346,7 +10250,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10354,7 +10258,7 @@ dim_count: 2, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 部分索引,返回指针类型 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -10362,7 +10266,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10370,7 +10274,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10378,7 +10282,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10389,14 +10293,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -10405,14 +10309,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10430,7 +10334,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10438,7 +10342,7 @@ dim_count: 2, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 部分索引,返回指针类型 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -10446,7 +10350,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10454,7 +10358,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10468,7 +10372,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10479,14 +10383,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -10495,14 +10399,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10519,21 +10423,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10541,7 +10445,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10549,7 +10453,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: -1 @@ -10560,7 +10464,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -10568,7 +10472,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ccb70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61452eb70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10576,7 +10480,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10584,7 +10488,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10592,7 +10496,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10603,14 +10507,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -10619,14 +10523,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -10643,21 +10547,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10665,7 +10569,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10673,7 +10577,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: -1 @@ -10684,7 +10588,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -10692,7 +10596,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d7040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614539040, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10700,7 +10604,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10708,7 +10612,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10716,7 +10620,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10727,14 +10631,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -10749,21 +10653,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10771,7 +10675,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10779,7 +10683,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: A[i][j]*2+B[i][j]*3 @@ -10788,7 +10692,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10796,7 +10700,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10804,7 +10708,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 2 @@ -10814,7 +10718,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found B in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = B, sym->kind = 0 绑定变量: B -> VarDefContext -CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a7ce0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: B, sym->kind: 0, sym->var_def_ctx: 0x55f614509ce0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10822,7 +10726,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10830,7 +10734,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 3 @@ -10839,7 +10743,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -10847,7 +10751,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6dcaf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f61453eaf0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10855,7 +10759,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -10863,7 +10767,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -10871,7 +10775,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -10882,14 +10786,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -10904,14 +10808,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: val base_type: int is_array: 0 dim_count: 0 @@ -10921,7 +10825,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10929,7 +10833,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -10937,7 +10841,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored val with kind=0, const_def_ctx=0 @@ -10946,7 +10850,7 @@ SymbolTable::addSymbol: stored val with kind=0, const_def_ctx=0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: val*val+7 [DEBUG] visitUnaryExp: val @@ -10954,14 +10858,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: val [DEBUG] visitPrimaryExp: val SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -10969,7 +10873,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: val/3 [DEBUG] visitUnaryExp: val @@ -10977,7 +10881,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -10985,7 +10889,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -10993,7 +10897,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11001,7 +10905,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: val @@ -11010,13 +10914,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found val in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = val, sym->kind = 0 绑定变量: val -> VarDefContext -CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6d32f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: val, sym->kind: 0, sym->var_def_ctx: 0x55f6145352f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11024,7 +10928,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6e58e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f6145478e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11032,7 +10936,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11040,7 +10944,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11048,7 +10952,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -11059,14 +10963,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -11081,14 +10985,14 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: k base_type: int is_array: 0 dim_count: 0 @@ -11109,21 +11013,21 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+C[i][k]*A[k][j] [DEBUG] visitUnaryExp: sum @@ -11131,14 +11035,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: C[i][k] [DEBUG] visitPrimaryExp: C[i][k] SymbolTable::lookup: found C in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = C, sym->kind = 0 绑定变量: C -> VarDefContext -CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a5ad0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: C, sym->kind: 0, sym->var_def_ctx: 0x55f614507ad0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11146,7 +11050,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -11154,7 +11058,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[k][j] @@ -11162,7 +11066,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: k [DEBUG] visitUnaryExp: k @@ -11170,7 +11074,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11178,14 +11082,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: k+1 [DEBUG] visitUnaryExp: k @@ -11193,7 +11097,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found k in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = k, sym->kind = 0 绑定变量: k -> VarDefContext -CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f28f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: k, sym->kind: 0, sym->var_def_ctx: 0x55f6145548f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11201,7 +11105,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11209,7 +11113,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11217,7 +11121,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -11226,13 +11130,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f3280, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55f614555280, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11240,7 +11144,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6f0e10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614552e10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11248,7 +11152,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11256,7 +11160,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11278,21 +11182,21 @@ SymbolTable::addSymbol: stored r with kind=0, const_def_ctx=0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: R [DEBUG] visitPrimaryExp: R SymbolTable::lookup: found R in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = R, sym->kind = 0 绑定变量: R -> VarDefContext -CheckLValue 绑定变量: R, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6af4b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: R, sym->kind: 0, sym->var_def_ctx: 0x55f6145114b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -11303,14 +11207,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: j base_type: int is_array: 0 dim_count: 0 @@ -11325,21 +11229,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: T [DEBUG] visitPrimaryExp: T SymbolTable::lookup: found T in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = T, sym->kind = 0 绑定变量: T -> VarDefContext -CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6ac4c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: T, sym->kind: 0, sym->var_def_ctx: 0x55f61450e4c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: total+A[i][j]*A[i][j] [DEBUG] visitUnaryExp: total @@ -11347,14 +11251,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: A[i][j] [DEBUG] visitPrimaryExp: A[i][j] SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11362,7 +11266,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11370,7 +11274,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: A[i][j] @@ -11378,7 +11282,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found A in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = A, sym->kind = 0 绑定变量: A -> VarDefContext -CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6a23a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: A, sym->kind: 0, sym->var_def_ctx: 0x55f6145043a0, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -11386,7 +11290,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -11394,14 +11298,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -11409,7 +11313,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fe150, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55f614560150, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11417,7 +11321,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11425,7 +11329,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6afde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55f614511de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11433,7 +11337,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: r+1 [DEBUG] visitUnaryExp: r @@ -11441,7 +11345,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found r in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = r, sym->kind = 0 绑定变量: r -> VarDefContext -CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fb2e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: r, sym->kind: 0, sym->var_def_ctx: 0x55f61455d2e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -11464,7 +11368,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55b7bc6fa6c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x55f61455c6c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -11498,11 +11402,179 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 A -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 A 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 1048576 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: A +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: B +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 B +[DEBUG] HandleGlobalVariable: 变量 B 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: B +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: C +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 C +[DEBUG] HandleGlobalVariable: 变量 C 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 1048576 +[DEBUG] HandleGlobalVariable: 创建全局数组: C +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x55f61457c340 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {intT=getint();intR=getint();inti=0;while(i=T/2){getarray(B[i]);}i=i+1;}starttime();i=0;while(i=T/2){intj=0;while(j then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {getarray(A[i]);} +[DEBUG IRGEN] visitBlock: {getarray(A[i]);} +[DEBUG IRGEN] visitBlockItem: getarray(A[i]); +[DEBUG IRGEN] visitStmt: getarray(A[i]); +[DEBUG IRGEN] EvalExpr: getarray(A[i]) +[DEBUG IRGEN] visitAddExp: getarray(A[i]) +[DEBUG IRGEN] visitMulExp: getarray(A[i]) +[DEBUG IRGEN] visitCallExp: 调用函数 getarray +[DEBUG IRGEN] EvalExpr: A[i] +[DEBUG IRGEN] visitAddExp: A[i] +[DEBUG IRGEN] visitMulExp: A[i] +[DEBUG IRGEN] visitPrimaryExp: A[i] +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: A +[DEBUG IRGEN] EvalExpr: i +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG] EvalExpr: success, result = 0x55f614d7df50 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[ERROR] Exception in EvalExpr: [ir] LoadInst 当前只支持从 i32* 加载 +[error] [ir] LoadInst 当前只支持从 i32* 加载 ========== test/test_case/performance/fft0.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -11527,11 +11599,11 @@ SymbolTable::addSymbol: stored main with kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp: 998244353 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: mod, ctx: 0x5650e092ece0 -SymbolTable::addSymbol: stored mod with kind=3, const_def_ctx=0x5650e092ece0 +保存常量定义上下文: mod, ctx: 0x55dd44ad2ce0 +SymbolTable::addSymbol: stored mod with kind=3, const_def_ctx=0x55dd44ad2ce0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55dd44ad2ce0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: d base_type: int is_array: 0 dim_count: 0 SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 @@ -11541,21 +11613,21 @@ SymbolTable::addSymbol: stored d with kind=0, const_def_ctx=0 [DEBUG] visitPrimaryExp: 2097152 [DEBUG] 初始化值数量: 1 CheckConstDef: before addSymbol, sym.kind = 3 -保存常量定义上下文: maxlen, ctx: 0x5650e095f5a0 -SymbolTable::addSymbol: stored maxlen with kind=3, const_def_ctx=0x5650e095f5a0 +保存常量定义上下文: maxlen, ctx: 0x55dd44b035a0 +SymbolTable::addSymbol: stored maxlen with kind=3, const_def_ctx=0x55dd44b035a0 CheckConstDef: after addSymbol, sym.kind = 3 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 -CheckConstDef: after addSymbol, stored const_def_ctx = 0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 +CheckConstDef: after addSymbol, stored const_def_ctx = 0x55dd44b035a0 [DEBUG] 常量符号添加完成 [DEBUG] CheckVarDef: temp base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -11567,12 +11639,12 @@ SymbolTable::addSymbol: stored temp with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: a base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -11584,12 +11656,12 @@ SymbolTable::addSymbol: stored a with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: b base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -11601,12 +11673,12 @@ SymbolTable::addSymbol: stored b with kind=0, const_def_ctx=0 [DEBUG] CheckVarDef: c base_type: int is_array: 1 dim_count: 1 [DEBUG] visitUnaryExp: maxlen [DEBUG] visitPrimaryExp: maxlen -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 CheckLValue: found sym->name = maxlen, sym->kind = 3 绑定常量: maxlen -> ConstDefContext -CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e095f5a0 +CheckLValue 绑定变量: maxlen, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44b035a0 dim_count: 0, subscript_count: 0 -SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x5650e095f5a0 +SymbolTable::lookup: found maxlen in scope level 1, kind=3, const_def_ctx=0x55dd44b035a0 [DEBUG] dim[0] = 2097152 [DEBUG] 创建数组类型完成 [DEBUG] type->IsArray(): 1 @@ -11659,10 +11731,10 @@ CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] CheckVarDef: cur base_type: int is_array: 0 dim_count: 0 @@ -11696,7 +11768,7 @@ SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: (cur+cur)%mod [DEBUG] visitUnaryExp: (cur+cur) @@ -11707,21 +11779,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: cur [DEBUG] visitPrimaryExp: cur SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: If [DEBUG] visitUnaryExp: b @@ -11747,7 +11819,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: a [DEBUG] visitPrimaryExp: a @@ -11757,10 +11829,10 @@ CheckLValue 绑定变量: a, sym->kind: 2, sym->var_def_ctx: 0, sym->const_def_c dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] visitStmt: Return ExpStmt @@ -11773,7 +11845,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e094a740, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44aee740, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 multiply has_return: 1 return_type_is_void: 0 @@ -11830,7 +11902,7 @@ SymbolTable::addSymbol: stored cur with kind=0, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: multiply(cur,cur) [DEBUG] visitUnaryExp: multiply(cur,cur) @@ -11844,7 +11916,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: cur [DEBUG] visitUnaryExp: cur @@ -11852,7 +11924,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -11883,7 +11955,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a [DEBUG] visitUnaryExp: a @@ -11905,7 +11977,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found cur in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = cur, sym->kind = 0 绑定变量: cur -> VarDefContext -CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x5650e0959bc0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: cur, sym->kind: 0, sym->var_def_ctx: 0x55dd44afdbc0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 power has_return: 1 return_type_is_void: 0 @@ -11930,7 +12002,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len @@ -11957,7 +12029,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: src[i] @@ -11974,14 +12046,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -11989,7 +12061,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12003,7 +12075,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e0965db0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b09db0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 memmove has_return: 1 return_type_is_void: 0 @@ -12045,7 +12117,7 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -12060,7 +12132,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12070,7 +12142,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i/2 [DEBUG] visitUnaryExp: i @@ -12078,7 +12150,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12097,7 +12169,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: begin_pos [DEBUG] visitPrimaryExp: begin_pos @@ -12110,7 +12182,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: n/2+i/2 [DEBUG] visitUnaryExp: n @@ -12126,7 +12198,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12145,7 +12217,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: begin_pos [DEBUG] visitPrimaryExp: begin_pos @@ -12158,7 +12230,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -12166,7 +12238,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12199,7 +12271,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5650e095f7d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55dd44b037d0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -12341,7 +12413,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -12358,7 +12430,7 @@ SymbolTable::addSymbol: stored wn with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -12390,7 +12462,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored x with kind=0, const_def_ctx=0 @@ -12416,7 +12488,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -12447,7 +12519,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: (x+multiply(wn,y))%mod @@ -12459,7 +12531,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5650e0988e80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2ce80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: multiply(wn,y) [DEBUG] 函数调用: multiply @@ -12472,7 +12544,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y [DEBUG] visitUnaryExp: y @@ -12480,16 +12552,16 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5650e098a230, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2e230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found arr in scope level 2, kind=2, const_def_ctx=0 @@ -12509,7 +12581,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -12529,7 +12601,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found x in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x5650e0988e80, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2ce80, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: multiply(wn,y) [DEBUG] 函数调用: multiply @@ -12542,7 +12614,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: y [DEBUG] visitUnaryExp: y @@ -12550,29 +12622,29 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found y in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x5650e098a230, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2e230, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: multiply(wn,w) [DEBUG] visitUnaryExp: multiply(wn,w) @@ -12586,7 +12658,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found wn in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = wn, sym->kind = 0 绑定变量: wn -> VarDefContext -CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x5650e09872a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: wn, sym->kind: 0, sym->var_def_ctx: 0x55dd44b2b2a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: w [DEBUG] visitUnaryExp: w @@ -12601,7 +12673,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -12609,7 +12681,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e09738f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b178f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12636,7 +12708,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -12655,7 +12727,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -12671,7 +12743,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -12682,21 +12754,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5650e09944b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55dd44b384b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5650e0995380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55dd44b39380, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12705,7 +12777,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: d*2 [DEBUG] visitUnaryExp: d @@ -12713,7 +12785,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -12730,7 +12802,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -12742,7 +12814,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,(mod-1)/d) [DEBUG] visitUnaryExp: power(3,(mod-1)/d) @@ -12759,10 +12831,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12771,7 +12843,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -12792,7 +12864,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -12804,7 +12876,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,(mod-1)/d) [DEBUG] visitUnaryExp: power(3,(mod-1)/d) @@ -12821,10 +12893,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12833,7 +12905,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -12853,21 +12925,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -12875,7 +12947,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: multiply(a[i],b[i]) @@ -12890,7 +12962,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -12898,7 +12970,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: b[i] @@ -12907,7 +12979,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x5650e09628e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x55dd44b068e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -12915,7 +12987,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -12924,7 +12996,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -12932,7 +13004,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12949,7 +13021,7 @@ SymbolTable::lookup: found fft in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: 0 @@ -12961,7 +13033,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: power(3,mod-1-(mod-1)/d) [DEBUG] visitUnaryExp: power(3,mod-1-(mod-1)/d) @@ -12975,10 +13047,10 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 [DEBUG] CheckExp: mod-1-(mod-1)/d [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12987,10 +13059,10 @@ dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: mod-1 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -12999,7 +13071,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -13011,7 +13083,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -13022,21 +13094,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: d [DEBUG] visitPrimaryExp: d SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13044,7 +13116,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: multiply(a[i],power(d,mod-2)) @@ -13059,7 +13131,7 @@ SymbolTable::lookup: found multiply in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13067,7 +13139,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: power(d,mod-2) @@ -13082,15 +13154,15 @@ SymbolTable::lookup: found power in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found d in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = d, sym->kind = 0 绑定变量: d -> VarDefContext -CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x5650e09343b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: d, sym->kind: 0, sym->var_def_ctx: 0x55dd44ad83b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: mod-2 [DEBUG] visitUnaryExp: mod [DEBUG] visitPrimaryExp: mod -SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x5650e092ece0 +SymbolTable::lookup: found mod in scope level 1, kind=3, const_def_ctx=0x55dd44ad2ce0 CheckLValue: found sym->name = mod, sym->kind = 3 绑定常量: mod -> ConstDefContext -CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x5650e092ece0 +CheckLValue 绑定变量: mod, sym->kind: 3, sym->var_def_ctx: 0, sym->const_def_ctx: 0x55dd44ad2ce0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -13102,7 +13174,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -13110,7 +13182,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5650e099fdf0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55dd44b43df0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13133,14 +13205,14 @@ SymbolTable::lookup: found putarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5650e09944b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55dd44b384b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: m [DEBUG] visitPrimaryExp: m SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x5650e0995380, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x55dd44b39380, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13150,7 +13222,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x5650e0962040, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55dd44b06040, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -13170,11 +13242,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitCompUnit [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant mod -[DEBUG] visitConstDef: scalar constant mod [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant mod = 998244353 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -13183,22 +13251,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 d -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 d 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: d -[DEBUG] HandleGlobalVariable: 无初始化值 -[DEBUG] HandleGlobalVariable: 使用默认初始化值0 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 d -[DEBUG] HandleGlobalVariable: 全局变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理常量声明 -[DEBUG] visitConstDef: processing constant maxlen -[DEBUG] visitConstDef: scalar constant maxlen [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] visitConstDef: constant maxlen = 2097152 -[DEBUG] visitConstDef: scalar constant stored, no alloca created [DEBUG] visitDecl: 声明处理完成 [DEBUG] visitDecl: 开始处理声明 [DEBUG] visitDecl: 处理变量声明 @@ -13207,10 +13265,287 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 temp -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 temp 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 2097152 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: temp +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: b +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 b +[DEBUG] HandleGlobalVariable: 变量 b 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: b +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: c +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 c +[DEBUG] HandleGlobalVariable: 变量 c 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 2097152 +[DEBUG] HandleGlobalVariable: 创建全局数组: c +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: multiply +[DEBUG] visitFuncDef: 创建函数 multiply,返回类型: int,参数数量: 2 +[DEBUG] visitFuncDef: 函数对象地址: 0x55dd45b6b150 +[DEBUG] visitFuncDef: 为函数 multiply 添加参数 a,类型: int32 +[DEBUG] visitFuncDef: 参数 a 处理完成 +[DEBUG] visitFuncDef: 为函数 multiply 添加参数 b,类型: int32 +[DEBUG] visitFuncDef: 参数 b 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {if(b==0)return0;if(b==1)returna%mod;intcur=multiply(a,b/2);cur=(cur+cur)%mod;if(b%2==1)return(cur+a)%mod;elsereturncur;} +[DEBUG IRGEN] visitBlockItem: if(b==0)return0; +[DEBUG IRGEN] visitStmt: if(b==0)return0; +[DEBUG IRGEN] HandleIfStmt: if(b==0)return0; +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: entry +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] visitEqExp: left=0x55dd45b6ba80, type=int, right=0x55dd44a9d560, type=int +[DEBUG IF] Creating condbr: %t3 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: return0; +[DEBUG IRGEN] HandleReturnStmt: return0; +[DEBUG IRGEN] EvalExpr: 0 +[DEBUG IRGEN] visitAddExp: 0 +[DEBUG IRGEN] visitMulExp: 0 +[DEBUG IRGEN] visitPrimaryExp: 0 +[DEBUG] visitPrimaryExp +[DEBUG] EvalExpr: success, result = 0x55dd44a9d560 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: if(b==1)returna%mod; +[DEBUG IRGEN] visitStmt: if(b==1)returna%mod; +[DEBUG IRGEN] HandleIfStmt: if(b==1)returna%mod; +[DEBUG IF] thenBlock: then +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: merge +[DEBUG IRGEN] visitAddExp: b +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55dd45b6bff0 +[DEBUG] visitEqExp: left=0x55dd45b6bf30, type=int, right=0x55dd45b6bff0, type=int +[DEBUG IF] Creating condbr: %t5 -> then, merge +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: returna%mod; +[DEBUG IRGEN] HandleReturnStmt: returna%mod; +[DEBUG IRGEN] EvalExpr: a%mod +[DEBUG IRGEN] visitAddExp: a%mod +[DEBUG IRGEN] visitMulExp: a%mod +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6c270, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6c2f0 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=0 +[DEBUG IF] No else, setting insert point to merge block: merge +[DEBUG IF] Final insert block: merge +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: intcur=multiply(a,b/2); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: cur +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 cur +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: multiply(a,b/2) +[DEBUG IRGEN] visitAddExp: multiply(a,b/2) +[DEBUG IRGEN] visitMulExp: multiply(a,b/2) +[DEBUG IRGEN] visitCallExp: 调用函数 multiply +[DEBUG IRGEN] EvalExpr: a +[DEBUG IRGEN] visitAddExp: a +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] EvalExpr: success, result = 0x55dd45b6c5d0 +[DEBUG IRGEN] EvalExpr: b/2 +[DEBUG IRGEN] visitAddExp: b/2 +[DEBUG IRGEN] visitMulExp: b/2 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55dd45b6c780 +[DEBUG] visitMulExp: left=0x55dd45b6c6e0, type=int, right=0x55dd45b6c780, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6c7e0 +[DEBUG IRGEN] visitCallExp: 收集到 2 个参数 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x55dd45b6c8e0 +[DEBUG] EvalExpr: success, result = 0x55dd45b6c8e0 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: cur=(cur+cur)%mod; +[DEBUG IRGEN] visitStmt: cur=(cur+cur)%mod; +[DEBUG IRGEN] HandleAssignStmt: cur=(cur+cur)%mod; +[DEBUG IRGEN] EvalExpr: (cur+cur)%mod +[DEBUG IRGEN] visitAddExp: (cur+cur)%mod +[DEBUG IRGEN] visitMulExp: (cur+cur)%mod +[DEBUG IRGEN] visitMulExp: (cur+cur) +[DEBUG IRGEN] visitPrimaryExp: (cur+cur) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: cur+cur +[DEBUG IRGEN] visitAddExp: cur+cur +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG] visitAddExp: left=0x55dd45b6cad0, type=int, right=0x55dd45b6cb50, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6cc40 +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6cc40, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6cdb0 +[DEBUG] HandleAssignStmt: assigning to cur +[DEBUG] HandleAssignStmt: found in storage_map_ for cur, ptr = 0x55dd45b6c490 +[DEBUG] HandleAssignStmt: scalar assignment to cur, ptr = 0x55dd45b6c490, rhs = 0x55dd45b6cdb0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: merge +[DEBUG IRGEN] visitBlockItem: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IRGEN] visitStmt: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IRGEN] HandleIfStmt: if(b%2==1)return(cur+a)%mod;elsereturncur; +[DEBUG IF] thenBlock: then +[DEBUG IF] elseBlock: else +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: merge +[DEBUG IRGEN] visitAddExp: b%2 +[DEBUG IRGEN] visitMulExp: b%2 +[DEBUG IRGEN] visitMulExp: b +[DEBUG IRGEN] visitPrimaryExp: b +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: b +[DEBUG IRGEN] visitPrimaryExp: 2 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 2 created as 0x55dd45b6c780 +[DEBUG] visitMulExp: left=0x55dd45b6d180, type=int, right=0x55dd45b6c780, type=int +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x55dd45b6bff0 +[DEBUG] visitEqExp: left=0x55dd45b6d2d0, type=int, right=0x55dd45b6bff0, type=int +[DEBUG IF] Creating condbr: %t19 -> then, else +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: return(cur+a)%mod; +[DEBUG IRGEN] HandleReturnStmt: return(cur+a)%mod; +[DEBUG IRGEN] EvalExpr: (cur+a)%mod +[DEBUG IRGEN] visitAddExp: (cur+a)%mod +[DEBUG IRGEN] visitMulExp: (cur+a)%mod +[DEBUG IRGEN] visitMulExp: (cur+a) +[DEBUG IRGEN] visitPrimaryExp: (cur+a) +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting parenthesized expression +[DEBUG IRGEN] EvalExpr: cur+a +[DEBUG IRGEN] visitAddExp: cur+a +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG IRGEN] visitMulExp: a +[DEBUG IRGEN] visitPrimaryExp: a +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: a +[DEBUG] visitAddExp: left=0x55dd45b6d570, type=int, right=0x55dd45b6d700, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6d7c0 +[DEBUG IRGEN] visitPrimaryExp: mod +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: mod +[DEBUG] visitLVal: constant mod +[DEBUG] visitMulExp: left=0x55dd45b6d7c0, type=int, right=0x55dd44b58bd0, type=int +[DEBUG] EvalExpr: success, result = 0x55dd45b6d880 +[DEBUG IF] then branch terminated: 1 +[DEBUG IF] then block has terminator: 1 +[DEBUG IF] Generating else branch in block: else +[DEBUG IRGEN] visitStmt: returncur; +[DEBUG IRGEN] HandleReturnStmt: returncur; +[DEBUG IRGEN] EvalExpr: cur +[DEBUG IRGEN] visitAddExp: cur +[DEBUG IRGEN] visitMulExp: cur +[DEBUG IRGEN] visitPrimaryExp: cur +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: cur +[DEBUG] EvalExpr: success, result = 0x55dd45b6d9e0 +[DEBUG IF] else branch terminated: 1 +[DEBUG IF] else block has terminator: 1 +[DEBUG IF] thenTerminated=1, elseTerminated=1 +[DEBUG IF] Both branches terminated, creating new block: after.if +[DEBUG IF] Final insert block: after.if +[DEBUG] current insert block: after.if +[ERROR] visitFuncDef: 验证函数结构失败: [irgen] 基本块未正确终结: merge +[error] [irgen] 基本块未正确终结: merge ========== test/test_case/performance/gameoflife-oscillator.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -13278,7 +13613,7 @@ SymbolTable::addSymbol: stored steps with kind=0, const_def_ctx=0 SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -13289,7 +13624,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -13300,7 +13635,7 @@ SymbolTable::lookup: found getint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: getint() [DEBUG] visitUnaryExp: getint() @@ -13331,21 +13666,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -13356,14 +13691,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: get base_type: int is_array: 0 dim_count: 0 @@ -13380,7 +13715,7 @@ SymbolTable::addSymbol: stored get with kind=0, const_def_ctx=0 SymbolTable::lookup: found get in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = get, sym->kind = 0 绑定变量: get -> VarDefContext -CheckLValue 绑定变量: get, sym->kind: 0, sym->var_def_ctx: 0x563b876801e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: get, sym->kind: 0, sym->var_def_ctx: 0x5627859d61e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 35 [DEBUG] visitPrimaryExp: 35 @@ -13389,7 +13724,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -13397,7 +13732,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13405,7 +13740,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -13416,7 +13751,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -13424,7 +13759,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13432,7 +13767,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -13442,7 +13777,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -13450,7 +13785,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b87676540, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859cc540, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13464,7 +13799,7 @@ SymbolTable::lookup: found getch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -13472,7 +13807,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b87676d20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859ccd20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13496,21 +13831,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -13521,14 +13856,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -13537,7 +13872,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -13545,7 +13880,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13553,7 +13888,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -13586,7 +13921,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -13594,7 +13929,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876920d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859e80d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13613,7 +13948,7 @@ SymbolTable::lookup: found putch in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -13621,7 +13956,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876929b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859e89b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13645,21 +13980,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -13670,21 +14005,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -13692,7 +14027,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13700,7 +14035,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sheet2[j][i] @@ -13709,7 +14044,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 2 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -13717,7 +14052,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -13725,14 +14060,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -13740,7 +14075,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b8769c8e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859f28e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13748,7 +14083,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -13756,7 +14091,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b8769d220, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859f3220, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13784,21 +14119,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: height [DEBUG] visitPrimaryExp: height SymbolTable::lookup: found height in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = height, sym->kind = 0 绑定变量: height -> VarDefContext -CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x563b8766ba20, sym->const_def_ctx: 0 +CheckLValue 绑定变量: height, sym->kind: 0, sym->var_def_ctx: 0x5627859c1a20, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -13809,14 +14144,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: width [DEBUG] visitPrimaryExp: width SymbolTable::lookup: found width in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = width, sym->kind = 0 绑定变量: width -> VarDefContext -CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x563b8766b3c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: width, sym->kind: 0, sym->var_def_ctx: 0x5627859c13c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] CheckVarDef: alive_count base_type: int is_array: 0 dim_count: 0 @@ -13834,7 +14169,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13844,7 +14179,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13862,7 +14197,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13872,7 +14207,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: source[j-1][i+1] @@ -13888,7 +14223,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13898,7 +14233,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13916,7 +14251,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i-1 [DEBUG] visitUnaryExp: i @@ -13924,7 +14259,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13942,7 +14277,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -13950,7 +14285,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13968,7 +14303,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13978,7 +14313,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -13996,7 +14331,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14006,7 +14341,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: source[j+1][i+1] @@ -14022,7 +14357,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14032,7 +14367,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14053,7 +14388,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -14061,7 +14396,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: 1 @@ -14071,7 +14406,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = alive_count, sym->kind = 0 绑定变量: alive_count -> VarDefContext -CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x563b876a96e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5627859ff6e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -14088,7 +14423,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -14096,7 +14431,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -14108,7 +14443,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found alive_count in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = alive_count, sym->kind = 0 绑定变量: alive_count -> VarDefContext -CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x563b876a96e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: alive_count, sym->kind: 0, sym->var_def_ctx: 0x5627859ff6e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -14125,7 +14460,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -14133,7 +14468,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -14152,7 +14487,7 @@ dim_count: 2, subscript_count: 2 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -14160,7 +14495,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -14170,7 +14505,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -14178,7 +14513,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x563b876a5d00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5627859fbd00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14186,7 +14521,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -14194,7 +14529,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x563b876a6610, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5627859fc610, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14218,7 +14553,7 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -14229,7 +14564,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14247,7 +14582,7 @@ SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: sheet2 @@ -14256,7 +14591,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -14265,7 +14600,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -14284,7 +14619,7 @@ SymbolTable::lookup: found step in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found sheet2 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet2, sym->kind = 0 绑定变量: sheet2 -> VarDefContext -CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x563b87663170, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet2, sym->kind: 0, sym->var_def_ctx: 0x5627859b9170, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: sheet1 @@ -14293,7 +14628,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found sheet1 in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sheet1, sym->kind = 0 绑定变量: sheet1 -> VarDefContext -CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x563b87660b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sheet1, sym->kind: 0, sym->var_def_ctx: 0x5627859b6b90, sym->const_def_ctx: 0 dim_count: 2, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -14302,7 +14637,7 @@ dim_count: 2, subscript_count: 0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -14311,7 +14646,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: steps-1 [DEBUG] visitUnaryExp: steps @@ -14319,7 +14654,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found steps in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = steps, sym->kind = 0 绑定变量: steps -> VarDefContext -CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x563b8766bf70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: steps, sym->kind: 0, sym->var_def_ctx: 0x5627859c1f70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14335,7 +14670,7 @@ SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found active in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = active, sym->kind = 0 绑定变量: active -> VarDefContext -CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x563b876647e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: active, sym->kind: 0, sym->var_def_ctx: 0x5627859ba7e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -14372,11 +14707,338 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 sheet1 -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 sheet1 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 250000 +[DEBUG] HandleGlobalVariable: 创建全局数组: sheet1 +[DEBUG] HandleGlobalVariable: 处理初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: 0 +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: sheet2 +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 sheet2 +[DEBUG] HandleGlobalVariable: 变量 sheet2 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 250000 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: sheet2 +[DEBUG] HandleGlobalVariable: 处理初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 空初始化列表 +[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: 0 +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: active +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 active +[DEBUG] HandleGlobalVariable: 变量 active 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: active +[DEBUG] HandleGlobalVariable: 处理标量初始化值 +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: width +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 width +[DEBUG] HandleGlobalVariable: 变量 width 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: width +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: height +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 height +[DEBUG] HandleGlobalVariable: 变量 height 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: height +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: steps +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 steps +[DEBUG] HandleGlobalVariable: 变量 steps 是 int 类型 +[DEBUG] HandleGlobalVariable: 创建全局标量变量: steps +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: read_map +[DEBUG] visitFuncDef: 创建函数 read_map,返回类型: void,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x562785c1cdc0 +[DEBUG] visitFuncDef: 开始生成函数体 +[DEBUG IRGEN] visitBlock: {width=getint();height=getint();steps=getint();getch();inti=1;intj=1;while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;}} +[DEBUG IRGEN] visitBlockItem: width=getint(); +[DEBUG IRGEN] visitStmt: width=getint(); +[DEBUG IRGEN] HandleAssignStmt: width=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d730 +[DEBUG] EvalExpr: success, result = 0x562785c1d730 +[DEBUG] HandleAssignStmt: assigning to width +[DEBUG] HandleAssignStmt: found in global_map_ for width, ptr = 0x562785c1cab0 +[DEBUG] HandleAssignStmt: scalar assignment to width, ptr = 0x562785c1cab0, rhs = 0x562785c1d730 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: height=getint(); +[DEBUG IRGEN] visitStmt: height=getint(); +[DEBUG IRGEN] HandleAssignStmt: height=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d7d0 +[DEBUG] EvalExpr: success, result = 0x562785c1d7d0 +[DEBUG] HandleAssignStmt: assigning to height +[DEBUG] HandleAssignStmt: found in global_map_ for height, ptr = 0x562785c1cb80 +[DEBUG] HandleAssignStmt: scalar assignment to height, ptr = 0x562785c1cb80, rhs = 0x562785c1d7d0 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: steps=getint(); +[DEBUG IRGEN] visitStmt: steps=getint(); +[DEBUG IRGEN] HandleAssignStmt: steps=getint(); +[DEBUG IRGEN] EvalExpr: getint() +[DEBUG IRGEN] visitAddExp: getint() +[DEBUG IRGEN] visitMulExp: getint() +[DEBUG IRGEN] visitCallExp: 调用函数 getint +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1d910 +[DEBUG] EvalExpr: success, result = 0x562785c1d910 +[DEBUG] HandleAssignStmt: assigning to steps +[DEBUG] HandleAssignStmt: found in global_map_ for steps, ptr = 0x562785c1cc90 +[DEBUG] HandleAssignStmt: scalar assignment to steps, ptr = 0x562785c1cc90, rhs = 0x562785c1d910 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: getch(); +[DEBUG IRGEN] visitStmt: getch(); +[DEBUG IRGEN] EvalExpr: getch() +[DEBUG IRGEN] visitAddExp: getch() +[DEBUG IRGEN] visitMulExp: getch() +[DEBUG IRGEN] visitCallExp: 调用函数 getch +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1dae0 +[DEBUG] EvalExpr: success, result = 0x562785c1dae0 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: inti=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: i +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 i +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: intj=1; +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: j +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 j +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: entry +[DEBUG IRGEN] visitBlockItem: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitStmt: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] HandleWhileStmt: while(j<=height){i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG WHILE] Current insert block before while: entry +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 1 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG IRGEN] visitAddExp: height +[DEBUG IRGEN] visitMulExp: height +[DEBUG IRGEN] visitPrimaryExp: height +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: height +[DEBUG] visitRelExp: left=0x562785c1df20, type=int, right=0x562785c1e2f0, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitBlock: {i=1;while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;}getch();j=j+1;} +[DEBUG IRGEN] visitBlockItem: i=1; +[DEBUG IRGEN] visitStmt: i=1; +[DEBUG IRGEN] HandleAssignStmt: i=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] HandleAssignStmt: assigning to i +[DEBUG] HandleAssignStmt: found in storage_map_ for i, ptr = 0x562785c1dba0 +[DEBUG] HandleAssignStmt: scalar assignment to i, ptr = 0x562785c1dba0, rhs = 0x562785c1ca10 +[DEBUG] Is int32: 0 +[DEBUG] Is float: 0 +[DEBUG] Is ptr int32: 1 +[DEBUG] Is ptr float: 0 +[DEBUG] Is array: 0 +[DEBUG] Value is int32: 1 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitStmt: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] HandleWhileStmt: while(i<=width){intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG WHILE] Current insert block before while: while.body +[DEBUG WHILE] condBlock: while.cond +[DEBUG WHILE] bodyBlock: while.body +[DEBUG WHILE] exitBlock: while.exit +[DEBUG WHILE] Adding br to condBlock from current block +[DEBUG WHILE] loopStack size: 2 +[DEBUG WHILE] Generating condition in block: while.cond +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG IRGEN] visitAddExp: width +[DEBUG IRGEN] visitMulExp: width +[DEBUG IRGEN] visitPrimaryExp: width +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: width +[DEBUG] visitRelExp: left=0x562785c1e900, type=int, right=0x562785c1e980, type=int +[DEBUG WHILE] condBlock has terminator: 1 +[DEBUG WHILE] Generating body in block: while.body +[DEBUG IRGEN] visitStmt: {intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitBlock: {intget=getch();if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;}i=i+1;} +[DEBUG IRGEN] visitBlockItem: intget=getch(); +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: get +[DEBUG] visitVarDef: 是否为数组: 否 +[DEBUG] visitVarDef: 处理局部变量 +[DEBUG] HandleLocalVariable: 开始处理局部变量 get +[DEBUG] visitInitVal: 开始处理初始化值 +[DEBUG] visitInitVal: 处理表达式初始化 +[DEBUG IRGEN] EvalExpr: getch() +[DEBUG IRGEN] visitAddExp: getch() +[DEBUG IRGEN] visitMulExp: getch() +[DEBUG IRGEN] visitCallExp: 调用函数 getch +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562785c1ed00 +[DEBUG] EvalExpr: success, result = 0x562785c1ed00 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] current insert block: while.body +[DEBUG IRGEN] visitBlockItem: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IRGEN] visitStmt: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IRGEN] HandleIfStmt: if(get==35){sheet1[j][i]=1;}else{sheet1[j][i]=0;} +[DEBUG IF] thenBlock: then +[DEBUG IF] elseBlock: else +[DEBUG IF] mergeBlock: merge +[DEBUG IF] current insert block before cond: while.body +[DEBUG IRGEN] visitAddExp: get +[DEBUG IRGEN] visitMulExp: get +[DEBUG IRGEN] visitPrimaryExp: get +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: get +[DEBUG IRGEN] visitAddExp: 35 +[DEBUG IRGEN] visitMulExp: 35 +[DEBUG IRGEN] visitPrimaryExp: 35 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 35 created as 0x562785c1d570 +[DEBUG] visitEqExp: left=0x562785c1f160, type=int, right=0x562785c1d570, type=int +[DEBUG IF] Creating condbr: %t15 -> then, else +[DEBUG IF] Generating then branch in block: then +[DEBUG IRGEN] visitStmt: {sheet1[j][i]=1;} +[DEBUG IRGEN] visitBlock: {sheet1[j][i]=1;} +[DEBUG IRGEN] visitBlockItem: sheet1[j][i]=1; +[DEBUG IRGEN] visitStmt: sheet1[j][i]=1; +[DEBUG IRGEN] HandleAssignStmt: sheet1[j][i]=1; +[DEBUG IRGEN] EvalExpr: 1 +[DEBUG IRGEN] visitAddExp: 1 +[DEBUG IRGEN] visitMulExp: 1 +[DEBUG IRGEN] visitPrimaryExp: 1 +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: constant int 1 created as 0x562785c1ca10 +[DEBUG] EvalExpr: success, result = 0x562785c1ca10 +[DEBUG] HandleAssignStmt: assigning to sheet1 +[DEBUG] HandleAssignStmt: found in global_map_ for sheet1, ptr = 0x562785a34330 +[DEBUG IRGEN] EvalExpr: j +[DEBUG IRGEN] visitAddExp: j +[DEBUG IRGEN] visitMulExp: j +[DEBUG IRGEN] visitPrimaryExp: j +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: j +[DEBUG] EvalExpr: success, result = 0x562785c1f420 +[DEBUG IRGEN] EvalExpr: i +[DEBUG IRGEN] visitAddExp: i +[DEBUG IRGEN] visitMulExp: i +[DEBUG IRGEN] visitPrimaryExp: i +[DEBUG] visitPrimaryExp +[DEBUG] visitPrimaryExp: visiting lVal +[DEBUG] visitLVal: i +[DEBUG] EvalExpr: success, result = 0x562785c1f570 +[error] [ir] StoreInst 当前只支持写入 i32* ========== test/test_case/performance/if-combine3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -14437,7 +15099,7 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -14446,7 +15108,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: m [DEBUG] visitUnaryExp: m @@ -14454,7 +15116,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 0 @@ -14464,7 +15126,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: m+1 [DEBUG] visitUnaryExp: m @@ -14472,7 +15134,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37cbca00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55a4da00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14482,7 +15144,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -14497,7 +15159,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -14506,7 +15168,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 1 [DEBUG] visitUnaryExp: 1 @@ -14521,7 +15183,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -14530,7 +15192,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 2 [DEBUG] visitUnaryExp: 2 @@ -14545,7 +15207,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 3 [DEBUG] visitPrimaryExp: 3 @@ -14554,7 +15216,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 3 [DEBUG] visitUnaryExp: 3 @@ -14569,7 +15231,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 4 [DEBUG] visitPrimaryExp: 4 @@ -14578,7 +15240,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 4 [DEBUG] visitUnaryExp: 4 @@ -14593,7 +15255,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 5 [DEBUG] visitPrimaryExp: 5 @@ -14602,7 +15264,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 5 [DEBUG] visitUnaryExp: 5 @@ -14617,7 +15279,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 6 [DEBUG] visitPrimaryExp: 6 @@ -14626,7 +15288,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 6 [DEBUG] visitUnaryExp: 6 @@ -14641,7 +15303,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 7 [DEBUG] visitPrimaryExp: 7 @@ -14650,7 +15312,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 7 [DEBUG] visitUnaryExp: 7 @@ -14665,7 +15327,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 8 [DEBUG] visitPrimaryExp: 8 @@ -14674,7 +15336,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 8 [DEBUG] visitUnaryExp: 8 @@ -14689,7 +15351,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 9 [DEBUG] visitPrimaryExp: 9 @@ -14698,7 +15360,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 9 [DEBUG] visitUnaryExp: 9 @@ -14713,7 +15375,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -14722,7 +15384,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 10 [DEBUG] visitUnaryExp: 10 @@ -14737,7 +15399,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11 [DEBUG] visitPrimaryExp: 11 @@ -14746,7 +15408,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 11 [DEBUG] visitUnaryExp: 11 @@ -14761,7 +15423,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 12 [DEBUG] visitPrimaryExp: 12 @@ -14770,7 +15432,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 12 [DEBUG] visitUnaryExp: 12 @@ -14785,7 +15447,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 13 [DEBUG] visitPrimaryExp: 13 @@ -14794,7 +15456,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 13 [DEBUG] visitUnaryExp: 13 @@ -14809,7 +15471,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 14 [DEBUG] visitPrimaryExp: 14 @@ -14818,7 +15480,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 14 [DEBUG] visitUnaryExp: 14 @@ -14833,7 +15495,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 15 [DEBUG] visitPrimaryExp: 15 @@ -14842,7 +15504,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 15 [DEBUG] visitUnaryExp: 15 @@ -14857,7 +15519,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 16 [DEBUG] visitPrimaryExp: 16 @@ -14866,7 +15528,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 16 [DEBUG] visitUnaryExp: 16 @@ -14881,7 +15543,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 17 [DEBUG] visitPrimaryExp: 17 @@ -14890,7 +15552,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 17 [DEBUG] visitUnaryExp: 17 @@ -14905,7 +15567,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 18 [DEBUG] visitPrimaryExp: 18 @@ -14914,7 +15576,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 18 [DEBUG] visitUnaryExp: 18 @@ -14929,7 +15591,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 19 [DEBUG] visitPrimaryExp: 19 @@ -14938,7 +15600,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 19 [DEBUG] visitUnaryExp: 19 @@ -14953,7 +15615,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 20 [DEBUG] visitPrimaryExp: 20 @@ -14962,7 +15624,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 20 [DEBUG] visitUnaryExp: 20 @@ -14977,7 +15639,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 21 [DEBUG] visitPrimaryExp: 21 @@ -14986,7 +15648,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 21 [DEBUG] visitUnaryExp: 21 @@ -15001,7 +15663,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 22 [DEBUG] visitPrimaryExp: 22 @@ -15010,7 +15672,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 22 [DEBUG] visitUnaryExp: 22 @@ -15025,7 +15687,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 23 [DEBUG] visitPrimaryExp: 23 @@ -15034,7 +15696,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 23 [DEBUG] visitUnaryExp: 23 @@ -15049,7 +15711,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 24 [DEBUG] visitPrimaryExp: 24 @@ -15058,7 +15720,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 24 [DEBUG] visitUnaryExp: 24 @@ -15073,7 +15735,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 25 [DEBUG] visitPrimaryExp: 25 @@ -15082,7 +15744,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 25 [DEBUG] visitUnaryExp: 25 @@ -15097,7 +15759,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 26 [DEBUG] visitPrimaryExp: 26 @@ -15106,7 +15768,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 26 [DEBUG] visitUnaryExp: 26 @@ -15121,7 +15783,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 27 [DEBUG] visitPrimaryExp: 27 @@ -15130,7 +15792,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 27 [DEBUG] visitUnaryExp: 27 @@ -15145,7 +15807,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 28 [DEBUG] visitPrimaryExp: 28 @@ -15154,7 +15816,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 28 [DEBUG] visitUnaryExp: 28 @@ -15169,7 +15831,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 29 [DEBUG] visitPrimaryExp: 29 @@ -15178,7 +15840,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 29 [DEBUG] visitUnaryExp: 29 @@ -15193,7 +15855,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 30 [DEBUG] visitPrimaryExp: 30 @@ -15202,7 +15864,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 30 [DEBUG] visitUnaryExp: 30 @@ -15217,7 +15879,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 31 [DEBUG] visitPrimaryExp: 31 @@ -15226,7 +15888,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 31 [DEBUG] visitUnaryExp: 31 @@ -15241,7 +15903,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 32 [DEBUG] visitPrimaryExp: 32 @@ -15250,7 +15912,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 32 [DEBUG] visitUnaryExp: 32 @@ -15265,7 +15927,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 33 [DEBUG] visitPrimaryExp: 33 @@ -15274,7 +15936,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 33 [DEBUG] visitUnaryExp: 33 @@ -15289,7 +15951,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 34 [DEBUG] visitPrimaryExp: 34 @@ -15298,7 +15960,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 34 [DEBUG] visitUnaryExp: 34 @@ -15313,7 +15975,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 35 [DEBUG] visitPrimaryExp: 35 @@ -15322,7 +15984,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 35 [DEBUG] visitUnaryExp: 35 @@ -15337,7 +15999,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 36 [DEBUG] visitPrimaryExp: 36 @@ -15346,7 +16008,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 36 [DEBUG] visitUnaryExp: 36 @@ -15361,7 +16023,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 37 [DEBUG] visitPrimaryExp: 37 @@ -15370,7 +16032,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 37 [DEBUG] visitUnaryExp: 37 @@ -15385,7 +16047,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 38 [DEBUG] visitPrimaryExp: 38 @@ -15394,7 +16056,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 38 [DEBUG] visitUnaryExp: 38 @@ -15409,7 +16071,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 39 [DEBUG] visitPrimaryExp: 39 @@ -15418,7 +16080,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 39 [DEBUG] visitUnaryExp: 39 @@ -15433,7 +16095,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 40 [DEBUG] visitPrimaryExp: 40 @@ -15442,7 +16104,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 40 [DEBUG] visitUnaryExp: 40 @@ -15457,7 +16119,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 41 [DEBUG] visitPrimaryExp: 41 @@ -15466,7 +16128,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 41 [DEBUG] visitUnaryExp: 41 @@ -15481,7 +16143,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 42 [DEBUG] visitPrimaryExp: 42 @@ -15490,7 +16152,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 42 [DEBUG] visitUnaryExp: 42 @@ -15505,7 +16167,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 43 [DEBUG] visitPrimaryExp: 43 @@ -15514,7 +16176,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 43 [DEBUG] visitUnaryExp: 43 @@ -15529,7 +16191,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 44 [DEBUG] visitPrimaryExp: 44 @@ -15538,7 +16200,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 44 [DEBUG] visitUnaryExp: 44 @@ -15553,7 +16215,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 45 [DEBUG] visitPrimaryExp: 45 @@ -15562,7 +16224,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 45 [DEBUG] visitUnaryExp: 45 @@ -15577,7 +16239,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 46 [DEBUG] visitPrimaryExp: 46 @@ -15586,7 +16248,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 46 [DEBUG] visitUnaryExp: 46 @@ -15601,7 +16263,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 47 [DEBUG] visitPrimaryExp: 47 @@ -15610,7 +16272,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 47 [DEBUG] visitUnaryExp: 47 @@ -15625,7 +16287,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 48 [DEBUG] visitPrimaryExp: 48 @@ -15634,7 +16296,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 48 [DEBUG] visitUnaryExp: 48 @@ -15649,7 +16311,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 49 [DEBUG] visitPrimaryExp: 49 @@ -15658,7 +16320,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 49 [DEBUG] visitUnaryExp: 49 @@ -15673,7 +16335,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 50 [DEBUG] visitPrimaryExp: 50 @@ -15682,7 +16344,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 50 [DEBUG] visitUnaryExp: 50 @@ -15697,7 +16359,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 51 [DEBUG] visitPrimaryExp: 51 @@ -15706,7 +16368,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 51 [DEBUG] visitUnaryExp: 51 @@ -15721,7 +16383,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 52 [DEBUG] visitPrimaryExp: 52 @@ -15730,7 +16392,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 52 [DEBUG] visitUnaryExp: 52 @@ -15745,7 +16407,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 53 [DEBUG] visitPrimaryExp: 53 @@ -15754,7 +16416,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 53 [DEBUG] visitUnaryExp: 53 @@ -15769,7 +16431,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 54 [DEBUG] visitPrimaryExp: 54 @@ -15778,7 +16440,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 54 [DEBUG] visitUnaryExp: 54 @@ -15793,7 +16455,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 55 [DEBUG] visitPrimaryExp: 55 @@ -15802,7 +16464,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 55 [DEBUG] visitUnaryExp: 55 @@ -15817,7 +16479,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 56 [DEBUG] visitPrimaryExp: 56 @@ -15826,7 +16488,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 56 [DEBUG] visitUnaryExp: 56 @@ -15841,7 +16503,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 57 [DEBUG] visitPrimaryExp: 57 @@ -15850,7 +16512,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 57 [DEBUG] visitUnaryExp: 57 @@ -15865,7 +16527,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 58 [DEBUG] visitPrimaryExp: 58 @@ -15874,7 +16536,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 58 [DEBUG] visitUnaryExp: 58 @@ -15889,7 +16551,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 59 [DEBUG] visitPrimaryExp: 59 @@ -15898,7 +16560,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 59 [DEBUG] visitUnaryExp: 59 @@ -15913,7 +16575,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 60 [DEBUG] visitPrimaryExp: 60 @@ -15922,7 +16584,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 60 [DEBUG] visitUnaryExp: 60 @@ -15937,7 +16599,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 61 [DEBUG] visitPrimaryExp: 61 @@ -15946,7 +16608,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 61 [DEBUG] visitUnaryExp: 61 @@ -15961,7 +16623,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 62 [DEBUG] visitPrimaryExp: 62 @@ -15970,7 +16632,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 62 [DEBUG] visitUnaryExp: 62 @@ -15985,7 +16647,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 63 [DEBUG] visitPrimaryExp: 63 @@ -15994,7 +16656,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 63 [DEBUG] visitUnaryExp: 63 @@ -16009,7 +16671,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 64 [DEBUG] visitPrimaryExp: 64 @@ -16018,7 +16680,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 64 [DEBUG] visitUnaryExp: 64 @@ -16033,7 +16695,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 65 [DEBUG] visitPrimaryExp: 65 @@ -16042,7 +16704,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 65 [DEBUG] visitUnaryExp: 65 @@ -16057,7 +16719,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 66 [DEBUG] visitPrimaryExp: 66 @@ -16066,7 +16728,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 66 [DEBUG] visitUnaryExp: 66 @@ -16081,7 +16743,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 67 [DEBUG] visitPrimaryExp: 67 @@ -16090,7 +16752,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 67 [DEBUG] visitUnaryExp: 67 @@ -16105,7 +16767,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 68 [DEBUG] visitPrimaryExp: 68 @@ -16114,7 +16776,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 68 [DEBUG] visitUnaryExp: 68 @@ -16129,7 +16791,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 69 [DEBUG] visitPrimaryExp: 69 @@ -16138,7 +16800,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 69 [DEBUG] visitUnaryExp: 69 @@ -16153,7 +16815,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 70 [DEBUG] visitPrimaryExp: 70 @@ -16162,7 +16824,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 70 [DEBUG] visitUnaryExp: 70 @@ -16177,7 +16839,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 71 [DEBUG] visitPrimaryExp: 71 @@ -16186,7 +16848,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 71 [DEBUG] visitUnaryExp: 71 @@ -16201,7 +16863,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 72 [DEBUG] visitPrimaryExp: 72 @@ -16210,7 +16872,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 72 [DEBUG] visitUnaryExp: 72 @@ -16225,7 +16887,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 73 [DEBUG] visitPrimaryExp: 73 @@ -16234,7 +16896,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 73 [DEBUG] visitUnaryExp: 73 @@ -16249,7 +16911,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 74 [DEBUG] visitPrimaryExp: 74 @@ -16258,7 +16920,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 74 [DEBUG] visitUnaryExp: 74 @@ -16273,7 +16935,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 75 [DEBUG] visitPrimaryExp: 75 @@ -16282,7 +16944,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 75 [DEBUG] visitUnaryExp: 75 @@ -16297,7 +16959,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 76 [DEBUG] visitPrimaryExp: 76 @@ -16306,7 +16968,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 76 [DEBUG] visitUnaryExp: 76 @@ -16321,7 +16983,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 77 [DEBUG] visitPrimaryExp: 77 @@ -16330,7 +16992,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 77 [DEBUG] visitUnaryExp: 77 @@ -16345,7 +17007,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 78 [DEBUG] visitPrimaryExp: 78 @@ -16354,7 +17016,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 78 [DEBUG] visitUnaryExp: 78 @@ -16369,7 +17031,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 79 [DEBUG] visitPrimaryExp: 79 @@ -16378,7 +17040,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 79 [DEBUG] visitUnaryExp: 79 @@ -16393,7 +17055,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 80 [DEBUG] visitPrimaryExp: 80 @@ -16402,7 +17064,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 80 [DEBUG] visitUnaryExp: 80 @@ -16417,7 +17079,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 81 [DEBUG] visitPrimaryExp: 81 @@ -16426,7 +17088,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 81 [DEBUG] visitUnaryExp: 81 @@ -16441,7 +17103,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 82 [DEBUG] visitPrimaryExp: 82 @@ -16450,7 +17112,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 82 [DEBUG] visitUnaryExp: 82 @@ -16465,7 +17127,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 83 [DEBUG] visitPrimaryExp: 83 @@ -16474,7 +17136,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 83 [DEBUG] visitUnaryExp: 83 @@ -16489,7 +17151,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 84 [DEBUG] visitPrimaryExp: 84 @@ -16498,7 +17160,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 84 [DEBUG] visitUnaryExp: 84 @@ -16513,7 +17175,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 85 [DEBUG] visitPrimaryExp: 85 @@ -16522,7 +17184,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 85 [DEBUG] visitUnaryExp: 85 @@ -16537,7 +17199,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 86 [DEBUG] visitPrimaryExp: 86 @@ -16546,7 +17208,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 86 [DEBUG] visitUnaryExp: 86 @@ -16561,7 +17223,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 87 [DEBUG] visitPrimaryExp: 87 @@ -16570,7 +17232,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 87 [DEBUG] visitUnaryExp: 87 @@ -16585,7 +17247,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 88 [DEBUG] visitPrimaryExp: 88 @@ -16594,7 +17256,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 88 [DEBUG] visitUnaryExp: 88 @@ -16609,7 +17271,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 89 [DEBUG] visitPrimaryExp: 89 @@ -16618,7 +17280,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 89 [DEBUG] visitUnaryExp: 89 @@ -16633,7 +17295,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 90 [DEBUG] visitPrimaryExp: 90 @@ -16642,7 +17304,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 90 [DEBUG] visitUnaryExp: 90 @@ -16657,7 +17319,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 91 [DEBUG] visitPrimaryExp: 91 @@ -16666,7 +17328,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 91 [DEBUG] visitUnaryExp: 91 @@ -16681,7 +17343,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 92 [DEBUG] visitPrimaryExp: 92 @@ -16690,7 +17352,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 92 [DEBUG] visitUnaryExp: 92 @@ -16705,7 +17367,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 93 [DEBUG] visitPrimaryExp: 93 @@ -16714,7 +17376,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 93 [DEBUG] visitUnaryExp: 93 @@ -16729,7 +17391,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 94 [DEBUG] visitPrimaryExp: 94 @@ -16738,7 +17400,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 94 [DEBUG] visitUnaryExp: 94 @@ -16753,7 +17415,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 95 [DEBUG] visitPrimaryExp: 95 @@ -16762,7 +17424,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 95 [DEBUG] visitUnaryExp: 95 @@ -16777,7 +17439,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 96 [DEBUG] visitPrimaryExp: 96 @@ -16786,7 +17448,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 96 [DEBUG] visitUnaryExp: 96 @@ -16801,7 +17463,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 97 [DEBUG] visitPrimaryExp: 97 @@ -16810,7 +17472,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 97 [DEBUG] visitUnaryExp: 97 @@ -16825,7 +17487,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 98 [DEBUG] visitPrimaryExp: 98 @@ -16834,7 +17496,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 98 [DEBUG] visitUnaryExp: 98 @@ -16849,7 +17511,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x562c37cb7800, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x560d55a48800, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 99 [DEBUG] visitPrimaryExp: 99 @@ -16858,7 +17520,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: 99 [DEBUG] visitUnaryExp: 99 @@ -16871,7 +17533,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -16879,7 +17541,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x562c37cb6c00, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x560d55a47c00, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -16895,7 +17557,7 @@ SymbolTable::addSymbol: stored m with kind=0, const_def_ctx=0 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 100 [DEBUG] visitPrimaryExp: 100 @@ -16904,7 +17566,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+s[m] [DEBUG] visitUnaryExp: sum @@ -16912,14 +17574,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: s[m] [DEBUG] visitPrimaryExp: s[m] SymbolTable::lookup: found s in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = s, sym->kind = 0 绑定变量: s -> VarDefContext -CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x562c37cb8e70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: s, sym->kind: 0, sym->var_def_ctx: 0x560d55a49e70, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: m [DEBUG] visitUnaryExp: m @@ -16927,14 +17589,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: m+1 [DEBUG] visitUnaryExp: m @@ -16942,7 +17604,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found m in scope level 4, kind=0, const_def_ctx=0 CheckLValue: found sym->name = m, sym->kind = 0 绑定变量: m -> VarDefContext -CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x562c37d92510, sym->const_def_ctx: 0 +CheckLValue 绑定变量: m, sym->kind: 0, sym->var_def_ctx: 0x560d55b23510, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -16950,7 +17612,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum%65535 [DEBUG] visitUnaryExp: sum @@ -16958,7 +17620,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 65535 [DEBUG] visitPrimaryExp: 65535 @@ -16972,7 +17634,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x562c37cb3580, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x560d55a44580, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 func has_return: 1 return_type_is_void: 0 @@ -17010,7 +17672,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found loopcount in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = loopcount, sym->kind = 0 绑定变量: loopcount -> VarDefContext -CheckLValue 绑定变量: loopcount, sym->kind: 0, sym->var_def_ctx: 0x562c37d9b140, sym->const_def_ctx: 0 +CheckLValue 绑定变量: loopcount, sym->kind: 0, sym->var_def_ctx: 0x560d55b2c140, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -17045,6 +17707,11 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] 运行时库函数声明完成 [DEBUG IRGEN] visitCompUnit [DEBUG IRGEN] visitFuncDef: func +[DEBUG] visitFuncDef: 创建函数 func,返回类型: int,参数数量: 1 +[DEBUG] visitFuncDef: 函数对象地址: 0x560d55b3f320 +[DEBUG] visitFuncDef: 为函数 func 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {intsum=0;inti=200;intj=0;ints[100];intm=0;while(m<100){s[m]=0;m=m+1;}while(j1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;}returnsum;} [DEBUG IRGEN] visitBlockItem: intsum=0; [DEBUG] visitDecl: 开始处理声明 @@ -17054,9 +17721,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 sum -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 @@ -17064,10 +17728,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 sum,初始值 0x562c37dae750 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: inti=200; @@ -17078,9 +17739,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 i -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 200 @@ -17088,11 +17746,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 200 [DEBUG IRGEN] visitPrimaryExp: 200 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 200 created as 0x562c37daa200 -[DEBUG] EvalExpr: success, result = 0x562c37daa200 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 i,初始值 0x562c37daa200 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] visitPrimaryExp: constant int 200 created as 0x560d55b3b200 +[DEBUG] EvalExpr: success, result = 0x560d55b3b200 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intj=0; @@ -17103,9 +17758,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 j -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 @@ -17113,10 +17765,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 j,初始值 0x562c37dae750 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: ints[100]; @@ -17127,14 +17776,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 s -[DEBUG] HandleLocalVariable: 处理局部数组变量 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 -[DEBUG] HandleLocalVariable: 数组总大小: 100 -[DEBUG] HandleLocalVariable: 为数组元素分配存储空间 -[DEBUG] HandleLocalVariable: 无初始化,全部初始化为0 -[DEBUG] HandleLocalVariable: 存储数组引用 -[DEBUG] HandleLocalVariable: 创建局部数组 s,维度 100,总大小 100 -[DEBUG] HandleLocalVariable: 局部变量处理完成 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intm=0; @@ -17145,9 +17787,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 m -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 @@ -17155,10 +17794,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 m,初始值 0x562c37dae750 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: while(m<100){s[m]=0;m=m+1;} @@ -17181,7 +17817,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x562c37dd4500 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x560d55b651b0 +[DEBUG] visitRelExp: left=0x560d55b65130, type=int, right=0x560d55b651b0, type=int [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {s[m]=0;m=m+1;} @@ -17194,9 +17831,9 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: m [DEBUG IRGEN] visitAddExp: m [DEBUG IRGEN] visitMulExp: m @@ -17204,7 +17841,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: m -[DEBUG] EvalExpr: success, result = 0x562c37dd4770 +[DEBUG] EvalExpr: success, result = 0x560d55b65420 [DEBUG] current insert block: while.body [DEBUG IRGEN] visitBlockItem: m=m+1; [DEBUG IRGEN] visitStmt: m=m+1; @@ -17220,12 +17857,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 -[DEBUG] visitAddExp: left=0x562c37dd4970, right=0x562c37dd49f0 -[DEBUG] EvalExpr: success, result = 0x562c37dd4a50 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b65620, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b65700 [DEBUG] HandleAssignStmt: assigning to m -[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x562c37dd40d0 -[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x562c37dd40d0, rhs = 0x562c37dd4a50 +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x560d55b64e00 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x560d55b64e00, rhs = 0x560d55b65700 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -17262,6 +17899,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: n +[DEBUG] visitRelExp: left=0x560d55b659f0, type=int, right=0x560d55b65e90, type=int [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {if(i>1){s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}j=j+1;intm=0;while(m<100){sum=sum+s[m];m=m+1;}sum=sum%65535;} @@ -17282,7 +17920,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitRelExp: left=0x560d55b66130, type=int, right=0x560d55b656a0, type=int [DEBUG IF] Creating condbr: %t115 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[1]=1;if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17295,17 +17934,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 -[DEBUG] EvalExpr: success, result = 0x562c37dd49f0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] EvalExpr: success, result = 0x560d55b656a0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 1 [DEBUG IRGEN] visitAddExp: 1 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 -[DEBUG] EvalExpr: success, result = 0x562c37dd49f0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] EvalExpr: success, result = 0x560d55b656a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>2){s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17323,7 +17962,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] visitRelExp: left=0x560d55b66a20, type=int, right=0x560d55b65990, type=int [DEBUG IF] Creating condbr: %t118 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[2]=2;if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17336,17 +17976,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 -[DEBUG] EvalExpr: success, result = 0x562c37dd4d30 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] EvalExpr: success, result = 0x560d55b65990 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 2 [DEBUG IRGEN] visitAddExp: 2 [DEBUG IRGEN] visitMulExp: 2 [DEBUG IRGEN] visitPrimaryExp: 2 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 2 created as 0x562c37dd4d30 -[DEBUG] EvalExpr: success, result = 0x562c37dd4d30 +[DEBUG] visitPrimaryExp: constant int 2 created as 0x560d55b65990 +[DEBUG] EvalExpr: success, result = 0x560d55b65990 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>3){s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17364,7 +18004,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] visitRelExp: left=0x560d55b67120, type=int, right=0x560d55b66cb0, type=int [DEBUG IF] Creating condbr: %t121 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[3]=3;if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17377,17 +18018,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 -[DEBUG] EvalExpr: success, result = 0x562c37dd60c0 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] EvalExpr: success, result = 0x560d55b66cb0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 3 [DEBUG IRGEN] visitAddExp: 3 [DEBUG IRGEN] visitMulExp: 3 [DEBUG IRGEN] visitPrimaryExp: 3 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 3 created as 0x562c37dd60c0 -[DEBUG] EvalExpr: success, result = 0x562c37dd60c0 +[DEBUG] visitPrimaryExp: constant int 3 created as 0x560d55b66cb0 +[DEBUG] EvalExpr: success, result = 0x560d55b66cb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>4){s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17405,7 +18046,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] visitRelExp: left=0x560d55b67790, type=int, right=0x560d55b67400, type=int [DEBUG IF] Creating condbr: %t124 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[4]=4;if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17418,17 +18060,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 -[DEBUG] EvalExpr: success, result = 0x562c37dd6810 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] EvalExpr: success, result = 0x560d55b67400 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 4 [DEBUG IRGEN] visitAddExp: 4 [DEBUG IRGEN] visitMulExp: 4 [DEBUG IRGEN] visitPrimaryExp: 4 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 4 created as 0x562c37dd6810 -[DEBUG] EvalExpr: success, result = 0x562c37dd6810 +[DEBUG] visitPrimaryExp: constant int 4 created as 0x560d55b67400 +[DEBUG] EvalExpr: success, result = 0x560d55b67400 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>5){s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17446,7 +18088,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] visitRelExp: left=0x560d55b67fa0, type=int, right=0x560d55b67b40, type=int [DEBUG IF] Creating condbr: %t127 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[5]=5;if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17459,17 +18102,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 -[DEBUG] EvalExpr: success, result = 0x562c37dd6f50 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] EvalExpr: success, result = 0x560d55b67b40 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 5 [DEBUG IRGEN] visitAddExp: 5 [DEBUG IRGEN] visitMulExp: 5 [DEBUG IRGEN] visitPrimaryExp: 5 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 5 created as 0x562c37dd6f50 -[DEBUG] EvalExpr: success, result = 0x562c37dd6f50 +[DEBUG] visitPrimaryExp: constant int 5 created as 0x560d55b67b40 +[DEBUG] EvalExpr: success, result = 0x560d55b67b40 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>6){s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17487,7 +18130,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] visitRelExp: left=0x560d55b685f0, type=int, right=0x560d55b68280, type=int [DEBUG IF] Creating condbr: %t130 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[6]=6;if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17500,17 +18144,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 -[DEBUG] EvalExpr: success, result = 0x562c37dd7690 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] EvalExpr: success, result = 0x560d55b68280 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 6 [DEBUG IRGEN] visitAddExp: 6 [DEBUG IRGEN] visitMulExp: 6 [DEBUG IRGEN] visitPrimaryExp: 6 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 6 created as 0x562c37dd7690 -[DEBUG] EvalExpr: success, result = 0x562c37dd7690 +[DEBUG] visitPrimaryExp: constant int 6 created as 0x560d55b68280 +[DEBUG] EvalExpr: success, result = 0x560d55b68280 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>7){s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17528,7 +18172,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] visitRelExp: left=0x560d55b68cd0, type=int, right=0x560d55b688d0, type=int [DEBUG IF] Creating condbr: %t133 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[7]=7;if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17541,17 +18186,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 -[DEBUG] EvalExpr: success, result = 0x562c37dd7ce0 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] EvalExpr: success, result = 0x560d55b688d0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 7 [DEBUG IRGEN] visitAddExp: 7 [DEBUG IRGEN] visitMulExp: 7 [DEBUG IRGEN] visitPrimaryExp: 7 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 7 created as 0x562c37dd7ce0 -[DEBUG] EvalExpr: success, result = 0x562c37dd7ce0 +[DEBUG] visitPrimaryExp: constant int 7 created as 0x560d55b688d0 +[DEBUG] EvalExpr: success, result = 0x560d55b688d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>8){s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17569,7 +18214,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] visitRelExp: left=0x560d55b693b0, type=int, right=0x560d55b68fb0, type=int [DEBUG IF] Creating condbr: %t136 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[8]=8;if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17582,17 +18228,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 -[DEBUG] EvalExpr: success, result = 0x562c37dd83c0 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] EvalExpr: success, result = 0x560d55b68fb0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 8 [DEBUG IRGEN] visitAddExp: 8 [DEBUG IRGEN] visitMulExp: 8 [DEBUG IRGEN] visitPrimaryExp: 8 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 8 created as 0x562c37dd83c0 -[DEBUG] EvalExpr: success, result = 0x562c37dd83c0 +[DEBUG] visitPrimaryExp: constant int 8 created as 0x560d55b68fb0 +[DEBUG] EvalExpr: success, result = 0x560d55b68fb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>9){s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17610,7 +18256,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] visitRelExp: left=0x560d55b69db0, type=int, right=0x560d55b69820, type=int [DEBUG IF] Creating condbr: %t139 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[9]=9;if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17623,17 +18270,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 -[DEBUG] EvalExpr: success, result = 0x562c37dd8c30 +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] EvalExpr: success, result = 0x560d55b69820 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 9 [DEBUG IRGEN] visitAddExp: 9 [DEBUG IRGEN] visitMulExp: 9 [DEBUG IRGEN] visitPrimaryExp: 9 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 9 created as 0x562c37dd8c30 -[DEBUG] EvalExpr: success, result = 0x562c37dd8c30 +[DEBUG] visitPrimaryExp: constant int 9 created as 0x560d55b69820 +[DEBUG] EvalExpr: success, result = 0x560d55b69820 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>10){s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17651,7 +18298,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] visitRelExp: left=0x560d55b6a490, type=int, right=0x560d55b6a090, type=int [DEBUG IF] Creating condbr: %t142 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[10]=10;if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17664,17 +18312,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 -[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 10 [DEBUG IRGEN] visitAddExp: 10 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 -[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>11){s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17692,7 +18340,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 11 [DEBUG IRGEN] visitPrimaryExp: 11 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] visitRelExp: left=0x560d55b6ab70, type=int, right=0x560d55b6a770, type=int [DEBUG IF] Creating condbr: %t145 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[11]=11;if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17705,17 +18354,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 11 [DEBUG IRGEN] visitPrimaryExp: 11 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 -[DEBUG] EvalExpr: success, result = 0x562c37dd9b80 +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] EvalExpr: success, result = 0x560d55b6a770 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 11 [DEBUG IRGEN] visitAddExp: 11 [DEBUG IRGEN] visitMulExp: 11 [DEBUG IRGEN] visitPrimaryExp: 11 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 11 created as 0x562c37dd9b80 -[DEBUG] EvalExpr: success, result = 0x562c37dd9b80 +[DEBUG] visitPrimaryExp: constant int 11 created as 0x560d55b6a770 +[DEBUG] EvalExpr: success, result = 0x560d55b6a770 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>12){s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17733,7 +18382,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] visitRelExp: left=0x560d55b6b1e0, type=int, right=0x560d55b6ae50, type=int [DEBUG IF] Creating condbr: %t148 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[12]=12;if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17746,17 +18396,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 -[DEBUG] EvalExpr: success, result = 0x562c37dda260 +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] EvalExpr: success, result = 0x560d55b6ae50 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 12 [DEBUG IRGEN] visitAddExp: 12 [DEBUG IRGEN] visitMulExp: 12 [DEBUG IRGEN] visitPrimaryExp: 12 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 12 created as 0x562c37dda260 -[DEBUG] EvalExpr: success, result = 0x562c37dda260 +[DEBUG] visitPrimaryExp: constant int 12 created as 0x560d55b6ae50 +[DEBUG] EvalExpr: success, result = 0x560d55b6ae50 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>13){s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17774,7 +18424,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] visitRelExp: left=0x560d55b6b8c0, type=int, right=0x560d55b6b4c0, type=int [DEBUG IF] Creating condbr: %t151 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[13]=13;if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17787,17 +18438,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 -[DEBUG] EvalExpr: success, result = 0x562c37dda8d0 +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6b4c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 13 [DEBUG IRGEN] visitAddExp: 13 [DEBUG IRGEN] visitMulExp: 13 [DEBUG IRGEN] visitPrimaryExp: 13 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 13 created as 0x562c37dda8d0 -[DEBUG] EvalExpr: success, result = 0x562c37dda8d0 +[DEBUG] visitPrimaryExp: constant int 13 created as 0x560d55b6b4c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6b4c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>14){s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17815,7 +18466,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 14 [DEBUG IRGEN] visitPrimaryExp: 14 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] visitRelExp: left=0x560d55b6bfa0, type=int, right=0x560d55b6bba0, type=int [DEBUG IF] Creating condbr: %t154 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[14]=14;if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17828,17 +18480,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 14 [DEBUG IRGEN] visitPrimaryExp: 14 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 -[DEBUG] EvalExpr: success, result = 0x562c37ddafb0 +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] EvalExpr: success, result = 0x560d55b6bba0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 14 [DEBUG IRGEN] visitAddExp: 14 [DEBUG IRGEN] visitMulExp: 14 [DEBUG IRGEN] visitPrimaryExp: 14 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 14 created as 0x562c37ddafb0 -[DEBUG] EvalExpr: success, result = 0x562c37ddafb0 +[DEBUG] visitPrimaryExp: constant int 14 created as 0x560d55b6bba0 +[DEBUG] EvalExpr: success, result = 0x560d55b6bba0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>15){s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17856,7 +18508,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 15 [DEBUG IRGEN] visitPrimaryExp: 15 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] visitRelExp: left=0x560d55b6c680, type=int, right=0x560d55b6c280, type=int [DEBUG IF] Creating condbr: %t157 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[15]=15;if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17869,17 +18522,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 15 [DEBUG IRGEN] visitPrimaryExp: 15 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 -[DEBUG] EvalExpr: success, result = 0x562c37ddb690 +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] EvalExpr: success, result = 0x560d55b6c280 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 15 [DEBUG IRGEN] visitAddExp: 15 [DEBUG IRGEN] visitMulExp: 15 [DEBUG IRGEN] visitPrimaryExp: 15 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 15 created as 0x562c37ddb690 -[DEBUG] EvalExpr: success, result = 0x562c37ddb690 +[DEBUG] visitPrimaryExp: constant int 15 created as 0x560d55b6c280 +[DEBUG] EvalExpr: success, result = 0x560d55b6c280 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>16){s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17897,7 +18550,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 16 [DEBUG IRGEN] visitPrimaryExp: 16 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] visitRelExp: left=0x560d55b6cd60, type=int, right=0x560d55b6c960, type=int [DEBUG IF] Creating condbr: %t160 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[16]=16;if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17910,17 +18564,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 16 [DEBUG IRGEN] visitPrimaryExp: 16 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 -[DEBUG] EvalExpr: success, result = 0x562c37ddbd70 +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] EvalExpr: success, result = 0x560d55b6c960 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 16 [DEBUG IRGEN] visitAddExp: 16 [DEBUG IRGEN] visitMulExp: 16 [DEBUG IRGEN] visitPrimaryExp: 16 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 16 created as 0x562c37ddbd70 -[DEBUG] EvalExpr: success, result = 0x562c37ddbd70 +[DEBUG] visitPrimaryExp: constant int 16 created as 0x560d55b6c960 +[DEBUG] EvalExpr: success, result = 0x560d55b6c960 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>17){s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17938,7 +18592,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 17 [DEBUG IRGEN] visitPrimaryExp: 17 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] visitRelExp: left=0x560d55b6da60, type=int, right=0x560d55b6d350, type=int [DEBUG IF] Creating condbr: %t163 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[17]=17;if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17951,17 +18606,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 17 [DEBUG IRGEN] visitPrimaryExp: 17 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 -[DEBUG] EvalExpr: success, result = 0x562c37ddc760 +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] EvalExpr: success, result = 0x560d55b6d350 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 17 [DEBUG IRGEN] visitAddExp: 17 [DEBUG IRGEN] visitMulExp: 17 [DEBUG IRGEN] visitPrimaryExp: 17 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 17 created as 0x562c37ddc760 -[DEBUG] EvalExpr: success, result = 0x562c37ddc760 +[DEBUG] visitPrimaryExp: constant int 17 created as 0x560d55b6d350 +[DEBUG] EvalExpr: success, result = 0x560d55b6d350 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>18){s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17979,7 +18634,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 18 [DEBUG IRGEN] visitPrimaryExp: 18 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] visitRelExp: left=0x560d55b6e140, type=int, right=0x560d55b6dd40, type=int [DEBUG IF] Creating condbr: %t166 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[18]=18;if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -17992,17 +18648,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 18 [DEBUG IRGEN] visitPrimaryExp: 18 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 -[DEBUG] EvalExpr: success, result = 0x562c37ddd150 +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] EvalExpr: success, result = 0x560d55b6dd40 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 18 [DEBUG IRGEN] visitAddExp: 18 [DEBUG IRGEN] visitMulExp: 18 [DEBUG IRGEN] visitPrimaryExp: 18 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 18 created as 0x562c37ddd150 -[DEBUG] EvalExpr: success, result = 0x562c37ddd150 +[DEBUG] visitPrimaryExp: constant int 18 created as 0x560d55b6dd40 +[DEBUG] EvalExpr: success, result = 0x560d55b6dd40 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>19){s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18020,7 +18676,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 19 [DEBUG IRGEN] visitPrimaryExp: 19 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] visitRelExp: left=0x560d55b6e820, type=int, right=0x560d55b6e420, type=int [DEBUG IF] Creating condbr: %t169 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[19]=19;if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18033,17 +18690,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 19 [DEBUG IRGEN] visitPrimaryExp: 19 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 -[DEBUG] EvalExpr: success, result = 0x562c37ddd830 +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] EvalExpr: success, result = 0x560d55b6e420 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 19 [DEBUG IRGEN] visitAddExp: 19 [DEBUG IRGEN] visitMulExp: 19 [DEBUG IRGEN] visitPrimaryExp: 19 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 19 created as 0x562c37ddd830 -[DEBUG] EvalExpr: success, result = 0x562c37ddd830 +[DEBUG] visitPrimaryExp: constant int 19 created as 0x560d55b6e420 +[DEBUG] EvalExpr: success, result = 0x560d55b6e420 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>20){s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18061,7 +18718,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 20 [DEBUG IRGEN] visitPrimaryExp: 20 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] visitRelExp: left=0x560d55b6ef00, type=int, right=0x560d55b6eb00, type=int [DEBUG IF] Creating condbr: %t172 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[20]=20;if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18074,17 +18732,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 20 [DEBUG IRGEN] visitPrimaryExp: 20 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 -[DEBUG] EvalExpr: success, result = 0x562c37dddf10 +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] EvalExpr: success, result = 0x560d55b6eb00 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 20 [DEBUG IRGEN] visitAddExp: 20 [DEBUG IRGEN] visitMulExp: 20 [DEBUG IRGEN] visitPrimaryExp: 20 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 20 created as 0x562c37dddf10 -[DEBUG] EvalExpr: success, result = 0x562c37dddf10 +[DEBUG] visitPrimaryExp: constant int 20 created as 0x560d55b6eb00 +[DEBUG] EvalExpr: success, result = 0x560d55b6eb00 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>21){s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18102,7 +18760,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 21 [DEBUG IRGEN] visitPrimaryExp: 21 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] visitRelExp: left=0x560d55b6f5e0, type=int, right=0x560d55b6f1e0, type=int [DEBUG IF] Creating condbr: %t175 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[21]=21;if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18115,17 +18774,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 21 [DEBUG IRGEN] visitPrimaryExp: 21 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 -[DEBUG] EvalExpr: success, result = 0x562c37dde5f0 +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f1e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 21 [DEBUG IRGEN] visitAddExp: 21 [DEBUG IRGEN] visitMulExp: 21 [DEBUG IRGEN] visitPrimaryExp: 21 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 21 created as 0x562c37dde5f0 -[DEBUG] EvalExpr: success, result = 0x562c37dde5f0 +[DEBUG] visitPrimaryExp: constant int 21 created as 0x560d55b6f1e0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f1e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>22){s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18143,7 +18802,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 22 [DEBUG IRGEN] visitPrimaryExp: 22 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] visitRelExp: left=0x560d55b6fcc0, type=int, right=0x560d55b6f8c0, type=int [DEBUG IF] Creating condbr: %t178 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[22]=22;if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18156,17 +18816,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 22 [DEBUG IRGEN] visitPrimaryExp: 22 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 -[DEBUG] EvalExpr: success, result = 0x562c37ddecd0 +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f8c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 22 [DEBUG IRGEN] visitAddExp: 22 [DEBUG IRGEN] visitMulExp: 22 [DEBUG IRGEN] visitPrimaryExp: 22 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 22 created as 0x562c37ddecd0 -[DEBUG] EvalExpr: success, result = 0x562c37ddecd0 +[DEBUG] visitPrimaryExp: constant int 22 created as 0x560d55b6f8c0 +[DEBUG] EvalExpr: success, result = 0x560d55b6f8c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>23){s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18184,7 +18844,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 23 [DEBUG IRGEN] visitPrimaryExp: 23 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] visitRelExp: left=0x560d55b703a0, type=int, right=0x560d55b6ffa0, type=int [DEBUG IF] Creating condbr: %t181 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[23]=23;if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18197,17 +18858,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 23 [DEBUG IRGEN] visitPrimaryExp: 23 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 -[DEBUG] EvalExpr: success, result = 0x562c37ddf3b0 +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] EvalExpr: success, result = 0x560d55b6ffa0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 23 [DEBUG IRGEN] visitAddExp: 23 [DEBUG IRGEN] visitMulExp: 23 [DEBUG IRGEN] visitPrimaryExp: 23 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 23 created as 0x562c37ddf3b0 -[DEBUG] EvalExpr: success, result = 0x562c37ddf3b0 +[DEBUG] visitPrimaryExp: constant int 23 created as 0x560d55b6ffa0 +[DEBUG] EvalExpr: success, result = 0x560d55b6ffa0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>24){s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18225,7 +18886,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 24 [DEBUG IRGEN] visitPrimaryExp: 24 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] visitRelExp: left=0x560d55b70a80, type=int, right=0x560d55b70680, type=int [DEBUG IF] Creating condbr: %t184 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[24]=24;if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18238,17 +18900,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 24 [DEBUG IRGEN] visitPrimaryExp: 24 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 -[DEBUG] EvalExpr: success, result = 0x562c37ddfa90 +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] EvalExpr: success, result = 0x560d55b70680 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 24 [DEBUG IRGEN] visitAddExp: 24 [DEBUG IRGEN] visitMulExp: 24 [DEBUG IRGEN] visitPrimaryExp: 24 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 24 created as 0x562c37ddfa90 -[DEBUG] EvalExpr: success, result = 0x562c37ddfa90 +[DEBUG] visitPrimaryExp: constant int 24 created as 0x560d55b70680 +[DEBUG] EvalExpr: success, result = 0x560d55b70680 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>25){s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18266,7 +18928,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 25 [DEBUG IRGEN] visitPrimaryExp: 25 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] visitRelExp: left=0x560d55b63170, type=int, right=0x560d55b70d60, type=int [DEBUG IF] Creating condbr: %t187 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[25]=25;if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18279,17 +18942,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 25 [DEBUG IRGEN] visitPrimaryExp: 25 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 -[DEBUG] EvalExpr: success, result = 0x562c37de0170 +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] EvalExpr: success, result = 0x560d55b70d60 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 25 [DEBUG IRGEN] visitAddExp: 25 [DEBUG IRGEN] visitMulExp: 25 [DEBUG IRGEN] visitPrimaryExp: 25 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 25 created as 0x562c37de0170 -[DEBUG] EvalExpr: success, result = 0x562c37de0170 +[DEBUG] visitPrimaryExp: constant int 25 created as 0x560d55b70d60 +[DEBUG] EvalExpr: success, result = 0x560d55b70d60 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>26){s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18307,7 +18970,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 26 [DEBUG IRGEN] visitPrimaryExp: 26 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] visitRelExp: left=0x560d55b63850, type=int, right=0x560d55b63450, type=int [DEBUG IF] Creating condbr: %t190 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[26]=26;if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18320,17 +18984,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 26 [DEBUG IRGEN] visitPrimaryExp: 26 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 -[DEBUG] EvalExpr: success, result = 0x562c37dd23d0 +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] EvalExpr: success, result = 0x560d55b63450 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 26 [DEBUG IRGEN] visitAddExp: 26 [DEBUG IRGEN] visitMulExp: 26 [DEBUG IRGEN] visitPrimaryExp: 26 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 26 created as 0x562c37dd23d0 -[DEBUG] EvalExpr: success, result = 0x562c37dd23d0 +[DEBUG] visitPrimaryExp: constant int 26 created as 0x560d55b63450 +[DEBUG] EvalExpr: success, result = 0x560d55b63450 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>27){s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18348,7 +19012,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 27 [DEBUG IRGEN] visitPrimaryExp: 27 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] visitRelExp: left=0x560d55b72b20, type=int, right=0x560d55b63b30, type=int [DEBUG IF] Creating condbr: %t193 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[27]=27;if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18361,17 +19026,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 27 [DEBUG IRGEN] visitPrimaryExp: 27 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 -[DEBUG] EvalExpr: success, result = 0x562c37dd2ab0 +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] EvalExpr: success, result = 0x560d55b63b30 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 27 [DEBUG IRGEN] visitAddExp: 27 [DEBUG IRGEN] visitMulExp: 27 [DEBUG IRGEN] visitPrimaryExp: 27 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 27 created as 0x562c37dd2ab0 -[DEBUG] EvalExpr: success, result = 0x562c37dd2ab0 +[DEBUG] visitPrimaryExp: constant int 27 created as 0x560d55b63b30 +[DEBUG] EvalExpr: success, result = 0x560d55b63b30 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>28){s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18389,7 +19054,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 28 [DEBUG IRGEN] visitPrimaryExp: 28 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] visitRelExp: left=0x560d55b733e0, type=int, right=0x560d55b72e00, type=int [DEBUG IF] Creating condbr: %t196 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[28]=28;if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18402,17 +19068,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 28 [DEBUG IRGEN] visitPrimaryExp: 28 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 -[DEBUG] EvalExpr: success, result = 0x562c37de2210 +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] EvalExpr: success, result = 0x560d55b72e00 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 28 [DEBUG IRGEN] visitAddExp: 28 [DEBUG IRGEN] visitMulExp: 28 [DEBUG IRGEN] visitPrimaryExp: 28 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 28 created as 0x562c37de2210 -[DEBUG] EvalExpr: success, result = 0x562c37de2210 +[DEBUG] visitPrimaryExp: constant int 28 created as 0x560d55b72e00 +[DEBUG] EvalExpr: success, result = 0x560d55b72e00 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>29){s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18430,7 +19096,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 29 [DEBUG IRGEN] visitPrimaryExp: 29 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] visitRelExp: left=0x560d55b73ac0, type=int, right=0x560d55b736c0, type=int [DEBUG IF] Creating condbr: %t199 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[29]=29;if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18443,17 +19110,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 29 [DEBUG IRGEN] visitPrimaryExp: 29 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 -[DEBUG] EvalExpr: success, result = 0x562c37de2ad0 +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] EvalExpr: success, result = 0x560d55b736c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 29 [DEBUG IRGEN] visitAddExp: 29 [DEBUG IRGEN] visitMulExp: 29 [DEBUG IRGEN] visitPrimaryExp: 29 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 29 created as 0x562c37de2ad0 -[DEBUG] EvalExpr: success, result = 0x562c37de2ad0 +[DEBUG] visitPrimaryExp: constant int 29 created as 0x560d55b736c0 +[DEBUG] EvalExpr: success, result = 0x560d55b736c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>30){s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18471,7 +19138,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 30 [DEBUG IRGEN] visitPrimaryExp: 30 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] visitRelExp: left=0x560d55b745b0, type=int, right=0x560d55b73da0, type=int [DEBUG IF] Creating condbr: %t202 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[30]=30;if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18484,17 +19152,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 30 [DEBUG IRGEN] visitPrimaryExp: 30 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 -[DEBUG] EvalExpr: success, result = 0x562c37de31b0 +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] EvalExpr: success, result = 0x560d55b73da0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 30 [DEBUG IRGEN] visitAddExp: 30 [DEBUG IRGEN] visitMulExp: 30 [DEBUG IRGEN] visitPrimaryExp: 30 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 30 created as 0x562c37de31b0 -[DEBUG] EvalExpr: success, result = 0x562c37de31b0 +[DEBUG] visitPrimaryExp: constant int 30 created as 0x560d55b73da0 +[DEBUG] EvalExpr: success, result = 0x560d55b73da0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>31){s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18512,7 +19180,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 31 [DEBUG IRGEN] visitPrimaryExp: 31 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] visitRelExp: left=0x560d55b74c90, type=int, right=0x560d55b74890, type=int [DEBUG IF] Creating condbr: %t205 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[31]=31;if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18525,17 +19194,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 31 [DEBUG IRGEN] visitPrimaryExp: 31 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 -[DEBUG] EvalExpr: success, result = 0x562c37de3ca0 +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] EvalExpr: success, result = 0x560d55b74890 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 31 [DEBUG IRGEN] visitAddExp: 31 [DEBUG IRGEN] visitMulExp: 31 [DEBUG IRGEN] visitPrimaryExp: 31 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 31 created as 0x562c37de3ca0 -[DEBUG] EvalExpr: success, result = 0x562c37de3ca0 +[DEBUG] visitPrimaryExp: constant int 31 created as 0x560d55b74890 +[DEBUG] EvalExpr: success, result = 0x560d55b74890 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>32){s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18553,7 +19222,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 32 [DEBUG IRGEN] visitPrimaryExp: 32 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] visitRelExp: left=0x560d55b75980, type=int, right=0x560d55b74f70, type=int [DEBUG IF] Creating condbr: %t208 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[32]=32;if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18566,17 +19236,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 32 [DEBUG IRGEN] visitPrimaryExp: 32 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 -[DEBUG] EvalExpr: success, result = 0x562c37de4380 +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] EvalExpr: success, result = 0x560d55b74f70 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 32 [DEBUG IRGEN] visitAddExp: 32 [DEBUG IRGEN] visitMulExp: 32 [DEBUG IRGEN] visitPrimaryExp: 32 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 32 created as 0x562c37de4380 -[DEBUG] EvalExpr: success, result = 0x562c37de4380 +[DEBUG] visitPrimaryExp: constant int 32 created as 0x560d55b74f70 +[DEBUG] EvalExpr: success, result = 0x560d55b74f70 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>33){s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18594,7 +19264,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 33 [DEBUG IRGEN] visitPrimaryExp: 33 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] visitRelExp: left=0x560d55b76670, type=int, right=0x560d55b76270, type=int [DEBUG IF] Creating condbr: %t211 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[33]=33;if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18607,17 +19278,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 33 [DEBUG IRGEN] visitPrimaryExp: 33 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 -[DEBUG] EvalExpr: success, result = 0x562c37de5680 +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] EvalExpr: success, result = 0x560d55b76270 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 33 [DEBUG IRGEN] visitAddExp: 33 [DEBUG IRGEN] visitMulExp: 33 [DEBUG IRGEN] visitPrimaryExp: 33 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 33 created as 0x562c37de5680 -[DEBUG] EvalExpr: success, result = 0x562c37de5680 +[DEBUG] visitPrimaryExp: constant int 33 created as 0x560d55b76270 +[DEBUG] EvalExpr: success, result = 0x560d55b76270 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>34){s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18635,7 +19306,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 34 [DEBUG IRGEN] visitPrimaryExp: 34 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] visitRelExp: left=0x560d55b76d50, type=int, right=0x560d55b76950, type=int [DEBUG IF] Creating condbr: %t214 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[34]=34;if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18648,17 +19320,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 34 [DEBUG IRGEN] visitPrimaryExp: 34 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 -[DEBUG] EvalExpr: success, result = 0x562c37de5d60 +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] EvalExpr: success, result = 0x560d55b76950 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 34 [DEBUG IRGEN] visitAddExp: 34 [DEBUG IRGEN] visitMulExp: 34 [DEBUG IRGEN] visitPrimaryExp: 34 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 34 created as 0x562c37de5d60 -[DEBUG] EvalExpr: success, result = 0x562c37de5d60 +[DEBUG] visitPrimaryExp: constant int 34 created as 0x560d55b76950 +[DEBUG] EvalExpr: success, result = 0x560d55b76950 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>35){s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18676,7 +19348,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 35 [DEBUG IRGEN] visitPrimaryExp: 35 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] visitRelExp: left=0x560d55b77430, type=int, right=0x560d55b77030, type=int [DEBUG IF] Creating condbr: %t217 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[35]=35;if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18689,17 +19362,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 35 [DEBUG IRGEN] visitPrimaryExp: 35 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 -[DEBUG] EvalExpr: success, result = 0x562c37de6440 +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] EvalExpr: success, result = 0x560d55b77030 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 35 [DEBUG IRGEN] visitAddExp: 35 [DEBUG IRGEN] visitMulExp: 35 [DEBUG IRGEN] visitPrimaryExp: 35 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 35 created as 0x562c37de6440 -[DEBUG] EvalExpr: success, result = 0x562c37de6440 +[DEBUG] visitPrimaryExp: constant int 35 created as 0x560d55b77030 +[DEBUG] EvalExpr: success, result = 0x560d55b77030 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>36){s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18717,7 +19390,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 36 [DEBUG IRGEN] visitPrimaryExp: 36 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] visitRelExp: left=0x560d55b77b10, type=int, right=0x560d55b77710, type=int [DEBUG IF] Creating condbr: %t220 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[36]=36;if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18730,17 +19404,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 36 [DEBUG IRGEN] visitPrimaryExp: 36 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 -[DEBUG] EvalExpr: success, result = 0x562c37de6b20 +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] EvalExpr: success, result = 0x560d55b77710 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 36 [DEBUG IRGEN] visitAddExp: 36 [DEBUG IRGEN] visitMulExp: 36 [DEBUG IRGEN] visitPrimaryExp: 36 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 36 created as 0x562c37de6b20 -[DEBUG] EvalExpr: success, result = 0x562c37de6b20 +[DEBUG] visitPrimaryExp: constant int 36 created as 0x560d55b77710 +[DEBUG] EvalExpr: success, result = 0x560d55b77710 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>37){s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18758,7 +19432,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 37 [DEBUG IRGEN] visitPrimaryExp: 37 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] visitRelExp: left=0x560d55b781f0, type=int, right=0x560d55b77df0, type=int [DEBUG IF] Creating condbr: %t223 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[37]=37;if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18771,17 +19446,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 37 [DEBUG IRGEN] visitPrimaryExp: 37 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 -[DEBUG] EvalExpr: success, result = 0x562c37de7200 +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] EvalExpr: success, result = 0x560d55b77df0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 37 [DEBUG IRGEN] visitAddExp: 37 [DEBUG IRGEN] visitMulExp: 37 [DEBUG IRGEN] visitPrimaryExp: 37 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 37 created as 0x562c37de7200 -[DEBUG] EvalExpr: success, result = 0x562c37de7200 +[DEBUG] visitPrimaryExp: constant int 37 created as 0x560d55b77df0 +[DEBUG] EvalExpr: success, result = 0x560d55b77df0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>38){s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18799,7 +19474,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 38 [DEBUG IRGEN] visitPrimaryExp: 38 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] visitRelExp: left=0x560d55b788d0, type=int, right=0x560d55b784d0, type=int [DEBUG IF] Creating condbr: %t226 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[38]=38;if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18812,17 +19488,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 38 [DEBUG IRGEN] visitPrimaryExp: 38 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 -[DEBUG] EvalExpr: success, result = 0x562c37de78e0 +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] EvalExpr: success, result = 0x560d55b784d0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 38 [DEBUG IRGEN] visitAddExp: 38 [DEBUG IRGEN] visitMulExp: 38 [DEBUG IRGEN] visitPrimaryExp: 38 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 38 created as 0x562c37de78e0 -[DEBUG] EvalExpr: success, result = 0x562c37de78e0 +[DEBUG] visitPrimaryExp: constant int 38 created as 0x560d55b784d0 +[DEBUG] EvalExpr: success, result = 0x560d55b784d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>39){s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18840,7 +19516,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 39 [DEBUG IRGEN] visitPrimaryExp: 39 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] visitRelExp: left=0x560d55b78fb0, type=int, right=0x560d55b78bb0, type=int [DEBUG IF] Creating condbr: %t229 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[39]=39;if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18853,17 +19530,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 39 [DEBUG IRGEN] visitPrimaryExp: 39 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 -[DEBUG] EvalExpr: success, result = 0x562c37de7fc0 +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] EvalExpr: success, result = 0x560d55b78bb0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 39 [DEBUG IRGEN] visitAddExp: 39 [DEBUG IRGEN] visitMulExp: 39 [DEBUG IRGEN] visitPrimaryExp: 39 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 39 created as 0x562c37de7fc0 -[DEBUG] EvalExpr: success, result = 0x562c37de7fc0 +[DEBUG] visitPrimaryExp: constant int 39 created as 0x560d55b78bb0 +[DEBUG] EvalExpr: success, result = 0x560d55b78bb0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>40){s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18881,7 +19558,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 40 [DEBUG IRGEN] visitPrimaryExp: 40 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] visitRelExp: left=0x560d55b79690, type=int, right=0x560d55b79290, type=int [DEBUG IF] Creating condbr: %t232 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[40]=40;if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18894,17 +19572,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 40 [DEBUG IRGEN] visitPrimaryExp: 40 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 -[DEBUG] EvalExpr: success, result = 0x562c37de86a0 +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] EvalExpr: success, result = 0x560d55b79290 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 40 [DEBUG IRGEN] visitAddExp: 40 [DEBUG IRGEN] visitMulExp: 40 [DEBUG IRGEN] visitPrimaryExp: 40 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 40 created as 0x562c37de86a0 -[DEBUG] EvalExpr: success, result = 0x562c37de86a0 +[DEBUG] visitPrimaryExp: constant int 40 created as 0x560d55b79290 +[DEBUG] EvalExpr: success, result = 0x560d55b79290 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>41){s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18922,7 +19600,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 41 [DEBUG IRGEN] visitPrimaryExp: 41 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] visitRelExp: left=0x560d55b79d70, type=int, right=0x560d55b79970, type=int [DEBUG IF] Creating condbr: %t235 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[41]=41;if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18935,17 +19614,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 41 [DEBUG IRGEN] visitPrimaryExp: 41 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 -[DEBUG] EvalExpr: success, result = 0x562c37de8d80 +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] EvalExpr: success, result = 0x560d55b79970 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 41 [DEBUG IRGEN] visitAddExp: 41 [DEBUG IRGEN] visitMulExp: 41 [DEBUG IRGEN] visitPrimaryExp: 41 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 41 created as 0x562c37de8d80 -[DEBUG] EvalExpr: success, result = 0x562c37de8d80 +[DEBUG] visitPrimaryExp: constant int 41 created as 0x560d55b79970 +[DEBUG] EvalExpr: success, result = 0x560d55b79970 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>42){s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18963,7 +19642,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 42 [DEBUG IRGEN] visitPrimaryExp: 42 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] visitRelExp: left=0x560d55b7a450, type=int, right=0x560d55b7a050, type=int [DEBUG IF] Creating condbr: %t238 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[42]=42;if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -18976,17 +19656,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 42 [DEBUG IRGEN] visitPrimaryExp: 42 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 -[DEBUG] EvalExpr: success, result = 0x562c37de9460 +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] EvalExpr: success, result = 0x560d55b7a050 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 42 [DEBUG IRGEN] visitAddExp: 42 [DEBUG IRGEN] visitMulExp: 42 [DEBUG IRGEN] visitPrimaryExp: 42 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 42 created as 0x562c37de9460 -[DEBUG] EvalExpr: success, result = 0x562c37de9460 +[DEBUG] visitPrimaryExp: constant int 42 created as 0x560d55b7a050 +[DEBUG] EvalExpr: success, result = 0x560d55b7a050 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>43){s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19004,7 +19684,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 43 [DEBUG IRGEN] visitPrimaryExp: 43 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] visitRelExp: left=0x560d55b7ab30, type=int, right=0x560d55b7a730, type=int [DEBUG IF] Creating condbr: %t241 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[43]=43;if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19017,17 +19698,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 43 [DEBUG IRGEN] visitPrimaryExp: 43 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 -[DEBUG] EvalExpr: success, result = 0x562c37de9b40 +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] EvalExpr: success, result = 0x560d55b7a730 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 43 [DEBUG IRGEN] visitAddExp: 43 [DEBUG IRGEN] visitMulExp: 43 [DEBUG IRGEN] visitPrimaryExp: 43 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 43 created as 0x562c37de9b40 -[DEBUG] EvalExpr: success, result = 0x562c37de9b40 +[DEBUG] visitPrimaryExp: constant int 43 created as 0x560d55b7a730 +[DEBUG] EvalExpr: success, result = 0x560d55b7a730 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>44){s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19045,7 +19726,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 44 [DEBUG IRGEN] visitPrimaryExp: 44 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] visitRelExp: left=0x560d55b7b210, type=int, right=0x560d55b7ae10, type=int [DEBUG IF] Creating condbr: %t244 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[44]=44;if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19058,17 +19740,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 44 [DEBUG IRGEN] visitPrimaryExp: 44 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 -[DEBUG] EvalExpr: success, result = 0x562c37dea220 +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] EvalExpr: success, result = 0x560d55b7ae10 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 44 [DEBUG IRGEN] visitAddExp: 44 [DEBUG IRGEN] visitMulExp: 44 [DEBUG IRGEN] visitPrimaryExp: 44 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 44 created as 0x562c37dea220 -[DEBUG] EvalExpr: success, result = 0x562c37dea220 +[DEBUG] visitPrimaryExp: constant int 44 created as 0x560d55b7ae10 +[DEBUG] EvalExpr: success, result = 0x560d55b7ae10 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>45){s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19086,7 +19768,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 45 [DEBUG IRGEN] visitPrimaryExp: 45 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] visitRelExp: left=0x560d55b7b8f0, type=int, right=0x560d55b7b4f0, type=int [DEBUG IF] Creating condbr: %t247 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[45]=45;if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19099,17 +19782,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 45 [DEBUG IRGEN] visitPrimaryExp: 45 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 -[DEBUG] EvalExpr: success, result = 0x562c37dea900 +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] EvalExpr: success, result = 0x560d55b7b4f0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 45 [DEBUG IRGEN] visitAddExp: 45 [DEBUG IRGEN] visitMulExp: 45 [DEBUG IRGEN] visitPrimaryExp: 45 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 45 created as 0x562c37dea900 -[DEBUG] EvalExpr: success, result = 0x562c37dea900 +[DEBUG] visitPrimaryExp: constant int 45 created as 0x560d55b7b4f0 +[DEBUG] EvalExpr: success, result = 0x560d55b7b4f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>46){s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19127,7 +19810,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 46 [DEBUG IRGEN] visitPrimaryExp: 46 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] visitRelExp: left=0x560d55b7bfd0, type=int, right=0x560d55b7bbd0, type=int [DEBUG IF] Creating condbr: %t250 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[46]=46;if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19140,17 +19824,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 46 [DEBUG IRGEN] visitPrimaryExp: 46 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 -[DEBUG] EvalExpr: success, result = 0x562c37deafe0 +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] EvalExpr: success, result = 0x560d55b7bbd0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 46 [DEBUG IRGEN] visitAddExp: 46 [DEBUG IRGEN] visitMulExp: 46 [DEBUG IRGEN] visitPrimaryExp: 46 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 46 created as 0x562c37deafe0 -[DEBUG] EvalExpr: success, result = 0x562c37deafe0 +[DEBUG] visitPrimaryExp: constant int 46 created as 0x560d55b7bbd0 +[DEBUG] EvalExpr: success, result = 0x560d55b7bbd0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>47){s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19168,7 +19852,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 47 [DEBUG IRGEN] visitPrimaryExp: 47 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] visitRelExp: left=0x560d55b7c6b0, type=int, right=0x560d55b7c2b0, type=int [DEBUG IF] Creating condbr: %t253 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[47]=47;if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19181,17 +19866,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 47 [DEBUG IRGEN] visitPrimaryExp: 47 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 -[DEBUG] EvalExpr: success, result = 0x562c37deb6c0 +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7c2b0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 47 [DEBUG IRGEN] visitAddExp: 47 [DEBUG IRGEN] visitMulExp: 47 [DEBUG IRGEN] visitPrimaryExp: 47 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 47 created as 0x562c37deb6c0 -[DEBUG] EvalExpr: success, result = 0x562c37deb6c0 +[DEBUG] visitPrimaryExp: constant int 47 created as 0x560d55b7c2b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7c2b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>48){s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19209,7 +19894,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 48 [DEBUG IRGEN] visitPrimaryExp: 48 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] visitRelExp: left=0x560d55b7cd90, type=int, right=0x560d55b7c990, type=int [DEBUG IF] Creating condbr: %t256 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[48]=48;if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19222,17 +19908,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 48 [DEBUG IRGEN] visitPrimaryExp: 48 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 -[DEBUG] EvalExpr: success, result = 0x562c37debda0 +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] EvalExpr: success, result = 0x560d55b7c990 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 48 [DEBUG IRGEN] visitAddExp: 48 [DEBUG IRGEN] visitMulExp: 48 [DEBUG IRGEN] visitPrimaryExp: 48 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 48 created as 0x562c37debda0 -[DEBUG] EvalExpr: success, result = 0x562c37debda0 +[DEBUG] visitPrimaryExp: constant int 48 created as 0x560d55b7c990 +[DEBUG] EvalExpr: success, result = 0x560d55b7c990 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>49){s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19250,7 +19936,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 49 [DEBUG IRGEN] visitPrimaryExp: 49 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] visitRelExp: left=0x560d55b7d470, type=int, right=0x560d55b7d070, type=int [DEBUG IF] Creating condbr: %t259 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[49]=49;if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19263,17 +19950,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 49 [DEBUG IRGEN] visitPrimaryExp: 49 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 -[DEBUG] EvalExpr: success, result = 0x562c37dec480 +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] EvalExpr: success, result = 0x560d55b7d070 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 49 [DEBUG IRGEN] visitAddExp: 49 [DEBUG IRGEN] visitMulExp: 49 [DEBUG IRGEN] visitPrimaryExp: 49 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 49 created as 0x562c37dec480 -[DEBUG] EvalExpr: success, result = 0x562c37dec480 +[DEBUG] visitPrimaryExp: constant int 49 created as 0x560d55b7d070 +[DEBUG] EvalExpr: success, result = 0x560d55b7d070 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>50){s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19291,7 +19978,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] visitRelExp: left=0x560d55b7db50, type=int, right=0x560d55b7d750, type=int [DEBUG IF] Creating condbr: %t262 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[50]=50;if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19304,17 +19992,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 -[DEBUG] EvalExpr: success, result = 0x562c37decb60 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] EvalExpr: success, result = 0x560d55b7d750 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 50 [DEBUG IRGEN] visitAddExp: 50 [DEBUG IRGEN] visitMulExp: 50 [DEBUG IRGEN] visitPrimaryExp: 50 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 50 created as 0x562c37decb60 -[DEBUG] EvalExpr: success, result = 0x562c37decb60 +[DEBUG] visitPrimaryExp: constant int 50 created as 0x560d55b7d750 +[DEBUG] EvalExpr: success, result = 0x560d55b7d750 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>51){s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19332,7 +20020,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 51 [DEBUG IRGEN] visitPrimaryExp: 51 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] visitRelExp: left=0x560d55b7e230, type=int, right=0x560d55b7de30, type=int [DEBUG IF] Creating condbr: %t265 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[51]=51;if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19345,17 +20034,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 51 [DEBUG IRGEN] visitPrimaryExp: 51 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 -[DEBUG] EvalExpr: success, result = 0x562c37ded240 +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] EvalExpr: success, result = 0x560d55b7de30 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 51 [DEBUG IRGEN] visitAddExp: 51 [DEBUG IRGEN] visitMulExp: 51 [DEBUG IRGEN] visitPrimaryExp: 51 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 51 created as 0x562c37ded240 -[DEBUG] EvalExpr: success, result = 0x562c37ded240 +[DEBUG] visitPrimaryExp: constant int 51 created as 0x560d55b7de30 +[DEBUG] EvalExpr: success, result = 0x560d55b7de30 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>52){s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19373,7 +20062,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 52 [DEBUG IRGEN] visitPrimaryExp: 52 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] visitRelExp: left=0x560d55b7e910, type=int, right=0x560d55b7e510, type=int [DEBUG IF] Creating condbr: %t268 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[52]=52;if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19386,17 +20076,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 52 [DEBUG IRGEN] visitPrimaryExp: 52 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 -[DEBUG] EvalExpr: success, result = 0x562c37ded920 +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] EvalExpr: success, result = 0x560d55b7e510 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 52 [DEBUG IRGEN] visitAddExp: 52 [DEBUG IRGEN] visitMulExp: 52 [DEBUG IRGEN] visitPrimaryExp: 52 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 52 created as 0x562c37ded920 -[DEBUG] EvalExpr: success, result = 0x562c37ded920 +[DEBUG] visitPrimaryExp: constant int 52 created as 0x560d55b7e510 +[DEBUG] EvalExpr: success, result = 0x560d55b7e510 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>53){s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19414,7 +20104,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 53 [DEBUG IRGEN] visitPrimaryExp: 53 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] visitRelExp: left=0x560d55b7eff0, type=int, right=0x560d55b7ebf0, type=int [DEBUG IF] Creating condbr: %t271 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[53]=53;if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19427,17 +20118,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 53 [DEBUG IRGEN] visitPrimaryExp: 53 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 -[DEBUG] EvalExpr: success, result = 0x562c37dee000 +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] EvalExpr: success, result = 0x560d55b7ebf0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 53 [DEBUG IRGEN] visitAddExp: 53 [DEBUG IRGEN] visitMulExp: 53 [DEBUG IRGEN] visitPrimaryExp: 53 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 53 created as 0x562c37dee000 -[DEBUG] EvalExpr: success, result = 0x562c37dee000 +[DEBUG] visitPrimaryExp: constant int 53 created as 0x560d55b7ebf0 +[DEBUG] EvalExpr: success, result = 0x560d55b7ebf0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>54){s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19455,7 +20146,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 54 [DEBUG IRGEN] visitPrimaryExp: 54 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] visitRelExp: left=0x560d55b7f6d0, type=int, right=0x560d55b7f2d0, type=int [DEBUG IF] Creating condbr: %t274 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[54]=54;if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19468,17 +20160,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 54 [DEBUG IRGEN] visitPrimaryExp: 54 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 -[DEBUG] EvalExpr: success, result = 0x562c37dee6e0 +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f2d0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 54 [DEBUG IRGEN] visitAddExp: 54 [DEBUG IRGEN] visitMulExp: 54 [DEBUG IRGEN] visitPrimaryExp: 54 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 54 created as 0x562c37dee6e0 -[DEBUG] EvalExpr: success, result = 0x562c37dee6e0 +[DEBUG] visitPrimaryExp: constant int 54 created as 0x560d55b7f2d0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f2d0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>55){s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19496,7 +20188,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 55 [DEBUG IRGEN] visitPrimaryExp: 55 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] visitRelExp: left=0x560d55b7fdb0, type=int, right=0x560d55b7f9b0, type=int [DEBUG IF] Creating condbr: %t277 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[55]=55;if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19509,17 +20202,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 55 [DEBUG IRGEN] visitPrimaryExp: 55 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 -[DEBUG] EvalExpr: success, result = 0x562c37deedc0 +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f9b0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 55 [DEBUG IRGEN] visitAddExp: 55 [DEBUG IRGEN] visitMulExp: 55 [DEBUG IRGEN] visitPrimaryExp: 55 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 55 created as 0x562c37deedc0 -[DEBUG] EvalExpr: success, result = 0x562c37deedc0 +[DEBUG] visitPrimaryExp: constant int 55 created as 0x560d55b7f9b0 +[DEBUG] EvalExpr: success, result = 0x560d55b7f9b0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>56){s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19537,7 +20230,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 56 [DEBUG IRGEN] visitPrimaryExp: 56 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] visitRelExp: left=0x560d55b80490, type=int, right=0x560d55b80090, type=int [DEBUG IF] Creating condbr: %t280 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[56]=56;if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19550,17 +20244,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 56 [DEBUG IRGEN] visitPrimaryExp: 56 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 -[DEBUG] EvalExpr: success, result = 0x562c37def4a0 +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] EvalExpr: success, result = 0x560d55b80090 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 56 [DEBUG IRGEN] visitAddExp: 56 [DEBUG IRGEN] visitMulExp: 56 [DEBUG IRGEN] visitPrimaryExp: 56 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 56 created as 0x562c37def4a0 -[DEBUG] EvalExpr: success, result = 0x562c37def4a0 +[DEBUG] visitPrimaryExp: constant int 56 created as 0x560d55b80090 +[DEBUG] EvalExpr: success, result = 0x560d55b80090 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>57){s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19578,7 +20272,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 57 [DEBUG IRGEN] visitPrimaryExp: 57 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] visitRelExp: left=0x560d55b80b70, type=int, right=0x560d55b80770, type=int [DEBUG IF] Creating condbr: %t283 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[57]=57;if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19591,17 +20286,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 57 [DEBUG IRGEN] visitPrimaryExp: 57 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 -[DEBUG] EvalExpr: success, result = 0x562c37defb80 +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] EvalExpr: success, result = 0x560d55b80770 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 57 [DEBUG IRGEN] visitAddExp: 57 [DEBUG IRGEN] visitMulExp: 57 [DEBUG IRGEN] visitPrimaryExp: 57 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 57 created as 0x562c37defb80 -[DEBUG] EvalExpr: success, result = 0x562c37defb80 +[DEBUG] visitPrimaryExp: constant int 57 created as 0x560d55b80770 +[DEBUG] EvalExpr: success, result = 0x560d55b80770 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>58){s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19619,7 +20314,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 58 [DEBUG IRGEN] visitPrimaryExp: 58 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] visitRelExp: left=0x560d55b81250, type=int, right=0x560d55b80e50, type=int [DEBUG IF] Creating condbr: %t286 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[58]=58;if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19632,17 +20328,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 58 [DEBUG IRGEN] visitPrimaryExp: 58 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 -[DEBUG] EvalExpr: success, result = 0x562c37df0260 +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] EvalExpr: success, result = 0x560d55b80e50 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 58 [DEBUG IRGEN] visitAddExp: 58 [DEBUG IRGEN] visitMulExp: 58 [DEBUG IRGEN] visitPrimaryExp: 58 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 58 created as 0x562c37df0260 -[DEBUG] EvalExpr: success, result = 0x562c37df0260 +[DEBUG] visitPrimaryExp: constant int 58 created as 0x560d55b80e50 +[DEBUG] EvalExpr: success, result = 0x560d55b80e50 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>59){s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19660,7 +20356,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 59 [DEBUG IRGEN] visitPrimaryExp: 59 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] visitRelExp: left=0x560d55b81930, type=int, right=0x560d55b81530, type=int [DEBUG IF] Creating condbr: %t289 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[59]=59;if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19673,17 +20370,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 59 [DEBUG IRGEN] visitPrimaryExp: 59 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 -[DEBUG] EvalExpr: success, result = 0x562c37df0940 +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] EvalExpr: success, result = 0x560d55b81530 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 59 [DEBUG IRGEN] visitAddExp: 59 [DEBUG IRGEN] visitMulExp: 59 [DEBUG IRGEN] visitPrimaryExp: 59 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 59 created as 0x562c37df0940 -[DEBUG] EvalExpr: success, result = 0x562c37df0940 +[DEBUG] visitPrimaryExp: constant int 59 created as 0x560d55b81530 +[DEBUG] EvalExpr: success, result = 0x560d55b81530 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>60){s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19701,7 +20398,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 60 [DEBUG IRGEN] visitPrimaryExp: 60 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] visitRelExp: left=0x560d55b82010, type=int, right=0x560d55b81c10, type=int [DEBUG IF] Creating condbr: %t292 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[60]=60;if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19714,17 +20412,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 60 [DEBUG IRGEN] visitPrimaryExp: 60 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 -[DEBUG] EvalExpr: success, result = 0x562c37df1020 +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] EvalExpr: success, result = 0x560d55b81c10 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 60 [DEBUG IRGEN] visitAddExp: 60 [DEBUG IRGEN] visitMulExp: 60 [DEBUG IRGEN] visitPrimaryExp: 60 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 60 created as 0x562c37df1020 -[DEBUG] EvalExpr: success, result = 0x562c37df1020 +[DEBUG] visitPrimaryExp: constant int 60 created as 0x560d55b81c10 +[DEBUG] EvalExpr: success, result = 0x560d55b81c10 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>61){s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19742,7 +20440,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 61 [DEBUG IRGEN] visitPrimaryExp: 61 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] visitRelExp: left=0x560d55b826f0, type=int, right=0x560d55b822f0, type=int [DEBUG IF] Creating condbr: %t295 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[61]=61;if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19755,17 +20454,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 61 [DEBUG IRGEN] visitPrimaryExp: 61 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 -[DEBUG] EvalExpr: success, result = 0x562c37df1700 +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] EvalExpr: success, result = 0x560d55b822f0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 61 [DEBUG IRGEN] visitAddExp: 61 [DEBUG IRGEN] visitMulExp: 61 [DEBUG IRGEN] visitPrimaryExp: 61 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 61 created as 0x562c37df1700 -[DEBUG] EvalExpr: success, result = 0x562c37df1700 +[DEBUG] visitPrimaryExp: constant int 61 created as 0x560d55b822f0 +[DEBUG] EvalExpr: success, result = 0x560d55b822f0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>62){s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19783,7 +20482,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 62 [DEBUG IRGEN] visitPrimaryExp: 62 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] visitRelExp: left=0x560d55b835e0, type=int, right=0x560d55b831e0, type=int [DEBUG IF] Creating condbr: %t298 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[62]=62;if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19796,17 +20496,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 62 [DEBUG IRGEN] visitPrimaryExp: 62 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 -[DEBUG] EvalExpr: success, result = 0x562c37df25f0 +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] EvalExpr: success, result = 0x560d55b831e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 62 [DEBUG IRGEN] visitAddExp: 62 [DEBUG IRGEN] visitMulExp: 62 [DEBUG IRGEN] visitPrimaryExp: 62 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 62 created as 0x562c37df25f0 -[DEBUG] EvalExpr: success, result = 0x562c37df25f0 +[DEBUG] visitPrimaryExp: constant int 62 created as 0x560d55b831e0 +[DEBUG] EvalExpr: success, result = 0x560d55b831e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>63){s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19824,7 +20524,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 63 [DEBUG IRGEN] visitPrimaryExp: 63 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] visitRelExp: left=0x560d55b83cc0, type=int, right=0x560d55b838c0, type=int [DEBUG IF] Creating condbr: %t301 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[63]=63;if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19837,17 +20538,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 63 [DEBUG IRGEN] visitPrimaryExp: 63 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 -[DEBUG] EvalExpr: success, result = 0x562c37df2cd0 +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] EvalExpr: success, result = 0x560d55b838c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 63 [DEBUG IRGEN] visitAddExp: 63 [DEBUG IRGEN] visitMulExp: 63 [DEBUG IRGEN] visitPrimaryExp: 63 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 63 created as 0x562c37df2cd0 -[DEBUG] EvalExpr: success, result = 0x562c37df2cd0 +[DEBUG] visitPrimaryExp: constant int 63 created as 0x560d55b838c0 +[DEBUG] EvalExpr: success, result = 0x560d55b838c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>64){s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19865,7 +20566,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 64 [DEBUG IRGEN] visitPrimaryExp: 64 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] visitRelExp: left=0x560d55b75370, type=int, right=0x560d55b83fa0, type=int [DEBUG IF] Creating condbr: %t304 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[64]=64;if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19878,17 +20580,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 64 [DEBUG IRGEN] visitPrimaryExp: 64 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 -[DEBUG] EvalExpr: success, result = 0x562c37df33b0 +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] EvalExpr: success, result = 0x560d55b83fa0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 64 [DEBUG IRGEN] visitAddExp: 64 [DEBUG IRGEN] visitMulExp: 64 [DEBUG IRGEN] visitPrimaryExp: 64 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 64 created as 0x562c37df33b0 -[DEBUG] EvalExpr: success, result = 0x562c37df33b0 +[DEBUG] visitPrimaryExp: constant int 64 created as 0x560d55b83fa0 +[DEBUG] EvalExpr: success, result = 0x560d55b83fa0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>65){s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19906,7 +20608,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 65 [DEBUG IRGEN] visitPrimaryExp: 65 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] visitRelExp: left=0x560d55b75d40, type=int, right=0x560d55b75650, type=int [DEBUG IF] Creating condbr: %t307 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[65]=65;if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19919,17 +20622,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 65 [DEBUG IRGEN] visitPrimaryExp: 65 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 -[DEBUG] EvalExpr: success, result = 0x562c37de4a60 +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] EvalExpr: success, result = 0x560d55b75650 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 65 [DEBUG IRGEN] visitAddExp: 65 [DEBUG IRGEN] visitMulExp: 65 [DEBUG IRGEN] visitPrimaryExp: 65 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65 created as 0x562c37de4a60 -[DEBUG] EvalExpr: success, result = 0x562c37de4a60 +[DEBUG] visitPrimaryExp: constant int 65 created as 0x560d55b75650 +[DEBUG] EvalExpr: success, result = 0x560d55b75650 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>66){s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19947,7 +20650,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 66 [DEBUG IRGEN] visitPrimaryExp: 66 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] visitRelExp: left=0x560d55b85d60, type=int, right=0x560d55b757c0, type=int [DEBUG IF] Creating condbr: %t310 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[66]=66;if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19960,17 +20664,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 66 [DEBUG IRGEN] visitPrimaryExp: 66 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 -[DEBUG] EvalExpr: success, result = 0x562c37de4bd0 +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] EvalExpr: success, result = 0x560d55b757c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 66 [DEBUG IRGEN] visitAddExp: 66 [DEBUG IRGEN] visitMulExp: 66 [DEBUG IRGEN] visitPrimaryExp: 66 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 66 created as 0x562c37de4bd0 -[DEBUG] EvalExpr: success, result = 0x562c37de4bd0 +[DEBUG] visitPrimaryExp: constant int 66 created as 0x560d55b757c0 +[DEBUG] EvalExpr: success, result = 0x560d55b757c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>67){s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -19988,7 +20692,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 67 [DEBUG IRGEN] visitPrimaryExp: 67 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] visitRelExp: left=0x560d55b86440, type=int, right=0x560d55b86040, type=int [DEBUG IF] Creating condbr: %t313 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[67]=67;if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20001,17 +20706,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 67 [DEBUG IRGEN] visitPrimaryExp: 67 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 -[DEBUG] EvalExpr: success, result = 0x562c37df5450 +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] EvalExpr: success, result = 0x560d55b86040 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 67 [DEBUG IRGEN] visitAddExp: 67 [DEBUG IRGEN] visitMulExp: 67 [DEBUG IRGEN] visitPrimaryExp: 67 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 67 created as 0x562c37df5450 -[DEBUG] EvalExpr: success, result = 0x562c37df5450 +[DEBUG] visitPrimaryExp: constant int 67 created as 0x560d55b86040 +[DEBUG] EvalExpr: success, result = 0x560d55b86040 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>68){s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20029,7 +20734,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 68 [DEBUG IRGEN] visitPrimaryExp: 68 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] visitRelExp: left=0x560d55b86b20, type=int, right=0x560d55b86720, type=int [DEBUG IF] Creating condbr: %t316 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[68]=68;if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20042,17 +20748,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 68 [DEBUG IRGEN] visitPrimaryExp: 68 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 -[DEBUG] EvalExpr: success, result = 0x562c37df5b30 +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] EvalExpr: success, result = 0x560d55b86720 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 68 [DEBUG IRGEN] visitAddExp: 68 [DEBUG IRGEN] visitMulExp: 68 [DEBUG IRGEN] visitPrimaryExp: 68 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 68 created as 0x562c37df5b30 -[DEBUG] EvalExpr: success, result = 0x562c37df5b30 +[DEBUG] visitPrimaryExp: constant int 68 created as 0x560d55b86720 +[DEBUG] EvalExpr: success, result = 0x560d55b86720 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>69){s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20070,7 +20776,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 69 [DEBUG IRGEN] visitPrimaryExp: 69 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] visitRelExp: left=0x560d55b87200, type=int, right=0x560d55b86e00, type=int [DEBUG IF] Creating condbr: %t319 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[69]=69;if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20083,17 +20790,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 69 [DEBUG IRGEN] visitPrimaryExp: 69 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 -[DEBUG] EvalExpr: success, result = 0x562c37df6210 +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] EvalExpr: success, result = 0x560d55b86e00 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 69 [DEBUG IRGEN] visitAddExp: 69 [DEBUG IRGEN] visitMulExp: 69 [DEBUG IRGEN] visitPrimaryExp: 69 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 69 created as 0x562c37df6210 -[DEBUG] EvalExpr: success, result = 0x562c37df6210 +[DEBUG] visitPrimaryExp: constant int 69 created as 0x560d55b86e00 +[DEBUG] EvalExpr: success, result = 0x560d55b86e00 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>70){s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20111,7 +20818,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 70 [DEBUG IRGEN] visitPrimaryExp: 70 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] visitRelExp: left=0x560d55b878e0, type=int, right=0x560d55b874e0, type=int [DEBUG IF] Creating condbr: %t322 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[70]=70;if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20124,17 +20832,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 70 [DEBUG IRGEN] visitPrimaryExp: 70 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 -[DEBUG] EvalExpr: success, result = 0x562c37df68f0 +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] EvalExpr: success, result = 0x560d55b874e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 70 [DEBUG IRGEN] visitAddExp: 70 [DEBUG IRGEN] visitMulExp: 70 [DEBUG IRGEN] visitPrimaryExp: 70 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 70 created as 0x562c37df68f0 -[DEBUG] EvalExpr: success, result = 0x562c37df68f0 +[DEBUG] visitPrimaryExp: constant int 70 created as 0x560d55b874e0 +[DEBUG] EvalExpr: success, result = 0x560d55b874e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>71){s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20152,7 +20860,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 71 [DEBUG IRGEN] visitPrimaryExp: 71 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] visitRelExp: left=0x560d55b87fc0, type=int, right=0x560d55b87bc0, type=int [DEBUG IF] Creating condbr: %t325 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[71]=71;if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20165,17 +20874,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 71 [DEBUG IRGEN] visitPrimaryExp: 71 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 -[DEBUG] EvalExpr: success, result = 0x562c37df6fd0 +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] EvalExpr: success, result = 0x560d55b87bc0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 71 [DEBUG IRGEN] visitAddExp: 71 [DEBUG IRGEN] visitMulExp: 71 [DEBUG IRGEN] visitPrimaryExp: 71 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 71 created as 0x562c37df6fd0 -[DEBUG] EvalExpr: success, result = 0x562c37df6fd0 +[DEBUG] visitPrimaryExp: constant int 71 created as 0x560d55b87bc0 +[DEBUG] EvalExpr: success, result = 0x560d55b87bc0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>72){s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20193,7 +20902,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 72 [DEBUG IRGEN] visitPrimaryExp: 72 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] visitRelExp: left=0x560d55b886a0, type=int, right=0x560d55b882a0, type=int [DEBUG IF] Creating condbr: %t328 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[72]=72;if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20206,17 +20916,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 72 [DEBUG IRGEN] visitPrimaryExp: 72 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 -[DEBUG] EvalExpr: success, result = 0x562c37df76b0 +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] EvalExpr: success, result = 0x560d55b882a0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 72 [DEBUG IRGEN] visitAddExp: 72 [DEBUG IRGEN] visitMulExp: 72 [DEBUG IRGEN] visitPrimaryExp: 72 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 72 created as 0x562c37df76b0 -[DEBUG] EvalExpr: success, result = 0x562c37df76b0 +[DEBUG] visitPrimaryExp: constant int 72 created as 0x560d55b882a0 +[DEBUG] EvalExpr: success, result = 0x560d55b882a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>73){s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20234,7 +20944,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 73 [DEBUG IRGEN] visitPrimaryExp: 73 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] visitRelExp: left=0x560d55b88d80, type=int, right=0x560d55b88980, type=int [DEBUG IF] Creating condbr: %t331 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[73]=73;if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20247,17 +20958,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 73 [DEBUG IRGEN] visitPrimaryExp: 73 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 -[DEBUG] EvalExpr: success, result = 0x562c37df7d90 +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] EvalExpr: success, result = 0x560d55b88980 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 73 [DEBUG IRGEN] visitAddExp: 73 [DEBUG IRGEN] visitMulExp: 73 [DEBUG IRGEN] visitPrimaryExp: 73 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 73 created as 0x562c37df7d90 -[DEBUG] EvalExpr: success, result = 0x562c37df7d90 +[DEBUG] visitPrimaryExp: constant int 73 created as 0x560d55b88980 +[DEBUG] EvalExpr: success, result = 0x560d55b88980 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>74){s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20275,7 +20986,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 74 [DEBUG IRGEN] visitPrimaryExp: 74 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] visitRelExp: left=0x560d55b89460, type=int, right=0x560d55b89060, type=int [DEBUG IF] Creating condbr: %t334 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[74]=74;if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20288,17 +21000,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 74 [DEBUG IRGEN] visitPrimaryExp: 74 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 -[DEBUG] EvalExpr: success, result = 0x562c37df8470 +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] EvalExpr: success, result = 0x560d55b89060 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 74 [DEBUG IRGEN] visitAddExp: 74 [DEBUG IRGEN] visitMulExp: 74 [DEBUG IRGEN] visitPrimaryExp: 74 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 74 created as 0x562c37df8470 -[DEBUG] EvalExpr: success, result = 0x562c37df8470 +[DEBUG] visitPrimaryExp: constant int 74 created as 0x560d55b89060 +[DEBUG] EvalExpr: success, result = 0x560d55b89060 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>75){s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20316,7 +21028,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 75 [DEBUG IRGEN] visitPrimaryExp: 75 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] visitRelExp: left=0x560d55b89b40, type=int, right=0x560d55b89740, type=int [DEBUG IF] Creating condbr: %t337 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[75]=75;if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}}} @@ -20329,17 +21042,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 75 [DEBUG IRGEN] visitPrimaryExp: 75 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 -[DEBUG] EvalExpr: success, result = 0x562c37df8b50 +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] EvalExpr: success, result = 0x560d55b89740 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 75 [DEBUG IRGEN] visitAddExp: 75 [DEBUG IRGEN] visitMulExp: 75 [DEBUG IRGEN] visitPrimaryExp: 75 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 75 created as 0x562c37df8b50 -[DEBUG] EvalExpr: success, result = 0x562c37df8b50 +[DEBUG] visitPrimaryExp: constant int 75 created as 0x560d55b89740 +[DEBUG] EvalExpr: success, result = 0x560d55b89740 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>76){s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} @@ -20357,7 +21070,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 76 [DEBUG IRGEN] visitPrimaryExp: 76 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] visitRelExp: left=0x560d55b8a220, type=int, right=0x560d55b89e20, type=int [DEBUG IF] Creating condbr: %t340 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[76]=76;if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}}} @@ -20370,17 +21084,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 76 [DEBUG IRGEN] visitPrimaryExp: 76 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 -[DEBUG] EvalExpr: success, result = 0x562c37df9230 +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] EvalExpr: success, result = 0x560d55b89e20 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 76 [DEBUG IRGEN] visitAddExp: 76 [DEBUG IRGEN] visitMulExp: 76 [DEBUG IRGEN] visitPrimaryExp: 76 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 76 created as 0x562c37df9230 -[DEBUG] EvalExpr: success, result = 0x562c37df9230 +[DEBUG] visitPrimaryExp: constant int 76 created as 0x560d55b89e20 +[DEBUG] EvalExpr: success, result = 0x560d55b89e20 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>77){s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} @@ -20398,7 +21112,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 77 [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] visitRelExp: left=0x560d55b8a900, type=int, right=0x560d55b8a500, type=int [DEBUG IF] Creating condbr: %t343 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[77]=77;if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}}} @@ -20411,17 +21126,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 77 [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 -[DEBUG] EvalExpr: success, result = 0x562c37df9910 +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] EvalExpr: success, result = 0x560d55b8a500 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 77 [DEBUG IRGEN] visitAddExp: 77 [DEBUG IRGEN] visitMulExp: 77 [DEBUG IRGEN] visitPrimaryExp: 77 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 77 created as 0x562c37df9910 -[DEBUG] EvalExpr: success, result = 0x562c37df9910 +[DEBUG] visitPrimaryExp: constant int 77 created as 0x560d55b8a500 +[DEBUG] EvalExpr: success, result = 0x560d55b8a500 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>78){s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} @@ -20439,7 +21154,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 78 [DEBUG IRGEN] visitPrimaryExp: 78 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] visitRelExp: left=0x560d55b8afe0, type=int, right=0x560d55b8abe0, type=int [DEBUG IF] Creating condbr: %t346 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[78]=78;if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}}} @@ -20452,17 +21168,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 78 [DEBUG IRGEN] visitPrimaryExp: 78 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 -[DEBUG] EvalExpr: success, result = 0x562c37df9ff0 +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] EvalExpr: success, result = 0x560d55b8abe0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 78 [DEBUG IRGEN] visitAddExp: 78 [DEBUG IRGEN] visitMulExp: 78 [DEBUG IRGEN] visitPrimaryExp: 78 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 78 created as 0x562c37df9ff0 -[DEBUG] EvalExpr: success, result = 0x562c37df9ff0 +[DEBUG] visitPrimaryExp: constant int 78 created as 0x560d55b8abe0 +[DEBUG] EvalExpr: success, result = 0x560d55b8abe0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>79){s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} @@ -20480,7 +21196,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 79 [DEBUG IRGEN] visitPrimaryExp: 79 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] visitRelExp: left=0x560d55b8b6c0, type=int, right=0x560d55b8b2c0, type=int [DEBUG IF] Creating condbr: %t349 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[79]=79;if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}}} @@ -20493,17 +21210,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 79 [DEBUG IRGEN] visitPrimaryExp: 79 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 -[DEBUG] EvalExpr: success, result = 0x562c37dfa6d0 +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b2c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 79 [DEBUG IRGEN] visitAddExp: 79 [DEBUG IRGEN] visitMulExp: 79 [DEBUG IRGEN] visitPrimaryExp: 79 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 79 created as 0x562c37dfa6d0 -[DEBUG] EvalExpr: success, result = 0x562c37dfa6d0 +[DEBUG] visitPrimaryExp: constant int 79 created as 0x560d55b8b2c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b2c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>80){s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} @@ -20521,7 +21238,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 80 [DEBUG IRGEN] visitPrimaryExp: 80 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] visitRelExp: left=0x560d55b8bda0, type=int, right=0x560d55b8b9a0, type=int [DEBUG IF] Creating condbr: %t352 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[80]=80;if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}}} @@ -20534,17 +21252,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 80 [DEBUG IRGEN] visitPrimaryExp: 80 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 -[DEBUG] EvalExpr: success, result = 0x562c37dfadb0 +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b9a0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 80 [DEBUG IRGEN] visitAddExp: 80 [DEBUG IRGEN] visitMulExp: 80 [DEBUG IRGEN] visitPrimaryExp: 80 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 80 created as 0x562c37dfadb0 -[DEBUG] EvalExpr: success, result = 0x562c37dfadb0 +[DEBUG] visitPrimaryExp: constant int 80 created as 0x560d55b8b9a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8b9a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>81){s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} @@ -20562,7 +21280,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 81 [DEBUG IRGEN] visitPrimaryExp: 81 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] visitRelExp: left=0x560d55b8c480, type=int, right=0x560d55b8c080, type=int [DEBUG IF] Creating condbr: %t355 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[81]=81;if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}}} @@ -20575,17 +21294,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 81 [DEBUG IRGEN] visitPrimaryExp: 81 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 -[DEBUG] EvalExpr: success, result = 0x562c37dfb490 +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] EvalExpr: success, result = 0x560d55b8c080 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 81 [DEBUG IRGEN] visitAddExp: 81 [DEBUG IRGEN] visitMulExp: 81 [DEBUG IRGEN] visitPrimaryExp: 81 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 81 created as 0x562c37dfb490 -[DEBUG] EvalExpr: success, result = 0x562c37dfb490 +[DEBUG] visitPrimaryExp: constant int 81 created as 0x560d55b8c080 +[DEBUG] EvalExpr: success, result = 0x560d55b8c080 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>82){s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} @@ -20603,7 +21322,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 82 [DEBUG IRGEN] visitPrimaryExp: 82 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] visitRelExp: left=0x560d55b8cb60, type=int, right=0x560d55b8c760, type=int [DEBUG IF] Creating condbr: %t358 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[82]=82;if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}}} @@ -20616,17 +21336,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 82 [DEBUG IRGEN] visitPrimaryExp: 82 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 -[DEBUG] EvalExpr: success, result = 0x562c37dfbb70 +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] EvalExpr: success, result = 0x560d55b8c760 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 82 [DEBUG IRGEN] visitAddExp: 82 [DEBUG IRGEN] visitMulExp: 82 [DEBUG IRGEN] visitPrimaryExp: 82 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 82 created as 0x562c37dfbb70 -[DEBUG] EvalExpr: success, result = 0x562c37dfbb70 +[DEBUG] visitPrimaryExp: constant int 82 created as 0x560d55b8c760 +[DEBUG] EvalExpr: success, result = 0x560d55b8c760 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>83){s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} @@ -20644,7 +21364,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 83 [DEBUG IRGEN] visitPrimaryExp: 83 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] visitRelExp: left=0x560d55b8d240, type=int, right=0x560d55b8ce40, type=int [DEBUG IF] Creating condbr: %t361 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[83]=83;if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}}} @@ -20657,17 +21378,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 83 [DEBUG IRGEN] visitPrimaryExp: 83 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 -[DEBUG] EvalExpr: success, result = 0x562c37dfc250 +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] EvalExpr: success, result = 0x560d55b8ce40 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 83 [DEBUG IRGEN] visitAddExp: 83 [DEBUG IRGEN] visitMulExp: 83 [DEBUG IRGEN] visitPrimaryExp: 83 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 83 created as 0x562c37dfc250 -[DEBUG] EvalExpr: success, result = 0x562c37dfc250 +[DEBUG] visitPrimaryExp: constant int 83 created as 0x560d55b8ce40 +[DEBUG] EvalExpr: success, result = 0x560d55b8ce40 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>84){s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} @@ -20685,7 +21406,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 84 [DEBUG IRGEN] visitPrimaryExp: 84 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] visitRelExp: left=0x560d55b8d920, type=int, right=0x560d55b8d520, type=int [DEBUG IF] Creating condbr: %t364 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[84]=84;if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}}} @@ -20698,17 +21420,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 84 [DEBUG IRGEN] visitPrimaryExp: 84 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 -[DEBUG] EvalExpr: success, result = 0x562c37dfc930 +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] EvalExpr: success, result = 0x560d55b8d520 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 84 [DEBUG IRGEN] visitAddExp: 84 [DEBUG IRGEN] visitMulExp: 84 [DEBUG IRGEN] visitPrimaryExp: 84 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 84 created as 0x562c37dfc930 -[DEBUG] EvalExpr: success, result = 0x562c37dfc930 +[DEBUG] visitPrimaryExp: constant int 84 created as 0x560d55b8d520 +[DEBUG] EvalExpr: success, result = 0x560d55b8d520 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>85){s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} @@ -20726,7 +21448,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 85 [DEBUG IRGEN] visitPrimaryExp: 85 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] visitRelExp: left=0x560d55b8e000, type=int, right=0x560d55b8dc00, type=int [DEBUG IF] Creating condbr: %t367 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[85]=85;if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}}} @@ -20739,17 +21462,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 85 [DEBUG IRGEN] visitPrimaryExp: 85 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 -[DEBUG] EvalExpr: success, result = 0x562c37dfd010 +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] EvalExpr: success, result = 0x560d55b8dc00 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 85 [DEBUG IRGEN] visitAddExp: 85 [DEBUG IRGEN] visitMulExp: 85 [DEBUG IRGEN] visitPrimaryExp: 85 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 85 created as 0x562c37dfd010 -[DEBUG] EvalExpr: success, result = 0x562c37dfd010 +[DEBUG] visitPrimaryExp: constant int 85 created as 0x560d55b8dc00 +[DEBUG] EvalExpr: success, result = 0x560d55b8dc00 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>86){s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} @@ -20767,7 +21490,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 86 [DEBUG IRGEN] visitPrimaryExp: 86 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] visitRelExp: left=0x560d55b8e6e0, type=int, right=0x560d55b8e2e0, type=int [DEBUG IF] Creating condbr: %t370 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[86]=86;if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}}} @@ -20780,17 +21504,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 86 [DEBUG IRGEN] visitPrimaryExp: 86 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 -[DEBUG] EvalExpr: success, result = 0x562c37dfd6f0 +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e2e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 86 [DEBUG IRGEN] visitAddExp: 86 [DEBUG IRGEN] visitMulExp: 86 [DEBUG IRGEN] visitPrimaryExp: 86 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 86 created as 0x562c37dfd6f0 -[DEBUG] EvalExpr: success, result = 0x562c37dfd6f0 +[DEBUG] visitPrimaryExp: constant int 86 created as 0x560d55b8e2e0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e2e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>87){s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} @@ -20808,7 +21532,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 87 [DEBUG IRGEN] visitPrimaryExp: 87 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] visitRelExp: left=0x560d55b8edc0, type=int, right=0x560d55b8e9c0, type=int [DEBUG IF] Creating condbr: %t373 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[87]=87;if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}}} @@ -20821,17 +21546,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 87 [DEBUG IRGEN] visitPrimaryExp: 87 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 -[DEBUG] EvalExpr: success, result = 0x562c37dfddd0 +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e9c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 87 [DEBUG IRGEN] visitAddExp: 87 [DEBUG IRGEN] visitMulExp: 87 [DEBUG IRGEN] visitPrimaryExp: 87 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 87 created as 0x562c37dfddd0 -[DEBUG] EvalExpr: success, result = 0x562c37dfddd0 +[DEBUG] visitPrimaryExp: constant int 87 created as 0x560d55b8e9c0 +[DEBUG] EvalExpr: success, result = 0x560d55b8e9c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>88){s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} @@ -20849,7 +21574,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 88 [DEBUG IRGEN] visitPrimaryExp: 88 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] visitRelExp: left=0x560d55b8f4a0, type=int, right=0x560d55b8f0a0, type=int [DEBUG IF] Creating condbr: %t376 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[88]=88;if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}}} @@ -20862,17 +21588,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 88 [DEBUG IRGEN] visitPrimaryExp: 88 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 -[DEBUG] EvalExpr: success, result = 0x562c37dfe4b0 +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8f0a0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 88 [DEBUG IRGEN] visitAddExp: 88 [DEBUG IRGEN] visitMulExp: 88 [DEBUG IRGEN] visitPrimaryExp: 88 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 88 created as 0x562c37dfe4b0 -[DEBUG] EvalExpr: success, result = 0x562c37dfe4b0 +[DEBUG] visitPrimaryExp: constant int 88 created as 0x560d55b8f0a0 +[DEBUG] EvalExpr: success, result = 0x560d55b8f0a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>89){s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} @@ -20890,7 +21616,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 89 [DEBUG IRGEN] visitPrimaryExp: 89 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] visitRelExp: left=0x560d55b8fb80, type=int, right=0x560d55b8f780, type=int [DEBUG IF] Creating condbr: %t379 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[89]=89;if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}}} @@ -20903,17 +21630,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 89 [DEBUG IRGEN] visitPrimaryExp: 89 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 -[DEBUG] EvalExpr: success, result = 0x562c37dfeb90 +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] EvalExpr: success, result = 0x560d55b8f780 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 89 [DEBUG IRGEN] visitAddExp: 89 [DEBUG IRGEN] visitMulExp: 89 [DEBUG IRGEN] visitPrimaryExp: 89 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 89 created as 0x562c37dfeb90 -[DEBUG] EvalExpr: success, result = 0x562c37dfeb90 +[DEBUG] visitPrimaryExp: constant int 89 created as 0x560d55b8f780 +[DEBUG] EvalExpr: success, result = 0x560d55b8f780 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>90){s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} @@ -20931,7 +21658,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 90 [DEBUG IRGEN] visitPrimaryExp: 90 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] visitRelExp: left=0x560d55b90260, type=int, right=0x560d55b8fe60, type=int [DEBUG IF] Creating condbr: %t382 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[90]=90;if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}}} @@ -20944,17 +21672,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 90 [DEBUG IRGEN] visitPrimaryExp: 90 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 -[DEBUG] EvalExpr: success, result = 0x562c37dff270 +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] EvalExpr: success, result = 0x560d55b8fe60 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 90 [DEBUG IRGEN] visitAddExp: 90 [DEBUG IRGEN] visitMulExp: 90 [DEBUG IRGEN] visitPrimaryExp: 90 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 90 created as 0x562c37dff270 -[DEBUG] EvalExpr: success, result = 0x562c37dff270 +[DEBUG] visitPrimaryExp: constant int 90 created as 0x560d55b8fe60 +[DEBUG] EvalExpr: success, result = 0x560d55b8fe60 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>91){s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} @@ -20972,7 +21700,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 91 [DEBUG IRGEN] visitPrimaryExp: 91 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] visitRelExp: left=0x560d55b90940, type=int, right=0x560d55b90540, type=int [DEBUG IF] Creating condbr: %t385 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[91]=91;if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}}} @@ -20985,17 +21714,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 91 [DEBUG IRGEN] visitPrimaryExp: 91 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 -[DEBUG] EvalExpr: success, result = 0x562c37dff950 +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] EvalExpr: success, result = 0x560d55b90540 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 91 [DEBUG IRGEN] visitAddExp: 91 [DEBUG IRGEN] visitMulExp: 91 [DEBUG IRGEN] visitPrimaryExp: 91 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 91 created as 0x562c37dff950 -[DEBUG] EvalExpr: success, result = 0x562c37dff950 +[DEBUG] visitPrimaryExp: constant int 91 created as 0x560d55b90540 +[DEBUG] EvalExpr: success, result = 0x560d55b90540 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} [DEBUG IRGEN] visitStmt: if(i>92){s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} @@ -21013,7 +21742,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 92 [DEBUG IRGEN] visitPrimaryExp: 92 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] visitRelExp: left=0x560d55b91020, type=int, right=0x560d55b90c20, type=int [DEBUG IF] Creating condbr: %t388 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[92]=92;if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}}} @@ -21026,17 +21756,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 92 [DEBUG IRGEN] visitPrimaryExp: 92 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 -[DEBUG] EvalExpr: success, result = 0x562c37e00030 +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] EvalExpr: success, result = 0x560d55b90c20 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 92 [DEBUG IRGEN] visitAddExp: 92 [DEBUG IRGEN] visitMulExp: 92 [DEBUG IRGEN] visitPrimaryExp: 92 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 92 created as 0x562c37e00030 -[DEBUG] EvalExpr: success, result = 0x562c37e00030 +[DEBUG] visitPrimaryExp: constant int 92 created as 0x560d55b90c20 +[DEBUG] EvalExpr: success, result = 0x560d55b90c20 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} [DEBUG IRGEN] visitStmt: if(i>93){s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} @@ -21054,7 +21784,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 93 [DEBUG IRGEN] visitPrimaryExp: 93 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] visitRelExp: left=0x560d55b91650, type=int, right=0x560d55b91300, type=int [DEBUG IF] Creating condbr: %t391 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[93]=93;if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}}} @@ -21067,17 +21798,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 93 [DEBUG IRGEN] visitPrimaryExp: 93 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 -[DEBUG] EvalExpr: success, result = 0x562c37e00710 +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] EvalExpr: success, result = 0x560d55b91300 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 93 [DEBUG IRGEN] visitAddExp: 93 [DEBUG IRGEN] visitMulExp: 93 [DEBUG IRGEN] visitPrimaryExp: 93 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 93 created as 0x562c37e00710 -[DEBUG] EvalExpr: success, result = 0x562c37e00710 +[DEBUG] visitPrimaryExp: constant int 93 created as 0x560d55b91300 +[DEBUG] EvalExpr: success, result = 0x560d55b91300 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} [DEBUG IRGEN] visitStmt: if(i>94){s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} @@ -21095,7 +21826,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 94 [DEBUG IRGEN] visitPrimaryExp: 94 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] visitRelExp: left=0x560d55b91d30, type=int, right=0x560d55b919e0, type=int [DEBUG IF] Creating condbr: %t394 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[94]=94;if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}}} @@ -21108,17 +21840,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 94 [DEBUG IRGEN] visitPrimaryExp: 94 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 -[DEBUG] EvalExpr: success, result = 0x562c37e00df0 +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] EvalExpr: success, result = 0x560d55b919e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 94 [DEBUG IRGEN] visitAddExp: 94 [DEBUG IRGEN] visitMulExp: 94 [DEBUG IRGEN] visitPrimaryExp: 94 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 94 created as 0x562c37e00df0 -[DEBUG] EvalExpr: success, result = 0x562c37e00df0 +[DEBUG] visitPrimaryExp: constant int 94 created as 0x560d55b919e0 +[DEBUG] EvalExpr: success, result = 0x560d55b919e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} [DEBUG IRGEN] visitStmt: if(i>95){s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} @@ -21136,7 +21868,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 95 [DEBUG IRGEN] visitPrimaryExp: 95 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] visitRelExp: left=0x560d55b924e0, type=int, right=0x560d55b920c0, type=int [DEBUG IF] Creating condbr: %t397 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[95]=95;if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}}} @@ -21149,17 +21882,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 95 [DEBUG IRGEN] visitPrimaryExp: 95 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 -[DEBUG] EvalExpr: success, result = 0x562c37e014d0 +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] EvalExpr: success, result = 0x560d55b920c0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 95 [DEBUG IRGEN] visitAddExp: 95 [DEBUG IRGEN] visitMulExp: 95 [DEBUG IRGEN] visitPrimaryExp: 95 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 95 created as 0x562c37e014d0 -[DEBUG] EvalExpr: success, result = 0x562c37e014d0 +[DEBUG] visitPrimaryExp: constant int 95 created as 0x560d55b920c0 +[DEBUG] EvalExpr: success, result = 0x560d55b920c0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} [DEBUG IRGEN] visitStmt: if(i>96){s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} @@ -21177,7 +21910,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 96 [DEBUG IRGEN] visitPrimaryExp: 96 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] visitRelExp: left=0x560d55b92b50, type=int, right=0x560d55b927a0, type=int [DEBUG IF] Creating condbr: %t400 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[96]=96;if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}}} @@ -21190,17 +21924,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 96 [DEBUG IRGEN] visitPrimaryExp: 96 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 -[DEBUG] EvalExpr: success, result = 0x562c37e01bb0 +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] EvalExpr: success, result = 0x560d55b927a0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 96 [DEBUG IRGEN] visitAddExp: 96 [DEBUG IRGEN] visitMulExp: 96 [DEBUG IRGEN] visitPrimaryExp: 96 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 96 created as 0x562c37e01bb0 -[DEBUG] EvalExpr: success, result = 0x562c37e01bb0 +[DEBUG] visitPrimaryExp: constant int 96 created as 0x560d55b927a0 +[DEBUG] EvalExpr: success, result = 0x560d55b927a0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} [DEBUG IRGEN] visitStmt: if(i>97){s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} @@ -21218,7 +21952,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] visitRelExp: left=0x560d55b931d0, type=int, right=0x560d55b93250, type=int [DEBUG IF] Creating condbr: %t403 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[97]=97;if(i>98){s[98]=98;if(i>99){s[99]=99;}}} @@ -21231,17 +21966,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 -[DEBUG] EvalExpr: success, result = 0x562c37e02660 +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] EvalExpr: success, result = 0x560d55b93250 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 97 [DEBUG IRGEN] visitAddExp: 97 [DEBUG IRGEN] visitMulExp: 97 [DEBUG IRGEN] visitPrimaryExp: 97 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 97 created as 0x562c37e02660 -[DEBUG] EvalExpr: success, result = 0x562c37e02660 +[DEBUG] visitPrimaryExp: constant int 97 created as 0x560d55b93250 +[DEBUG] EvalExpr: success, result = 0x560d55b93250 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>98){s[98]=98;if(i>99){s[99]=99;}} [DEBUG IRGEN] visitStmt: if(i>98){s[98]=98;if(i>99){s[99]=99;}} @@ -21259,7 +21994,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 98 [DEBUG IRGEN] visitPrimaryExp: 98 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] visitRelExp: left=0x560d55b93860, type=int, right=0x560d55b938e0, type=int [DEBUG IF] Creating condbr: %t406 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[98]=98;if(i>99){s[99]=99;}} @@ -21272,17 +22008,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 98 [DEBUG IRGEN] visitPrimaryExp: 98 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 -[DEBUG] EvalExpr: success, result = 0x562c37e02cf0 +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] EvalExpr: success, result = 0x560d55b938e0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 98 [DEBUG IRGEN] visitAddExp: 98 [DEBUG IRGEN] visitMulExp: 98 [DEBUG IRGEN] visitPrimaryExp: 98 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 98 created as 0x562c37e02cf0 -[DEBUG] EvalExpr: success, result = 0x562c37e02cf0 +[DEBUG] visitPrimaryExp: constant int 98 created as 0x560d55b938e0 +[DEBUG] EvalExpr: success, result = 0x560d55b938e0 [DEBUG] current insert block: then [DEBUG IRGEN] visitBlockItem: if(i>99){s[99]=99;} [DEBUG IRGEN] visitStmt: if(i>99){s[99]=99;} @@ -21300,7 +22036,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 99 [DEBUG IRGEN] visitPrimaryExp: 99 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] visitRelExp: left=0x560d55b93f40, type=int, right=0x560d55b93fc0, type=int [DEBUG IF] Creating condbr: %t409 -> then, merge [DEBUG IF] Generating then branch in block: then [DEBUG IRGEN] visitStmt: {s[99]=99;} @@ -21313,17 +22050,17 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 99 [DEBUG IRGEN] visitPrimaryExp: 99 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 -[DEBUG] EvalExpr: success, result = 0x562c37e033d0 +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] EvalExpr: success, result = 0x560d55b93fc0 [DEBUG] HandleAssignStmt: assigning to s -[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x562c37dcbf00 +[DEBUG] HandleAssignStmt: found in storage_map_ for s, ptr = 0x560d55b5cf40 [DEBUG IRGEN] EvalExpr: 99 [DEBUG IRGEN] visitAddExp: 99 [DEBUG IRGEN] visitMulExp: 99 [DEBUG IRGEN] visitPrimaryExp: 99 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 99 created as 0x562c37e033d0 -[DEBUG] EvalExpr: success, result = 0x562c37e033d0 +[DEBUG] visitPrimaryExp: constant int 99 created as 0x560d55b93fc0 +[DEBUG] EvalExpr: success, result = 0x560d55b93fc0 [DEBUG] current insert block: then [DEBUG IF] then branch terminated: 0 [DEBUG IF] Adding br to merge block from then @@ -22032,12 +22769,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 -[DEBUG] visitAddExp: left=0x562c37e07ce0, right=0x562c37dd49f0 -[DEBUG] EvalExpr: success, result = 0x562c37e07dd0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b988d0, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b989c0 [DEBUG] HandleAssignStmt: assigning to j -[DEBUG] HandleAssignStmt: found in storage_map_ for j, ptr = 0x562c37dcbd80 -[DEBUG] HandleAssignStmt: scalar assignment to j, ptr = 0x562c37dcbd80, rhs = 0x562c37e07dd0 +[DEBUG] HandleAssignStmt: found in storage_map_ for j, ptr = 0x560d55b5cd80 +[DEBUG] HandleAssignStmt: scalar assignment to j, ptr = 0x560d55b5cd80, rhs = 0x560d55b989c0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -22053,9 +22790,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 m -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: 0 @@ -22063,10 +22797,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 m,初始值 0x562c37dae750 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: merge [DEBUG IRGEN] visitBlockItem: while(m<100){sum=sum+s[m];m=m+1;} @@ -22089,7 +22820,8 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 100 [DEBUG IRGEN] visitPrimaryExp: 100 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 100 created as 0x562c37dd4500 +[DEBUG] visitPrimaryExp: constant int 100 created as 0x560d55b651b0 +[DEBUG] visitRelExp: left=0x560d55b98f80, type=int, right=0x560d55b651b0, type=int [DEBUG WHILE] condBlock has terminator: 1 [DEBUG WHILE] Generating body in block: while.body [DEBUG IRGEN] visitStmt: {sum=sum+s[m];m=m+1;} @@ -22117,12 +22849,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: m -[DEBUG] EvalExpr: success, result = 0x562c37e086f0 -[DEBUG] visitAddExp: left=0x562c37e08630, right=0x562c37e08860 -[DEBUG] EvalExpr: success, result = 0x562c37e088e0 +[DEBUG] EvalExpr: success, result = 0x560d55b992e0 +[DEBUG] visitAddExp: left=0x560d55b99220, type=int, right=0x560d55b99450, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b994d0 [DEBUG] HandleAssignStmt: assigning to sum -[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x562c37c6e670 -[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x562c37c6e670, rhs = 0x562c37e088e0 +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x560d559ff670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x560d559ff670, rhs = 0x560d55b994d0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -22144,12 +22876,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 1 [DEBUG IRGEN] visitPrimaryExp: 1 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 1 created as 0x562c37dd49f0 -[DEBUG] visitAddExp: left=0x562c37e08b40, right=0x562c37dd49f0 -[DEBUG] EvalExpr: success, result = 0x562c37e08bc0 +[DEBUG] visitPrimaryExp: constant int 1 created as 0x560d55b656a0 +[DEBUG] visitAddExp: left=0x560d55b99730, type=int, right=0x560d55b656a0, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b997b0 [DEBUG] HandleAssignStmt: assigning to m -[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x562c37e07f40 -[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x562c37e07f40, rhs = 0x562c37e08bc0 +[DEBUG] HandleAssignStmt: found in storage_map_ for m, ptr = 0x560d55b98b30 +[DEBUG] HandleAssignStmt: scalar assignment to m, ptr = 0x560d55b98b30, rhs = 0x560d55b997b0 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -22177,11 +22909,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitLVal: sum [DEBUG IRGEN] visitPrimaryExp: 65535 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 65535 created as 0x562c37e08f20 -[DEBUG] EvalExpr: success, result = 0x562c37e08fa0 +[DEBUG] visitPrimaryExp: constant int 65535 created as 0x560d55b99b10 +[DEBUG] visitMulExp: left=0x560d55b99a90, type=int, right=0x560d55b99b10, type=int +[DEBUG] EvalExpr: success, result = 0x560d55b99b90 [DEBUG] HandleAssignStmt: assigning to sum -[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x562c37c6e670 -[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x562c37c6e670, rhs = 0x562c37e08fa0 +[DEBUG] HandleAssignStmt: found in storage_map_ for sum, ptr = 0x560d559ff670 +[DEBUG] HandleAssignStmt: scalar assignment to sum, ptr = 0x560d559ff670, rhs = 0x560d55b99b90 [DEBUG] Is int32: 0 [DEBUG] Is float: 0 [DEBUG] Is ptr int32: 1 @@ -22199,7 +22932,6 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitBlockItem: returnsum; [DEBUG IRGEN] visitStmt: returnsum; [DEBUG IRGEN] HandleReturnStmt: returnsum; -[DEBUG IRGEN] HandleReturnStmt eval exp: sum [DEBUG IRGEN] EvalExpr: sum [DEBUG IRGEN] visitAddExp: sum [DEBUG IRGEN] visitMulExp: sum @@ -22207,8 +22939,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: sum -[DEBUG] EvalExpr: success, result = 0x562c37e09240 +[DEBUG] EvalExpr: success, result = 0x560d55b99e30 +[DEBUG] visitFuncDef: 函数 func 生成完成 [DEBUG IRGEN] visitFuncDef: main +[DEBUG] visitFuncDef: 创建函数 main,返回类型: int,参数数量: 0 +[DEBUG] visitFuncDef: 函数对象地址: 0x560d55b99f90 +[DEBUG] visitFuncDef: 开始生成函数体 [DEBUG IRGEN] visitBlock: {starttime();intloopcount=getint();putint(func(loopcount));putch(10);stoptime();return0;} [DEBUG IRGEN] visitBlockItem: starttime(); [DEBUG IRGEN] visitStmt: starttime(); @@ -22216,7 +22952,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitAddExp: starttime() [DEBUG IRGEN] visitMulExp: starttime() [DEBUG IRGEN] visitCallExp: 调用函数 starttime -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: intloopcount=getint(); [DEBUG] visitDecl: 开始处理声明 @@ -22226,20 +22962,14 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理局部变量 [DEBUG] HandleLocalVariable: 开始处理局部变量 loopcount -[DEBUG] HandleLocalVariable: 处理局部标量变量 -[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽 -[DEBUG] HandleLocalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 [DEBUG] visitInitVal: 处理表达式初始化 [DEBUG IRGEN] EvalExpr: getint() [DEBUG IRGEN] visitAddExp: getint() [DEBUG IRGEN] visitMulExp: getint() [DEBUG IRGEN] visitCallExp: 调用函数 getint -[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562c37e09560 -[DEBUG] EvalExpr: success, result = 0x562c37e09560 -[DEBUG] HandleLocalVariable: 获取到初始化值 -[DEBUG] HandleLocalVariable: 创建局部变量 loopcount,初始值 0x562c37e09560 -[DEBUG] HandleLocalVariable: 局部变量处理完成 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x560d55b9a150 +[DEBUG] EvalExpr: success, result = 0x560d55b9a150 [DEBUG] visitDecl: 声明处理完成 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: putint(func(loopcount)); @@ -22259,12 +22989,12 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitPrimaryExp [DEBUG] visitPrimaryExp: visiting lVal [DEBUG] visitLVal: loopcount -[DEBUG] EvalExpr: success, result = 0x562c37e096b0 +[DEBUG] EvalExpr: success, result = 0x560d55b9a2a0 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x562c37e09750 -[DEBUG] EvalExpr: success, result = 0x562c37e09750 +[DEBUG IRGEN] visitCallExp: 函数调用完成,返回值 0x560d55b9a340 +[DEBUG] EvalExpr: success, result = 0x560d55b9a340 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: putch(10); [DEBUG IRGEN] visitStmt: putch(10); @@ -22277,10 +23007,10 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 10 [DEBUG IRGEN] visitPrimaryExp: 10 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 10 created as 0x562c37dd94a0 -[DEBUG] EvalExpr: success, result = 0x562c37dd94a0 +[DEBUG] visitPrimaryExp: constant int 10 created as 0x560d55b6a090 +[DEBUG] EvalExpr: success, result = 0x560d55b6a090 [DEBUG IRGEN] visitCallExp: 收集到 1 个参数 -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: stoptime(); [DEBUG IRGEN] visitStmt: stoptime(); @@ -22288,18 +23018,18 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitAddExp: stoptime() [DEBUG IRGEN] visitMulExp: stoptime() [DEBUG IRGEN] visitCallExp: 调用函数 stoptime -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 [DEBUG] current insert block: entry [DEBUG IRGEN] visitBlockItem: return0; [DEBUG IRGEN] visitStmt: return0; [DEBUG IRGEN] HandleReturnStmt: return0; -[DEBUG IRGEN] HandleReturnStmt eval exp: 0 [DEBUG IRGEN] EvalExpr: 0 [DEBUG IRGEN] visitAddExp: 0 [DEBUG IRGEN] visitMulExp: 0 [DEBUG IRGEN] visitPrimaryExp: 0 [DEBUG] visitPrimaryExp -[DEBUG] EvalExpr: success, result = 0x562c37dae750 +[DEBUG] EvalExpr: success, result = 0x560d55b3f750 +[DEBUG] visitFuncDef: 函数 main 生成完成 define i32 @getint() { entry: } @@ -23457,7 +24187,7 @@ SymbolTable::addSymbol: stored accumulator with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: length [DEBUG] visitPrimaryExp: length @@ -23470,7 +24200,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: accumulator+x[i]*y[i] [DEBUG] visitUnaryExp: accumulator @@ -23478,7 +24208,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: x[i] [DEBUG] visitPrimaryExp: x[i] @@ -23493,7 +24223,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: y[i] @@ -23509,14 +24239,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -23524,7 +24254,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de052c0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5db2c0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -23538,7 +24268,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found accumulator in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = accumulator, sym->kind = 0 绑定变量: accumulator -> VarDefContext -CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x56429de026f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: accumulator, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d86f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 loop has_return: 1 return_type_is_void: 0 @@ -23615,14 +24345,14 @@ SymbolTable::lookup: found starttime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: COUNT [DEBUG] visitPrimaryExp: COUNT SymbolTable::lookup: found COUNT in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = COUNT, sym->kind = 0 绑定变量: COUNT -> VarDefContext -CheckLValue 绑定变量: COUNT, sym->kind: 0, sym->var_def_ctx: 0x56429ddffc30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: COUNT, sym->kind: 0, sym->var_def_ctx: 0x555b8a5d5c30, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: If @@ -23631,7 +24361,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 10 [DEBUG] visitPrimaryExp: 10 @@ -23640,7 +24370,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0.0 [DEBUG] visitUnaryExp: 0.0 @@ -23649,7 +24379,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 1.0 [DEBUG] visitUnaryExp: 1.0 @@ -23659,7 +24389,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: a+0.1 [DEBUG] visitUnaryExp: a @@ -23667,7 +24397,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0.1 [DEBUG] visitPrimaryExp: 0.1 @@ -23675,7 +24405,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: b+0.2 [DEBUG] visitUnaryExp: b @@ -23683,7 +24413,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0.2 [DEBUG] visitPrimaryExp: 0.2 @@ -23693,21 +24423,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x56429de22940, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8940, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x56429de236e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f96e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -23715,7 +24445,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: a+j @@ -23724,20 +24454,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found a in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x56429de25f70, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fbf70, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x56429de245f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fa5f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -23745,7 +24475,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: b+j @@ -23754,20 +24484,20 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found b in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = b, sym->kind = 0 绑定变量: b -> VarDefContext -CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x56429de26b90, sym->const_def_ctx: 0 +CheckLValue 绑定变量: b, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fcb90, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -23775,7 +24505,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x56429de22070, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8070, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -23783,7 +24513,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: total+loop(x,y,len) [DEBUG] visitUnaryExp: total @@ -23791,7 +24521,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: loop(x,y,len) [DEBUG] 函数调用: loop @@ -23804,7 +24534,7 @@ SymbolTable::lookup: found loop in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found x in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = x, sym->kind = 0 绑定变量: x -> VarDefContext -CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x56429de236e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: x, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f96e0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: y @@ -23813,7 +24543,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found y in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = y, sym->kind = 0 绑定变量: y -> VarDefContext -CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x56429de245f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: y, sym->kind: 0, sym->var_def_ctx: 0x555b8a5fa5f0, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: len @@ -23822,7 +24552,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x56429de22940, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f8940, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -23831,7 +24561,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -23839,7 +24569,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x56429de21000, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f7000, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -23858,7 +24588,7 @@ SymbolTable::lookup: found stoptime in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11442437121638400.000000 [DEBUG] visitPrimaryExp: 11442437121638400.000000 @@ -23872,7 +24602,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found total in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = total, sym->kind = 0 绑定变量: total -> VarDefContext -CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x56429de1a430, sym->const_def_ctx: 0 +CheckLValue 绑定变量: total, sym->kind: 0, sym->var_def_ctx: 0x555b8a5f0430, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 11442437121638400.000000 [DEBUG] visitPrimaryExp: 11442437121638400.000000 @@ -23931,7 +24661,7 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 否 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 COUNT -[DEBUG] HandleGlobalVariable: 处理全局标量变量 +[DEBUG] HandleGlobalVariable: 变量 COUNT 是 int 类型 [DEBUG] HandleGlobalVariable: 创建全局标量变量: COUNT [DEBUG] HandleGlobalVariable: 处理标量初始化值 [DEBUG] visitInitVal: 开始处理初始化值 @@ -23941,15 +24671,13 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG IRGEN] visitMulExp: 500000 [DEBUG IRGEN] visitPrimaryExp: 500000 [DEBUG] visitPrimaryExp -[DEBUG] visitPrimaryExp: constant int 500000 created as 0x56429de43190 -[DEBUG] EvalExpr: success, result = 0x56429de43190 -[DEBUG] HandleGlobalVariable: 获取到常量初始化值 -[DEBUG] HandleGlobalVariable: 设置全局变量初始化器 -[DEBUG] HandleGlobalVariable: 存储全局变量引用 -[DEBUG] HandleGlobalVariable: 创建全局变量 COUNT -[DEBUG] HandleGlobalVariable: 全局变量处理完成 +[DEBUG] visitPrimaryExp: constant int 500000 created as 0x555b8a619190 +[DEBUG] EvalExpr: success, result = 0x555b8a619190 [DEBUG] visitDecl: 声明处理完成 [DEBUG IRGEN] visitFuncDef: loop +[DEBUG] visitFuncDef: 创建函数 loop,返回类型: float,参数数量: 3 +[DEBUG] visitFuncDef: 函数对象地址: 0x555b8a622250 +[DEBUG] visitFuncDef: 为函数 loop 添加参数 x,类型: ptr_float [error] [ir] AllocaInst 当前只支持 i32* ========== test/test_case/performance/transpose0.sy ========== @@ -24030,21 +24758,21 @@ SymbolTable::addSymbol: stored j with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: colsize [DEBUG] visitPrimaryExp: colsize SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = colsize, sym->kind = 0 绑定变量: colsize -> VarDefContext -CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x55e49499b5e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x56536068e5e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -24055,7 +24783,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -24070,21 +24798,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: j [DEBUG] visitPrimaryExp: j SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -24092,7 +24820,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24112,7 +24840,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -24125,7 +24853,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 SymbolTable::addSymbol: stored curr with kind=0, const_def_ctx=0 @@ -24142,21 +24870,21 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: colsize [DEBUG] visitPrimaryExp: colsize SymbolTable::lookup: found colsize in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = colsize, sym->kind = 0 绑定变量: colsize -> VarDefContext -CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x55e49499b5e0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: colsize, sym->kind: 0, sym->var_def_ctx: 0x56536068e5e0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: matrix[i*rowsize+j] @@ -24173,7 +24901,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -24186,7 +24914,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt @@ -24201,7 +24929,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: rowsize [DEBUG] visitPrimaryExp: rowsize @@ -24214,7 +24942,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: curr @@ -24223,13 +24951,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found curr in scope level 5, kind=0, const_def_ctx=0 CheckLValue: found sym->name = curr, sym->kind = 0 绑定变量: curr -> VarDefContext -CheckLValue 绑定变量: curr, sym->kind: 0, sym->var_def_ctx: 0x55e4949b95a0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: curr, sym->kind: 0, sym->var_def_ctx: 0x5653606ac5a0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -24237,7 +24965,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55e4949a3200, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x565360696200, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24245,7 +24973,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24253,7 +24981,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949a37f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606967f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24289,7 +25017,7 @@ SymbolTable::lookup: found getarray in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55e49499d140, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x565360690140, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 3 形参类型 3 @@ -24313,21 +25041,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55e4949cb2f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5653606be2f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -24335,7 +25063,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: i @@ -24344,13 +25072,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24358,7 +25086,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24366,7 +25094,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -24377,14 +25105,14 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55e4949cc250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x5653606bf250, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: ExpStmt @@ -24400,7 +25128,7 @@ SymbolTable::lookup: found transpose in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55e4949cb2f0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5653606be2f0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: matrix [DEBUG] visitUnaryExp: matrix @@ -24408,7 +25136,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: a[i] @@ -24417,7 +25145,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found a in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = a, sym->kind = 0 绑定变量: a -> VarDefContext -CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x55e49499d140, sym->const_def_ctx: 0 +CheckLValue 绑定变量: a, sym->kind: 0, sym->var_def_ctx: 0x565360690140, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -24425,7 +25153,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 @@ -24435,7 +25163,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24443,7 +25171,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24457,7 +25185,7 @@ SymbolTable::addSymbol: stored ans with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -24468,21 +25196,21 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: len [DEBUG] visitPrimaryExp: len SymbolTable::lookup: found len in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = len, sym->kind = 0 绑定变量: len -> VarDefContext -CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x55e4949cc250, sym->const_def_ctx: 0 +CheckLValue 绑定变量: len, sym->kind: 0, sym->var_def_ctx: 0x5653606bf250, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: ans+i*i*matrix[i] [DEBUG] visitUnaryExp: ans @@ -24490,28 +25218,28 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: i [DEBUG] visitPrimaryExp: i SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: matrix[i] [DEBUG] visitPrimaryExp: matrix[i] SymbolTable::lookup: found matrix in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = matrix, sym->kind = 0 绑定变量: matrix -> VarDefContext -CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x55e494997d40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: matrix, sym->kind: 0, sym->var_def_ctx: 0x56536068ad40, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -24519,14 +25247,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24534,7 +25262,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55e4949cd9d0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5653606c09d0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24544,7 +25272,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -24552,7 +25280,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: -ans [DEBUG] visitUnaryExp: -ans @@ -24561,7 +25289,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: ExpStmt [DEBUG] CheckExp: stoptime() @@ -24582,7 +25310,7 @@ SymbolTable::lookup: found putint in scope level 0, kind=1, const_def_ctx=0 SymbolTable::lookup: found ans in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = ans, sym->kind = 0 绑定变量: ans -> VarDefContext -CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x55e4949d6c40, sym->const_def_ctx: 0 +CheckLValue 绑定变量: ans, sym->kind: 0, sym->var_def_ctx: 0x5653606c9c40, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] visitStmt: ExpStmt @@ -24616,10 +25344,32 @@ SymbolTable::lookup: found main in scope level 1, kind=1, const_def_ctx=0 [DEBUG] visitVarDef: 是否为数组: 是 [DEBUG] visitVarDef: 处理全局变量 [DEBUG] HandleGlobalVariable: 开始处理全局变量 matrix -[DEBUG] HandleGlobalVariable: 处理全局数组变量 +[DEBUG] HandleGlobalVariable: 变量 matrix 是 int 类型 [DEBUG] TryEvaluateConstInt: 开始求值常量表达式 [DEBUG] HandleGlobalVariable: 数组总大小: 20000000 -[error] [irgen] 全局数组大小无效 +[DEBUG] HandleGlobalVariable: 创建全局数组: matrix +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG] visitDecl: 开始处理声明 +[DEBUG] visitDecl: 处理变量声明 +[DEBUG] visitVarDef: 开始处理变量定义 +[DEBUG] visitVarDef: 变量名称: a +[DEBUG] visitVarDef: 是否为数组: 是 +[DEBUG] visitVarDef: 处理全局变量 +[DEBUG] HandleGlobalVariable: 开始处理全局变量 a +[DEBUG] HandleGlobalVariable: 变量 a 是 int 类型 +[DEBUG] TryEvaluateConstInt: 开始求值常量表达式 +[DEBUG] HandleGlobalVariable: 数组总大小: 100000 +[DEBUG] HandleGlobalVariable: 创建全局数组: a +[DEBUG] HandleGlobalVariable: 设置全局数组初始化器 +[DEBUG] visitDecl: 声明处理完成 +[DEBUG IRGEN] visitFuncDef: transpose +[DEBUG] visitFuncDef: 创建函数 transpose,返回类型: int,参数数量: 3 +[DEBUG] visitFuncDef: 函数对象地址: 0x5653606dbd50 +[DEBUG] visitFuncDef: 为函数 transpose 添加参数 n,类型: int32 +[DEBUG] visitFuncDef: 参数 n 处理完成 +[DEBUG] visitFuncDef: 为函数 transpose 添加参数 matrix,类型: ptr_int32 +[error] [ir] 存储类型不匹配:期望 int32 ========== test/test_case/performance/vector_mul3.sy ========== SymbolTable::addSymbol: stored getint with kind=1, const_def_ctx=0 @@ -24729,7 +25479,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -24742,7 +25492,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[i]*u[i] [DEBUG] visitUnaryExp: sum @@ -24750,7 +25500,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[i] [DEBUG] visitPrimaryExp: v[i] @@ -24765,7 +25515,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: u[i] @@ -24781,14 +25531,14 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24796,7 +25546,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581198cde0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce294de0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24810,7 +25560,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581198ec10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce296c10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 Vectordot has_return: 1 return_type_is_void: 0 @@ -24845,7 +25595,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -24860,7 +25610,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -24873,7 +25623,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[j]/func(i,j) [DEBUG] visitUnaryExp: sum @@ -24881,7 +25631,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[j] [DEBUG] visitPrimaryExp: v[j] @@ -24896,7 +25646,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: func(i,j) @@ -24910,7 +25660,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j [DEBUG] visitUnaryExp: j @@ -24918,7 +25668,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -24926,7 +25676,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -24934,7 +25684,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55581199f420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7420, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -24950,7 +25700,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -24959,13 +25709,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55581199fcd0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a7cd0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -24973,7 +25723,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199e500, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a6500, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -25009,7 +25759,7 @@ SymbolTable::addSymbol: stored sum with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -25024,7 +25774,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n @@ -25037,7 +25787,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: sum+v[j]/func(j,i) [DEBUG] visitUnaryExp: sum @@ -25045,7 +25795,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: v[j] [DEBUG] visitPrimaryExp: v[j] @@ -25060,7 +25810,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] visitUnaryExp: func(j,i) @@ -25074,7 +25824,7 @@ SymbolTable::lookup: found func in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -25082,7 +25832,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 1 形参类型 1 [DEBUG] 检查参数 1: 实参类型 1 形参类型 1 @@ -25090,7 +25840,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: j+1 [DEBUG] visitUnaryExp: j @@ -25098,7 +25848,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found j in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = j, sym->kind = 0 绑定变量: j -> VarDefContext -CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x5558119aca50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: j, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4a50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -25114,7 +25864,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: sum @@ -25123,13 +25873,13 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found sum in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = sum, sym->kind = 0 绑定变量: sum -> VarDefContext -CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x5558119ad3b0, sym->const_def_ctx: 0 +CheckLValue 绑定变量: sum, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b53b0, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -25137,7 +25887,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55581199ba10, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2a3a10, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -25231,7 +25981,7 @@ SymbolTable::addSymbol: stored input with kind=2, const_def_ctx=0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -25244,7 +25994,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1e-6 [DEBUG] visitPrimaryExp: 1e-6 @@ -25253,7 +26003,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -25266,7 +26016,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: -1e-6 [DEBUG] visitUnaryExp: 1e-6 @@ -25276,7 +26026,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: (temp+input/temp)/2 [DEBUG] visitUnaryExp: (temp+input/temp) @@ -25287,7 +26037,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: input [DEBUG] visitPrimaryExp: input @@ -25300,7 +26050,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 2 [DEBUG] visitPrimaryExp: 2 @@ -25314,7 +26064,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found temp in scope level 1, kind=0, const_def_ctx=0 CheckLValue: found sym->name = temp, sym->kind = 0 绑定变量: temp -> VarDefContext -CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x5558119b8c50, sym->const_def_ctx: 0 +CheckLValue 绑定变量: temp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2c0c50, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 设置 current_func_has_return_ = true [DEBUG] 函数 my_sqrt has_return: 1 return_type_is_void: 0 @@ -25331,7 +26081,7 @@ SymbolTable::addSymbol: stored n with kind=0, const_def_ctx=0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 0 [DEBUG] visitPrimaryExp: 0 @@ -25340,7 +26090,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 2000 [DEBUG] visitUnaryExp: 2000 @@ -25393,21 +26143,21 @@ SymbolTable::addSymbol: stored i with kind=0, const_def_ctx=0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: n [DEBUG] visitPrimaryExp: n SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitStmt: Block [DEBUG] visitStmt: Assign ExpStmt SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 1 [DEBUG] CheckExp: i [DEBUG] visitUnaryExp: i @@ -25415,7 +26165,7 @@ dim_count: 1, subscript_count: 1 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 完全索引,返回元素类型 [DEBUG] CheckExp: 1 @@ -25425,7 +26175,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -25433,7 +26183,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -25441,7 +26191,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: 0 [DEBUG] visitUnaryExp: 0 @@ -25452,7 +26202,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1000 [DEBUG] visitPrimaryExp: 1000 @@ -25470,7 +26220,7 @@ SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -25479,7 +26229,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -25488,7 +26238,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: Vectortmp [DEBUG] visitUnaryExp: Vectortmp @@ -25496,7 +26246,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = Vectortmp, sym->kind = 0 绑定变量: Vectortmp -> VarDefContext -CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x5558119c9d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d1d30, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -25516,7 +26266,7 @@ SymbolTable::lookup: found mult_combin in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorA @@ -25525,7 +26275,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -25534,7 +26284,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: Vectortmp [DEBUG] visitUnaryExp: Vectortmp @@ -25542,7 +26292,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found Vectortmp in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = Vectortmp, sym->kind = 0 绑定变量: Vectortmp -> VarDefContext -CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x5558119c9d30, sym->const_def_ctx: 0 +CheckLValue 绑定变量: Vectortmp, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d1d30, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 @@ -25553,7 +26303,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] CheckExp: i+1 [DEBUG] visitUnaryExp: i @@ -25561,7 +26311,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found i in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = i, sym->kind = 0 绑定变量: i -> VarDefContext -CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x5558119ca670, sym->const_def_ctx: 0 +CheckLValue 绑定变量: i, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2d2670, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1 [DEBUG] visitPrimaryExp: 1 @@ -25590,7 +26340,7 @@ SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorA in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorA, sym->kind = 0 绑定变量: vectorA -> VarDefContext -CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x5558119ac190, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorA, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4190, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -25599,7 +26349,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -25608,7 +26358,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -25624,7 +26374,7 @@ SymbolTable::lookup: found Vectordot in scope level 1, kind=1, const_def_ctx=0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: vectorB @@ -25633,7 +26383,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found vectorB in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = vectorB, sym->kind = 0 绑定变量: vectorB -> VarDefContext -CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x5558119ac420, sym->const_def_ctx: 0 +CheckLValue 绑定变量: vectorB, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2b4420, sym->const_def_ctx: 0 dim_count: 1, subscript_count: 0 数组名作为地址 [DEBUG] CheckExp: n @@ -25642,7 +26392,7 @@ dim_count: 1, subscript_count: 0 SymbolTable::lookup: found n in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = n, sym->kind = 0 绑定变量: n -> VarDefContext -CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x5558119c2180, sym->const_def_ctx: 0 +CheckLValue 绑定变量: n, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2ca180, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] 检查参数 0: 实参类型 4 形参类型 4 [DEBUG] 检查参数 1: 实参类型 4 形参类型 4 @@ -25656,7 +26406,7 @@ SymbolTable::addSymbol: stored result with kind=0, const_def_ctx=0 SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = result, sym->kind = 0 绑定变量: result -> VarDefContext -CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x5558119d2890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2da890, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1.000000 [DEBUG] visitPrimaryExp: 1.000000 @@ -25667,7 +26417,7 @@ dim_count: 0, subscript_count: 0 SymbolTable::lookup: found result in scope level 3, kind=0, const_def_ctx=0 CheckLValue: found sym->name = result, sym->kind = 0 绑定变量: result -> VarDefContext -CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x5558119d2890, sym->const_def_ctx: 0 +CheckLValue 绑定变量: result, sym->kind: 0, sym->var_def_ctx: 0x55d0ce2da890, sym->const_def_ctx: 0 dim_count: 0, subscript_count: 0 [DEBUG] visitUnaryExp: 1.000000 [DEBUG] visitPrimaryExp: 1.000000 diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index a91f081..18b7169 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -5,7 +5,7 @@ #include "ir/IR.h" #include - +#include #include "utils/Log.h" namespace ir { @@ -59,6 +59,11 @@ BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, case Opcode::Mod: case Opcode::And: case Opcode::Or: + // 添加浮点操作码 + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: // 有效的二元操作符 break; case Opcode::Not: @@ -77,21 +82,33 @@ BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs, FormatError("ir", "CreateBinary 操作数类型不匹配")); } + // 检查是否为浮点操作 + bool is_float_op = (op == Opcode::FAdd || op == Opcode::FSub || + op == Opcode::FMul || op == Opcode::FDiv); - bool is_logical = (op == Opcode::And || op == Opcode::Or); - - if (is_logical) { - // 逻辑运算的结果是 int32(布尔值) - result_type = Type::GetInt32Type(); - } else { - // 算术运算的结果类型与操作数相同 + if (is_float_op) { + // 浮点操作要求操作数是浮点类型 + if (!lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "浮点运算要求操作数为浮点类型")); + } result_type = lhs->GetType(); - } - - // 检查操作数类型是否支持 - if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { - throw std::runtime_error( - FormatError("ir", "CreateBinary 只支持 int32 和 float 类型")); + } else { + bool is_logical = (op == Opcode::And || op == Opcode::Or); + + if (is_logical) { + // 逻辑运算的结果是 int32(布尔值) + result_type = Type::GetInt32Type(); + } else { + // 算术运算的结果类型与操作数相同 + result_type = lhs->GetType(); + } + + // 检查操作数类型是否支持 + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "CreateBinary 只支持 int32 和 float 类型")); + } } return insert_block_->Append(op, result_type, lhs, rhs, name); @@ -126,16 +143,30 @@ LoadInst* IRBuilder::CreateLoad(Value* ptr, const std::string& name) { } auto ptr_ty = ptr->GetType(); std::shared_ptr elem_ty; + if (ptr_ty->IsPtrInt32()) { elem_ty = Type::GetInt32Type(); } else if (ptr_ty->IsPtrFloat()) { elem_ty = Type::GetFloatType(); + } else if (ptr_ty->IsPtrInt1()) { + elem_ty = Type::GetInt1Type(); + } else if (ptr_ty->IsArray()) { + // 数组类型的指针,元素类型是数组元素类型 + auto* array_ty = dynamic_cast(ptr_ty.get()); + if (array_ty) { + elem_ty = array_ty->GetElementType(); + } else { + throw std::runtime_error(FormatError("ir", "不支持的指针类型")); + } } else { + // 尝试其他指针类型 throw std::runtime_error(FormatError("ir", "不支持的指针类型")); } + return insert_block_->Append(elem_ty, ptr, name); } + StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -148,6 +179,32 @@ StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { throw std::runtime_error( FormatError("ir", "IRBuilder::CreateStore 缺少 ptr")); } + + // 检查类型兼容性 + auto ptr_ty = ptr->GetType(); + auto val_ty = val->GetType(); + + if (ptr_ty->IsPtrInt32()) { + if (!val_ty->IsInt32()) { + throw std::runtime_error(FormatError("ir", "存储类型不匹配:期望 int32")); + } + } else if (ptr_ty->IsPtrFloat()) { + if (!val_ty->IsFloat()) { + throw std::runtime_error(FormatError("ir", "存储类型不匹配:期望 float")); + } + } else if (ptr_ty->IsArray()) { + // 数组存储:检查元素类型 + auto* array_ty = dynamic_cast(ptr_ty.get()); + if (array_ty) { + auto elem_ty = array_ty->GetElementType(); + if (elem_ty->IsInt32() && !val_ty->IsInt32()) { + throw std::runtime_error(FormatError("ir", "数组元素类型不匹配:期望 int32")); + } else if (elem_ty->IsFloat() && !val_ty->IsFloat()) { + throw std::runtime_error(FormatError("ir", "数组元素类型不匹配:期望 float")); + } + } + } + return insert_block_->Append(Type::GetVoidType(), val, ptr); } @@ -500,4 +557,64 @@ CallInst* IRBuilder::CreateCall(Function* callee, auto ret_ty = func_ty->GetReturnType(); return insert_block_->Append(ret_ty, callee, args, name); } + + +BinaryInst* IRBuilder::CreateFAdd(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FAdd, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFSub(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FSub, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFMul(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FMul, lhs->GetType(), lhs, rhs, name); +} + +BinaryInst* IRBuilder::CreateFDiv(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append(Opcode::FDiv, lhs->GetType(), lhs, rhs, name); +} + +// 浮点比较 +FcmpInst* IRBuilder::CreateFCmpOEQ(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OEQ, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpONE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::ONE, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOLT(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OLT, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOLE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OLE, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOGT(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OGT, lhs, rhs, Type::GetInt1Type(), name); +} + +FcmpInst* IRBuilder::CreateFCmpOGE(Value* lhs, Value* rhs, const std::string& name) { + return insert_block_->Append( + FcmpInst::Predicate::OGE, lhs, rhs, Type::GetInt1Type(), name); +} + +// 类型转换 +SIToFPInst* IRBuilder::CreateSIToFP(Value* value, std::shared_ptr target_ty, + const std::string& name) { + return insert_block_->Append(value, target_ty, name); +} + +FPToSIInst* IRBuilder::CreateFPToSI(Value* value, std::shared_ptr target_ty, + const std::string& name) { + return insert_block_->Append(value, target_ty, name); +} + } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index 053274a..c4b0624 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -69,6 +69,15 @@ static const char* OpcodeToString(Opcode op) { return "not"; case Opcode::GEP: return "getelementptr"; + case Opcode::FAdd: return "fadd"; + case Opcode::FSub: return "fsub"; + case Opcode::FMul: return "fmul"; + case Opcode::FDiv: return "fdiv"; + case Opcode::FCmp: return "fcmp"; + case Opcode::SIToFP: return "sitofp"; + case Opcode::FPToSI: return "fptosi"; + case Opcode::FPExt: return "fpext"; + case Opcode::FPTrunc: return "fptrunc"; } return "?"; } diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index bc8e2d8..bc324f1 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -105,16 +105,22 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { } std::string const_name = ctx->Ident()->getText(); - std::cerr << "[DEBUG] visitConstDef: processing constant " << const_name << std::endl; // 检查是否为数组 bool is_array = !ctx->constExp().empty(); + // 获取常量类型(int 或 float) + bool is_float = false; + auto* constDecl = dynamic_cast(ctx->parent); + if (constDecl && constDecl->bType()) { + if (constDecl->bType()->Float()) { + is_float = true; + std::cerr << "[DEBUG] visitConstDef: 常量 " << const_name << " 是 float 类型" << std::endl; + } + } + if (is_array) { - // 数组常量处理 - 创建全局常量数组 - std::cerr << "[DEBUG] visitConstDef: array constant " << const_name << std::endl; - - // 获取数组维度 + // 数组常量处理 std::vector dimensions; for (auto* const_exp : ctx->constExp()) { int dim_size = TryEvaluateConstInt(const_exp); @@ -123,7 +129,14 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { } // 创建数组类型 - auto array_type = ir::Type::GetArrayType(ir::Type::GetInt32Type(), dimensions); + std::shared_ptr element_type; + if (is_float) { + element_type = ir::Type::GetFloatType(); + } else { + element_type = ir::Type::GetInt32Type(); + } + + auto array_type = ir::Type::GetArrayType(element_type, dimensions); ir::GlobalValue* global_array = module_.CreateGlobal(const_name, array_type); // 处理初始化值 @@ -134,17 +147,43 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { try { auto init_vec = std::any_cast>(result); for (auto* val : init_vec) { - if (auto* const_int = dynamic_cast(val)) { - init_consts.push_back(const_int); + if (is_float) { + if (auto* const_float = dynamic_cast(val)) { + init_consts.push_back(const_float); + } else if (auto* const_int = dynamic_cast(val)) { + // 整数转浮点 + float float_val = static_cast(const_int->GetValue()); + init_consts.push_back(builder_.CreateConstFloat(float_val)); + } else { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } } else { - init_consts.push_back(builder_.CreateConstInt(0)); + if (auto* const_int = dynamic_cast(val)) { + init_consts.push_back(const_int); + } else if (auto* const_float = dynamic_cast(val)) { + // 浮点转整数 + int int_val = static_cast(const_float->GetValue()); + init_consts.push_back(builder_.CreateConstInt(int_val)); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } } } catch (const std::bad_any_cast&) { try { ir::Value* single_val = std::any_cast(result); - if (auto* const_int = dynamic_cast(single_val)) { - init_consts.push_back(const_int); + if (is_float) { + if (auto* const_float = dynamic_cast(single_val)) { + init_consts.push_back(const_float); + } else { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } + } else { + if (auto* const_int = dynamic_cast(single_val)) { + init_consts.push_back(const_int); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } } catch (...) {} } @@ -155,50 +194,47 @@ std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { int total_size = 1; for (int dim : dimensions) total_size *= dim; while (init_consts.size() < static_cast(total_size)) { - init_consts.push_back(builder_.CreateConstInt(0)); + if (is_float) { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } global_array->SetInitializer(init_consts); global_array->SetConstant(true); - // 存储到常量映射(而不是storage_map_) const_storage_map_[ctx] = global_array; const_global_map_[const_name] = global_array; } else { - // 标量常量处理 - 直接求值并存储常量值 - std::cerr << "[DEBUG] visitConstDef: scalar constant " << const_name << std::endl; - + // 标量常量处理 if (!ctx->constInitVal()) { throw std::runtime_error(FormatError("irgen", "常量缺少初始值")); } - // 求值常量表达式 - // 求值常量表达式 - auto* const_init_val = ctx->constInitVal(); - - // 关键修改:直接求值常量表达式,不使用 builder_ ir::ConstantValue* const_value = nullptr; + auto* const_init_val = ctx->constInitVal(); if (const_init_val->constExp()) { - // 直接访问常量表达式的值,不通过 IR 生成 - int value = TryEvaluateConstInt(const_init_val->constExp()); - // 使用 Context 直接创建常量,不依赖 builder_ - const_value = module_.GetContext().GetConstInt(value); - std::cerr << "[DEBUG] visitConstDef: constant " << const_name - << " = " << value << std::endl; + // 对于常量表达式,我们可以尝试直接求值 + if (is_float) { + // TODO: 实现浮点常量表达式的求值 + const_value = module_.GetContext().GetConstFloat(0.0f); + } else { + int value = TryEvaluateConstInt(const_init_val->constExp()); + const_value = module_.GetContext().GetConstInt(value); + } } else { - const_value = module_.GetContext().GetConstInt(0); + if (is_float) { + const_value = module_.GetContext().GetConstFloat(0.0f); + } else { + const_value = module_.GetContext().GetConstInt(0); + } } // 存储常量值到映射 const_value_map_[const_name] = const_value; - - // 同时也保存一个虚拟指针用于统一接口(可选) - // auto* dummy_slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + const_name); - // builder_.CreateStore(const_value, dummy_slot); - // const_storage_map_[ctx] = dummy_slot; - std::cerr << "[DEBUG] visitConstDef: scalar constant stored, no alloca created" << std::endl; } return {}; @@ -242,8 +278,20 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, const std::string& varName, bool is_array) { std::cerr << "[DEBUG] HandleGlobalVariable: 开始处理全局变量 " << varName << std::endl; + + // 获取变量类型(int 或 float) + bool is_float = false; + auto* varDecl = dynamic_cast(ctx->parent); + if (varDecl && varDecl->bType()) { + if (varDecl->bType()->Float()) { + is_float = true; + std::cerr << "[DEBUG] HandleGlobalVariable: 变量 " << varName << " 是 float 类型" << std::endl; + } else if (varDecl->bType()->Int()) { + std::cerr << "[DEBUG] HandleGlobalVariable: 变量 " << varName << " 是 int 类型" << std::endl; + } + } + if (is_array) { - std::cerr << "[DEBUG] HandleGlobalVariable: 处理全局数组变量" << std::endl; // 全局数组变量 int total_size = 1; std::vector dimensions; @@ -261,12 +309,15 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, std::cerr << "[DEBUG] HandleGlobalVariable: 数组总大小: " << total_size << std::endl; - if (total_size <= 0 || total_size > 10000) { - throw std::runtime_error(FormatError("irgen", "全局数组大小无效")); + // 创建数组类型 + std::shared_ptr element_type; + if (is_float) { + element_type = ir::Type::GetFloatType(); + } else { + element_type = ir::Type::GetInt32Type(); } - // 创建数组类型的全局变量 - auto array_type = ir::Type::GetArrayType(ir::Type::GetInt32Type(), dimensions); + auto array_type = ir::Type::GetArrayType(element_type, dimensions); ir::GlobalValue* global_array = module_.CreateGlobal(varName, array_type); std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局数组: " << varName << std::endl; @@ -277,26 +328,36 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, auto result = initVal->accept(this); if (result.has_value()) { try { - // 尝试获取初始化值列表 auto init_vec = std::any_cast>(result); std::cerr << "[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: " << init_vec.size() << std::endl; for (auto* val : init_vec) { if (auto* const_int = dynamic_cast(val)) { init_consts.push_back(const_int); + } else if (auto* const_float = dynamic_cast(val)) { + init_consts.push_back(const_float); } else { // 非常量表达式,使用0 - init_consts.push_back(builder_.CreateConstInt(0)); + if (is_float) { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } } } catch (const std::bad_any_cast&) { try { - // 可能是单个值 ir::Value* single_val = std::any_cast(result); std::cerr << "[DEBUG] HandleGlobalVariable: 获取到单个初始化值" << std::endl; if (auto* const_int = dynamic_cast(single_val)) { init_consts.push_back(const_int); + } else if (auto* const_float = dynamic_cast(single_val)) { + init_consts.push_back(const_float); } else { - init_consts.push_back(builder_.CreateConstInt(0)); + if (is_float) { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } } catch (const std::bad_any_cast&) { std::cerr << "[WARNING] HandleGlobalVariable: 无法解析数组初始化值" << std::endl; @@ -307,7 +368,11 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, // 如果初始化值不足,补0 while (init_consts.size() < static_cast(total_size)) { - init_consts.push_back(builder_.CreateConstInt(0)); + if (is_float) { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); + } } // 设置全局数组的初始化器 @@ -316,29 +381,20 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, std::cerr << "[DEBUG] HandleGlobalVariable: 设置全局数组初始化器" << std::endl; } - // 判断是否为常量(检查父节点是否为 ConstDef) - if (ctx->parent && dynamic_cast(ctx->parent)) { - global_array->SetConstant(true); - std::cerr << "[DEBUG] HandleGlobalVariable: 设置为常量数组" << std::endl; - } - // 存储全局变量引用 storage_map_[ctx] = global_array; - global_map_[varName] = global_array;//按名称映射 - std::cerr << "[DEBUG] HandleGlobalVariable: 存储全局数组引用" << std::endl; - - // 保存数组信息 - ArrayInfo info; - info.elements.clear(); // 全局数组不预先分配元素槽位 - info.dimensions = dimensions; - array_info_map_[ctx] = info; + global_map_[varName] = global_array; - std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局数组 " << varName - << ",总大小 " << total_size << std::endl; } else { - std::cerr << "[DEBUG] HandleGlobalVariable: 处理全局标量变量" << std::endl; // 全局标量变量 - ir::GlobalValue* global_var = module_.CreateGlobal(varName, ir::Type::GetInt32Type()); + std::shared_ptr var_type; + if (is_float) { + var_type = ir::Type::GetFloatType(); + } else { + var_type = ir::Type::GetInt32Type(); + } + + ir::GlobalValue* global_var = module_.CreateGlobal(varName, var_type); std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局标量变量: " << varName << std::endl; // 处理初始化值 @@ -349,111 +405,129 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, if (result.has_value()) { try { ir::Value* val = std::any_cast(result); - if (auto* const_int = dynamic_cast(val)) { - init_value = const_int; - std::cerr << "[DEBUG] HandleGlobalVariable: 获取到常量初始化值" << std::endl; + if (is_float) { + if (auto* const_float = dynamic_cast(val)) { + init_value = const_float; + } else if (auto* const_int = dynamic_cast(val)) { + // 整数转浮点 + float float_val = static_cast(const_int->GetValue()); + init_value = builder_.CreateConstFloat(float_val); + } else { + init_value = builder_.CreateConstFloat(0.0f); + } } else { - // 默认初始化为0 - init_value = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleGlobalVariable: 使用默认初始化值0" << std::endl; + if (auto* const_int = dynamic_cast(val)) { + init_value = const_int; + } else if (auto* const_float = dynamic_cast(val)) { + // 浮点转整数 + int int_val = static_cast(const_float->GetValue()); + init_value = builder_.CreateConstInt(int_val); + } else { + init_value = builder_.CreateConstInt(0); + } } } catch (const std::bad_any_cast&) { - init_value = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleGlobalVariable: 类型转换失败,使用默认初始化值0" << std::endl; + if (is_float) { + init_value = builder_.CreateConstFloat(0.0f); + } else { + init_value = builder_.CreateConstInt(0); + } } - } else { - std::cerr << "[DEBUG] HandleGlobalVariable: 无初始化值结果" << std::endl; } - } else { - std::cerr << "[DEBUG] HandleGlobalVariable: 无初始化值" << std::endl; } - // 如果没有初始化值,默认初始化为0 + // 如果没有初始化值,默认初始化 if (!init_value) { - init_value = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleGlobalVariable: 使用默认初始化值0" << std::endl; + if (is_float) { + init_value = builder_.CreateConstFloat(0.0f); + } else { + init_value = builder_.CreateConstInt(0); + } } // 设置全局变量的初始化器 global_var->SetInitializer(init_value); - std::cerr << "[DEBUG] HandleGlobalVariable: 设置全局变量初始化器" << std::endl; - - // 判断是否为常量 - if (ctx->parent && dynamic_cast(ctx->parent)) { - global_var->SetConstant(true); - std::cerr << "[DEBUG] HandleGlobalVariable: 设置为常量" << std::endl; - } // 存储全局变量引用 storage_map_[ctx] = global_var; global_map_[varName] = global_var; - std::cerr << "[DEBUG] HandleGlobalVariable: 存储全局变量引用" << std::endl; - - std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局变量 " << varName << std::endl; } - std::cerr << "[DEBUG] HandleGlobalVariable: 全局变量处理完成" << std::endl; return {}; } +// 修改 HandleLocalVariable 函数中的数组处理部分 + std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, const std::string& varName, bool is_array) { std::cerr << "[DEBUG] HandleLocalVariable: 开始处理局部变量 " << varName << std::endl; + + // 获取变量类型 + bool is_float = false; + auto* varDecl = dynamic_cast(ctx->parent); + if (varDecl && varDecl->bType()) { + if (varDecl->bType()->Float()) { + is_float = true; + std::cerr << "[DEBUG] HandleLocalVariable: 变量 " << varName << " 是 float 类型" << std::endl; + } + } + if (is_array) { - std::cerr << "[DEBUG] HandleLocalVariable: 处理局部数组变量" << std::endl; // 局部数组变量 int total_size = 1; std::vector dimensions; - + // 获取数组维度 for (auto* const_exp : ctx->constExp()) { try { int dim_size = TryEvaluateConstInt(const_exp); - if (dim_size <= 0) { - dim_size = 1; - std::cerr << "[WARNING] HandleLocalVariable: 无法确定数组维度大小,使用1" << std::endl; - } + if (dim_size <= 0) dim_size = 1; dimensions.push_back(dim_size); total_size *= dim_size; } catch (const std::exception& e) { - std::cerr << "[WARNING] HandleLocalVariable: 无法获取数组维度: " << e.what() - << ",使用维度1" << std::endl; + std::cerr << "[WARNING] HandleLocalVariable: 无法获取数组维度,使用维度1" << std::endl; dimensions.push_back(1); total_size *= 1; } } - - std::cerr << "[DEBUG] HandleLocalVariable: 数组总大小: " << total_size << std::endl; - - if (total_size <= 0) { - throw std::runtime_error(FormatError("irgen", "数组大小必须为正数")); - } - - if (total_size > 10000) { - throw std::runtime_error(FormatError("irgen", "数组大小太大")); + + // 创建数组类型 + std::shared_ptr elem_type; + if (is_float) { + elem_type = ir::Type::GetFloatType(); + } else { + elem_type = ir::Type::GetInt32Type(); } - // 分配数组存储 - 为每个元素创建独立的 alloca + // 修正:使用完整的维度列表创建数组类型 + auto array_type = ir::Type::GetArrayType(elem_type, dimensions); + + // 分配数组内存 - 为每个元素创建独立的 alloca std::vector element_slots; - std::cerr << "[DEBUG] HandleLocalVariable: 为数组元素分配存储空间" << std::endl; for (int i = 0; i < total_size; i++) { - auto* slot = builder_.CreateAllocaI32( - module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); + ir::AllocaInst* slot; + if (is_float) { + slot = builder_.CreateAllocaFloat( + module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); + } else { + slot = builder_.CreateAllocaI32( + module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); + } element_slots.push_back(slot); } - + + // 存储第一个元素的地址作为数组的基地址 + storage_map_[ctx] = element_slots[0]; + local_var_map_[varName] = element_slots[0]; + // 处理初始化 if (auto* initVal = ctx->initVal()) { - std::cerr << "[DEBUG] HandleLocalVariable: 处理数组初始化值" << std::endl; auto result = initVal->accept(this); - if (result.has_value()) { try { - // 尝试获取初始化值列表 std::vector init_values = std::any_cast>(result); - std::cerr << "[DEBUG] HandleLocalVariable: 获取到初始化值列表, 大小: " << init_values.size() << std::endl; // 初始化数组元素 for (size_t i = 0; i < init_values.size() && i < static_cast(total_size); i++) { @@ -462,114 +536,119 @@ std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, // 剩余元素初始化为0 for (size_t i = init_values.size(); i < static_cast(total_size); i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + if (is_float) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } catch (const std::bad_any_cast&) { - // 可能返回的是单个值 try { ir::Value* single_value = std::any_cast(result); - std::cerr << "[DEBUG] HandleLocalVariable: 获取到单个初始化值" << std::endl; // 只初始化第一个元素 builder_.CreateStore(single_value, element_slots[0]); // 其他元素初始化为0 for (int i = 1; i < total_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + if (is_float) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } catch (const std::bad_any_cast&) { - std::cerr << "[ERROR] HandleLocalVariable: 无法解析数组初始化值类型" << std::endl; // 全部初始化为0 for (int i = 0; i < total_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + if (is_float) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } } } else { - std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值结果" << std::endl; // 没有初始化值,全部初始化为0 for (int i = 0; i < total_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + if (is_float) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } } else { - std::cerr << "[DEBUG] HandleLocalVariable: 无初始化,全部初始化为0" << std::endl; // 无初始化,所有元素初始化为0 for (int i = 0; i < total_size; i++) { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + if (is_float) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + } else { + builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + } } } - - // 存储第一个元素的地址作为数组的基地址 - storage_map_[ctx] = element_slots[0]; - local_var_map_[varName] = element_slots[0]; // 添加到局部变量映射,按名称映射 - std::cerr << "[DEBUG] HandleLocalVariable: 存储数组引用" << std::endl; - - // 保存数组信息 - ArrayInfo info; - info.elements = element_slots; - info.dimensions = dimensions; - array_info_map_[ctx] = info; - - std::cerr << "[DEBUG] HandleLocalVariable: 创建局部数组 " << varName - << ",维度 "; - for (size_t i = 0; i < dimensions.size(); i++) { - std::cerr << dimensions[i]; - if (i < dimensions.size() - 1) std::cerr << "×"; - } - std::cerr << ",总大小 " << total_size << std::endl; - } else { - std::cerr << "[DEBUG] HandleLocalVariable: 处理局部标量变量" << std::endl; // 局部标量变量 - auto* slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + varName); + ir::AllocaInst* slot; + if (is_float) { + slot = builder_.CreateAllocaFloat(module_.GetContext().NextTemp() + "_" + varName); + } else { + slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + varName); + } + storage_map_[ctx] = slot; - local_var_map_[varName] = slot; // 添加到局部变量映射 - std::cerr << "[DEBUG] HandleLocalVariable: 创建局部标量变量存储槽" << std::endl; + local_var_map_[varName] = slot; // 处理初始化 ir::Value* init = nullptr; if (auto* initVal = ctx->initVal()) { - std::cerr << "[DEBUG] HandleLocalVariable: 处理标量初始化值" << std::endl; auto result = initVal->accept(this); if (result.has_value()) { try { init = std::any_cast(result); - std::cerr << "[DEBUG] HandleLocalVariable: 获取到初始化值" << std::endl; } catch (const std::bad_any_cast&) { - // 可能是聚合初始化返回的 vector,但标量只取第一个值 try { std::vector init_values = std::any_cast>(result); if (!init_values.empty()) { init = init_values[0]; - std::cerr << "[DEBUG] HandleLocalVariable: 从列表获取第一个初始化值" << std::endl; } else { - init = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleLocalVariable: 初始化列表为空,使用0" << std::endl; + if (is_float) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } } } catch (const std::bad_any_cast&) { - init = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleLocalVariable: 无法解析初始化值类型,使用0" << std::endl; + if (is_float) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } } } } else { - init = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值结果,使用0" << std::endl; + if (is_float) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } } } else { - init = builder_.CreateConstInt(0); - std::cerr << "[DEBUG] HandleLocalVariable: 无初始化值,使用0" << std::endl; + if (is_float) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } } builder_.CreateStore(init, slot); - std::cerr << "[DEBUG] HandleLocalVariable: 创建局部变量 " << varName - << ",初始值 " << (void*)init << std::endl; } - std::cerr << "[DEBUG] HandleLocalVariable: 局部变量处理完成" << std::endl; return {}; } + std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { std::cerr << "[DEBUG] visitInitVal: 开始处理初始化值" << std::endl; if (!ctx) { diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 4cbdf25..9e33971 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -79,6 +79,41 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { return static_cast(const_int); } + if (ctx->HEX_FLOAT()) { + std::string hex_float_str = ctx->HEX_FLOAT()->getText(); + float value = 0.0f; + // 解析十六进制浮点数 + try { + // C++11 的 std::stof 支持十六进制浮点数表示 + value = std::stof(hex_float_str); + } catch (const std::exception& e) { + std::cerr << "[WARNING] 无法解析十六进制浮点数: " << hex_float_str + << ",使用0.0代替" << std::endl; + value = 0.0f; + } + ir::Value* const_float = builder_.CreateConstFloat(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant hex float " << value + << " created as " << (void*)const_float << std::endl; + return static_cast(const_float); + } + + // 处理十进制浮点常量 + if (ctx->DEC_FLOAT()) { + std::string dec_float_str = ctx->DEC_FLOAT()->getText(); + float value = 0.0f; + try { + value = std::stof(dec_float_str); + } catch (const std::exception& e) { + std::cerr << "[WARNING] 无法解析十进制浮点数: " << dec_float_str + << ",使用0.0代替" << std::endl; + value = 0.0f; + } + ir::Value* const_float = builder_.CreateConstFloat(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant dec float " << value + << " created as " << (void*)const_float << std::endl; + return static_cast(const_float); + } + if (ctx->HEX_INT()) { std::string hex = ctx->HEX_INT()->getText(); int value = std::stoi(hex, nullptr, 16); @@ -217,7 +252,7 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); } } -// 加法表达式 + std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { std::cout << "[DEBUG IRGEN] visitAddExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { @@ -243,23 +278,45 @@ std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { } ir::Value* right = std::any_cast(right_any); - std::cerr << "[DEBUG] visitAddExp: left=" << (void*)left << ", right=" << (void*)right << std::endl; + std::cerr << "[DEBUG] visitAddExp: left=" << (void*)left + << ", type=" << (left->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)right + << ", type=" << (right->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (left->GetType()->IsFloat() != right->GetType()->IsFloat()) { + if (left->GetType()->IsFloat()) { + // left是float,right是int,需要将right转换为float + right = builder_.CreateSIToFP(right, ir::Type::GetFloatType()); + } else { + // right是float,left是int,需要将left转换为float + left = builder_.CreateSIToFP(left, ir::Type::GetFloatType()); + } + } // 根据操作符生成相应的指令 if (ctx->AddOp()) { - return static_cast( - builder_.CreateAdd(left, right, module_.GetContext().NextTemp())); + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFAdd(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateAdd(left, right, module_.GetContext().NextTemp())); + } } else if (ctx->SubOp()) { - return static_cast( - builder_.CreateSub(left, right, module_.GetContext().NextTemp())); + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFSub(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateSub(left, right, module_.GetContext().NextTemp())); + } } throw std::runtime_error(FormatError("irgen", "未知的加法操作符")); } -// 在 IRGenExp.cpp 中添加 -// visitMulExp std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { std::cout << "[DEBUG IRGEN] visitMulExp: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { @@ -285,14 +342,45 @@ std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { } ir::Value* right = std::any_cast(right_any); + std::cerr << "[DEBUG] visitMulExp: left=" << (void*)left + << ", type=" << (left->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)right + << ", type=" << (right->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (left->GetType()->IsFloat() != right->GetType()->IsFloat()) { + if (left->GetType()->IsFloat()) { + // left是float,right是int,需要将right转换为float + right = builder_.CreateSIToFP(right, ir::Type::GetFloatType()); + } else { + // right是float,left是int,需要将left转换为float + left = builder_.CreateSIToFP(left, ir::Type::GetFloatType()); + } + } + // 根据操作符生成指令 if (ctx->MulOp()) { - return static_cast( - builder_.CreateMul(left, right, module_.GetContext().NextTemp())); + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFMul(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateMul(left, right, module_.GetContext().NextTemp())); + } } else if (ctx->DivOp()) { - return static_cast( - builder_.CreateDiv(left, right, module_.GetContext().NextTemp())); + if (left->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFDiv(left, right, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateDiv(left, right, module_.GetContext().NextTemp())); + } } else if (ctx->QuoOp()) { + // 取模运算:浮点数不支持取模,只支持整数 + if (left->GetType()->IsFloat() || right->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("irgen", "浮点数不支持取模运算")); + } return static_cast( builder_.CreateMod(left, right, module_.GetContext().NextTemp())); } @@ -301,6 +389,7 @@ std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { } + // 逻辑与 std::any IRGenImpl::visitLAndExp(SysYParser::LAndExpContext* ctx) { if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑与表达式")); @@ -456,8 +545,6 @@ ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) return nullptr; } - -// 实现一元表达式 std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法一元表达式")); @@ -482,13 +569,33 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { // +x 等价于 x return operand; } else if (op == "-") { - // -x 等价于 0 - x - ir::Value* zero = builder_.CreateConstInt(0); - return static_cast( - builder_.CreateBinary(ir::Opcode::Sub, zero, operand, - module_.GetContext().NextTemp())); + // -x 根据操作数类型选择整数或浮点减法 + if (operand->GetType()->IsFloat()) { + // 浮点取负:0.0 - x + ir::Value* zero_float = builder_.CreateConstFloat(0.0f); + return static_cast( + builder_.CreateFSub(zero_float, operand, module_.GetContext().NextTemp())); + } else { + // 整数取负:0 - x + ir::Value* zero = builder_.CreateConstInt(0); + return static_cast( + builder_.CreateSub(zero, operand, module_.GetContext().NextTemp())); + } } else if (op == "!") { - return builder_.CreateNot(operand, module_.GetContext().NextTemp()); + // 逻辑非运算 + // 先将值转换为bool(与0比较) + ir::Value* zero; + if (operand->GetType()->IsFloat()) { + zero = builder_.CreateConstFloat(0.0f); + // 浮点比较:不等于0 + ir::Value* cmp = builder_.CreateFCmpONE(operand, zero, module_.GetContext().NextTemp()); + // 将bool转换为int + return static_cast( + builder_.CreateZExt(cmp, ir::Type::GetInt32Type())); + } else { + zero = builder_.CreateConstInt(0); + return builder_.CreateNot(operand, module_.GetContext().NextTemp()); + } } } @@ -610,22 +717,59 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { auto right_any = ctx->addExp()->accept(this); auto* lhs = std::any_cast(left_any); auto* rhs = std::any_cast(right_any); - + + std::cerr << "[DEBUG] visitRelExp: left=" << (void*)lhs + << ", type=" << (lhs->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)rhs + << ", type=" << (rhs->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (lhs->GetType()->IsFloat() != rhs->GetType()->IsFloat()) { + if (lhs->GetType()->IsFloat()) { + // lhs是float,rhs是int,需要将rhs转换为float + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType()); + } else { + // rhs是float,lhs是int,需要将lhs转换为float + lhs = builder_.CreateSIToFP(lhs, ir::Type::GetFloatType()); + } + } + + // 根据操作数和类型选择指令 if (ctx->LOp()) { - return static_cast( - builder_.CreateICmpLT(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOLT(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpLT(lhs, rhs, module_.GetContext().NextTemp())); + } } if (ctx->GOp()) { - return static_cast( - builder_.CreateICmpGT(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOGT(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpGT(lhs, rhs, module_.GetContext().NextTemp())); + } } if (ctx->LeOp()) { - return static_cast( - builder_.CreateICmpLE(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOLE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpLE(lhs, rhs, module_.GetContext().NextTemp())); + } } if (ctx->GeOp()) { - return static_cast( - builder_.CreateICmpGE(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOGE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpGE(lhs, rhs, module_.GetContext().NextTemp())); + } } throw std::runtime_error(FormatError("irgen", "未知关系运算符")); } @@ -637,7 +781,6 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "关系表达式暂未实现")); } -// 相等表达式(支持 ==, !=) std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法相等表达式")); @@ -648,14 +791,41 @@ std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { auto right_any = ctx->relExp()->accept(this); auto* lhs = std::any_cast(left_any); auto* rhs = std::any_cast(right_any); - + + std::cerr << "[DEBUG] visitEqExp: left=" << (void*)lhs + << ", type=" << (lhs->GetType()->IsFloat() ? "float" : "int") + << ", right=" << (void*)rhs + << ", type=" << (rhs->GetType()->IsFloat() ? "float" : "int") << std::endl; + + // 处理类型转换:如果操作数类型不同,需要进行类型转换 + if (lhs->GetType()->IsFloat() != rhs->GetType()->IsFloat()) { + if (lhs->GetType()->IsFloat()) { + // lhs是float,rhs是int,需要将rhs转换为float + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType()); + } else { + // rhs是float,lhs是int,需要将lhs转换为float + lhs = builder_.CreateSIToFP(lhs, ir::Type::GetFloatType()); + } + } + + // 根据操作符和类型选择指令 if (ctx->EqOp()) { - return static_cast( - builder_.CreateICmpEQ(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpOEQ(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpEQ(lhs, rhs, module_.GetContext().NextTemp())); + } } if (ctx->NeOp()) { - return static_cast( - builder_.CreateICmpNE(lhs, rhs, module_.GetContext().NextTemp())); + if (lhs->GetType()->IsFloat()) { + return static_cast( + builder_.CreateFCmpONE(lhs, rhs, module_.GetContext().NextTemp())); + } else { + return static_cast( + builder_.CreateICmpNE(lhs, rhs, module_.GetContext().NextTemp())); + } } throw std::runtime_error(FormatError("irgen", "未知相等运算符")); } @@ -667,6 +837,7 @@ std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "相等表达式暂未实现")); } + ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { std::cout << "[DEBUG IRGEN] visitCond: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->lVal() || !ctx->exp()) { diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index 64771f7..f9b42f2 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -158,15 +158,23 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { std::vector> param_types; if (ctx->funcFParams()) { for (auto* param : ctx->funcFParams()->funcFParam()) { - if (!param || !param->bType()) continue; + if (!param || !param->Ident()) continue; + std::string name = param->Ident()->getText(); std::shared_ptr param_ty; + + // 检查 bType 是否存在 + if (!param->bType()) { + throw std::runtime_error(FormatError("irgen", "函数参数缺少类型: " + name)); + } + if (param->bType()->Int()) { param_ty = ir::Type::GetInt32Type(); } else if (param->bType()->Float()) { param_ty = ir::Type::GetFloatType(); } else { - param_ty = ir::Type::GetInt32Type(); + param_ty = ir::Type::GetInt32Type(); // 默认值 } + if (!param->L_BRACK().empty()) { if (param_ty->IsInt32()) { param_ty = ir::Type::GetPtrInt32Type(); @@ -174,22 +182,53 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { param_ty = ir::Type::GetPtrFloatType(); } } + param_types.push_back(param_ty); } } + // 创建函数类型 auto func_type = ir::Type::GetFunctionType(ret_type, param_types); + + // 调试输出 + std::cerr << "[DEBUG] visitFuncDef: 创建函数 " << funcName + << ",返回类型: " << (ret_type->IsVoid() ? "void" : ret_type->IsFloat() ? "float" : "int") + << ",参数数量: " << param_types.size() << std::endl; + + // 创建函数对象 func_ = module_.CreateFunction(funcName, func_type); - builder_.SetInsertPoint(func_->GetEntry()); + + // 检查函数是否成功创建 + if (!func_) { + std::cerr << "[ERROR] visitFuncDef: 创建函数失败,func_ 为 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "创建函数失败: " + funcName)); + } + + std::cerr << "[DEBUG] visitFuncDef: 函数对象地址: " << (void*)func_ << std::endl; + + // 设置插入点 + auto* entry_block = func_->GetEntry(); + if (!entry_block) { + std::cerr << "[ERROR] visitFuncDef: 函数入口基本块为空!" << std::endl; + throw std::runtime_error(FormatError("irgen", "函数入口基本块为空: " + funcName)); + } + + builder_.SetInsertPoint(entry_block); storage_map_.clear(); param_map_.clear(); - // 函数参数 (按照语义分析、symbol table 定义顺序) + // 函数参数处理 if (ctx->funcFParams()) { for (auto* param : ctx->funcFParams()->funcFParam()) { if (!param || !param->Ident()) continue; std::string name = param->Ident()->getText(); std::shared_ptr param_ty; + + // 再次检查 bType + if (!param->bType()) { + throw std::runtime_error(FormatError("irgen", "函数参数缺少类型: " + name)); + } + if (param->bType()->Int()) { param_ty = ir::Type::GetInt32Type(); } else if (param->bType()->Float()) { @@ -197,6 +236,7 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { } else { param_ty = ir::Type::GetInt32Type(); } + if (!param->L_BRACK().empty()) { if (param_ty->IsInt32()) { param_ty = ir::Type::GetPtrInt32Type(); @@ -204,8 +244,35 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { param_ty = ir::Type::GetPtrFloatType(); } } - auto* arg = func_->AddArgument(std::make_unique(param_ty, name)); - ir::AllocaInst* slot; + + // 检查函数对象是否有效 + if (!func_) { + std::cerr << "[ERROR] visitFuncDef: func_ 在添加参数时变为 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "函数对象无效")); + } + + std::cerr << "[DEBUG] visitFuncDef: 为函数 " << funcName + << " 添加参数 " << name << ",类型: " + << (param_ty->IsInt32() ? "int32" : param_ty->IsFloat() ? "float" : + param_ty->IsPtrInt32() ? "ptr_int32" : param_ty->IsPtrFloat() ? "ptr_float" : "other") + << std::endl; + + // 创建参数并添加到函数 + auto arg = std::make_unique(param_ty, name); + if (!arg) { + throw std::runtime_error(FormatError("irgen", "创建参数失败: " + name)); + } + + auto* arg_ptr = arg.get(); + auto* added_arg = func_->AddArgument(std::move(arg)); + + if (!added_arg) { + std::cerr << "[ERROR] visitFuncDef: AddArgument 返回 nullptr!" << std::endl; + throw std::runtime_error(FormatError("irgen", "添加参数失败: " + name)); + } + + // 为参数创建存储槽位 + ir::AllocaInst* slot = nullptr; if (param_ty->IsInt32() || param_ty->IsPtrInt32()) { slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); } else if (param_ty->IsFloat() || param_ty->IsPtrFloat()) { @@ -213,24 +280,43 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { } else { throw std::runtime_error(FormatError("irgen", "不支持的参数类型")); } - builder_.CreateStore(arg, slot); + + if (!slot) { + throw std::runtime_error(FormatError("irgen", "创建参数存储槽位失败: " + name)); + } + + builder_.CreateStore(added_arg, slot); param_map_[name] = slot; + + std::cerr << "[DEBUG] visitFuncDef: 参数 " << name << " 处理完成" << std::endl; } } // 生成函数体 + std::cerr << "[DEBUG] visitFuncDef: 开始生成函数体" << std::endl; ctx->block()->accept(this); + // 如果函数没有终止指令,添加默认返回 if (!func_->GetEntry()->HasTerminator()) { + std::cerr << "[DEBUG] visitFuncDef: 函数体没有终止指令,添加默认返回" << std::endl; auto retVal = builder_.CreateConstInt(0); builder_.CreateRet(retVal); } - VerifyFunctionStructure(*func_); + // 验证函数结构 + try { + VerifyFunctionStructure(*func_); + } catch (const std::exception& e) { + std::cerr << "[ERROR] visitFuncDef: 验证函数结构失败: " << e.what() << std::endl; + throw; + } + + std::cerr << "[DEBUG] visitFuncDef: 函数 " << funcName << " 生成完成" << std::endl; func_ = nullptr; return {}; } + std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { std::cout << "[DEBUG IRGEN] visitBlock: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index 056984a..18c74d7 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -62,26 +62,65 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { throw std::runtime_error(FormatError("irgen", "暂不支持的语句类型")); } +// 修改 HandleReturnStmt 函数 + IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { std::cout << "[DEBUG IRGEN] HandleReturnStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); } - ir::Value* retValue = nullptr; - if (ctx->exp()) { - std::cout << "[DEBUG IRGEN] HandleReturnStmt eval exp: " << ctx->exp()->getText() << std::endl; - retValue = EvalExpr(*ctx->exp()); + // 检查函数是否存在 + if (!func_) { + throw std::runtime_error(FormatError("irgen", "Return语句不在函数中")); } - // 如果没有表达式,返回0(对于int main) - if (!retValue) { - retValue = builder_.CreateConstInt(0); + + // 获取函数类型中的返回类型 + auto func_type = std::dynamic_pointer_cast(func_->GetType()); + if (!func_type) { + throw std::runtime_error(FormatError("irgen", "函数类型无效")); } - builder_.CreateRet(retValue); + auto ret_type = func_type->GetReturnType(); + + if (ret_type->IsVoid()) { + if (ctx->exp()) { + // 表达式被忽略(可计算但不使用) + EvalExpr(*ctx->exp()); + } + // 对于void函数,创建返回指令(不传参数) + builder_.CreateRet(nullptr); + } else { + ir::Value* retValue = nullptr; + if (ctx->exp()) { + retValue = EvalExpr(*ctx->exp()); + if (!retValue) { + throw std::runtime_error(FormatError("irgen", "返回值表达式求值失败")); + } + // 类型转换 + if (retValue->GetType() != ret_type) { + if (ret_type->IsInt32() && retValue->GetType()->IsFloat()) { + retValue = builder_.CreateFPToSI(retValue, ir::Type::GetInt32Type()); + } else if (ret_type->IsFloat() && retValue->GetType()->IsInt32()) { + retValue = builder_.CreateSIToFP(retValue, ir::Type::GetFloatType()); + } + } + } else { + // 无表达式,返回默认值 + if (ret_type->IsInt32()) { + retValue = builder_.CreateConstInt(0); + } else if (ret_type->IsFloat()) { + retValue = builder_.CreateConstFloat(0.0f); + } else { + retValue = builder_.CreateConstInt(0); // fallback + } + } + builder_.CreateRet(retValue); + } return BlockFlow::Terminated; } + // if语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { std::cout << "[DEBUG IRGEN] HandleIfStmt: " << (ctx ? ctx->getText() : "") << std::endl; From ec56841167a2f312a4cfd5eaa51d7eb110be5337 Mon Sep 17 00:00:00 2001 From: LuoHello <2901023943@qq.com> Date: Fri, 3 Apr 2026 00:19:14 +0800 Subject: [PATCH 39/39] =?UTF-8?q??= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ir/IR.h | 65 ++- include/irgen/IRGen.h | 47 +- include/sem/Sema.h | 12 +- include/sem/SymbolTable.h | 104 +++- optimized.bc | Bin 0 -> 6808 bytes optimized.ll | 492 +++++++++++++++++ scripts/test_compiler.sh | 124 ++++- src/ir/Context.cpp | 67 ++- src/ir/GlobalValue.cpp | 170 ++++-- src/ir/IRBuilder.cpp | 96 +++- src/ir/IRPrinter.cpp | 356 +++++++++++-- src/ir/Instruction.cpp | 82 ++- src/irgen/IRGenDecl.cpp | 1057 +++++++++++++++++-------------------- src/irgen/IRGenDriver.cpp | 5 +- src/irgen/IRGenExp.cpp | 540 +++++++++++++------ src/irgen/IRGenFunc.cpp | 231 ++++++-- src/irgen/IRGenStmt.cpp | 187 +++++-- src/sem/Sema.cpp | 272 ++++++---- src/sem/SymbolTable.cpp | 170 ++++-- sylib/sylib.c | 164 +++++- sylib/sylib.h | 31 +- 21 files changed, 3116 insertions(+), 1156 deletions(-) create mode 100644 optimized.bc create mode 100644 optimized.ll diff --git a/include/ir/IR.h b/include/ir/IR.h index 20a2e64..ea62b05 100644 --- a/include/ir/IR.h +++ b/include/ir/IR.h @@ -109,18 +109,25 @@ class Context { std::string NextTemp(); private: - std::unordered_map> const_ints_; + // 数组常量缓存需要添加到类中 + struct ArrayKey { + std::shared_ptr type; + std::vector elements; + + bool operator==(const ArrayKey& other) const; + }; - // 浮点常量:使用整数表示浮点数位模式作为键(避免浮点精度问题) - std::unordered_map> const_floats_; + struct ArrayKeyHash { + size_t operator()(const ArrayKey& key) const; + }; + + std::unordered_map, ArrayKeyHash> array_cache_; - // 零常量缓存(按类型指针) + // 其他现有成员... + std::unordered_map> const_ints_; + std::unordered_map> const_floats_; std::unordered_map> zero_constants_; std::unordered_map> aggregate_zeros_; - - // 数组常量简单存储,不去重(因为数组常量通常组合多样,去重成本高) - std::vector> const_arrays_; - int temp_index_ = -1; }; @@ -357,18 +364,18 @@ class User : public Value { // GlobalValue 是全局值/全局变量体系的空壳占位类。 // 当前只补齐类层次,具体初始化器、打印和链接语义后续再补。 -// ir/IR.h - 修正 GlobalValue 定义 -// ir/IR.h - 修正 GlobalValue 定义 +// ir/IR.h - GlobalValue 类定义需要添加这些方法 + class GlobalValue : public User { private: - std::vector initializer_; // 初始化值列表 - bool is_constant_ = false; // 是否为常量(如const变量) - bool is_extern_ = false; // 是否为外部声明 + std::vector initializer_; + bool is_constant_ = false; + bool is_extern_ = false; public: GlobalValue(std::shared_ptr ty, std::string name); - // 初始化器相关 - 使用 ConstantValue* + // 初始化器相关 void SetInitializer(ConstantValue* init); void SetInitializer(const std::vector& init); const std::vector& GetInitializer() const { return initializer_; } @@ -382,17 +389,28 @@ public: void SetExtern(bool is_extern) { is_extern_ = is_extern; } bool IsExtern() const { return is_extern_; } - // 类型判断 - 使用 Type 的方法 + // 类型判断 bool IsArray() const { return GetType()->IsArray(); } bool IsScalar() const { return GetType()->IsInt32() || GetType()->IsFloat(); } + // 数组常量相关方法 + bool IsArrayConstant() const; + ConstantValue* GetArrayElement(size_t index) const; + size_t GetArraySize() const; + // 获取数组大小(如果是数组类型) - int GetArraySize() const { + int GetArraySizeInElements() const { if (auto* array_ty = dynamic_cast(GetType().get())) { return array_ty->GetElementCount(); } return 0; } + +private: + // 辅助方法 + std::shared_ptr GetValueType() const; + bool CheckTypeCompatibility(std::shared_ptr value_type, + ConstantValue* init) const; }; class Instruction : public User { @@ -742,6 +760,20 @@ class BasicBlock : public Value { return ptr; } + template + T* InsertBeforeTerminator(Args&&... args) { + auto inst = std::make_unique(std::forward(args)...); + auto* ptr = inst.get(); + ptr->SetParent(this); + + auto pos = instructions_.end(); + if (HasTerminator()) { + pos = instructions_.end() - 1; + } + instructions_.insert(pos, std::move(inst)); + return ptr; + } + private: Function* parent_ = nullptr; std::vector> instructions_; @@ -812,6 +844,7 @@ class IRBuilder { BinaryInst* CreateBinary(Opcode op, Value* lhs, Value* rhs, const std::string& name); BinaryInst* CreateAdd(Value* lhs, Value* rhs, const std::string& name); + AllocaInst* CreateAlloca(std::shared_ptr ty, const std::string& name); AllocaInst* CreateAllocaI32(const std::string& name); AllocaInst* CreateAllocaFloat(const std::string& name); LoadInst* CreateLoad(Value* ptr, const std::string& name); diff --git a/include/irgen/IRGen.h b/include/irgen/IRGen.h index 947ffa5..5f57b4d 100644 --- a/include/irgen/IRGen.h +++ b/include/irgen/IRGen.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "SysYBaseVisitor.h" #include "SysYParser.h" @@ -22,7 +23,10 @@ class Value; class IRGenImpl final : public SysYBaseVisitor { public: - IRGenImpl(ir::Module& module, const SemanticContext& sema); + // 修改构造函数,添加 SymbolTable 参数 + IRGenImpl(ir::Module& module, + const SemanticContext& sema, + const SymbolTable& sym_table); // 新增 // 顶层 std::any visitCompUnit(SysYParser::CompUnitContext* ctx) override; @@ -67,9 +71,21 @@ public: ir::Value* EvalCond(SysYParser::CondContext& cond); std::any visitCallExp(SysYParser::UnaryExpContext* ctx); std::vector ProcessNestedInitVals(SysYParser::InitValContext* ctx); + // 带维度感知的展平:按 C 语言花括号对齐规则填充 total_size 个槽位 + // dims[0] 是最外层维度,dims.back() 是最内层维度(元素层) + // 返回已展平并补零的 total_size 大小的向量 + std::vector FlattenInitVal(SysYParser::InitValContext* ctx, + const std::vector& dims, + bool is_float); int TryEvaluateConstInt(SysYParser::ConstExpContext* ctx); void AddRuntimeFunctions(); ir::Function* CreateRuntimeFunctionDecl(const std::string& funcName); + ir::BasicBlock* EnsureCleanupBlock(); + void RegisterCleanup(ir::Function* free_func, ir::Value* ptr); + ir::AllocaInst* CreateEntryAlloca(std::shared_ptr ty, + const std::string& name); + ir::AllocaInst* CreateEntryAllocaI32(const std::string& name); + ir::AllocaInst* CreateEntryAllocaFloat(const std::string& name); private: // 辅助函数声明 enum class BlockFlow{ @@ -108,6 +124,7 @@ private: ir::Module& module_; const SemanticContext& sema_; + const SymbolTable& symbol_table_; // 新增成员 ir::Function* func_; ir::IRBuilder builder_; ir::Value* EvalAssign(SysYParser::StmtContext* ctx); @@ -119,6 +136,8 @@ private: std::unordered_map local_var_map_; // 局部变量 std::unordered_map global_map_; // 全局变量 std::unordered_map param_map_; // 函数参数 + std::unordered_set pointer_param_names_; // 指针/数组形参名 + std::unordered_set heap_local_array_names_; // 堆分配的局部数组名 // 常量映射:常量名 -> 常量值(标量常量) std::unordered_map const_value_map_; @@ -131,21 +150,23 @@ private: std::unordered_map array_info_map_; + std::string current_function_name_; + bool current_function_is_recursive_ = false; + ir::AllocaInst* function_return_slot_ = nullptr; + ir::BasicBlock* function_cleanup_block_ = nullptr; + std::vector> function_cleanup_actions_; + // 新增:处理全局和局部变量的辅助函数 + // 修改处理函数的签名,使用 Symbol* 参数 std::any HandleGlobalVariable(SysYParser::VarDefContext* ctx, - const std::string& varName, - bool is_array); - std::any HandleLocalVariable(SysYParser::VarDefContext* ctx, - const std::string& varName, - bool is_array); + const std::string& varName, + const Symbol* sym); - // 常量求值辅助函数 - int EvaluateConstAddExp(SysYParser::AddExpContext* ctx); - int EvaluateConstMulExp(SysYParser::MulExpContext* ctx); - int EvaluateConstUnaryExp(SysYParser::UnaryExpContext* ctx); - int EvaluateConstPrimaryExp(SysYParser::PrimaryExpContext* ctx); - int EvaluateConstExp(SysYParser::ExpContext* ctx); + std::any HandleLocalVariable(SysYParser::VarDefContext* ctx, + const std::string& varName, + const Symbol* sym); }; +// 修改 GenerateIR 函数签名 std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema); + const SemaResult& sema_result); \ No newline at end of file diff --git a/include/sem/Sema.h b/include/sem/Sema.h index 10e4d8e..c053428 100644 --- a/include/sem/Sema.h +++ b/include/sem/Sema.h @@ -7,7 +7,7 @@ #include "SysYParser.h" #include "ir/IR.h" - +#include "sem/SymbolTable.h" // 表达式信息结构 struct ExprInfo { std::shared_ptr type = nullptr; @@ -91,4 +91,12 @@ private: // 目前仅检查: // - 变量先声明后使用 // - 局部变量不允许重复定义 -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); \ No newline at end of file +// SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit); +// 新增:语义分析结果结构体 +struct SemaResult { + SemanticContext context; + SymbolTable symbol_table; +}; + +// 修改 RunSema 的返回类型 +SemaResult RunSema(SysYParser::CompUnitContext& comp_unit); \ No newline at end of file diff --git a/include/sem/SymbolTable.h b/include/sem/SymbolTable.h index 2dfbc89..ed986f1 100644 --- a/include/sem/SymbolTable.h +++ b/include/sem/SymbolTable.h @@ -1,6 +1,7 @@ // 极简符号表:记录局部变量定义点。 #pragma once +#include #include #include #include @@ -17,46 +18,113 @@ enum class SymbolKind { Constant }; +// 符号条目 // 符号条目 struct Symbol { + // 基本信息 std::string name; SymbolKind kind; - std::shared_ptr type; // 指向 Type 对象的智能指针 - int scope_level = 0; // 定义时的作用域深度 - int stack_offset = -1; // 局部变量/参数栈偏移(全局变量为 -1) - bool is_initialized = false; // 是否已初始化 - bool is_builtin = false; // 是否为库函数 + std::shared_ptr type; + int scope_level = 0; + int stack_offset = -1; + bool is_initialized = false; + bool is_builtin = false; - // 对于数组参数,存储维度信息 - std::vector array_dims; // 数组各维长度(参数数组的第一维可能为0表示省略) - bool is_array_param = false; // 是否是数组参数 + // 数组参数相关 + std::vector array_dims; + bool is_array_param = false; - // 对于函数,额外存储参数列表(类型已包含在函数类型中,这里仅用于快速访问) + // 函数相关 std::vector> param_types; - // 对于常量,存储常量值(这里支持 int32 和 float) + // 常量值存储 union ConstantValue { int i32; float f32; - } const_value; - bool is_int_const = true; // 标记常量类型,用于区分 int 和 float + }; + + // 标量常量 + bool is_int_const = true; + ConstantValue const_value; + + // 数组常量(扁平化存储) + bool is_array_const = false; + std::vector array_const_values; - // 关联的语法树节点(用于报错位置或进一步分析) + // 语法树节点 SysYParser::VarDefContext* var_def_ctx = nullptr; SysYParser::ConstDefContext* const_def_ctx = nullptr; SysYParser::FuncFParamContext* param_def_ctx = nullptr; SysYParser::FuncDefContext* func_def_ctx = nullptr; + + // 辅助方法 + bool IsScalarConstant() const { + return kind == SymbolKind::Constant && !type->IsArray(); + } + + bool IsArrayConstant() const { + return kind == SymbolKind::Constant && type->IsArray(); + } + + int GetIntConstant() const { + if (!IsScalarConstant()) { + throw std::runtime_error("不是标量常量"); + } + if (!is_int_const) { + throw std::runtime_error("不是整型常量"); + } + return const_value.i32; + } + + float GetFloatConstant() const { + if (!IsScalarConstant()) { + throw std::runtime_error("不是标量常量"); + } + if (is_int_const) { + return static_cast(const_value.i32); + } + return const_value.f32; + } + + ConstantValue GetArrayElement(size_t index) const { + if (!IsArrayConstant()) { + throw std::runtime_error("不是数组常量"); + } + if (index >= array_const_values.size()) { + throw std::runtime_error("数组下标越界"); + } + return array_const_values[index]; + } + + size_t GetArraySize() const { + if (!IsArrayConstant()) return 0; + return array_const_values.size(); + } }; - class SymbolTable { public: SymbolTable(); ~SymbolTable() = default; - + // 添加调试方法 + size_t getScopeCount() const { return active_scope_stack_.size(); } + + void dump() const { + std::cerr << "=== SymbolTable Dump ===" << std::endl; + for (size_t i = 0; i < scopes_.size(); ++i) { + std::cerr << "Scope " << i << " (depth=" << i << ")"; + bool active = std::find(active_scope_stack_.begin(), active_scope_stack_.end(), i) != active_scope_stack_.end(); + std::cerr << (active ? " [active]" : " [inactive]") << std::endl; + for (const auto& [name, sym] : scopes_[i]) { + std::cerr << " " << name + << " (kind=" << (int)sym.kind + << ", level=" << sym.scope_level << ")" << std::endl; + } + } + } // ----- 作用域管理 ----- void enterScope(); // 进入新作用域 void exitScope(); // 退出当前作用域 - int currentScopeLevel() const { return static_cast(scopes_.size()) - 1; } + int currentScopeLevel() const { return static_cast(active_scope_stack_.size()) - 1; } // ----- 符号操作(推荐使用)----- bool addSymbol(const Symbol& sym); // 添加符号到当前作用域 @@ -64,6 +132,9 @@ class SymbolTable { Symbol* lookupCurrent(const std::string& name); // 仅在当前作用域查找 const Symbol* lookup(const std::string& name) const; const Symbol* lookupCurrent(const std::string& name) const; + const Symbol* lookupAll(const std::string& name) const; // 所有作用域查找,包括已结束的作用域 + const Symbol* lookupByVarDef(const SysYParser::VarDefContext* decl) const; // 通过定义节点查找符号 + const Symbol* lookupByConstDef(const SysYParser::ConstDefContext* decl) const; // 通过常量定义节点查找符号 // ----- 与原接口兼容(保留原有功能)----- void Add(const std::string& name, SysYParser::VarDefContext* decl); @@ -103,6 +174,7 @@ class SymbolTable { private: // 作用域栈:每个元素是一个从名字到符号的映射 std::vector> scopes_; + std::vector active_scope_stack_; static constexpr int GLOBAL_SCOPE = 0; // 全局作用域索引 diff --git a/optimized.bc b/optimized.bc new file mode 100644 index 0000000000000000000000000000000000000000..479f919642c5af840ca9f78e11f82e02da773834 GIT binary patch literal 6808 zcmZ8l2~<y0OcfyzAfRZ`lR**{ z6_o3Xs1>aXtG8O5fLg_bAYw&pOSQ;k5bA^i)&X18zI_7e?Rr@&XV_wI}2!yxLC3LAVQPm>!k9RkebHuyI>21g{k+7KS!PinoPxrjp(_kIW|J`X{ z>4Ut;*!!txoH;c>w=`rviRb}P;sQiK^5L;S z-2QBD28cYd=sg;TXqjjRB<3+Q2$^{KtIuZIjsGtvdNl`ysK4pj9=Cf!vE3fPF;}>F zxI5Y9itIgcP`3Qril7ODiLe2HiXCw`=t)2hpY2uv6c^r#;<&<3e>bV`P!bLT355NJ zh*EW;{xAx_gE)|45b9&%^4+8r<<0>KtyGD-Kj6*>{{Y|=Ac!0v2Bvra!PFbx^lIO zz5$_^BpOsI`g#?mc%4Co8u;yQtS1$$evF-qu?I$3qcYY^PK$S+P|zv#ZdUkYVq2mw z=%Q~*BF|D{F6d(Pl<4+RZn2!cVKqH`wV?oBaf7PDppw&z1L?)DouJsYxFH2GlJZ;dFI zM7CRF8ZD7+R_J3)d*a!AgbuCBhXk%L@Vi@CPvq>UHrgo4{uN{Yin3qHSh*b50LFr^ z&uz3vHrAkw^&0cP_e3FR)_8aJdp;3*-xqqf2)*G5J{0<9q6eZcNMai)kyX0L_7xZ4 z=tF1MLpu`jSbY-?rA9A~v{@l_ zv2di?MJ+Yn-yia}iGBJkg3Re@7^|NcUp5r-D<%=@ig@(GL_T!dkTGVWaB7^w2by}r;=NSE&6IwIu|`n#h>bQPW4|Cov3|AD?xXDfo2*}9 z4jhBI@DaQ-TnYkVjM3MxP??}#gh`P%t=jv7)651dLV-#!5$<6 zgZ)6pdQpdK=p}*nh+SuZY!lF6SC1=Cn7xeTCdQicjg1A1^_%tg7 zHxCKgCP-FTNbDETFlZ;vVi+f!b^0L!y4DE;*b1qRh9e8}u8k56O$I;0+Cbzvy*=iL zE_y!}ulI|`pByTT58U0f{Lx10$ zD`@_C-@MQ}o8qN&PIR|och3D&(DBxP&PA`w*vsEZ-1wREOhpm9-zKyScD(aTbXSq= zSo#h8_hq@$w!PqJXSgwh(mf&4*||LH^1DD7Vy|(4Q3g6am?U%&kBk!fiJt-m0E71_ zR7ns~76~7@E>vK3jZ@IhFf|B zIa4Ej_0E6JffPK=yDjduW~TgI`dIxbY1pvcPPw~85>gu?9aBziQQsY#a3q7-aq-|p z|CY_tcj}I^5b4@nfmJ_Dx+mqsvHOr z+5#T+XQP;;M|pxY(RLnBglNTnH1X_I8S$0QU+zz%K|n>hSne9WdMa;at3@TLIAC$L z+z4fgu^zK>HFgaRvZ$<{v`lQFsGP@zB1ng6S0<#QYw*9CuCkU>KSu{OyTn{iJ%$7# zX?rYzTN!3^sPUfmCY7rXSy%&y%^+s9h~{BDX1<2cVdVgd)s^H0M^2Yd4L_pE;9PdH zxDZ&t{|aHX2zF?;%0(9jwBe}WF`$)sX`@8CB-(W6+zQGy^!p%9sLaiI3!h7ws;R0F z=UaSmhL*>)(&AAjC@2MFtEnY zdT}fm2u8B%=v>%=6pScsbh{Xw(d_lwQb%%QQfyiqZIejM^W@sJDE%;&Bce7#886?*`a_M!IR zYe9f6Fc^t+lW|&uNczQ#VfCS?-P5sa=2;feJdXPp{q3Rg9kXO^g37N%M3Hj4=@cuD zD0gBq!>MT+Sivf}J-{QZha;C`*GB(o5vD3&q|)FA->FAn3Wx*9F3oM|Rz~xu_Qa`h zh4s!U_$Qb+%Tv)+W)Hn?B~kKFPne&wB#UdFf*+qR9^Ha#F(Tbmo+Kwld+5r&UNGaX zY@Tr&0#~k=ufjd`x)cIvBY-M}#dU)nDBCs(#HJCUzTX1c-B(klk_0kS(Q0(s9wMb1 zVM_ZGejj&(q-(sGI3sQqmq=?Hw9Y^a>x4>H-@{j#r|ES$cI&*Lk{YGO^_vOn2ql@$ zjhd}C+hC^GR|su~Pd#IePSxqk5b^utrO$l?k+JB z$5NuzY&92GyD(=N-E3O32V|!a?U|I*h<4J%FsnH>ZH?Cz=srRb&Exsg5Lg+_4-GTg z6R?`4z8Kb1_lCxA55+AUJq6Z&4qU-|WJ-$`jn|)|3py^2x1IDl1VZk-REn)<@7|v# zlFnZ2m4k=eitHWp6eiJ6b2i$Trnz@6?(C^|hJXX($QQ{!hV*{Bv-8^|nqb+Yk&UI@ zh31gn?{*IU;TqH&2V7sip0Z<~Ddd*=>D_vsN;><*c#(1nNgiiCJCLcCjt%?Q=WZrl zS>ACjrQ_8s=^wdwNv+F=iu01!gPC{6cfM8+`;RLxlMH{x$FCZBFuKBF!mXk_oZOP$ z@j7EAE#v@qchs)ME8C7df2WS8Vx2Y6g(Bqu>56(}&f%dw8HCnzOQ_ra1x-|r%vN@D z9I{_2>tV04IR(G8@}Y6p$7kohBbA9`W}oOT1tGV-Q`$)F=_7ORb$q+?VZ$^2vPDC4 z@~R1Q&!-HuLV8{*lhx4Oi#rEj<|p3P1nGSvDEAi^kNAJ5{Ec*V`Ow;(9NN)0KD8IgxvE#4R$&Ta-yrG>w2RmaBM$jfI3 zF06V++QtZ;(O`S1meS6=!qd*@`QBOk{Da!@S8fZV-n{SkI4XR9YFA!U(~fquc6aL1 zgx|I>_7?Z02p$N7(@(#IfI{CpgGf`Pio8<6WDO z)MsAzs>?G>1wFq}jK}(lp0lvpPrn)OS`HP|k5o6gwwu;ek13$5 z?DY(qU9($DeiO?SB*)tTTPQ zb%FQQ_k+`$OEyLMk$F#IZKDT`Uk&vcCyDo(OT8LZv3Zp8nfcAt;nJ4+>oVMw;}!lR zNIm|v=aVw$2d-;O>-tobU69eilO?^k%a5JR@@?3o_`awRjz-_x9{JV-WC31dSv?7=H^I|~L>|rT{iNsbe>Yay6V?pf%kCQ4 zKG#+m@V+0 z%m{q%leY<J0j`y2Hzi*X)JlbhCkg7-YA`Z$u$;^aBtXSNMT`b6C9+qcfj=LNHdb6c_&B+t6J(wq^L_THCtvil!5Y`+0whmw*EekD$uuJ$oQuH?sWM5kyj!hQEgR!t?bT7V-n$H0l4A zl{u4H8CtFQX~UP$#|>kZ$>B2~jlB)q=RhAy=i=JcwaA${X~!S+KKQ8BGzCiy_!D-+7mtI790Ks8adWe zK&d*`ntdrhU}HlRF&4jUC(>*E*ihFrBE3p3om@mToQJjGCxSxX@L7amS5C+PkqZZn zSUdC!j$vN5D_Z+U)6=;yZo9&~GbZViUMH-`pGjDF`)zeS!6NLfq%bie0-CBkJXiit zuI0x^E7~*9z#9HwPQioQ%ZLf34A%Qq<1eQ!|4*G9T$~UOtZ# z=LeyB5U6v~b3l3>&LPX09-KH}w2%Kl{zIKpJV1)-#N6Togbnhih?g2J8-S5q%iotQTi_G=JdJ7U9SERD_7+AE8tfz_BF` zh~O_Doj8jLWpVuUE?-j`!5o~qi`t1_vVR7v;DHLkojau}kB9<=BDe6f47H-5KvAM9 zQfK9=;Wce_A#72rvy>Ty>O7VGUQ$?+qR7d~OH0X`8CpoZWfo*){PnUvqacrXfwC4U z)_q*0gb(m4%PTBUq-U*LmRF!wDzb9z$2Wya#kyeFHzXoBBzR`/dev/null 2>&1; then + echo "未找到 llc: $LLC_BIN" + echo "请安装 LLVM,或通过 LLC 环境变量指定 llc 路径" + exit 1 +fi + +if ! command -v "$CLANG_BIN" >/dev/null 2>&1; then + echo "未找到 clang: $CLANG_BIN" + echo "请安装 Clang,或通过 CLANG 环境变量指定 clang 路径" + exit 1 +fi + +# 编译运行库(供链接生成的可执行文件) +runtime_ready=0 +if [[ -f "$RUNTIME_SRC" ]]; then + if "$CC_BIN" -c "$RUNTIME_SRC" -o "$RUNTIME_OBJ" >/dev/null 2>&1; then + runtime_ready=1 + else + echo "[WARN] 运行库编译失败,生成的可执行文件将不链接 sylib: $RUNTIME_SRC" + fi +else + echo "[WARN] 未找到运行库源码: $RUNTIME_SRC" +fi + ir_total=0 ir_pass=0 result_total=0 @@ -65,10 +94,15 @@ for test_dir in "${TEST_DIRS[@]}"; do continue fi - # 检查是否生成了有效的函数定义(在过滤后的内容中检查) - # 先过滤一下看看是否有define - filtered_content=$(sed -E '/^\[DEBUG\]|^SymbolTable::|^Check|^绑定|^保存|^dim_count:/d' "$raw_ll") - if ! echo "$filtered_content" | grep -qE '^define '; then + # 从混杂输出中提取 IR: + # - 顶层实体:define/declare/@global + # - 基本块标签 + # - 缩进的指令行 + # - 函数结束花括号 + grep -E '^(define |declare |@|[[:space:]]|})|^[A-Za-z_.$%][A-Za-z0-9_.$%]*:$' "$raw_ll" > "$ll_file" + + # 检查是否生成了有效函数定义 + if ! grep -qE '^define ' "$ll_file"; then echo " [IR] 失败: 未生成有效函数定义" ir_failures+=("$input: invalid IR output") # 失败:保留原始输出 @@ -76,17 +110,7 @@ for test_dir in "${TEST_DIRS[@]}"; do rm -f "$raw_ll" continue fi - - # 编译成功:过滤掉所有调试输出,只保留IR - # 过滤规则: - # 1. 以 [DEBUG] 开头的行 - # 2. SymbolTable:: 开头的行 - # 3. CheckLValue: 开头的行 - # 4. 绑定变量: 开头的行 - # 5. dim_count: 开头的行 - # 6. 空行(可选) - sed -E '/^(\[DEBUG|SymbolTable::|Check|绑定|保存|dim_)/d' "$raw_ll" > "$ll_file" - + # 可选:删除多余的空行 sed -i '/^$/N;/\n$/D' "$ll_file" @@ -96,30 +120,72 @@ for test_dir in "${TEST_DIRS[@]}"; do echo " [IR] 生成成功 (IR已保存到: $ll_file)" # 运行测试 + # 运行测试部分 if [[ -f "$expected_file" ]]; then result_total=$((result_total+1)) - # 运行LLVM IR + # 运行生成的可执行文件(优先链接运行库) run_status=0 + obj_file="$out_dir/$stem.o" + exe_file="$out_dir/$stem" + if ! "$LLC_BIN" -filetype=obj "$ll_file" -o "$obj_file" > "$stdout_file" 2>&1; then + echo " [RUN] llc 失败" + result_failures+=("$input: llc failed") + continue + fi + + if [[ $runtime_ready -eq 1 ]]; then + if ! "$CLANG_BIN" "$obj_file" "$RUNTIME_OBJ" -o "$exe_file" >> "$stdout_file" 2>&1; then + echo " [RUN] clang 链接失败" + result_failures+=("$input: clang link failed") + continue + fi + else + if ! "$CLANG_BIN" "$obj_file" -o "$exe_file" >> "$stdout_file" 2>&1; then + echo " [RUN] clang 链接失败" + result_failures+=("$input: clang link failed") + continue + fi + fi + if [[ -f "$stdin_file" ]]; then - lli "$ll_file" < "$stdin_file" > "$stdout_file" 2>&1 || run_status=$? + "$exe_file" < "$stdin_file" > "$stdout_file" 2>&1 || run_status=$? else - lli "$ll_file" > "$stdout_file" 2>&1 || run_status=$? + "$exe_file" > "$stdout_file" 2>&1 || run_status=$? fi - # 读取预期返回值 - expected=$(normalize_file "$expected_file") + # 读取预期文件内容 + expected_content=$(normalize_file "$expected_file") - # 比较返回值 - if [[ "$run_status" -eq "$expected" ]]; then - result_pass=$((result_pass+1)) - echo " [RUN] 返回值匹配: $run_status" - # 成功:保留已清理的.ll文件,删除输出文件 - rm -f "$stdout_file" + # 判断预期文件是只包含退出码,还是包含输出+退出码 + if [[ "$expected_content" =~ ^[0-9]+$ ]]; then + # 只包含退出码 + expected=$expected_content + if [[ "$run_status" -eq "$expected" ]]; then + result_pass=$((result_pass+1)) + echo " [RUN] 返回值匹配: $run_status" + rm -f "$stdout_file" + else + echo " [RUN] 返回值不匹配: got $run_status, expected $expected" + result_failures+=("$input: exit code mismatch (got $run_status, expected $expected)") + fi else - echo " [RUN] 返回值不匹配: got $run_status, expected $expected" - result_failures+=("$input: exit code mismatch (got $run_status, expected $expected)") - # 失败:.ll文件已经保留,输出文件也保留用于调试 + # 包含输出和退出码(最后一行是退出码) + expected_output=$(head -n -1 <<< "$expected_content") + expected_exit=$(tail -n 1 <<< "$expected_content") + actual_output=$(cat "$stdout_file") + + if [[ "$run_status" -eq "$expected_exit" ]] && [[ "$actual_output" == "$expected_output" ]]; then + result_pass=$((result_pass+1)) + echo " [RUN] 成功: 退出码和输出都匹配" + rm -f "$stdout_file" + else + echo " [RUN] 不匹配: 退出码 got $run_status, expected $expected_exit" + if [[ "$actual_output" != "$expected_output" ]]; then + echo " 输出不匹配" + fi + result_failures+=("$input: mismatch") + fi fi else echo " [RUN] 未找到预期返回值文件 $expected_file,跳过结果验证" diff --git a/src/ir/Context.cpp b/src/ir/Context.cpp index 2059cde..bcd356b 100644 --- a/src/ir/Context.cpp +++ b/src/ir/Context.cpp @@ -1,9 +1,8 @@ -// 管理基础类型、整型常量池和临时名生成。 // ir/IR.cpp - #include "ir/IR.h" -#include // for memcpy +#include #include +#include namespace ir { @@ -17,9 +16,7 @@ ConstantInt* Context::GetConstInt(int v) { return inserted->second.get(); } -// 新增:获取浮点常量 ConstantFloat* Context::GetConstFloat(float v) { - // 使用浮点数的二进制表示作为键,避免精度问题 uint32_t key; std::memcpy(&key, &v, sizeof(float)); @@ -35,16 +32,68 @@ ConstantFloat* Context::GetConstFloat(float v) { return ptr; } -// 新增:创建数组常量 ConstantArray* Context::GetConstArray(std::shared_ptr ty, std::vector elements) { + // 验证数组常量 + size_t expected_size = ty->GetElementCount(); + if (elements.size() != expected_size) { + // 如果元素数量不匹配,可能需要补零或报错 + // 这里根据需求处理 + if (elements.size() < expected_size) { + // 补零 + auto elem_type = ty->GetElementType(); + while (elements.size() < expected_size) { + if (elem_type->IsInt32()) { + elements.push_back(GetConstInt(0)); + } else if (elem_type->IsFloat()) { + elements.push_back(GetConstFloat(0.0f)); + } + } + } else { + throw std::runtime_error("Array constant size mismatch"); + } + } + + // 构建缓存键 + struct ArrayKey { + std::shared_ptr type; + std::vector elements; + + bool operator==(const ArrayKey& other) const { + if (type != other.type) return false; + if (elements.size() != other.elements.size()) return false; + for (size_t i = 0; i < elements.size(); ++i) { + if (elements[i] != other.elements[i]) return false; + } + return true; + } + }; + + struct ArrayKeyHash { + size_t operator()(const ArrayKey& key) const { + size_t hash = std::hash{}(key.type.get()); + for (auto* elem : key.elements) { + hash ^= std::hash{}(elem) + 0x9e3779b9 + (hash << 6) + (hash >> 2); + } + return hash; + } + }; + + // 使用静态缓存(需要作为成员变量) + static std::unordered_map, ArrayKeyHash> cache; + + ArrayKey key{ty, elements}; + auto it = cache.find(key); + if (it != cache.end()) { + return it->second.get(); + } + auto constant = std::make_unique(ty, std::move(elements)); auto* ptr = constant.get(); - const_arrays_.push_back(std::move(constant)); + cache[std::move(key)] = std::move(constant); return ptr; } -// 新增:获取零常量 ConstantZero* Context::GetZeroConstant(std::shared_ptr ty) { auto it = zero_constants_.find(ty.get()); if (it != zero_constants_.end()) { @@ -57,7 +106,6 @@ ConstantZero* Context::GetZeroConstant(std::shared_ptr ty) { return ptr; } -// 新增:获取聚合类型的零常量 ConstantAggregateZero* Context::GetAggregateZero(std::shared_ptr ty) { auto it = aggregate_zeros_.find(ty.get()); if (it != aggregate_zeros_.end()) { @@ -76,5 +124,4 @@ std::string Context::NextTemp() { return oss.str(); } - } // namespace ir \ No newline at end of file diff --git a/src/ir/GlobalValue.cpp b/src/ir/GlobalValue.cpp index 5b68e0b..24686b1 100644 --- a/src/ir/GlobalValue.cpp +++ b/src/ir/GlobalValue.cpp @@ -1,9 +1,30 @@ // ir/GlobalValue.cpp #include "ir/IR.h" + #include namespace ir { +namespace { + +ConstantValue* GetScalarZeroConstant(const Type& type) { + if (type.IsInt32()) { + static ConstantInt* zero_i32 = new ConstantInt(Type::GetInt32Type(), 0); + return zero_i32; + } + if (type.IsFloat()) { + static ConstantFloat* zero_f32 = new ConstantFloat(Type::GetFloatType(), 0.0f); + return zero_f32; + } + if (type.IsInt1()) { + static ConstantInt* zero_i1 = new ConstantInt(Type::GetInt1Type(), 0); + return zero_i1; + } + return nullptr; +} + +} // namespace + GlobalValue::GlobalValue(std::shared_ptr ty, std::string name) : User(std::move(ty), std::move(name)) {} @@ -13,42 +34,10 @@ void GlobalValue::SetInitializer(ConstantValue* init) { } // 获取实际的值类型(用于类型检查) - std::shared_ptr value_type; - - // 如果当前类型是指针,获取指向的值类型 - if (GetType()->IsPtrInt32()) { - value_type = Type::GetInt32Type(); - } else if (GetType()->IsPtrFloat()) { - value_type = Type::GetFloatType(); - } else if (GetType()->IsPtrInt1()) { - value_type = Type::GetInt1Type(); - } else { - // 非指针类型:直接使用当前类型 - value_type = GetType(); - } + std::shared_ptr value_type = GetValueType(); // 类型检查 - bool type_match = false; - - // 检查标量类型 - if (value_type->IsInt32() && init->GetType()->IsInt32()) { - type_match = true; - } else if (value_type->IsFloat() && init->GetType()->IsFloat()) { - type_match = true; - } else if (value_type->IsInt1() && init->GetType()->IsInt1()) { - type_match = true; - } - // 检查数组类型:允许用单个标量初始化整个数组 - else if (value_type->IsArray()) { - auto* array_ty = static_cast(value_type.get()); - auto* elem_type = array_ty->GetElementType().get(); - - if (elem_type->IsInt32() && init->GetType()->IsInt32()) { - type_match = true; - } else if (elem_type->IsFloat() && init->GetType()->IsFloat()) { - type_match = true; - } - } + bool type_match = CheckTypeCompatibility(value_type, init); if (!type_match) { throw std::runtime_error("GlobalValue::SetInitializer: type mismatch"); @@ -60,23 +49,14 @@ void GlobalValue::SetInitializer(ConstantValue* init) { void GlobalValue::SetInitializer(const std::vector& init) { if (init.empty()) { + initializer_.clear(); return; } // 获取实际的值类型 - std::shared_ptr value_type; + std::shared_ptr value_type = GetValueType(); - if (GetType()->IsPtrInt32()) { - value_type = Type::GetInt32Type(); - } else if (GetType()->IsPtrFloat()) { - value_type = Type::GetFloatType(); - } else if (GetType()->IsPtrInt1()) { - value_type = Type::GetInt1Type(); - } else { - value_type = GetType(); - } - - // 检查类型 + // 类型检查 if (value_type->IsArray()) { auto* array_ty = static_cast(value_type.get()); size_t array_size = array_ty->GetElementCount(); @@ -87,16 +67,23 @@ void GlobalValue::SetInitializer(const std::vector& init) { // 检查每个初始化值的类型 auto* elem_type = array_ty->GetElementType().get(); - for (auto* elem : init) { + for (size_t i = 0; i < init.size(); ++i) { + auto* elem = init[i]; + if (!elem) { + throw std::runtime_error("GlobalValue::SetInitializer: null initializer at index " + std::to_string(i)); + } + bool elem_match = false; if (elem_type->IsInt32() && elem->GetType()->IsInt32()) { elem_match = true; } else if (elem_type->IsFloat() && elem->GetType()->IsFloat()) { elem_match = true; + } else if (elem_type->IsInt1() && elem->GetType()->IsInt1()) { + elem_match = true; } if (!elem_match) { - throw std::runtime_error("GlobalValue::SetInitializer: element type mismatch"); + throw std::runtime_error("GlobalValue::SetInitializer: element type mismatch at index " + std::to_string(i)); } } } @@ -105,6 +92,10 @@ void GlobalValue::SetInitializer(const std::vector& init) { throw std::runtime_error("GlobalValue::SetInitializer: scalar requires exactly one initializer"); } + if (!init[0]) { + throw std::runtime_error("GlobalValue::SetInitializer: null initializer"); + } + if ((value_type->IsInt32() && !init[0]->GetType()->IsInt32()) || (value_type->IsFloat() && !init[0]->GetType()->IsFloat()) || (value_type->IsInt1() && !init[0]->GetType()->IsInt1())) { @@ -118,4 +109,87 @@ void GlobalValue::SetInitializer(const std::vector& init) { initializer_ = init; } +// 辅助方法:获取实际的值类型(处理指针包装) +std::shared_ptr GlobalValue::GetValueType() const { + if (GetType()->IsPtrInt32()) { + return Type::GetInt32Type(); + } else if (GetType()->IsPtrFloat()) { + return Type::GetFloatType(); + } else if (GetType()->IsPtrInt1()) { + return Type::GetInt1Type(); + } + return GetType(); +} + +// 辅助方法:检查类型兼容性 +bool GlobalValue::CheckTypeCompatibility(std::shared_ptr value_type, + ConstantValue* init) const { + // 检查标量类型 + if (value_type->IsInt32() && init->GetType()->IsInt32()) { + return true; + } else if (value_type->IsFloat() && init->GetType()->IsFloat()) { + return true; + } else if (value_type->IsInt1() && init->GetType()->IsInt1()) { + return true; + } + // 检查数组类型:允许用单个标量初始化整个数组 + else if (value_type->IsArray()) { + auto* array_ty = static_cast(value_type.get()); + auto* elem_type = array_ty->GetElementType().get(); + + if (elem_type->IsInt32() && init->GetType()->IsInt32()) { + return true; + } else if (elem_type->IsFloat() && init->GetType()->IsFloat()) { + return true; + } else if (elem_type->IsInt1() && init->GetType()->IsInt1()) { + return true; + } + // 也可以允许 ConstantArray 作为初始化器 + else if (init->GetType()->IsArray()) { + auto* init_array = static_cast(init); + return init_array->IsValid(); + } + } + // 检查指针类型(用于数组参数) + else if (value_type->IsPtrInt32() && init->GetType()->IsInt32()) { + return true; + } else if (value_type->IsPtrFloat() && init->GetType()->IsFloat()) { + return true; + } + + return false; +} + +// 添加获取数组元素的便捷方法 +ConstantValue* GlobalValue::GetArrayElement(size_t index) const { + if (!GetType()->IsArray()) { + return nullptr; + } + + auto* array_ty = dynamic_cast(GetType().get()); + if (!array_ty) { + return nullptr; + } + if (index >= static_cast(array_ty->GetElementCount())) { + return nullptr; + } + if (index >= initializer_.size()) { + return GetScalarZeroConstant(*array_ty->GetElementType()); + } + return initializer_[index]; +} + +// 添加获取数组元素数量的方法 +size_t GlobalValue::GetArraySize() const { + if (!IsArrayConstant()) { + return 0; + } + return initializer_.size(); +} + +// 添加判断是否为数组常量的方法 +bool GlobalValue::IsArrayConstant() const { + return GetType()->IsArray() && !initializer_.empty(); +} + } // namespace ir \ No newline at end of file diff --git a/src/ir/IRBuilder.cpp b/src/ir/IRBuilder.cpp index 18b7169..9b7c545 100644 --- a/src/ir/IRBuilder.cpp +++ b/src/ir/IRBuilder.cpp @@ -119,6 +119,17 @@ BinaryInst* IRBuilder::CreateAdd(Value* lhs, Value* rhs, return CreateBinary(Opcode::Add, lhs, rhs, name); } +AllocaInst* IRBuilder::CreateAlloca(std::shared_ptr ty, + const std::string& name) { + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + if (!ty) { + throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAlloca 缺少类型")); + } + return insert_block_->Append(ty, name); +} + AllocaInst* IRBuilder::CreateAllocaI32(const std::string& name) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); @@ -190,18 +201,21 @@ StoreInst* IRBuilder::CreateStore(Value* val, Value* ptr) { } } else if (ptr_ty->IsPtrFloat()) { if (!val_ty->IsFloat()) { - throw std::runtime_error(FormatError("ir", "存储类型不匹配:期望 float")); + throw std::runtime_error( + FormatError("ir", "存储类型不匹配:期望 float, 实际 kind=" + + std::to_string(static_cast(val_ty->GetKind())))); } } else if (ptr_ty->IsArray()) { - // 数组存储:检查元素类型 - auto* array_ty = dynamic_cast(ptr_ty.get()); - if (array_ty) { - auto elem_ty = array_ty->GetElementType(); - if (elem_ty->IsInt32() && !val_ty->IsInt32()) { - throw std::runtime_error(FormatError("ir", "数组元素类型不匹配:期望 int32")); - } else if (elem_ty->IsFloat() && !val_ty->IsFloat()) { - throw std::runtime_error(FormatError("ir", "数组元素类型不匹配:期望 float")); - } + // 数组存储支持两种形式: + // 1. 标量元素写入(通常配合 GEP 后落到元素指针,不会走到这里) + // 2. 聚合数组整体写入,例如 `store [16 x i32] zeroinitializer, [16 x i32]* %arr` + if (!val_ty->IsArray()) { + throw std::runtime_error( + FormatError("ir", "数组地址仅支持聚合数组整体存储")); + } + if (val_ty->GetKind() != ptr_ty->GetKind()) { + throw std::runtime_error( + FormatError("ir", "聚合数组存储类型不匹配")); } } @@ -212,10 +226,6 @@ ReturnInst* IRBuilder::CreateRet(Value* v) { if (!insert_block_) { throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); } - if (!v) { - throw std::runtime_error( - FormatError("ir", "IRBuilder::CreateRet 缺少返回值")); - } return insert_block_->Append(Type::GetVoidType(), v); } @@ -386,7 +396,8 @@ ZExtInst* IRBuilder::CreateZExt(Value* value, std::shared_ptr target_ty, FormatError("ir", "ZExt 目标类型必须是整数类型")); } - return insert_block_->Append(value, target_ty, name); + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); } // 创建截断指令 @@ -416,7 +427,8 @@ TruncInst* IRBuilder::CreateTrunc(Value* value, std::shared_ptr target_ty, FormatError("ir", "Trunc 目标类型必须是整数类型")); } - return insert_block_->Append(value, target_ty, name); + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); } // 便捷方法:i1 转 i32 @@ -466,7 +478,9 @@ BinaryInst* IRBuilder::CreateAnd(Value* lhs, Value* rhs, const std::string& name if (!rhs) { throw std::runtime_error(FormatError("ir", "IRBuilder::CreateAnd 缺少 rhs")); } - return insert_block_->Append(Opcode::And, Type::GetInt32Type(), lhs, rhs, name); + auto result_ty = lhs->GetType()->IsInt1() ? Type::GetInt1Type() + : Type::GetInt32Type(); + return insert_block_->Append(Opcode::And, result_ty, lhs, rhs, name); } BinaryInst* IRBuilder::CreateOr(Value* lhs, Value* rhs, const std::string& name) { @@ -479,7 +493,9 @@ BinaryInst* IRBuilder::CreateOr(Value* lhs, Value* rhs, const std::string& name) if (!rhs) { throw std::runtime_error(FormatError("ir", "IRBuilder::CreateOr 缺少 rhs")); } - return insert_block_->Append(Opcode::Or, Type::GetInt32Type(), lhs, rhs, name); + auto result_ty = lhs->GetType()->IsInt1() ? Type::GetInt1Type() + : Type::GetInt32Type(); + return insert_block_->Append(Opcode::Or, result_ty, lhs, rhs, name); } IcmpInst* IRBuilder::CreateNot(Value* val, const std::string& name) { @@ -489,7 +505,12 @@ IcmpInst* IRBuilder::CreateNot(Value* val, const std::string& name) { if (!val) { throw std::runtime_error(FormatError("ir", "IRBuilder::CreateNot 缺少 operand")); } - auto zero = CreateConstInt(0); + if (val->GetType()->IsInt1()) { + auto* ext = CreateZExtI1ToI32(val, ""); + auto* zero = CreateConstInt(0); + return CreateICmpEQ(ext, zero, name); + } + auto* zero = CreateConstInt(0); return CreateICmpEQ(val, zero, name); } @@ -511,8 +532,29 @@ GEPInst* IRBuilder::CreateGEP(Value* base, } } - // GEP返回指针类型,假设与base类型相同 - return insert_block_->Append(base->GetType(), base, indices, name); + // 结果类型推断: + // - 对 i32*/float* 基址,结果仍分别为 i32*/float* + // - 对数组基址,按多索引向下剥离元素类型;若到达标量则返回对应标量指针 + // (本项目没有“指向数组的指针类型”,未完全剥离时退回数组类型) + std::shared_ptr result_ty = base->GetType(); + if (base->GetType()->IsPtrInt32()) { + result_ty = Type::GetPtrInt32Type(); + } else if (base->GetType()->IsPtrFloat()) { + result_ty = Type::GetPtrFloatType(); + } else if (base->GetType()->IsArray()) { + std::shared_ptr cur = base->GetType(); + for (size_t i = 1; i < indices.size(); ++i) { + auto* at = dynamic_cast(cur.get()); + if (!at) break; + cur = at->GetElementType(); + } + + if (cur->IsInt32()) result_ty = Type::GetPtrInt32Type(); + else if (cur->IsFloat()) result_ty = Type::GetPtrFloatType(); + else result_ty = cur; + } + + return insert_block_->Append(result_ty, base, indices, name); } @@ -609,12 +651,20 @@ FcmpInst* IRBuilder::CreateFCmpOGE(Value* lhs, Value* rhs, const std::string& na // 类型转换 SIToFPInst* IRBuilder::CreateSIToFP(Value* value, std::shared_ptr target_ty, const std::string& name) { - return insert_block_->Append(value, target_ty, name); + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); } FPToSIInst* IRBuilder::CreateFPToSI(Value* value, std::shared_ptr target_ty, const std::string& name) { - return insert_block_->Append(value, target_ty, name); + if (!insert_block_) { + throw std::runtime_error(FormatError("ir", "IRBuilder 未设置插入点")); + } + const std::string inst_name = name.empty() ? ctx_.NextTemp() : name; + return insert_block_->Append(value, target_ty, inst_name); } } // namespace ir diff --git a/src/ir/IRPrinter.cpp b/src/ir/IRPrinter.cpp index c4b0624..a3a6278 100644 --- a/src/ir/IRPrinter.cpp +++ b/src/ir/IRPrinter.cpp @@ -4,6 +4,9 @@ #include "ir/IR.h" +#include +#include +#include #include #include #include @@ -12,7 +15,109 @@ namespace ir { -static const char* TypeToString(const Type& ty) { +static std::string TypeToString(const Type& ty); + +static std::string ArrayTypeToStringFrom(const Type& base_ty, + const std::vector& dims, + size_t begin) { + std::string s = TypeToString(base_ty); + for (size_t i = dims.size(); i-- > begin;) { + s = "[" + std::to_string(dims[i]) + " x " + s + "]"; + } + return s; +} + +static bool IsZeroConstant(const ConstantValue* value) { + if (!value) { + return true; + } + if (auto* ci = dynamic_cast(value)) { + return ci->GetValue() == 0; + } + if (auto* cf = dynamic_cast(value)) { + return cf->GetValue() == 0.0f; + } + if (dynamic_cast(value) || + dynamic_cast(value)) { + return true; + } + if (auto* arr = dynamic_cast(value)) { + for (auto* elem : arr->GetElements()) { + if (!IsZeroConstant(elem)) { + return false; + } + } + return true; + } + return false; +} + +static size_t AggregateSpan(const std::vector& dims, size_t level) { + size_t span = 1; + for (size_t i = level; i < dims.size(); ++i) { + span *= static_cast(dims[i]); + } + return span; +} + +static bool IsZeroRange(const std::vector& init, + size_t begin, + size_t count) { + for (size_t i = 0; i < count; ++i) { + const size_t index = begin + i; + if (index >= init.size()) { + continue; + } + if (!IsZeroConstant(init[index])) { + return false; + } + } + return true; +} + +static void PrintFlatArrayBody(std::ostream& os, + const Type& base_ty, + const std::vector& dims, + size_t level, + const std::vector& init, + size_t& flat_index) { + const size_t span = AggregateSpan(dims, level); + if (IsZeroRange(init, flat_index, span)) { + os << "zeroinitializer"; + flat_index += span; + return; + } + + os << "["; + for (int i = 0; i < dims[level]; ++i) { + if (i > 0) os << ", "; + + if (level + 1 < dims.size()) { + os << ArrayTypeToStringFrom(base_ty, dims, level + 1) << " "; + PrintFlatArrayBody(os, base_ty, dims, level + 1, init, flat_index); + continue; + } + + os << TypeToString(base_ty) << " "; + if (flat_index < init.size() && init[flat_index]) { + if (auto* ci = dynamic_cast(init[flat_index])) { + os << ci->GetValue(); + } else if (auto* cf = dynamic_cast(init[flat_index])) { + os << cf->GetValue(); + } else if (IsZeroConstant(init[flat_index])) { + os << "0"; + } else { + os << "0"; + } + } else { + os << "0"; + } + ++flat_index; + } + os << "]"; +} + +static std::string TypeToString(const Type& ty) { switch (ty.GetKind()) { case Type::Kind::Void: return "void"; case Type::Kind::Int32: return "i32"; @@ -20,10 +125,23 @@ static const char* TypeToString(const Type& ty) { case Type::Kind::PtrInt32: return "i32*"; case Type::Kind::PtrFloat: return "float*"; case Type::Kind::Label: return "label"; - case Type::Kind::Array: return "array"; case Type::Kind::Function: return "function"; case Type::Kind::Int1: return "i1"; case Type::Kind::PtrInt1: return "i1*"; + case Type::Kind::Array: { + // 打印数组类型为 LLVM 风格,如 [4 x [2 x i32]] + auto* at = dynamic_cast(&ty); + if (!at) return "array"; + // 递归构建类型字符串 + std::string elem = TypeToString(*at->GetElementType()); + const auto& dims = at->GetDimensions(); + // 从外到内构建 + std::string s = elem; + for (auto it = dims.rbegin(); it != dims.rend(); ++it) { + s = "[" + std::to_string(*it) + " x " + s + "]"; + } + return s; + } default: return "unknown"; } throw std::runtime_error(FormatError("ir", "未知类型")); @@ -54,9 +172,9 @@ static const char* OpcodeToString(Opcode op) { case Opcode::Icmp: return "icmp"; case Opcode::Div: - return "div"; + return "sdiv"; case Opcode::Mod: - return "mod"; + return "srem"; case Opcode::ZExt: return "zext"; case Opcode::Trunc: @@ -82,12 +200,29 @@ static const char* OpcodeToString(Opcode op) { return "?"; } +// 将 float 值转为 LLVM IR 接受的 64-bit 十六进制浮点格式 +static std::string FloatToLLVMHex(float f) { + double d = static_cast(f); + uint64_t bits; + memcpy(&bits, &d, sizeof(bits)); + char buf[20]; + snprintf(buf, sizeof(buf), "0x%016llX", (unsigned long long)bits); + return buf; +} + static std::string ValueToString(const Value* v) { + if (!v) { + return ""; + } + if (dynamic_cast(v) || + dynamic_cast(v)) { + return "zeroinitializer"; + } if (auto* ci = dynamic_cast(v)) { return std::to_string(ci->GetValue()); } - if (!v) { - return ""; + if (auto* cf = dynamic_cast(v)) { + return FloatToLLVMHex(cf->GetValue()); } const auto& name = v->GetName(); if (name.empty()) { @@ -102,27 +237,107 @@ static std::string ValueToString(const Value* v) { return "%" + name; } +static std::string MemoryTypeToString(const Type& ty) { + std::string text = TypeToString(ty); + if (ty.IsArray()) { + text += "*"; + } + return text; +} + void IRPrinter::Print(const Module& module, std::ostream& os) { for (const auto& global : module.GetGlobals()) { if (!global) continue; - os << "@" << global->GetName() << " = global "; + os << "@" << global->GetName() << " = " + << (global->IsConstant() ? "constant " : "global "); + if (global->GetType()->IsPtrInt32()) { - os << "i32 0\n"; - } else if (global->GetType()->IsPtrFloat()) { - os << "float 0.0\n"; - } else { - os << TypeToString(*global->GetType()) << " zeroinitializer\n"; + os << "i32 "; + if (global->HasInitializer()) { + auto* ci = dynamic_cast(global->GetInitializer().front()); + os << (ci ? ci->GetValue() : 0); + } else { + os << "0"; + } + os << "\n"; + continue; + } + + if (global->GetType()->IsPtrFloat()) { + os << "float "; + if (global->HasInitializer()) { + auto* cf = dynamic_cast(global->GetInitializer().front()); + os << (cf ? ValueToString(cf) : FloatToLLVMHex(0.0f)); + } else { + os << FloatToLLVMHex(0.0f); + } + os << "\n"; + continue; + } + + if (global->GetType()->IsArray()) { + auto* at = dynamic_cast(global->GetType().get()); + os << TypeToString(*global->GetType()) << " "; + if (!at || !global->HasInitializer() || + IsZeroRange(global->GetInitializer(), 0, AggregateSpan(at->GetDimensions(), 0))) { + os << "zeroinitializer\n"; + continue; + } + + size_t flat_index = 0; + PrintFlatArrayBody(os, + *at->GetElementType(), + at->GetDimensions(), + 0, + global->GetInitializer(), + flat_index); + os << "\n"; + continue; } + + os << TypeToString(*global->GetType()) << " zeroinitializer\n"; } - for (const auto& func : module.GetFunctions()) { - auto* func_ty = static_cast(func->GetType().get()); - os << "define " << TypeToString(*func_ty->GetReturnType()) << " @" << func->GetName() << "("; + + auto print_func_params = [&](const Function* func, + const FunctionType* func_ty) { bool first = true; - for (const auto& arg : func->GetArguments()) { + if (!func->GetArguments().empty()) { + for (const auto& arg : func->GetArguments()) { + if (!first) os << ", "; + first = false; + os << TypeToString(*arg->GetType()) << " %" << arg->GetName(); + } + return; + } + + for (const auto& pty : func_ty->GetParamTypes()) { if (!first) os << ", "; first = false; - os << TypeToString(*arg->GetType()) << " %" << arg->GetName(); + os << TypeToString(*pty); } + }; + + auto is_declaration_only = [](const Function* func) { + const auto& blocks = func->GetBlocks(); + if (blocks.size() != 1) return false; + const auto& only = blocks.front(); + if (!only) return false; + return only->GetInstructions().empty(); + }; + + for (const auto& func : module.GetFunctions()) { + auto* func_ty = static_cast(func->GetType().get()); + if (is_declaration_only(func.get())) { + os << "declare " << TypeToString(*func_ty->GetReturnType()) << " @" + << func->GetName() << "("; + print_func_params(func.get(), func_ty); + os << ")\n"; + continue; + } + + os << "define " << TypeToString(*func_ty->GetReturnType()) << " @" + << func->GetName() << "("; + print_func_params(func.get(), func_ty); os << ") {\n"; for (const auto& bb : func->GetBlocks()) { if (!bb) { @@ -139,7 +354,11 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { case Opcode::Mod: case Opcode::And: case Opcode::Not: - case Opcode::Or: + case Opcode::Or: + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: { auto* bin = static_cast(inst); os << " " << bin->GetName() << " = " @@ -166,7 +385,7 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { auto* load = static_cast(inst); os << " " << load->GetName() << " = load " << TypeToString(*load->GetType()) << ", " - << TypeToString(*load->GetPtr()->GetType()) << " " + << MemoryTypeToString(*load->GetPtr()->GetType()) << " " << ValueToString(load->GetPtr()) << "\n"; break; } @@ -174,21 +393,29 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { auto* store = static_cast(inst); os << " store " << TypeToString(*store->GetValue()->GetType()) << " " << ValueToString(store->GetValue()) - << ", " << TypeToString(*store->GetPtr()->GetType()) << " " + << ", " << MemoryTypeToString(*store->GetPtr()->GetType()) << " " << ValueToString(store->GetPtr()) << "\n"; break; } case Opcode::Ret: { auto* ret = static_cast(inst); - os << " ret " << TypeToString(*ret->GetValue()->GetType()) << " " - << ValueToString(ret->GetValue()) << "\n"; + if (!ret->GetValue()) { + os << " ret void\n"; + } else { + os << " ret " << TypeToString(*ret->GetValue()->GetType()) << " " + << ValueToString(ret->GetValue()) << "\n"; + } break; } // CallInst类在 include/ir/IR.h 中定义 case Opcode::Call: { auto* call = static_cast(inst); - os << " " << call->GetName() << " = call " - << TypeToString(*call->GetType()) << " @" << call->GetCallee()->GetName() << "("; + os << " "; + if (!call->GetType()->IsVoid()) { + os << call->GetName() << " = "; + } + os << "call " << TypeToString(*call->GetType()) << " @" + << call->GetCallee()->GetName() << "("; bool first = true; for (auto* arg : call->GetArgs()) { if (!first) os << ", "; @@ -248,16 +475,81 @@ void IRPrinter::Print(const Module& module, std::ostream& os) { break; } case Opcode::GEP:{ - // 简化打印:只打印基本信息和操作数数量 + // 打印为类似 LLVM 的 getelementptr 形式: + // getelementptr , , i32 , i32 , ... os << " " << inst->GetName() << " = getelementptr "; - os << TypeToString(*inst->GetType()) << " ("; - for (size_t i = 0; i < inst->GetNumOperands(); ++i) { - if (i > 0) os << ", "; - os << ValueToString(inst->GetOperand(i)); + // 基地址类型使用第一个操作数的类型 + Value* base = inst->GetOperand(0); + // GEP 的第一个类型参数应是基址指向的元素类型(pointee)。 + std::string elem_ty; + if (base->GetType()->IsPtrInt32()) elem_ty = "i32"; + else if (base->GetType()->IsPtrFloat()) elem_ty = "float"; + else if (base->GetType()->IsArray()) elem_ty = TypeToString(*base->GetType()); + else elem_ty = TypeToString(*inst->GetType()); + + std::string base_ty = TypeToString(*base->GetType()); + if (base->GetType()->IsArray()) { + base_ty += "*"; } - os << ")\n"; + + os << elem_ty << ", " << base_ty << " " << ValueToString(base); + + // 后续操作数为索引,按照 i32 打印 + // 特殊处理:如果 base 是标量指针(i32*/float*)且第一个索引是常量 0 + // 且后续还有索引,则丢弃第一个 0(对 T* 来说多余且会导致无效 IR)。 + size_t start_idx = 1; + if ((base->GetType()->IsPtrInt32() || base->GetType()->IsPtrFloat()) && + inst->GetNumOperands() >= 3) { + // 检查第一个索引是否为常量 0 + auto* first_idx = inst->GetOperand(1); + if (auto* ci = dynamic_cast(first_idx)) { + if (ci->GetValue() == 0) { + start_idx = 2; // 跳过第一个 0 + } + } + } + for (size_t i = start_idx; i < inst->GetNumOperands(); ++i) { + os << ", i32 " << ValueToString(inst->GetOperand(i)); + } + os << "\n"; + break; + } + case Opcode::FCmp: { + auto* fcmp = static_cast(inst); + os << " " << fcmp->GetName() << " = fcmp "; + switch (fcmp->GetPredicate()) { + case FcmpInst::Predicate::OEQ: os << "oeq"; break; + case FcmpInst::Predicate::ONE: os << "one"; break; + case FcmpInst::Predicate::OLT: os << "olt"; break; + case FcmpInst::Predicate::OLE: os << "ole"; break; + case FcmpInst::Predicate::OGT: os << "ogt"; break; + case FcmpInst::Predicate::OGE: os << "oge"; break; + default: os << "oeq"; break; + } + os << " " << TypeToString(*fcmp->GetLhs()->GetType()) + << " " << ValueToString(fcmp->GetLhs()) + << ", " << ValueToString(fcmp->GetRhs()) << "\n"; break; } + + case Opcode::SIToFP: { + auto* sitofp = static_cast(inst); + os << " " << sitofp->GetName() << " = sitofp " + << TypeToString(*sitofp->GetValue()->GetType()) << " " + << ValueToString(sitofp->GetValue()) << " to " + << TypeToString(*sitofp->GetType()) << "\n"; + break; + } + + case Opcode::FPToSI: { + auto* fptosi = static_cast(inst); + os << " " << fptosi->GetName() << " = fptosi " + << TypeToString(*fptosi->GetValue()->GetType()) << " " + << ValueToString(fptosi->GetValue()) << " to " + << TypeToString(*fptosi->GetType()) << "\n"; + break; + } + default: { // 处理未知操作码 os << " ; 未知指令: " << OpcodeToString(inst->GetOpcode()) << "\n"; @@ -286,10 +578,10 @@ void IRPrinter::PrintConstant(const ConstantValue* constant, std::ostream& os) { } os << "]"; } - else if (auto* zero = dynamic_cast(constant)) { + else if (dynamic_cast(constant)) { os << "zero"; } - else if (auto* agg_zero = dynamic_cast(constant)) { + else if (dynamic_cast(constant)) { os << "zeroinitializer"; } } diff --git a/src/ir/Instruction.cpp b/src/ir/Instruction.cpp index 76ea812..d0f280a 100644 --- a/src/ir/Instruction.cpp +++ b/src/ir/Instruction.cpp @@ -73,6 +73,10 @@ BinaryInst::BinaryInst(Opcode op, std::shared_ptr ty, Value* lhs, case Opcode::Mod: case Opcode::And: case Opcode::Or: + case Opcode::FAdd: + case Opcode::FSub: + case Opcode::FMul: + case Opcode::FDiv: // 有效的二元操作符 break; case Opcode::Not: @@ -96,21 +100,26 @@ BinaryInst::BinaryInst(Opcode op, std::shared_ptr ty, Value* lhs, throw std::runtime_error(FormatError("ir", "BinaryInst 操作数类型不匹配")); } + bool is_logical = (op == Opcode::And || op == Opcode::Or); + // 检查操作数类型是否支持 - if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { - throw std::runtime_error( - FormatError("ir", "BinaryInst 只支持 int32 和 float 类型")); + if (is_logical) { + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsInt1()) { + throw std::runtime_error( + FormatError("ir", "逻辑运算仅支持 i32/i1")); + } + } else { + if (!lhs->GetType()->IsInt32() && !lhs->GetType()->IsFloat()) { + throw std::runtime_error( + FormatError("ir", "BinaryInst 只支持 int32 和 float 类型")); + } } - // 对于算术运算,结果类型应与操作数类型相同 - - bool is_logical = (op == Opcode::And || op == Opcode::Or); - if (is_logical) { - // 比较和逻辑运算的结果应该是整数类型 - if (!type_->IsInt32()) { + // 逻辑运算结果类型应与操作数一致(i1 或 i32)。 + if (type_->GetKind() != lhs->GetType()->GetKind()) { throw std::runtime_error( - FormatError("ir", "比较和逻辑运算的结果类型必须是 int32")); + FormatError("ir", "逻辑运算结果类型与操作数类型不匹配")); } } else { // 算术运算的结果类型应与操作数类型相同 @@ -130,21 +139,27 @@ Value* BinaryInst::GetRhs() const { return GetOperand(1); } ReturnInst::ReturnInst(std::shared_ptr void_ty, Value* val) : Instruction(Opcode::Ret, std::move(void_ty), "") { - if (!val) { - throw std::runtime_error(FormatError("ir", "ReturnInst 缺少返回值")); - } if (!type_ || !type_->IsVoid()) { throw std::runtime_error(FormatError("ir", "ReturnInst 返回类型必须为 void")); } - AddOperand(val); + if (val) { + AddOperand(val); + } } -Value* ReturnInst::GetValue() const { return GetOperand(0); } +Value* ReturnInst::GetValue() const { + if (GetNumOperands() == 0) { + return nullptr; + } + return GetOperand(0); +} AllocaInst::AllocaInst(std::shared_ptr ptr_ty, std::string name) : Instruction(Opcode::Alloca, std::move(ptr_ty), std::move(name)) { - if (!type_ || !type_->IsPtrInt32()) { - throw std::runtime_error(FormatError("ir", "AllocaInst 当前只支持 i32*")); + if (!type_ || + (!type_->IsPtrInt32() && !type_->IsPtrFloat() && !type_->IsArray())) { + throw std::runtime_error( + FormatError("ir", "AllocaInst 仅支持 i32* / float* / array")); } } @@ -153,12 +168,15 @@ LoadInst::LoadInst(std::shared_ptr val_ty, Value* ptr, std::string name) if (!ptr) { throw std::runtime_error(FormatError("ir", "LoadInst 缺少 ptr")); } - if (!type_ || !type_->IsInt32()) { - throw std::runtime_error(FormatError("ir", "LoadInst 当前只支持加载 i32")); + if (!type_ || (!type_->IsInt32() && !type_->IsFloat() && !type_->IsInt1())) { + throw std::runtime_error( + FormatError("ir", "LoadInst 仅支持加载 i32/float/i1")); } - if (!ptr->GetType() || !ptr->GetType()->IsPtrInt32()) { + if (!ptr->GetType() || + (!ptr->GetType()->IsPtrInt32() && !ptr->GetType()->IsPtrFloat() && + !ptr->GetType()->IsArray() && !ptr->GetType()->IsPtrInt1())) { throw std::runtime_error( - FormatError("ir", "LoadInst 当前只支持从 i32* 加载")); + FormatError("ir", "LoadInst 仅支持从指针或数组地址加载")); } AddOperand(ptr); } @@ -176,13 +194,25 @@ StoreInst::StoreInst(std::shared_ptr void_ty, Value* val, Value* ptr) if (!type_ || !type_->IsVoid()) { throw std::runtime_error(FormatError("ir", "StoreInst 返回类型必须为 void")); } - if (!val->GetType() || !val->GetType()->IsInt32()) { - throw std::runtime_error(FormatError("ir", "StoreInst 当前只支持存储 i32")); - } - if (!ptr->GetType() || !ptr->GetType()->IsPtrInt32()) { + if (!val->GetType() || + (!val->GetType()->IsInt32() && !val->GetType()->IsFloat() && + !val->GetType()->IsInt1() && !val->GetType()->IsArray())) { throw std::runtime_error( - FormatError("ir", "StoreInst 当前只支持写入 i32*")); + FormatError("ir", "StoreInst 仅支持存储 i32/float/i1/array")); } + if (!ptr->GetType() || + (!ptr->GetType()->IsPtrInt32() && !ptr->GetType()->IsPtrFloat() && + !ptr->GetType()->IsArray() && !ptr->GetType()->IsPtrInt1())) { + throw std::runtime_error(FormatError("ir", "StoreInst 仅支持写入指针或数组地址")); + } + if (ptr->GetType()->IsArray()) { + if (!val->GetType()->IsArray() || + val->GetType()->GetKind() != ptr->GetType()->GetKind()) { + throw std::runtime_error( + FormatError("ir", "StoreInst 聚合存储要求 value/ptr 具有相同数组类型")); + } + } + AddOperand(val); AddOperand(ptr); } diff --git a/src/irgen/IRGenDecl.cpp b/src/irgen/IRGenDecl.cpp index bc324f1..e2143bc 100644 --- a/src/irgen/IRGenDecl.cpp +++ b/src/irgen/IRGenDecl.cpp @@ -1,5 +1,7 @@ +// IRGenDecl.cpp #include "irgen/IRGen.h" +#include #include #include "SysYParser.h" @@ -8,27 +10,95 @@ namespace { -// 使用 LValContext 而不是 LValueContext -std::string GetLValueName(SysYParser::LValContext& lvalue) { - if (!lvalue.Ident()) { - throw std::runtime_error(FormatError("irgen", "非法左值")); +constexpr size_t kLocalArrayHeapThresholdBytes = 1024 * 1024; + +size_t GetArrayElementByteWidth(const ir::ArrayType& array_ty) { + auto* elem_ty = array_ty.GetElementType().get(); + if (elem_ty->IsInt1()) { + return 1; } - return lvalue.Ident()->getText(); + return 4; } -int TryGetConstInt(SysYParser::ConstExpContext* ctx) { - // 这里是一个简化的版本,实际上应该调用语义分析的常量求值 - // 暂时假设所有常量表达式都是整数常量 - // 实际实现需要更复杂的逻辑 - - // 简化为返回10 - return 10; +size_t GetArrayStorageBytes(const ir::ArrayType& array_ty) { + return static_cast(array_ty.GetElementCount()) * + GetArrayElementByteWidth(array_ty); } -} // namespace +bool IsZeroIRValue(const ir::Value* value) { + if (!value) { + return true; + } + if (auto* ci = dynamic_cast(value)) { + return ci->GetValue() == 0; + } + if (auto* cf = dynamic_cast(value)) { + return cf->GetValue() == 0.0f; + } + if (dynamic_cast(value) || + dynamic_cast(value)) { + return true; + } + return false; +} -// 注意:visitBlock 已经在 IRGenFunc.cpp 中实现,这里不要重复定义 +bool IsZeroConstantValue(const ir::ConstantValue* value) { + return IsZeroIRValue(value); +} + +std::vector TrimTrailingZeroConstants( + std::vector values) { + while (!values.empty() && IsZeroConstantValue(values.back())) { + values.pop_back(); + } + return values; +} + +std::vector BuildArrayIndices(ir::IRBuilder& builder, + const std::vector& dims, + size_t flat_idx) { + std::vector indices; + indices.reserve(dims.size() + 1); + indices.push_back(builder.CreateConstInt(0)); + + size_t rem = flat_idx; + for (size_t i = 0; i < dims.size(); ++i) { + size_t stride = 1; + for (size_t j = i + 1; j < dims.size(); ++j) { + stride *= static_cast(dims[j]); + } + const int idx = static_cast(rem / stride); + rem %= stride; + indices.push_back(builder.CreateConstInt(idx)); + } + return indices; +} +std::vector BuildZeroIndices(ir::IRBuilder& builder, + size_t dims_count) { + std::vector indices; + indices.reserve(dims_count + 1); + for (size_t i = 0; i <= dims_count; ++i) { + indices.push_back(builder.CreateConstInt(0)); + } + return indices; +} + +std::string MakeStaticArrayName(const ir::Function& func, + const std::string& var_name, + std::string suffix) { + for (char& ch : suffix) { + if (ch == '%') { + ch = '_'; + } + } + return "__static_array." + func.GetName() + "." + var_name + "." + suffix; +} + + +} // namespace + +// visitDecl: 处理声明 std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { std::cerr << "[DEBUG] visitDecl: 开始处理声明" << std::endl; if (!ctx) { @@ -38,13 +108,8 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { // 处理 varDecl if (auto* varDecl = ctx->varDecl()) { std::cerr << "[DEBUG] visitDecl: 处理变量声明" << std::endl; - // 检查类型 - if (varDecl->bType() && varDecl->bType()->Int()) { - for (auto* varDef : varDecl->varDef()) { - varDef->accept(this); - } - } else { - throw std::runtime_error(FormatError("irgen", "当前仅支持 int 类型变量")); + for (auto* varDef : varDecl->varDef()) { + varDef->accept(this); } } @@ -52,355 +117,291 @@ std::any IRGenImpl::visitDecl(SysYParser::DeclContext* ctx) { if (ctx->constDecl()) { std::cerr << "[DEBUG] visitDecl: 处理常量声明" << std::endl; auto* constDecl = ctx->constDecl(); - - if (constDecl->bType() && constDecl->bType()->Int()) { - for (auto* constDef : constDecl->constDef()) { - constDef->accept(this); - } - } else if (constDecl->bType() && constDecl->bType()->Float()) { - throw std::runtime_error(FormatError("irgen", "float常量暂未实现")); - } else { - throw std::runtime_error(FormatError("irgen", "未知的常量类型")); + for (auto* constDef : constDecl->constDef()) { + constDef->accept(this); } } + std::cerr << "[DEBUG] visitDecl: 声明处理完成" << std::endl; return {}; } -// 在 IRGenDecl.cpp 中确保有这个函数 +// visitConstDecl: 处理常量声明 std::any IRGenImpl::visitConstDecl(SysYParser::ConstDeclContext* ctx) { std::cerr << "[DEBUG] visitConstDecl: 开始处理常量声明" << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法常量声明")); } - std::cerr << "[DEBUG] visitConstDecl: processing constant declaration" << std::endl; - - // 检查类型 - if (ctx->bType()) { - if (ctx->bType()->Int()) { - // int 类型常量 - for (auto* constDef : ctx->constDef()) { - if (constDef) { - constDef->accept(this); - } - } - } else if (ctx->bType()->Float()) { - // float 类型常量(暂不支持) - throw std::runtime_error(FormatError("irgen", "float常量暂未实现")); - } else { - throw std::runtime_error(FormatError("irgen", "未知的常量类型")); + for (auto* constDef : ctx->constDef()) { + if (constDef) { + constDef->accept(this); } - } else { - throw std::runtime_error(FormatError("irgen", "常量声明缺少类型")); } std::cerr << "[DEBUG] visitConstDecl: 常量声明处理完成" << std::endl; return {}; } +// visitConstDef: 处理常量定义 - 从符号表获取常量值 std::any IRGenImpl::visitConstDef(SysYParser::ConstDefContext* ctx) { + std::cerr << "[DEBUG] visitConstDef: 开始处理常量定义" << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法常量定义")); } std::string const_name = ctx->Ident()->getText(); - // 检查是否为数组 - bool is_array = !ctx->constExp().empty(); - - // 获取常量类型(int 或 float) - bool is_float = false; - auto* constDecl = dynamic_cast(ctx->parent); - if (constDecl && constDecl->bType()) { - if (constDecl->bType()->Float()) { - is_float = true; - std::cerr << "[DEBUG] visitConstDef: 常量 " << const_name << " 是 float 类型" << std::endl; - } + // 从符号表获取常量符号 + const Symbol* sym = symbol_table_.lookupByConstDef(ctx); + if (!sym || sym->kind != SymbolKind::Constant) { + throw std::runtime_error(FormatError("irgen", "常量符号未找到: " + const_name)); } - if (is_array) { - // 数组常量处理 - std::vector dimensions; - for (auto* const_exp : ctx->constExp()) { - int dim_size = TryEvaluateConstInt(const_exp); - if (dim_size <= 0) dim_size = 1; - dimensions.push_back(dim_size); - } - - // 创建数组类型 - std::shared_ptr element_type; - if (is_float) { - element_type = ir::Type::GetFloatType(); - } else { - element_type = ir::Type::GetInt32Type(); + std::cerr << "[DEBUG] visitConstDef: 从符号表获取常量 " << const_name + << ", is_array_const: " << sym->IsArrayConstant() << std::endl; + + // 根据符号表中的常量值创建 IR 常量 + if (sym->IsArrayConstant()) { + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); } - - auto array_type = ir::Type::GetArrayType(element_type, dimensions); - ir::GlobalValue* global_array = module_.CreateGlobal(const_name, array_type); - - // 处理初始化值 + + const bool is_global_scope = (func_ == nullptr) || (sym->scope_level == 0); + const bool use_heap_storage = !is_global_scope && + (current_function_is_recursive_ || + GetArrayStorageBytes(*array_ty) > kLocalArrayHeapThresholdBytes); + + // 先把符号表中的扁平初始化值转换为 IR 常量值 std::vector init_consts; - if (auto* const_init_val = ctx->constInitVal()) { - auto result = const_init_val->accept(this); - if (result.has_value()) { - try { - auto init_vec = std::any_cast>(result); - for (auto* val : init_vec) { - if (is_float) { - if (auto* const_float = dynamic_cast(val)) { - init_consts.push_back(const_float); - } else if (auto* const_int = dynamic_cast(val)) { - // 整数转浮点 - float float_val = static_cast(const_int->GetValue()); - init_consts.push_back(builder_.CreateConstFloat(float_val)); - } else { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } - } else { - if (auto* const_int = dynamic_cast(val)) { - init_consts.push_back(const_int); - } else if (auto* const_float = dynamic_cast(val)) { - // 浮点转整数 - int int_val = static_cast(const_float->GetValue()); - init_consts.push_back(builder_.CreateConstInt(int_val)); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); - } - } - } - } catch (const std::bad_any_cast&) { - try { - ir::Value* single_val = std::any_cast(result); - if (is_float) { - if (auto* const_float = dynamic_cast(single_val)) { - init_consts.push_back(const_float); - } else { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } - } else { - if (auto* const_int = dynamic_cast(single_val)) { - init_consts.push_back(const_int); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); - } - } - } catch (...) {} - } - } - } - - // 补0 - int total_size = 1; - for (int dim : dimensions) total_size *= dim; - while (init_consts.size() < static_cast(total_size)) { - if (is_float) { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); + init_consts.reserve(sym->GetArraySize()); + for (size_t i = 0; i < sym->GetArraySize(); ++i) { + auto elem = sym->GetArrayElement(i); + if (array_ty->GetElementType()->IsInt32()) { + init_consts.push_back(builder_.CreateConstInt(elem.i32)); + } else if (array_ty->GetElementType()->IsFloat()) { + init_consts.push_back(builder_.CreateConstFloat(elem.f32)); } } - - global_array->SetInitializer(init_consts); - global_array->SetConstant(true); - - const_storage_map_[ctx] = global_array; - const_global_map_[const_name] = global_array; - - } else { - // 标量常量处理 - if (!ctx->constInitVal()) { - throw std::runtime_error(FormatError("irgen", "常量缺少初始值")); - } - - ir::ConstantValue* const_value = nullptr; - auto* const_init_val = ctx->constInitVal(); - - if (const_init_val->constExp()) { - // 对于常量表达式,我们可以尝试直接求值 - if (is_float) { - // TODO: 实现浮点常量表达式的求值 - const_value = module_.GetContext().GetConstFloat(0.0f); - } else { - int value = TryEvaluateConstInt(const_init_val->constExp()); - const_value = module_.GetContext().GetConstInt(value); + + init_consts = TrimTrailingZeroConstants(std::move(init_consts)); + + if (is_global_scope) { + // 全局 const 数组:全局存储,并标记为 constant + ir::GlobalValue* global_array = module_.CreateGlobal(const_name, sym->type); + if (!init_consts.empty()) { + global_array->SetInitializer(init_consts); } + global_array->SetConstant(true); + const_global_map_[const_name] = global_array; + const_storage_map_[ctx] = global_array; } else { - if (is_float) { - const_value = module_.GetContext().GetConstFloat(0.0f); + ir::Value* array_slot = nullptr; + if (use_heap_storage) { + const bool is_float_array = array_ty->GetElementType()->IsFloat(); + const std::string alloc_name = is_float_array ? "sysy_alloc_f32" : "sysy_alloc_i32"; + const std::string free_name = is_float_array ? "sysy_free_f32" : "sysy_free_i32"; + ir::Function* alloc_func = module_.FindFunction(alloc_name); + if (!alloc_func) alloc_func = CreateRuntimeFunctionDecl(alloc_name); + ir::Function* free_func = module_.FindFunction(free_name); + if (!free_func) free_func = CreateRuntimeFunctionDecl(free_name); + array_slot = builder_.CreateCall( + alloc_func, + {builder_.CreateConstInt(static_cast(array_ty->GetElementCount()))}, + module_.GetContext().NextTemp()); + heap_local_array_names_.insert(const_name); + RegisterCleanup(free_func, array_slot); } else { - const_value = module_.GetContext().GetConstInt(0); + array_slot = CreateEntryAlloca(sym->type, + module_.GetContext().NextTemp() + "_" + const_name); + } + + const auto& dims = array_ty->GetDimensions(); + const size_t total_size = array_ty->GetElementCount(); + + if (init_consts.empty()) { + if (use_heap_storage) { + const std::string zero_name = array_ty->GetElementType()->IsFloat() + ? "sysy_zero_f32" + : "sysy_zero_i32"; + ir::Function* zero_func = module_.FindFunction(zero_name); + if (!zero_func) zero_func = CreateRuntimeFunctionDecl(zero_name); + builder_.CreateCall(zero_func, + {array_slot, builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + } else { + builder_.CreateStore(module_.GetContext().GetAggregateZero(sym->type), array_slot); + } } + + for (size_t i = 0; i < total_size; ++i) { + ir::Value* init = nullptr; + if (i < init_consts.size()) { + init = init_consts[i]; + } else if (array_ty->GetElementType()->IsFloat()) { + init = builder_.CreateConstFloat(0.0f); + } else { + init = builder_.CreateConstInt(0); + } + + ir::Value* elem_ptr = nullptr; + if (use_heap_storage) { + if (IsZeroIRValue(init)) { + continue; + } + elem_ptr = builder_.CreateGEP( + array_slot, {builder_.CreateConstInt(static_cast(i))}, + module_.GetContext().NextTemp()); + } else { + elem_ptr = builder_.CreateGEP( + array_slot, BuildArrayIndices(builder_, dims, i), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(init, elem_ptr); + } + + local_var_map_[const_name] = array_slot; + const_storage_map_[ctx] = array_slot; + } + + } else if (sym->IsScalarConstant()) { + // 标量常量:存储常量值 + ir::ConstantValue* const_value = nullptr; + if (sym->type->IsInt32()) { + const_value = builder_.CreateConstInt(sym->GetIntConstant()); + std::cerr << "[DEBUG] visitConstDef: 整型常量 " << const_name + << " = " << sym->GetIntConstant() << std::endl; + } else if (sym->type->IsFloat()) { + const_value = builder_.CreateConstFloat(sym->GetFloatConstant()); + std::cerr << "[DEBUG] visitConstDef: 浮点常量 " << const_name + << " = " << sym->GetFloatConstant() << std::endl; } - // 存储常量值到映射 const_value_map_[const_name] = const_value; + const_storage_map_[ctx] = const_value; } return {}; } - -// TO DO:visitVarDef来区分全局和局部变量,并且正确处理数组变量的定义和初始化 +// visitVarDef: 处理变量定义 - 从符号表获取类型信息 std::any IRGenImpl::visitVarDef(SysYParser::VarDefContext* ctx) { std::cerr << "[DEBUG] visitVarDef: 开始处理变量定义" << std::endl; - if (!ctx) { - throw std::runtime_error(FormatError("irgen", "缺少变量定义")); - } - - if (!ctx->Ident()) { - throw std::runtime_error(FormatError("irgen", "变量声明缺少名称")); + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("irgen", "非法变量定义")); } std::string varName = ctx->Ident()->getText(); std::cerr << "[DEBUG] visitVarDef: 变量名称: " << varName << std::endl; - // 防止同一个变量被多次分配存储空间。 + + // 防止重复分配 if (storage_map_.find(ctx) != storage_map_.end()) { throw std::runtime_error(FormatError("irgen", "声明重复生成存储槽位: " + varName)); } - bool is_array = !ctx->constExp().empty(); - std::cerr << "[DEBUG] visitVarDef: 是否为数组: " << (is_array ? "是" : "否") << std::endl; + // 从符号表获取变量信息 + const Symbol* sym = symbol_table_.lookupByVarDef(ctx); + if (!sym) { + throw std::runtime_error(FormatError("irgen", "变量符号未找到: " + varName)); + } + + std::cerr << "[DEBUG] visitVarDef: 变量类型: " + << (sym->type->IsInt32() ? "int" : + sym->type->IsFloat() ? "float" : + sym->type->IsArray() ? "array" : "unknown") << std::endl; - // 使用 func_ 来判断:func_ == nullptr 表示在全局作用域 + // 根据作用域处理 if (func_ == nullptr) { std::cerr << "[DEBUG] visitVarDef: 处理全局变量" << std::endl; - // 全局变量处理 - return HandleGlobalVariable(ctx, varName, is_array); + return HandleGlobalVariable(ctx, varName, sym); } else { std::cerr << "[DEBUG] visitVarDef: 处理局部变量" << std::endl; - // 局部变量处理 - return HandleLocalVariable(ctx, varName, is_array); + return HandleLocalVariable(ctx, varName, sym); } } +// HandleGlobalVariable: 处理全局变量 std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, - const std::string& varName, - bool is_array) { + const std::string& varName, + const Symbol* sym) { std::cerr << "[DEBUG] HandleGlobalVariable: 开始处理全局变量 " << varName << std::endl; - // 获取变量类型(int 或 float) - bool is_float = false; - auto* varDecl = dynamic_cast(ctx->parent); - if (varDecl && varDecl->bType()) { - if (varDecl->bType()->Float()) { - is_float = true; - std::cerr << "[DEBUG] HandleGlobalVariable: 变量 " << varName << " 是 float 类型" << std::endl; - } else if (varDecl->bType()->Int()) { - std::cerr << "[DEBUG] HandleGlobalVariable: 变量 " << varName << " 是 int 类型" << std::endl; + if (!sym) { + throw std::runtime_error(FormatError("irgen", "符号表信息缺失: " + varName)); + } + + bool is_array = sym->type->IsArray(); + bool is_float = sym->type->IsFloat(); + if (is_array) { + if (auto* array_ty = dynamic_cast(sym->type.get())) { + is_float = array_ty->GetElementType()->IsFloat(); } } if (is_array) { - // 全局数组变量 - int total_size = 1; - std::vector dimensions; - - // 计算总大小 - for (auto* const_exp : ctx->constExp()) { - int dim_size = TryEvaluateConstInt(const_exp); - if (dim_size <= 0) { - dim_size = 1; - std::cerr << "[WARNING] HandleGlobalVariable: 无法确定数组维度大小,使用1" << std::endl; - } - dimensions.push_back(dim_size); - total_size *= dim_size; + // 从符号表获取数组类型和维度 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); } - std::cerr << "[DEBUG] HandleGlobalVariable: 数组总大小: " << total_size << std::endl; + const auto& dimensions = array_ty->GetDimensions(); + size_t total_size = array_ty->GetElementCount(); - // 创建数组类型 - std::shared_ptr element_type; - if (is_float) { - element_type = ir::Type::GetFloatType(); - } else { - element_type = ir::Type::GetInt32Type(); - } + std::cerr << "[DEBUG] HandleGlobalVariable: 全局数组 " << varName << " 维度: "; + for (int d : dimensions) std::cerr << d << " "; + std::cerr << ", 总大小: " << total_size << std::endl; - auto array_type = ir::Type::GetArrayType(element_type, dimensions); - ir::GlobalValue* global_array = module_.CreateGlobal(varName, array_type); - std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局数组: " << varName << std::endl; + // 创建全局数组 + ir::GlobalValue* global_array = module_.CreateGlobal(varName, sym->type); - // 处理初始化值 + // 处理初始化值(使用带维度感知的展平) std::vector init_consts; if (auto* initVal = ctx->initVal()) { std::cerr << "[DEBUG] HandleGlobalVariable: 处理初始化值" << std::endl; - auto result = initVal->accept(this); - if (result.has_value()) { - try { - auto init_vec = std::any_cast>(result); - std::cerr << "[DEBUG] HandleGlobalVariable: 获取到初始化值列表, 大小: " << init_vec.size() << std::endl; - for (auto* val : init_vec) { - if (auto* const_int = dynamic_cast(val)) { - init_consts.push_back(const_int); - } else if (auto* const_float = dynamic_cast(val)) { - init_consts.push_back(const_float); - } else { - // 非常量表达式,使用0 - if (is_float) { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); - } - } + // 全局变量的初始化必须是常量表达式(语义检查已保证) + std::vector flat_vals = FlattenInitVal( + initVal, dimensions, is_float); + for (auto* val : flat_vals) { + if (is_float) { + if (auto* cf = dynamic_cast(val)) { + init_consts.push_back(cf); + } else if (auto* ci = dynamic_cast(val)) { + init_consts.push_back(builder_.CreateConstFloat(static_cast(ci->GetValue()))); + } else { + init_consts.push_back(builder_.CreateConstFloat(0.0f)); } - } catch (const std::bad_any_cast&) { - try { - ir::Value* single_val = std::any_cast(result); - std::cerr << "[DEBUG] HandleGlobalVariable: 获取到单个初始化值" << std::endl; - if (auto* const_int = dynamic_cast(single_val)) { - init_consts.push_back(const_int); - } else if (auto* const_float = dynamic_cast(single_val)) { - init_consts.push_back(const_float); - } else { - if (is_float) { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); - } - } - } catch (const std::bad_any_cast&) { - std::cerr << "[WARNING] HandleGlobalVariable: 无法解析数组初始化值" << std::endl; + } else { + if (auto* ci = dynamic_cast(val)) { + init_consts.push_back(ci); + } else if (auto* cf = dynamic_cast(val)) { + init_consts.push_back(builder_.CreateConstInt(static_cast(cf->GetValue()))); + } else { + init_consts.push_back(builder_.CreateConstInt(0)); } } } } + + init_consts = TrimTrailingZeroConstants(std::move(init_consts)); - // 如果初始化值不足,补0 - while (init_consts.size() < static_cast(total_size)) { - if (is_float) { - init_consts.push_back(builder_.CreateConstFloat(0.0f)); - } else { - init_consts.push_back(builder_.CreateConstInt(0)); - } - } - - // 设置全局数组的初始化器 + // 设置初始化器 if (!init_consts.empty()) { global_array->SetInitializer(init_consts); - std::cerr << "[DEBUG] HandleGlobalVariable: 设置全局数组初始化器" << std::endl; } - // 存储全局变量引用 storage_map_[ctx] = global_array; global_map_[varName] = global_array; } else { // 全局标量变量 - std::shared_ptr var_type; - if (is_float) { - var_type = ir::Type::GetFloatType(); - } else { - var_type = ir::Type::GetInt32Type(); - } - + std::shared_ptr var_type = sym->type; ir::GlobalValue* global_var = module_.CreateGlobal(varName, var_type); - std::cerr << "[DEBUG] HandleGlobalVariable: 创建全局标量变量: " << varName << std::endl; // 处理初始化值 ir::ConstantValue* init_value = nullptr; if (auto* initVal = ctx->initVal()) { - std::cerr << "[DEBUG] HandleGlobalVariable: 处理标量初始化值" << std::endl; auto result = initVal->accept(this); if (result.has_value()) { try { @@ -409,191 +410,171 @@ std::any IRGenImpl::HandleGlobalVariable(SysYParser::VarDefContext* ctx, if (auto* const_float = dynamic_cast(val)) { init_value = const_float; } else if (auto* const_int = dynamic_cast(val)) { - // 整数转浮点 - float float_val = static_cast(const_int->GetValue()); - init_value = builder_.CreateConstFloat(float_val); - } else { - init_value = builder_.CreateConstFloat(0.0f); + init_value = builder_.CreateConstFloat(static_cast(const_int->GetValue())); } } else { if (auto* const_int = dynamic_cast(val)) { init_value = const_int; } else if (auto* const_float = dynamic_cast(val)) { - // 浮点转整数 - int int_val = static_cast(const_float->GetValue()); - init_value = builder_.CreateConstInt(int_val); - } else { - init_value = builder_.CreateConstInt(0); + init_value = builder_.CreateConstInt(static_cast(const_float->GetValue())); } } } catch (const std::bad_any_cast&) { - if (is_float) { - init_value = builder_.CreateConstFloat(0.0f); - } else { - init_value = builder_.CreateConstInt(0); - } + // 使用默认值 } } } - // 如果没有初始化值,默认初始化 + //正确:只在没有初始化值时才设置默认值 if (!init_value) { if (is_float) { - init_value = builder_.CreateConstFloat(0.0f); + init_value = builder_.CreateConstFloat(0.0f); } else { - init_value = builder_.CreateConstInt(0); + init_value = builder_.CreateConstInt(0); } } - // 设置全局变量的初始化器 global_var->SetInitializer(init_value); - - // 存储全局变量引用 storage_map_[ctx] = global_var; global_map_[varName] = global_var; } + std::cerr << "[DEBUG] HandleGlobalVariable: 全局变量处理完成" << std::endl; return {}; } -// 修改 HandleLocalVariable 函数中的数组处理部分 - +// HandleLocalVariable: 处理局部变量 std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, - const std::string& varName, - bool is_array) { + const std::string& varName, + const Symbol* sym) { std::cerr << "[DEBUG] HandleLocalVariable: 开始处理局部变量 " << varName << std::endl; - - // 获取变量类型 - bool is_float = false; - auto* varDecl = dynamic_cast(ctx->parent); - if (varDecl && varDecl->bType()) { - if (varDecl->bType()->Float()) { - is_float = true; - std::cerr << "[DEBUG] HandleLocalVariable: 变量 " << varName << " 是 float 类型" << std::endl; - } + + if (!sym) { + throw std::runtime_error(FormatError("irgen", "符号表信息缺失: " + varName)); } - + + bool is_array = sym->type->IsArray(); + bool is_float = sym->type->IsFloat(); if (is_array) { - // 局部数组变量 - int total_size = 1; - std::vector dimensions; - - // 获取数组维度 - for (auto* const_exp : ctx->constExp()) { - try { - int dim_size = TryEvaluateConstInt(const_exp); - if (dim_size <= 0) dim_size = 1; - dimensions.push_back(dim_size); - total_size *= dim_size; - } catch (const std::exception& e) { - std::cerr << "[WARNING] HandleLocalVariable: 无法获取数组维度,使用维度1" << std::endl; - dimensions.push_back(1); - total_size *= 1; - } + if (auto* array_ty = dynamic_cast(sym->type.get())) { + is_float = array_ty->GetElementType()->IsFloat(); } - - // 创建数组类型 - std::shared_ptr elem_type; - if (is_float) { - elem_type = ir::Type::GetFloatType(); - } else { - elem_type = ir::Type::GetInt32Type(); + } + + if (is_array) { + // 从符号表获取数组信息 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + throw std::runtime_error(FormatError("irgen", "数组类型转换失败")); } - // 修正:使用完整的维度列表创建数组类型 - auto array_type = ir::Type::GetArrayType(elem_type, dimensions); - - // 分配数组内存 - 为每个元素创建独立的 alloca - std::vector element_slots; - for (int i = 0; i < total_size; i++) { - ir::AllocaInst* slot; - if (is_float) { - slot = builder_.CreateAllocaFloat( - module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); - } else { - slot = builder_.CreateAllocaI32( - module_.GetContext().NextTemp() + "_" + varName + "_" + std::to_string(i)); + size_t total_size = array_ty->GetElementCount(); + const size_t total_bytes = GetArrayStorageBytes(*array_ty); + const bool use_heap_storage = + current_function_is_recursive_ || total_bytes > kLocalArrayHeapThresholdBytes; + + std::cerr << "[DEBUG] HandleLocalVariable: 局部数组 " << varName + << " 总大小: " << total_size << std::endl; + + ir::Value* array_slot = nullptr; + if (use_heap_storage) { + const std::string alloc_name = is_float ? "sysy_alloc_f32" : "sysy_alloc_i32"; + const std::string free_name = is_float ? "sysy_free_f32" : "sysy_free_i32"; + ir::Function* alloc_func = module_.FindFunction(alloc_name); + if (!alloc_func) { + alloc_func = CreateRuntimeFunctionDecl(alloc_name); + } + ir::Function* free_func = module_.FindFunction(free_name); + if (!free_func) { + free_func = CreateRuntimeFunctionDecl(free_name); } - element_slots.push_back(slot); + array_slot = builder_.CreateCall( + alloc_func, + {builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + heap_local_array_names_.insert(varName); + RegisterCleanup(free_func, array_slot); + } else { + array_slot = CreateEntryAlloca( + sym->type, module_.GetContext().NextTemp() + "_" + varName); } - // 存储第一个元素的地址作为数组的基地址 - storage_map_[ctx] = element_slots[0]; - local_var_map_[varName] = element_slots[0]; + const auto& dims = array_ty->GetDimensions(); + + storage_map_[ctx] = array_slot; + local_var_map_[varName] = array_slot; // 处理初始化 if (auto* initVal = ctx->initVal()) { - auto result = initVal->accept(this); - if (result.has_value()) { - try { - std::vector init_values = - std::any_cast>(result); - - // 初始化数组元素 - for (size_t i = 0; i < init_values.size() && i < static_cast(total_size); i++) { - builder_.CreateStore(init_values[i], element_slots[i]); - } - - // 剩余元素初始化为0 - for (size_t i = init_values.size(); i < static_cast(total_size); i++) { - if (is_float) { - builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); - } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } - } catch (const std::bad_any_cast&) { - try { - ir::Value* single_value = std::any_cast(result); - // 只初始化第一个元素 - builder_.CreateStore(single_value, element_slots[0]); - - // 其他元素初始化为0 - for (int i = 1; i < total_size; i++) { - if (is_float) { - builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); - } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } - } catch (const std::bad_any_cast&) { - // 全部初始化为0 - for (int i = 0; i < total_size; i++) { - if (is_float) { - builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); - } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } - } - } + std::vector init_values = FlattenInitVal( + initVal, array_ty->GetDimensions(), is_float); + + bool is_all_zero_init = true; + for (auto* value : init_values) { + if (!IsZeroIRValue(value)) { + is_all_zero_init = false; + break; } - } else { - // 没有初始化值,全部初始化为0 - for (int i = 0; i < total_size; i++) { - if (is_float) { - builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); - } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); - } + } + + if (is_all_zero_init && !use_heap_storage) { + builder_.CreateStore(module_.GetContext().GetAggregateZero(sym->type), + array_slot); + std::cerr << "[DEBUG] HandleLocalVariable: aggregate zeroinitializer store for " + << varName << std::endl; + return {}; + } + + if (use_heap_storage) { + const std::string zero_name = is_float ? "sysy_zero_f32" : "sysy_zero_i32"; + ir::Function* zero_func = module_.FindFunction(zero_name); + if (!zero_func) { + zero_func = CreateRuntimeFunctionDecl(zero_name); + } + builder_.CreateCall(zero_func, + {array_slot, builder_.CreateConstInt(static_cast(total_size))}, + module_.GetContext().NextTemp()); + if (is_all_zero_init) { + return {}; } } - } else { - // 无初始化,所有元素初始化为0 - for (int i = 0; i < total_size; i++) { - if (is_float) { - builder_.CreateStore(builder_.CreateConstFloat(0.0f), element_slots[i]); + + for (size_t i = 0; i < total_size; i++) { + ir::Value* val = (i < init_values.size() && init_values[i]) + ? init_values[i] + : (is_float ? static_cast(builder_.CreateConstFloat(0.0f)) + : static_cast(builder_.CreateConstInt(0))); + if (use_heap_storage && IsZeroIRValue(val)) { + continue; + } + if (is_float && val->GetType()->IsInt32()) { + val = builder_.CreateSIToFP(val, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (!is_float && val->GetType()->IsFloat()) { + val = builder_.CreateFPToSI(val, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + ir::Value* elem_ptr = nullptr; + if (use_heap_storage) { + elem_ptr = builder_.CreateGEP( + array_slot, {builder_.CreateConstInt(static_cast(i))}, + module_.GetContext().NextTemp()); } else { - builder_.CreateStore(builder_.CreateConstInt(0), element_slots[i]); + elem_ptr = builder_.CreateGEP( + array_slot, BuildArrayIndices(builder_, dims, i), + module_.GetContext().NextTemp()); } + builder_.CreateStore(val, elem_ptr); } } + } else { // 局部标量变量 ir::AllocaInst* slot; if (is_float) { - slot = builder_.CreateAllocaFloat(module_.GetContext().NextTemp() + "_" + varName); + slot = CreateEntryAllocaFloat(module_.GetContext().NextTemp() + "_" + varName); } else { - slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp() + "_" + varName); + slot = CreateEntryAllocaI32(module_.GetContext().NextTemp() + "_" + varName); } storage_map_[ctx] = slot; @@ -608,47 +589,39 @@ std::any IRGenImpl::HandleLocalVariable(SysYParser::VarDefContext* ctx, init = std::any_cast(result); } catch (const std::bad_any_cast&) { try { - std::vector init_values = - std::any_cast>(result); - if (!init_values.empty()) { - init = init_values[0]; - } else { - if (is_float) { - init = builder_.CreateConstFloat(0.0f); - } else { - init = builder_.CreateConstInt(0); - } + auto init_vec = std::any_cast>(result); + if (!init_vec.empty()) { + init = init_vec[0]; } } catch (const std::bad_any_cast&) { - if (is_float) { - init = builder_.CreateConstFloat(0.0f); - } else { - init = builder_.CreateConstInt(0); - } + // 使用默认值 } } - } else { - if (is_float) { - init = builder_.CreateConstFloat(0.0f); - } else { - init = builder_.CreateConstInt(0); - } - } - } else { - if (is_float) { - init = builder_.CreateConstFloat(0.0f); - } else { - init = builder_.CreateConstInt(0); } } + if (!init) { + // SysY 局部变量未显式初始化时为未定义值:不生成默认 store。 + return {}; + } + + // 标量初始化支持 int/float 隐式转换。 + if (is_float && init->GetType()->IsInt32()) { + init = builder_.CreateSIToFP(init, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (!is_float && init->GetType()->IsFloat()) { + init = builder_.CreateFPToSI(init, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(init, slot); } + std::cerr << "[DEBUG] HandleLocalVariable: 局部变量处理完成" << std::endl; return {}; } - +// visitInitVal: 处理初始化值 std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { std::cerr << "[DEBUG] visitInitVal: 开始处理初始化值" << std::endl; if (!ctx) { @@ -663,16 +636,14 @@ std::any IRGenImpl::visitInitVal(SysYParser::InitValContext* ctx) { // 如果是聚合初始化(花括号列表) else if (!ctx->initVal().empty()) { std::cerr << "[DEBUG] visitInitVal: 处理聚合初始化" << std::endl; - // 处理嵌套聚合初始化 return ProcessNestedInitVals(ctx); } std::cerr << "[DEBUG] visitInitVal: 空初始化列表" << std::endl; - // 空初始化列表 return std::vector{}; } -// 新增:处理嵌套聚合初始化的辅助函数 +// ProcessNestedInitVals: 处理嵌套聚合初始化 std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValContext* ctx) { std::cerr << "[DEBUG] ProcessNestedInitVals: 开始处理嵌套初始化值" << std::endl; std::vector all_values; @@ -690,157 +661,107 @@ std::vector IRGenImpl::ProcessNestedInitVals(SysYParser::InitValCont // 尝试获取值列表(嵌套情况) std::vector nested_values = std::any_cast>(result); - std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: " << nested_values.size() << std::endl; - // 展平嵌套的值 + std::cerr << "[DEBUG] ProcessNestedInitVals: 获取到嵌套值列表, 大小: " + << nested_values.size() << std::endl; all_values.insert(all_values.end(), nested_values.begin(), nested_values.end()); } catch (const std::bad_any_cast&) { - // 未知类型 std::cerr << "[ERROR] ProcessNestedInitVals: 不支持的初始化值类型" << std::endl; throw std::runtime_error( FormatError("irgen", "不支持的初始化值类型")); } } - } else { - std::cerr << "[DEBUG] ProcessNestedInitVals: 无初始化值结果" << std::endl; } } - std::cerr << "[DEBUG] ProcessNestedInitVals: 共获取 " << all_values.size() << " 个初始化值" << std::endl; + std::cerr << "[DEBUG] ProcessNestedInitVals: 共获取 " << all_values.size() + << " 个初始化值" << std::endl; return all_values; } -int IRGenImpl::TryEvaluateConstInt(SysYParser::ConstExpContext* ctx) { - std::cerr << "[DEBUG] TryEvaluateConstInt: 开始求值常量表达式" << std::endl; - if (!ctx) { - std::cerr << "[DEBUG] TryEvaluateConstInt: ctx is null" << std::endl; - return 0; - } - - // 直接访问常量表达式树,计算数值 - // 这里需要实现真正的常量求值逻辑 - // 简化版本:假设常量表达式是整数常量 - - if (ctx->addExp()) { - // 尝试从 addExp 求值 - return EvaluateConstAddExp(ctx->addExp()); - } - - return 0; -} +// FlattenInitVal:按 C 语言花括号对齐规则展平初始化列表 +// dims[0] 是最外层维度,dims.back() 是最内层维度(元素层) +// 总元素数 = prod(dims),结果向量长度恰好为总元素数(不足处补零) +std::vector IRGenImpl::FlattenInitVal( + SysYParser::InitValContext* ctx, + const std::vector& dims, + bool is_float) { -// 添加辅助函数来求值常量表达式 -int IRGenImpl::EvaluateConstAddExp(SysYParser::AddExpContext* ctx) { - if (!ctx) return 0; - - // 如果没有左操作数,直接求值右操作数 - if (!ctx->addExp()) { - return EvaluateConstMulExp(ctx->mulExp()); - } - - int left = EvaluateConstAddExp(ctx->addExp()); - int right = EvaluateConstMulExp(ctx->mulExp()); - - if (ctx->AddOp()) { - return left + right; - } else if (ctx->SubOp()) { - return left - right; - } - - return 0; -} + // 计算总元素数 + size_t total = 1; + for (int d : dims) total *= static_cast(d); -int IRGenImpl::EvaluateConstMulExp(SysYParser::MulExpContext* ctx) { - if (!ctx) return 0; - - // 如果没有左操作数,直接求值右操作数 - if (!ctx->mulExp()) { - return EvaluateConstUnaryExp(ctx->unaryExp()); - } - - int left = EvaluateConstMulExp(ctx->mulExp()); - int right = EvaluateConstUnaryExp(ctx->unaryExp()); - - if (ctx->MulOp()) { - return left * right; - } else if (ctx->DivOp()) { - return left / right; - } else if (ctx->QuoOp()) { - return left % right; - } - - return 0; -} + // 零值工厂 + auto make_zero = [&]() -> ir::Value* { + if (is_float) return builder_.CreateConstFloat(0.0f); + return builder_.CreateConstInt(0); + }; -int IRGenImpl::EvaluateConstUnaryExp(SysYParser::UnaryExpContext* ctx) { - if (!ctx) return 0; - - // 基本表达式(数字字面量) - if (ctx->primaryExp()) { - return EvaluateConstPrimaryExp(ctx->primaryExp()); - } - - // 一元运算 - if (ctx->unaryOp() && ctx->unaryExp()) { - int operand = EvaluateConstUnaryExp(ctx->unaryExp()); - std::string op = ctx->unaryOp()->getText(); - - if (op == "+") { - return operand; - } else if (op == "-") { - return -operand; - } else if (op == "!") { - return !operand; + // 先全部填零 + std::vector flat(total, nullptr); + + // 计算 depth 层从 begin 开始的子数组跨度 + // depth=0 → 每个子聚合占 dims[1]*dims[2]*... 个元素 + auto subspan = [&](size_t depth) -> size_t { + size_t span = 1; + for (size_t i = depth + 1; i < dims.size(); ++i) + span *= static_cast(dims[i]); + return span; + }; + + // 递归 fill_impl:将 node 的内容按 C 规则写入 flat[begin..end-1],返回填完后的光标 + std::function fill_impl; + fill_impl = [&](SysYParser::InitValContext* node, + size_t depth, + size_t begin, + size_t end) -> size_t { + if (!node || begin >= end) return begin; + + // 单标量初始化项(叶节点) + if (node->exp()) { + ir::Value* v = EvalExpr(*node->exp()); + if (begin < flat.size()) flat[begin] = v; + return std::min(begin + 1, end); } - } - - return 0; -} -int IRGenImpl::EvaluateConstPrimaryExp(SysYParser::PrimaryExpContext* ctx) { - if (!ctx) return 0; - - // 处理数字字面量 - if (ctx->DECIMAL_INT()) { - return std::stoi(ctx->DECIMAL_INT()->getText()); - } - - if (ctx->HEX_INT()) { - std::string hex = ctx->HEX_INT()->getText(); - return std::stoi(hex, nullptr, 16); - } - - if (ctx->OCTAL_INT()) { - std::string oct = ctx->OCTAL_INT()->getText(); - return std::stoi(oct, nullptr, 8); - } - - if (ctx->ZERO()) { - return 0; - } - - // 处理括号表达式 - if (ctx->L_PAREN() && ctx->exp()) { - return EvaluateConstExp(ctx->exp()); - } - - // 常量标识符(引用其他常量) - if (ctx->lVal()) { - std::string const_name = ctx->lVal()->Ident()->getText(); - auto it = const_value_map_.find(const_name); - if (it != const_value_map_.end()) { - if (auto* const_int = dynamic_cast(it->second)) { - return const_int->GetValue(); + // 聚合初始化(花括号列表) + size_t cursor = begin; + for (auto* child : node->initVal()) { + if (cursor >= end) break; + + if (child->exp()) { + // 标量子项 + ir::Value* v = EvalExpr(*child->exp()); + if (cursor < flat.size()) flat[cursor] = v; + ++cursor; + continue; + } + + // 花括号子列表 + if (depth + 1 < dims.size()) { + // 对齐到下一个子聚合边界 + const size_t span = subspan(depth); + const size_t rel = (cursor - begin) % span; + if (rel != 0) cursor += (span - rel); + if (cursor >= end) break; + + const size_t sub_end = std::min(cursor + span, end); + fill_impl(child, depth + 1, cursor, sub_end); + cursor = sub_end; // 消耗一个子聚合 + } else { + // 最内层遇到额外花括号,按顺序展开 + cursor = fill_impl(child, depth, cursor, end); } } - // 也可以从语义分析获取常量值 - // ... + return cursor; + }; + + fill_impl(ctx, 0, 0, total); + + // 把 nullptr(未显式初始化)替换为零值 + for (auto*& v : flat) { + if (!v) v = make_zero(); } - - return 0; -} -int IRGenImpl::EvaluateConstExp(SysYParser::ExpContext* ctx) { - if (!ctx || !ctx->addExp()) return 0; - return EvaluateConstAddExp(ctx->addExp()); + return flat; } \ No newline at end of file diff --git a/src/irgen/IRGenDriver.cpp b/src/irgen/IRGenDriver.cpp index ff94412..ac19a7b 100644 --- a/src/irgen/IRGenDriver.cpp +++ b/src/irgen/IRGenDriver.cpp @@ -6,10 +6,11 @@ #include "ir/IR.h" #include "utils/Log.h" +// 修改 GenerateIR 函数 std::unique_ptr GenerateIR(SysYParser::CompUnitContext& tree, - const SemanticContext& sema) { + const SemaResult& sema_result) { auto module = std::make_unique(); - IRGenImpl gen(*module, sema); + IRGenImpl gen(*module, sema_result.context, sema_result.symbol_table); tree.accept(&gen); return module; } diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index 9e33971..5d8128b 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -21,8 +21,9 @@ // - 条件与比较表达式 // - ... +// 表达式生成 ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { - std::cout << "[DEBUG IRGEN] EvalExpr: " << expr.getText() << std::endl; + std::cerr << "[DEBUG IRGEN] EvalExpr: 开始处理表达式 " << expr.getText() << std::endl; try { auto result_any = expr.accept(this); @@ -38,15 +39,7 @@ ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { } catch (const std::bad_any_cast& e) { std::cerr << "[ERROR] EvalExpr: bad any_cast - " << e.what() << std::endl; std::cerr << " Type info: " << result_any.type().name() << std::endl; - - // 尝试其他可能的类型 - try { - // 检查是否是无值的any(可能来自visit函数返回{}) - std::cerr << "[DEBUG] EvalExpr: Trying to handle empty any" << std::endl; - return nullptr; - } catch (...) { - throw std::runtime_error(FormatError("irgen", "表达式求值返回了错误的类型")); - } + throw std::runtime_error(FormatError("irgen", "表达式求值返回了错误的类型")); } } catch (const std::exception& e) { std::cerr << "[ERROR] Exception in EvalExpr: " << e.what() << std::endl; @@ -54,16 +47,14 @@ ir::Value* IRGenImpl::EvalExpr(SysYParser::ExpContext& expr) { } } - ir::Value* IRGenImpl::EvalCond(SysYParser::CondContext& cond) { + std::cerr << "[DEBUG IRGEN] EvalCond: 开始处理条件表达式 " << cond.getText() << std::endl; return std::any_cast(cond.accept(this)); } - - // 基本表达式:数字、变量、括号表达式 std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { - std::cout << "[DEBUG IRGEN] visitPrimaryExp: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitPrimaryExp: 开始处理基本表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少基本表达式")); } @@ -82,9 +73,7 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { if (ctx->HEX_FLOAT()) { std::string hex_float_str = ctx->HEX_FLOAT()->getText(); float value = 0.0f; - // 解析十六进制浮点数 try { - // C++11 的 std::stof 支持十六进制浮点数表示 value = std::stof(hex_float_str); } catch (const std::exception& e) { std::cerr << "[WARNING] 无法解析十六进制浮点数: " << hex_float_str @@ -97,7 +86,6 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { return static_cast(const_float); } - // 处理十进制浮点常量 if (ctx->DEC_FLOAT()) { std::string dec_float_str = ctx->DEC_FLOAT()->getText(); float value = 0.0f; @@ -118,6 +106,8 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { std::string hex = ctx->HEX_INT()->getText(); int value = std::stoi(hex, nullptr, 16); ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant hex int " << value + << " created as " << (void*)const_int << std::endl; return static_cast(const_int); } @@ -125,11 +115,14 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { std::string oct = ctx->OCTAL_INT()->getText(); int value = std::stoi(oct, nullptr, 8); ir::Value* const_int = builder_.CreateConstInt(value); + std::cerr << "[DEBUG] visitPrimaryExp: constant octal int " << value + << " created as " << (void*)const_int << std::endl; return static_cast(const_int); } if (ctx->ZERO()) { ir::Value* const_int = builder_.CreateConstInt(0); + std::cerr << "[DEBUG] visitPrimaryExp: constant zero int created" << std::endl; return static_cast(const_int); } @@ -149,12 +142,9 @@ std::any IRGenImpl::visitPrimaryExp(SysYParser::PrimaryExpContext* ctx) { throw std::runtime_error(FormatError("irgen", "不支持的基本表达式类型")); } - // 左值(变量)处理 -// 1. 先通过语义分析结果把变量使用绑定回声明; -// 2. 再通过 storage_map_ 找到该声明对应的栈槽位; -// 3. 最后生成 load,把内存中的值读出来。 std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLVal: 开始处理左值 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法左值")); } @@ -162,42 +152,95 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { std::string varName = ctx->Ident()->getText(); std::cerr << "[DEBUG] visitLVal: " << varName << std::endl; - // 优先检查是否是常量 - auto const_it = const_value_map_.find(varName); - if (const_it != const_value_map_.end()) { - // 常量直接返回值,不需要load - std::cerr << "[DEBUG] visitLVal: constant " << varName << std::endl; - return static_cast(const_it->second); - } - - // 检查全局常量 - auto const_global_it = const_global_map_.find(varName); - if (const_global_it != const_global_map_.end()) { - // 全局常量,需要load - ir::Value* ptr = const_global_it->second; - if (!ctx->exp().empty()) { - // 数组访问 - std::vector indices; - indices.push_back(builder_.CreateConstInt(0)); - for (auto* exp : ctx->exp()) { - ir::Value* index = EvalExpr(*exp); - indices.push_back(index); + // 先检查语义分析中常量绑定 + const SysYParser::ConstDefContext* const_decl = sema_.ResolveConstUse(ctx); + const Symbol* sym = nullptr; + if (const_decl) { + sym = symbol_table_.lookupByConstDef(const_decl); + if (!sym) { + sym = symbol_table_.lookupAll(varName); + } + } else { + sym = symbol_table_.lookup(varName); + } + + // 如果是常量,直接返回常量值 + if (sym && sym->kind == SymbolKind::Constant) { + std::cerr << "[DEBUG] visitLVal: 找到常量 " << varName << std::endl; + + if (sym->IsScalarConstant()) { + if (sym->type->IsInt32()) { + ir::ConstantValue* const_val = builder_.CreateConstInt(sym->GetIntConstant()); + return static_cast(const_val); + } else if (sym->type->IsFloat()) { + ir::ConstantValue* const_val = builder_.CreateConstFloat(sym->GetFloatConstant()); + return static_cast(const_val); + } + } else if (sym->IsArrayConstant()) { + auto it = const_global_map_.find(varName); + if (it != const_global_map_.end()) { + ir::GlobalValue* global_array = it->second; + + // 尝试获取类型信息,用于维度判断与下标线性化 + auto* array_ty = dynamic_cast(sym->type.get()); + if (!array_ty) { + // 无法获取数组类型,退回返回全局对象 + return static_cast(global_array); + } + + size_t ndims = array_ty->GetDimensions().size(); + + // 有下标访问 + if (!ctx->exp().empty()) { + size_t provided = ctx->exp().size(); + + // 完全索引(所有维度都有下标)——直接返回常量元素,不生成 Load + if (provided == ndims) { + std::vector idxs; + idxs.reserve(provided); + for (auto* exp : ctx->exp()) { + ir::Value* v = EvalExpr(*exp); + if (!v || !v->IsConstant()) { + throw std::runtime_error(FormatError("irgen", "常量数组索引必须为常量整数: " + varName)); + } + auto* ci = dynamic_cast(v); + if (!ci) { + throw std::runtime_error(FormatError("irgen", "常量数组索引非整型常量: " + varName)); + } + idxs.push_back(ci->GetValue()); + } + + // 计算线性下标(行主序) + const auto& dims = array_ty->GetDimensions(); + int flat = idxs[0]; + for (size_t i = 1; i < ndims; ++i) { + flat = flat * dims[i] + idxs[i]; + } + + ir::ConstantValue* elem = global_array->GetArrayElement(static_cast(flat)); + return static_cast(elem); + } + + // 部分索引:返回指针(不做 Load),由上层按需处理 + std::vector indices; + indices.push_back(builder_.CreateConstInt(0)); + for (auto* exp : ctx->exp()) { + indices.push_back(EvalExpr(*exp)); + } + return static_cast( + builder_.CreateGEP(global_array, indices, module_.GetContext().NextTemp())); + } else { + // 无下标,直接返回全局常量对象 + return static_cast(global_array); + } } - ir::Value* elem_ptr = builder_.CreateGEP( - ptr, indices, module_.GetContext().NextTemp()); - return static_cast( - builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); - } else { - return static_cast( - builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); } } // 不是常量,按正常变量处理 - // ... 原有的变量查找代码 ... - auto* decl = sema_.ResolveVarUse(ctx); ir::Value* ptr = nullptr; + if (decl) { auto it = storage_map_.find(decl); if (it != storage_map_.end()) { @@ -234,27 +277,124 @@ std::any IRGenImpl::visitLVal(SysYParser::LValContext* ctx) { // 检查是否有数组下标 bool is_array_access = !ctx->exp().empty(); if (is_array_access) { - std::vector indices; - indices.push_back(builder_.CreateConstInt(0)); - + // 收集下标表达式(不含前导0) + std::vector idx_vals; for (auto* exp : ctx->exp()) { ir::Value* index = EvalExpr(*exp); - indices.push_back(index); + idx_vals.push_back(index); } - - ir::Value* elem_ptr = builder_.CreateGEP( - ptr, indices, module_.GetContext().NextTemp()); - - return static_cast( - builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + + const Symbol* var_sym = sym; + if (!var_sym) { + var_sym = symbol_table_.lookup(varName); + } + if (!var_sym && decl) { + var_sym = symbol_table_.lookupByVarDef(decl); + } + if (!var_sym) { + var_sym = symbol_table_.lookupAll(varName); + } + + std::vector dims; + if (var_sym) { + if (var_sym->is_array_param && !var_sym->array_dims.empty()) { + dims = var_sym->array_dims; + } else if (var_sym->type && var_sym->type->IsArray()) { + auto* at = dynamic_cast(var_sym->type.get()); + if (at) dims = at->GetDimensions(); + } + } + + if (dims.empty() && ptr->GetType()->IsArray()) { + if (auto* at = dynamic_cast(ptr->GetType().get())) { + dims = at->GetDimensions(); + } + } + + // 兜底:从语法树声明提取维度,避免作用域关闭后符号查询不完整。 + if (dims.empty() && const_decl) { + auto* mutable_const_decl = const_cast(const_decl); + for (auto* cexp : mutable_const_decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + if (dims.empty() && decl) { + for (auto* cexp : decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + + const bool is_partial_array_access = + !dims.empty() && idx_vals.size() < dims.size(); + + // 如果 base 是标量指针(例如局部扁平数组或数组参数), + // 需要把多维下标折合为单一线性下标,然后用一个索引进行 GEP。 + if (ptr->GetType()->IsPtrInt32() || ptr->GetType()->IsPtrFloat()) { + // 如果没有维度信息,仍尝试用运行时算术合并下标(按后维乘积) + // flat = idx0 * (prod dims[1..]) + idx1 * (prod dims[2..]) + ... + ir::Value* flat = nullptr; + for (size_t i = 0; i < idx_vals.size(); ++i) { + ir::Value* term = idx_vals[i]; + if (!term) continue; + + // 计算乘数(后续维度乘积) + int mult = 1; + if (!dims.empty() && i + 1 < dims.size()) { + for (size_t j = i + 1; j < dims.size(); ++j) { + // 数组参数首维可能是 0(表示省略),不参与乘数。 + if (dims[j] > 0) mult *= dims[j]; + } + } + + if (mult != 1) { + auto* mval = builder_.CreateConstInt(mult); + term = builder_.CreateMul(term, mval, module_.GetContext().NextTemp()); + } + + if (!flat) flat = term; + else flat = builder_.CreateAdd(flat, term, module_.GetContext().NextTemp()); + } + + if (!flat) flat = builder_.CreateConstInt(0); + + // 使用单一索引创建 GEP + std::vector gep_indices = { flat }; + ir::Value* elem_ptr = builder_.CreateGEP(ptr, gep_indices, module_.GetContext().NextTemp()); + if (is_partial_array_access) { + return elem_ptr; + } + return static_cast(builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); + } + + std::vector indices; + // 标量指针(T*)使用单索引;数组对象使用前导0进入首层。 + if (ptr->GetType()->IsPtrInt32() || ptr->GetType()->IsPtrFloat()) { + for (auto* v : idx_vals) indices.push_back(v); + } else { + indices.push_back(builder_.CreateConstInt(0)); + for (auto* v : idx_vals) indices.push_back(v); + } + + ir::Value* elem_ptr = builder_.CreateGEP(ptr, indices, module_.GetContext().NextTemp()); + if (is_partial_array_access) { + return elem_ptr; + } + return static_cast(builder_.CreateLoad(elem_ptr, module_.GetContext().NextTemp())); } else { - return static_cast( - builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); + if ((sym && sym->is_array_param) || + pointer_param_names_.find(varName) != pointer_param_names_.end() || + heap_local_array_names_.find(varName) != heap_local_array_names_.end()) { + return ptr; + } + if (ptr->GetType()->IsArray()) { + return ptr; + } + return static_cast(builder_.CreateLoad(ptr, module_.GetContext().NextTemp())); } } std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { - std::cout << "[DEBUG IRGEN] visitAddExp: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitAddExp: 开始处理加法表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法加法表达式")); } @@ -318,7 +458,7 @@ std::any IRGenImpl::visitAddExp(SysYParser::AddExpContext* ctx) { std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { - std::cout << "[DEBUG IRGEN] visitMulExp: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitMulExp: 开始处理乘法表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法乘法表达式")); } @@ -392,6 +532,7 @@ std::any IRGenImpl::visitMulExp(SysYParser::MulExpContext* ctx) { // 逻辑与 std::any IRGenImpl::visitLAndExp(SysYParser::LAndExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLAndExp: 开始处理逻辑与表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑与表达式")); if (!ctx->lAndExp()) { @@ -400,14 +541,28 @@ std::any IRGenImpl::visitLAndExp(SysYParser::LAndExpContext* ctx) { ir::Value* left = std::any_cast(ctx->lAndExp()->accept(this)); ir::Value* right = std::any_cast(ctx->eqExp()->accept(this)); - auto zero = builder_.CreateConstInt(0); - auto left_bool = builder_.CreateICmpNE(left, zero, module_.GetContext().NextTemp()); - auto right_bool = builder_.CreateICmpNE(right, zero, module_.GetContext().NextTemp()); - return builder_.CreateAnd(left_bool, right_bool, module_.GetContext().NextTemp()); + + auto to_bool = [&](ir::Value* v) -> ir::Value* { + if (v->GetType()->IsInt1()) { + return v; + } + if (v->GetType()->IsFloat()) { + return builder_.CreateFCmpONE(v, builder_.CreateConstFloat(0.0f), + module_.GetContext().NextTemp()); + } + return builder_.CreateICmpNE(v, builder_.CreateConstInt(0), + module_.GetContext().NextTemp()); + }; + + auto* left_bool = to_bool(left); + auto* right_bool = to_bool(right); + return static_cast( + builder_.CreateAnd(left_bool, right_bool, module_.GetContext().NextTemp())); } // 逻辑或 std::any IRGenImpl::visitLOrExp(SysYParser::LOrExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitLOrExp: 开始处理逻辑或表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) throw std::runtime_error(FormatError("irgen", "非法逻辑或表达式")); if (!ctx->lOrExp()) { @@ -416,23 +571,39 @@ std::any IRGenImpl::visitLOrExp(SysYParser::LOrExpContext* ctx) { ir::Value* left = std::any_cast(ctx->lOrExp()->accept(this)); ir::Value* right = std::any_cast(ctx->lAndExp()->accept(this)); - auto zero = builder_.CreateConstInt(0); - auto left_bool = builder_.CreateICmpNE(left, zero, module_.GetContext().NextTemp()); - auto right_bool = builder_.CreateICmpNE(right, zero, module_.GetContext().NextTemp()); - return builder_.CreateOr(left_bool, right_bool, module_.GetContext().NextTemp()); + + auto to_bool = [&](ir::Value* v) -> ir::Value* { + if (v->GetType()->IsInt1()) { + return v; + } + if (v->GetType()->IsFloat()) { + return builder_.CreateFCmpONE(v, builder_.CreateConstFloat(0.0f), + module_.GetContext().NextTemp()); + } + return builder_.CreateICmpNE(v, builder_.CreateConstInt(0), + module_.GetContext().NextTemp()); + }; + + auto* left_bool = to_bool(left); + auto* right_bool = to_bool(right); + return static_cast( + builder_.CreateOr(left_bool, right_bool, module_.GetContext().NextTemp())); } std::any IRGenImpl::visitExp(SysYParser::ExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitExp: 开始处理表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) throw std::runtime_error(FormatError("irgen", "非法表达式")); return ctx->addExp()->accept(this); } std::any IRGenImpl::visitCond(SysYParser::CondContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitCond: 开始处理条件 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) throw std::runtime_error(FormatError("irgen", "非法条件表达式")); return ctx->lOrExp()->accept(this); } std::any IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitCallExp: 开始处理函数调用 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->Ident()) { throw std::runtime_error(FormatError("irgen", "非法函数调用")); } @@ -466,6 +637,33 @@ std::any IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { } } + // 按形参类型修正实参(数组衰减为指针等)。 + if (auto* fty = dynamic_cast(callee->GetType().get())) { + const auto& param_tys = fty->GetParamTypes(); + size_t n = std::min(param_tys.size(), args.size()); + for (size_t i = 0; i < n; ++i) { + if (!args[i] || !param_tys[i]) continue; + + // 数组实参传给指针形参时,执行数组到指针衰减。 + if (args[i]->GetType()->IsArray() && + (param_tys[i]->IsPtrInt32() || param_tys[i]->IsPtrFloat())) { + std::vector idx; + idx.push_back(builder_.CreateConstInt(0)); + idx.push_back(builder_.CreateConstInt(0)); + args[i] = builder_.CreateGEP(args[i], idx, module_.GetContext().NextTemp()); + } + + // 标量实参的隐式类型转换(int <-> float)。 + if (param_tys[i]->IsFloat() && args[i]->GetType()->IsInt32()) { + args[i] = builder_.CreateSIToFP(args[i], ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (param_tys[i]->IsInt32() && args[i]->GetType()->IsFloat()) { + args[i] = builder_.CreateFPToSI(args[i], ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + } + } + // 生成调用指令 ir::Value* callResult = builder_.CreateCall(callee, args, module_.GetContext().NextTemp()); @@ -481,7 +679,7 @@ std::any IRGenImpl::visitCallExp(SysYParser::UnaryExpContext* ctx) { // 动态创建运行时函数声明的辅助函数 ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) { - std::cout << "[DEBUG IRGEN] CreateRuntimeFunctionDecl: " << funcName << std::endl; + std::cerr << "[DEBUG IRGEN] CreateRuntimeFunctionDecl: 开始创建运行时函数声明 " << funcName << std::endl; // 根据常见运行时函数名创建对应的函数类型 if (funcName == "getint" || funcName == "getch") { @@ -498,7 +696,7 @@ ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) return module_.CreateFunction(funcName, ir::Type::GetFunctionType( ir::Type::GetInt32Type(), - {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + {ir::Type::GetPtrInt32Type()})); } else if (funcName == "putarray") { return module_.CreateFunction(funcName, @@ -522,15 +720,27 @@ ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) ir::Type::GetVoidType(), {ir::Type::GetInt32Type()})); } - else if (funcName == "read_map") { - return module_.CreateFunction(funcName, - ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); + else if (funcName == "getfloat") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType(ir::Type::GetFloatType(), {})); } - else if (funcName == "float_eq") { - return module_.CreateFunction(funcName, + else if (funcName == "putfloat") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetFloatType()})); + } + else if (funcName == "getfarray") { + return module_.CreateFunction(funcName, ir::Type::GetFunctionType( ir::Type::GetInt32Type(), - {ir::Type::GetFloatType(), ir::Type::GetFloatType()})); + {ir::Type::GetPtrFloatType()})); + } + else if (funcName == "putfarray") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrFloatType()})); } else if (funcName == "memset") { return module_.CreateFunction(funcName, @@ -540,12 +750,49 @@ ir::Function* IRGenImpl::CreateRuntimeFunctionDecl(const std::string& funcName) ir::Type::GetInt32Type(), ir::Type::GetInt32Type()})); } + else if (funcName == "sysy_alloc_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_alloc_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetPtrFloatType(), + {ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_free_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + } + else if (funcName == "sysy_free_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType()})); + } + else if (funcName == "sysy_zero_i32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + } + else if (funcName == "sysy_zero_f32") { + return module_.CreateFunction(funcName, + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType(), ir::Type::GetInt32Type()})); + } // 其他函数不支持动态创建 return nullptr; } std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitUnaryExp: 开始处理一元表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法一元表达式")); } @@ -587,14 +834,15 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { ir::Value* zero; if (operand->GetType()->IsFloat()) { zero = builder_.CreateConstFloat(0.0f); - // 浮点比较:不等于0 - ir::Value* cmp = builder_.CreateFCmpONE(operand, zero, module_.GetContext().NextTemp()); + // 浮点逻辑非:x == 0.0 + ir::Value* cmp = builder_.CreateFCmpOEQ(operand, zero, module_.GetContext().NextTemp()); // 将bool转换为int return static_cast( builder_.CreateZExt(cmp, ir::Type::GetInt32Type())); } else { zero = builder_.CreateConstInt(0); - return builder_.CreateNot(operand, module_.GetContext().NextTemp()); + return static_cast( + builder_.CreateNot(operand, module_.GetContext().NextTemp())); } } } @@ -604,6 +852,7 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) { // 实现函数调用 std::any IRGenImpl::visitFuncRParams(SysYParser::FuncRParamsContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitFuncRParams: 开始处理函数参数 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) return std::vector{}; std::vector args; for (auto* exp : ctx->exp()) { @@ -612,67 +861,37 @@ std::any IRGenImpl::visitFuncRParams(SysYParser::FuncRParamsContext* ctx) { return args; } -// 修改 visitConstExp 以支持常量表达式求值 +// visitConstExp - 处理常量表达式 std::any IRGenImpl::visitConstExp(SysYParser::ConstExpContext* ctx) { - if (!ctx) { + std::cerr << "[DEBUG IRGEN] visitConstExp: 开始处理常量表达式 " << (ctx ? ctx->getText() : "") << std::endl; + if (!ctx || !ctx->addExp()) { throw std::runtime_error(FormatError("irgen", "非法常量表达式")); } + auto result = ctx->addExp()->accept(this); + + if (!result.has_value()) { + throw std::runtime_error(FormatError("irgen", "常量表达式求值失败")); + } + try { - if (ctx->addExp()) { - // 尝试获取数值 - auto result = ctx->addExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* value = std::any_cast(result); - // 尝试判断是否是 ConstantInt - // 暂时简化:返回 IR 值 - return static_cast(value); - } catch (const std::bad_any_cast&) { - // 可能是其他类型 - return static_cast(builder_.CreateConstInt(0)); - } - } - } - return static_cast(builder_.CreateConstInt(0)); - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstExp: 常量表达式求值失败: " << e.what() - << ",返回0" << std::endl; - // 如果普通表达式求值失败,返回0 - return static_cast(builder_.CreateConstInt(0)); + return std::any_cast(result); + } catch (const std::bad_any_cast& e) { + throw std::runtime_error(FormatError("irgen", + "常量表达式返回类型错误: " + std::string(e.what()))); } } +// visitConstInitVal - 处理常量初始化值 std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitConstInitVal: 开始处理常量初始化值 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法常量初始化值")); } // 如果是单个常量表达式 if (ctx->constExp()) { - try { - auto result = ctx->constExp()->accept(this); - if (result.has_value()) { - try { - ir::Value* value = std::any_cast(result); - // 尝试提取常量值 - if (auto* const_int = dynamic_cast(value)) { - return static_cast(const_int); - } else { - // 如果不是常量,尝试计算数值 - int int_val = TryEvaluateConstInt(ctx->constExp()); - return static_cast(builder_.CreateConstInt(int_val)); - } - } catch (const std::bad_any_cast&) { - int int_val = TryEvaluateConstInt(ctx->constExp()); - return static_cast(builder_.CreateConstInt(int_val)); - } - } - return static_cast(builder_.CreateConstInt(0)); - } catch (const std::exception& e) { - std::cerr << "[WARNING] visitConstInitVal: " << e.what() << std::endl; - return static_cast(builder_.CreateConstInt(0)); - } + return ctx->constExp()->accept(this); } // 如果是聚合初始化(花括号列表) else if (!ctx->constInitVal().empty()) { @@ -680,22 +899,24 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { for (auto* init_val : ctx->constInitVal()) { auto result = init_val->accept(this); - if (result.has_value()) { + if (!result.has_value()) { + throw std::runtime_error(FormatError("irgen", "常量初始化值求值失败")); + } + + try { + // 尝试获取单个常量值 + ir::Value* value = std::any_cast(result); + all_values.push_back(value); + } catch (const std::bad_any_cast&) { try { - // 尝试获取单个常量值 - ir::Value* value = std::any_cast(result); - all_values.push_back(value); - } catch (const std::bad_any_cast&) { - try { - // 尝试获取值列表(嵌套情况) - std::vector nested_values = - std::any_cast>(result); - all_values.insert(all_values.end(), - nested_values.begin(), nested_values.end()); - } catch (const std::bad_any_cast&) { - throw std::runtime_error( - FormatError("irgen", "不支持的常量初始化值类型")); - } + // 尝试获取值列表(嵌套情况) + std::vector nested_values = + std::any_cast>(result); + all_values.insert(all_values.end(), + nested_values.begin(), nested_values.end()); + } catch (const std::bad_any_cast& e) { + throw std::runtime_error(FormatError("irgen", + "不支持的常量初始化值类型: " + std::string(e.what()))); } } } @@ -708,6 +929,7 @@ std::any IRGenImpl::visitConstInitVal(SysYParser::ConstInitValContext* ctx) { } std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitRelExp: 开始处理关系表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法关系表达式")); } @@ -782,6 +1004,7 @@ std::any IRGenImpl::visitRelExp(SysYParser::RelExpContext* ctx) { } std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { + std::cerr << "[DEBUG IRGEN] visitEqExp: 开始处理相等表达式 " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "非法相等表达式")); } @@ -839,6 +1062,7 @@ std::any IRGenImpl::visitEqExp(SysYParser::EqExpContext* ctx) { ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { + std::cerr << "[DEBUG IRGEN] EvalAssign: 开始处理赋值语句 " << (ctx ? ctx->getText() : "") << std::endl; std::cout << "[DEBUG IRGEN] visitCond: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx || !ctx->lVal() || !ctx->exp()) { throw std::runtime_error(FormatError("irgen", "非法赋值语句")); @@ -864,15 +1088,29 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { ir::Value* base_ptr = it->second; + auto convert_for_store = [&](ir::Value* value, ir::Value* ptr) -> ir::Value* { + if (ptr->GetType()->IsPtrFloat() && value->GetType()->IsInt32()) { + return builder_.CreateSIToFP(value, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } + if (ptr->GetType()->IsPtrInt32() && value->GetType()->IsFloat()) { + return builder_.CreateFPToSI(value, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + return value; + }; + // 检查是否有数组下标 auto exp_list = lval->exp(); if (!exp_list.empty()) { // 这是数组元素赋值,需要生成GEP指令 std::vector indices; - - // 第一个索引是0(假设一维数组) - indices.push_back(builder_.CreateConstInt(0)); - + + // 标量指针参数(T*)不应添加前导0;数组对象需要前导0。 + if (!(base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat())) { + indices.push_back(builder_.CreateConstInt(0)); + } + // 添加用户提供的下标 for (auto* exp : exp_list) { ir::Value* index = EvalExpr(*exp); @@ -884,6 +1122,7 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { base_ptr, indices, module_.GetContext().NextTemp()); // 生成store指令 + rhs = convert_for_store(rhs, elem_ptr); builder_.CreateStore(rhs, elem_ptr); } else { // 普通标量赋值 @@ -891,11 +1130,12 @@ ir::Value* IRGenImpl::EvalAssign(SysYParser::StmtContext* ctx) { std::cerr << "[DEBUG] base_ptr type: " << base_ptr->GetType() << std::endl; std::cerr << "[DEBUG] rhs type: " << rhs->GetType()<< std::endl; - // 如果 base_ptr 不是指针类型,可能需要特殊处理 - if (!base_ptr->GetType()->IsPtrInt32()) { + // 如果 base_ptr 不是标量指针类型,可能需要特殊处理 + if (!base_ptr->GetType()->IsPtrInt32() && !base_ptr->GetType()->IsPtrFloat()) { std::cerr << "[ERROR] base_ptr is not a pointer type!" << std::endl; throw std::runtime_error("尝试存储到非指针类型"); } + rhs = convert_for_store(rhs, base_ptr); builder_.CreateStore(rhs, base_ptr); } } else { diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index f9b42f2..d5334e0 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -20,18 +20,41 @@ void VerifyFunctionStructure(const ir::Function& func) { } } -} // namespace +bool HasDirectSelfCall(antlr4::ParserRuleContext* node, + const std::string& func_name) { + if (!node) { + return false; + } -IRGenImpl::IRGenImpl(ir::Module& module, const SemanticContext& sema) - : module_(module), - sema_(sema), - func_(nullptr), - builder_(module.GetContext(), nullptr) { - AddRuntimeFunctions(); + if (auto* unary = dynamic_cast(node)) { + if (unary->Ident() && unary->Ident()->getText() == func_name) { + return true; + } + } + + for (auto* child : node->children) { + if (auto* rule = dynamic_cast(child)) { + if (HasDirectSelfCall(rule, func_name)) { + return true; } + } + } + return false; +} + +} // namespace + +// 实现新的构造函数 +IRGenImpl::IRGenImpl(ir::Module& module, + const SemanticContext& sema, + const SymbolTable& sym_table) + : module_(module), sema_(sema), symbol_table_(sym_table), + builder_(module.GetContext(), nullptr), func_(nullptr) { + AddRuntimeFunctions(); +} void IRGenImpl::AddRuntimeFunctions() { - std::cout << "[DEBUG IRGEN] 添加运行时库函数声明" << std::endl; + std::cerr << "[DEBUG IRGEN] 添加运行时库函数声明" << std::endl; // 输入函数(返回 int) module_.CreateFunction("getint", @@ -43,7 +66,7 @@ void IRGenImpl::AddRuntimeFunctions() { module_.CreateFunction("getarray", ir::Type::GetFunctionType( ir::Type::GetInt32Type(), - {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + {ir::Type::GetPtrInt32Type()})); // 输出函数(返回 void) module_.CreateFunction("putint", @@ -83,16 +106,22 @@ void IRGenImpl::AddRuntimeFunctions() { module_.CreateFunction("stoptime", ir::Type::GetFunctionType(ir::Type::GetVoidType(), {})); - // 其他可能需要的函数 - module_.CreateFunction("read_map", - ir::Type::GetFunctionType(ir::Type::GetInt32Type(), {})); - - // 浮点数 - module_.CreateFunction("float_eq", + // 浮点 I/O + module_.CreateFunction("getfloat", + ir::Type::GetFunctionType(ir::Type::GetFloatType(), {})); + module_.CreateFunction("putfloat", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetFloatType()})); + module_.CreateFunction("getfarray", ir::Type::GetFunctionType( ir::Type::GetInt32Type(), - {ir::Type::GetFloatType(), ir::Type::GetFloatType()})); - + {ir::Type::GetPtrFloatType()})); + module_.CreateFunction("putfarray", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetInt32Type(), ir::Type::GetPtrFloatType()})); + // 内存操作函数 module_.CreateFunction("memset", ir::Type::GetFunctionType( @@ -100,13 +129,48 @@ void IRGenImpl::AddRuntimeFunctions() { {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type(), ir::Type::GetInt32Type()})); + + module_.CreateFunction("sysy_alloc_i32", + ir::Type::GetFunctionType( + ir::Type::GetPtrInt32Type(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_alloc_f32", + ir::Type::GetFunctionType( + ir::Type::GetPtrFloatType(), + {ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_free_i32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type()})); + module_.CreateFunction("sysy_free_f32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType()})); + module_.CreateFunction("sysy_zero_i32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrInt32Type(), ir::Type::GetInt32Type()})); + module_.CreateFunction("sysy_zero_f32", + ir::Type::GetFunctionType( + ir::Type::GetVoidType(), + {ir::Type::GetPtrFloatType(), ir::Type::GetInt32Type()})); - std::cout << "[DEBUG IRGEN] 运行时库函数声明完成" << std::endl; + std::cerr << "[DEBUG IRGEN] 运行时库函数声明完成" << std::endl; } // 修正:没有 mainFuncDef,通过函数名找到 main std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { - std::cout << "[DEBUG IRGEN] visitCompUnit" << std::endl; + std::cerr << "[DEBUG IRGEN] visitCompUnit" << std::endl; + std::cerr << "[DEBUG] IRGen: 符号表地址 = " << &symbol_table_ << std::endl; + std::cerr << "[DEBUG] IRGen: 开始生成 IR" << std::endl; + + // 尝试查找 main 函数 + const Symbol* main_sym = symbol_table_.lookup("main"); + if (main_sym) { + std::cerr << "[DEBUG] IRGen: 找到 main 函数符号" << std::endl; + } else { + std::cerr << "[DEBUG] IRGen: 未找到 main 函数符号" << std::endl; + } if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少编译单元")); } @@ -129,7 +193,7 @@ std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) { } std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { - std::cout << "[DEBUG IRGEN] visitFuncDef: " << (ctx && ctx->Ident() ? ctx->Ident()->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitFuncDef: " << (ctx && ctx->Ident() ? ctx->Ident()->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少函数定义")); } @@ -216,6 +280,19 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { builder_.SetInsertPoint(entry_block); storage_map_.clear(); param_map_.clear(); + pointer_param_names_.clear(); + heap_local_array_names_.clear(); + current_function_name_ = funcName; + current_function_is_recursive_ = HasDirectSelfCall(ctx->block(), funcName); + function_cleanup_block_ = nullptr; + function_cleanup_actions_.clear(); + function_return_slot_ = nullptr; + + if (ret_type->IsInt32()) { + function_return_slot_ = CreateEntryAllocaI32(module_.GetContext().NextTemp() + ".retval"); + } else if (ret_type->IsFloat()) { + function_return_slot_ = CreateEntryAllocaFloat(module_.GetContext().NextTemp() + ".retval"); + } // 函数参数处理 if (ctx->funcFParams()) { @@ -271,23 +348,29 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { throw std::runtime_error(FormatError("irgen", "添加参数失败: " + name)); } - // 为参数创建存储槽位 - ir::AllocaInst* slot = nullptr; - if (param_ty->IsInt32() || param_ty->IsPtrInt32()) { - slot = builder_.CreateAllocaI32(module_.GetContext().NextTemp()); - } else if (param_ty->IsFloat() || param_ty->IsPtrFloat()) { - slot = builder_.CreateAllocaFloat(module_.GetContext().NextTemp()); + // 标量参数:入栈到本地槽位;数组参数(指针)直接作为地址使用。 + if (param_ty->IsPtrInt32() || param_ty->IsPtrFloat()) { + param_map_[name] = added_arg; + pointer_param_names_.insert(name); } else { - throw std::runtime_error(FormatError("irgen", "不支持的参数类型")); - } - - if (!slot) { - throw std::runtime_error(FormatError("irgen", "创建参数存储槽位失败: " + name)); + ir::AllocaInst* slot = nullptr; + if (param_ty->IsInt32()) { + slot = CreateEntryAllocaI32(module_.GetContext().NextTemp()); + } else if (param_ty->IsFloat()) { + slot = CreateEntryAllocaFloat(module_.GetContext().NextTemp()); + } else { + throw std::runtime_error(FormatError("irgen", "不支持的参数类型")); + } + + if (!slot) { + throw std::runtime_error(FormatError("irgen", "创建参数存储槽位失败: " + name)); + } + + builder_.CreateStore(added_arg, slot); + param_map_[name] = slot; + pointer_param_names_.erase(name); } - builder_.CreateStore(added_arg, slot); - param_map_[name] = slot; - std::cerr << "[DEBUG] visitFuncDef: 参数 " << name << " 处理完成" << std::endl; } } @@ -296,11 +379,37 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { std::cerr << "[DEBUG] visitFuncDef: 开始生成函数体" << std::endl; ctx->block()->accept(this); - // 如果函数没有终止指令,添加默认返回 - if (!func_->GetEntry()->HasTerminator()) { + // 如果当前插入块没有终止指令,添加默认返回 + if (auto* cur = builder_.GetInsertBlock(); cur && !cur->HasTerminator()) { std::cerr << "[DEBUG] visitFuncDef: 函数体没有终止指令,添加默认返回" << std::endl; - auto retVal = builder_.CreateConstInt(0); - builder_.CreateRet(retVal); + if (function_cleanup_block_) { + if (ret_type->IsFloat()) { + builder_.CreateStore(builder_.CreateConstFloat(0.0f), function_return_slot_); + } else if (ret_type->IsInt32()) { + builder_.CreateStore(builder_.CreateConstInt(0), function_return_slot_); + } + builder_.CreateBr(function_cleanup_block_); + } else if (ret_type->IsVoid()) { + builder_.CreateRet(nullptr); + } else if (ret_type->IsFloat()) { + builder_.CreateRet(builder_.CreateConstFloat(0.0f)); + } else { + builder_.CreateRet(builder_.CreateConstInt(0)); + } + } + + if (function_cleanup_block_ && !function_cleanup_block_->HasTerminator()) { + builder_.SetInsertPoint(function_cleanup_block_); + for (auto it = function_cleanup_actions_.rbegin(); + it != function_cleanup_actions_.rend(); ++it) { + builder_.CreateCall(it->first, {it->second}, module_.GetContext().NextTemp()); + } + + if (ret_type->IsVoid()) { + builder_.CreateRet(nullptr); + } else { + builder_.CreateRet(builder_.CreateLoad(function_return_slot_, module_.GetContext().NextTemp())); + } } // 验证函数结构 @@ -313,12 +422,52 @@ std::any IRGenImpl::visitFuncDef(SysYParser::FuncDefContext* ctx) { std::cerr << "[DEBUG] visitFuncDef: 函数 " << funcName << " 生成完成" << std::endl; func_ = nullptr; + current_function_name_.clear(); + current_function_is_recursive_ = false; + function_return_slot_ = nullptr; + function_cleanup_block_ = nullptr; + function_cleanup_actions_.clear(); return {}; } +ir::BasicBlock* IRGenImpl::EnsureCleanupBlock() { + if (!function_cleanup_block_) { + std::string name = module_.GetContext().NextTemp(); + if (!name.empty() && name[0] == '%') { + name.erase(0, 1); + } + function_cleanup_block_ = func_->CreateBlock("cleanup." + name); + } + return function_cleanup_block_; +} + +void IRGenImpl::RegisterCleanup(ir::Function* free_func, ir::Value* ptr) { + if (!free_func || !ptr) { + return; + } + EnsureCleanupBlock(); + function_cleanup_actions_.push_back({free_func, ptr}); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAlloca(std::shared_ptr ty, + const std::string& name) { + if (!func_ || !func_->GetEntry()) { + throw std::runtime_error(FormatError("irgen", "缺少函数入口块,无法创建入口栈槽位")); + } + return func_->GetEntry()->InsertBeforeTerminator(ty, name); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAllocaI32(const std::string& name) { + return CreateEntryAlloca(ir::Type::GetPtrInt32Type(), name); +} + +ir::AllocaInst* IRGenImpl::CreateEntryAllocaFloat(const std::string& name) { + return CreateEntryAlloca(ir::Type::GetPtrFloatType(), name); +} + std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { - std::cout << "[DEBUG IRGEN] visitBlock: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitBlock: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句块")); } @@ -333,7 +482,7 @@ std::any IRGenImpl::visitBlock(SysYParser::BlockContext* ctx) { } auto* cur = builder_.GetInsertBlock(); - std::cout << "[DEBUG] current insert block: " + std::cerr << "[DEBUG] current insert block: " << (cur ? cur->GetName() : "") << std::endl; if (cur && cur->HasTerminator()) { break; @@ -351,7 +500,7 @@ IRGenImpl::BlockFlow IRGenImpl::VisitBlockItemResult( } // 用于遍历块内项,返回是否继续访问后续项(如遇到 return/break/continue 则终止访问) std::any IRGenImpl::visitBlockItem(SysYParser::BlockItemContext* ctx) { - std::cout << "[DEBUG IRGEN] visitBlockItem: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitBlockItem: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少块内项")); } diff --git a/src/irgen/IRGenStmt.cpp b/src/irgen/IRGenStmt.cpp index 18c74d7..6b4661d 100644 --- a/src/irgen/IRGenStmt.cpp +++ b/src/irgen/IRGenStmt.cpp @@ -16,7 +16,7 @@ // - 空语句、块语句嵌套分发之外的更多语句形态 std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { - std::cout << "[DEBUG IRGEN] visitStmt: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] visitStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少语句")); } @@ -65,7 +65,7 @@ std::any IRGenImpl::visitStmt(SysYParser::StmtContext* ctx) { // 修改 HandleReturnStmt 函数 IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { - std::cout << "[DEBUG IRGEN] HandleReturnStmt: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] HandleReturnStmt: " << (ctx ? ctx->getText() : "") << std::endl; if (!ctx) { throw std::runtime_error(FormatError("irgen", "缺少 return 语句")); } @@ -88,8 +88,12 @@ IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { // 表达式被忽略(可计算但不使用) EvalExpr(*ctx->exp()); } - // 对于void函数,创建返回指令(不传参数) - builder_.CreateRet(nullptr); + if (function_cleanup_block_) { + builder_.CreateBr(function_cleanup_block_); + } else { + // 对于void函数,创建返回指令(不传参数) + builder_.CreateRet(nullptr); + } } else { ir::Value* retValue = nullptr; if (ctx->exp()) { @@ -115,7 +119,12 @@ IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { retValue = builder_.CreateConstInt(0); // fallback } } - builder_.CreateRet(retValue); + if (function_cleanup_block_) { + builder_.CreateStore(retValue, function_return_slot_); + builder_.CreateBr(function_cleanup_block_); + } else { + builder_.CreateRet(retValue); + } } return BlockFlow::Terminated; } @@ -123,49 +132,63 @@ IRGenImpl::BlockFlow IRGenImpl::HandleReturnStmt(SysYParser::StmtContext* ctx) { // if语句(待实现) IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { - std::cout << "[DEBUG IRGEN] HandleIfStmt: " << (ctx ? ctx->getText() : "") << std::endl; + std::cerr << "[DEBUG IRGEN] HandleIfStmt: " << (ctx ? ctx->getText() : "") << std::endl; auto* cond = ctx->cond(); auto* thenStmt = ctx->stmt(0); auto* elseStmt = ctx->stmt(1); - // 创建基本块 - auto* thenBlock = func_->CreateBlock("then"); - auto* elseBlock = (ctx->Else() && elseStmt) ? func_->CreateBlock("else") : nullptr; - auto* mergeBlock = func_->CreateBlock("merge"); - - std::cout << "[DEBUG IF] thenBlock: " << thenBlock->GetName() << std::endl; - if (elseBlock) std::cout << "[DEBUG IF] elseBlock: " << elseBlock->GetName() << std::endl; - std::cout << "[DEBUG IF] mergeBlock: " << mergeBlock->GetName() << std::endl; - std::cout << "[DEBUG IF] current insert block before cond: " + // 创建基本块(使用唯一名称,避免同名标签) + auto uniq = [&](const std::string& prefix) { + std::string t = module_.GetContext().NextTemp(); + if (!t.empty() && t[0] == '%') t.erase(0, 1); + return prefix + "." + t; + }; + auto* thenBlock = func_->CreateBlock(uniq("then")); + auto* elseBlock = (ctx->Else() && elseStmt) ? func_->CreateBlock(uniq("else")) : nullptr; + auto* mergeBlock = func_->CreateBlock(uniq("merge")); + + std::cerr << "[DEBUG IF] thenBlock: " << thenBlock->GetName() << std::endl; + if (elseBlock) std::cerr << "[DEBUG IF] elseBlock: " << elseBlock->GetName() << std::endl; + std::cerr << "[DEBUG IF] mergeBlock: " << mergeBlock->GetName() << std::endl; + std::cerr << "[DEBUG IF] current insert block before cond: " << builder_.GetInsertBlock()->GetName() << std::endl; // 生成条件 auto* condValue = EvalCond(*cond); + if (!condValue->GetType()->IsInt1()) { + if (condValue->GetType()->IsFloat()) { + condValue = builder_.CreateFCmpONE( + condValue, builder_.CreateConstFloat(0.0f), module_.GetContext().NextTemp()); + } else { + condValue = builder_.CreateICmpNE( + condValue, builder_.CreateConstInt(0), module_.GetContext().NextTemp()); + } + } // 创建条件跳转 if (elseBlock) { - std::cout << "[DEBUG IF] Creating condbr: " << condValue->GetName() + std::cerr << "[DEBUG IF] Creating condbr: " << condValue->GetName() << " -> " << thenBlock->GetName() << ", " << elseBlock->GetName() << std::endl; builder_.CreateCondBr(condValue, thenBlock, elseBlock); } else { - std::cout << "[DEBUG IF] Creating condbr: " << condValue->GetName() + std::cerr << "[DEBUG IF] Creating condbr: " << condValue->GetName() << " -> " << thenBlock->GetName() << ", " << mergeBlock->GetName() << std::endl; builder_.CreateCondBr(condValue, thenBlock, mergeBlock); } // 生成 then 分支 - std::cout << "[DEBUG IF] Generating then branch in block: " << thenBlock->GetName() << std::endl; + std::cerr << "[DEBUG IF] Generating then branch in block: " << thenBlock->GetName() << std::endl; builder_.SetInsertPoint(thenBlock); auto thenResult = thenStmt->accept(this); bool thenTerminated = (std::any_cast(thenResult) == BlockFlow::Terminated); - std::cout << "[DEBUG IF] then branch terminated: " << thenTerminated << std::endl; + std::cerr << "[DEBUG IF] then branch terminated: " << thenTerminated << std::endl; if (!thenTerminated) { - std::cout << "[DEBUG IF] Adding br to merge block from then" << std::endl; + std::cerr << "[DEBUG IF] Adding br to merge block from then" << std::endl; builder_.CreateBr(mergeBlock); } - std::cout << "[DEBUG IF] then block has terminator: " << thenBlock->HasTerminator() << std::endl; + std::cerr << "[DEBUG IF] then block has terminator: " << thenBlock->HasTerminator() << std::endl; // 生成 else 分支 bool elseTerminated = false; @@ -188,16 +211,9 @@ IRGenImpl::BlockFlow IRGenImpl::HandleIfStmt(SysYParser::StmtContext* ctx) { << ", elseTerminated=" << elseTerminated << std::endl; if (elseBlock) { - if (thenTerminated && elseTerminated) { - auto* afterIfBlock = func_->CreateBlock("after.if"); - std::cout << "[DEBUG IF] Both branches terminated, creating new block: " - << afterIfBlock->GetName() << std::endl; - builder_.SetInsertPoint(afterIfBlock); - } else { - std::cout << "[DEBUG IF] Setting insert point to merge block: " - << mergeBlock->GetName() << std::endl; - builder_.SetInsertPoint(mergeBlock); - } + std::cout << "[DEBUG IF] Setting insert point to merge block: " + << mergeBlock->GetName() << std::endl; + builder_.SetInsertPoint(mergeBlock); } else { std::cout << "[DEBUG IF] No else, setting insert point to merge block: " << mergeBlock->GetName() << std::endl; @@ -221,9 +237,14 @@ IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { std::cout << "[DEBUG WHILE] Current insert block before while: " << builder_.GetInsertBlock()->GetName() << std::endl; - auto* condBlock = func_->CreateBlock("while.cond"); - auto* bodyBlock = func_->CreateBlock("while.body"); - auto* exitBlock = func_->CreateBlock("while.exit"); + auto uniq = [&](const std::string& prefix) { + std::string t = module_.GetContext().NextTemp(); + if (!t.empty() && t[0] == '%') t.erase(0, 1); + return prefix + "." + t; + }; + auto* condBlock = func_->CreateBlock(uniq("while.cond")); + auto* bodyBlock = func_->CreateBlock(uniq("while.body")); + auto* exitBlock = func_->CreateBlock(uniq("while.exit")); std::cout << "[DEBUG WHILE] condBlock: " << condBlock->GetName() << std::endl; std::cout << "[DEBUG WHILE] bodyBlock: " << bodyBlock->GetName() << std::endl; @@ -239,6 +260,15 @@ IRGenImpl::BlockFlow IRGenImpl::HandleWhileStmt(SysYParser::StmtContext* ctx) { std::cout << "[DEBUG WHILE] Generating condition in block: " << condBlock->GetName() << std::endl; builder_.SetInsertPoint(condBlock); auto* condValue = EvalCond(*ctx->cond()); + if (!condValue->GetType()->IsInt1()) { + if (condValue->GetType()->IsFloat()) { + condValue = builder_.CreateFCmpONE( + condValue, builder_.CreateConstFloat(0.0f), module_.GetContext().NextTemp()); + } else { + condValue = builder_.CreateICmpNE( + condValue, builder_.CreateConstInt(0), module_.GetContext().NextTemp()); + } + } builder_.CreateCondBr(condValue, bodyBlock, exitBlock); std::cout << "[DEBUG WHILE] condBlock has terminator: " << condBlock->HasTerminator() << std::endl; @@ -387,17 +417,83 @@ IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { auto exp_list = lval->exp(); if (!exp_list.empty()) { // 数组元素赋值 - std::vector indices; - indices.push_back(builder_.CreateConstInt(0)); - + std::vector idx_vals; for (auto* exp : exp_list) { ir::Value* index = EvalExpr(*exp); - indices.push_back(index); + idx_vals.push_back(index); + } + + ir::Value* elem_ptr = nullptr; + + // 扁平数组/数组参数(T*)的多维访问:先线性化,再单索引 GEP。 + if ((base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat()) && idx_vals.size() > 1) { + const Symbol* var_sym = symbol_table_.lookup(varName); + if (!var_sym && var_decl) { + var_sym = symbol_table_.lookupByVarDef(var_decl); + } + if (!var_sym) { + var_sym = symbol_table_.lookupAll(varName); + } + + std::vector dims; + if (var_sym) { + if (var_sym->is_array_param && !var_sym->array_dims.empty()) { + dims = var_sym->array_dims; + } else if (var_sym->type && var_sym->type->IsArray()) { + auto* at = dynamic_cast(var_sym->type.get()); + if (at) dims = at->GetDimensions(); + } + } + + if (dims.empty() && var_decl) { + for (auto* cexp : var_decl->constExp()) { + dims.push_back(symbol_table_.EvaluateConstExp(cexp)); + } + } + + ir::Value* flat = nullptr; + for (size_t i = 0; i < idx_vals.size(); ++i) { + ir::Value* term = idx_vals[i]; + if (!term) continue; + + int mult = 1; + if (!dims.empty() && i + 1 < dims.size()) { + for (size_t j = i + 1; j < dims.size(); ++j) { + if (dims[j] > 0) mult *= dims[j]; + } + } + + if (mult != 1) { + auto* mval = builder_.CreateConstInt(mult); + term = builder_.CreateMul(term, mval, module_.GetContext().NextTemp()); + } + + if (!flat) flat = term; + else flat = builder_.CreateAdd(flat, term, module_.GetContext().NextTemp()); + } + + if (!flat) flat = builder_.CreateConstInt(0); + + std::vector gep_indices = {flat}; + elem_ptr = builder_.CreateGEP(base_ptr, gep_indices, module_.GetContext().NextTemp()); + } else { + std::vector indices; + if (base_ptr->GetType()->IsPtrInt32() || base_ptr->GetType()->IsPtrFloat()) { + for (auto* v : idx_vals) indices.push_back(v); + } else { + indices.push_back(builder_.CreateConstInt(0)); + for (auto* v : idx_vals) indices.push_back(v); + } + elem_ptr = builder_.CreateGEP(base_ptr, indices, module_.GetContext().NextTemp()); } - ir::Value* elem_ptr = builder_.CreateGEP( - base_ptr, indices, module_.GetContext().NextTemp()); - + if (elem_ptr->GetType()->IsPtrFloat() && rhs->GetType()->IsInt32()) { + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (elem_ptr->GetType()->IsPtrInt32() && rhs->GetType()->IsFloat()) { + rhs = builder_.CreateFPToSI(rhs, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } builder_.CreateStore(rhs, elem_ptr); } else { // 普通标量赋值 @@ -417,7 +513,14 @@ IRGenImpl::BlockFlow IRGenImpl::HandleAssignStmt(SysYParser::StmtContext* ctx) { std::cerr << "[DEBUG] Value is int32: " << rhs->GetType()->IsInt32() << std::endl; } - builder_.CreateStore(rhs, base_ptr); + if (base_ptr->GetType()->IsPtrFloat() && rhs->GetType()->IsInt32()) { + rhs = builder_.CreateSIToFP(rhs, ir::Type::GetFloatType(), + module_.GetContext().NextTemp()); + } else if (base_ptr->GetType()->IsPtrInt32() && rhs->GetType()->IsFloat()) { + rhs = builder_.CreateFPToSI(rhs, ir::Type::GetInt32Type(), + module_.GetContext().NextTemp()); + } + builder_.CreateStore(rhs, base_ptr); } return BlockFlow::Continue; diff --git a/src/sem/Sema.cpp b/src/sem/Sema.cpp index cbedf1d..8d51715 100644 --- a/src/sem/Sema.cpp +++ b/src/sem/Sema.cpp @@ -35,7 +35,6 @@ public: if (!ctx) { throw std::runtime_error(FormatError("sema", "缺少编译单元")); } - table_.enterScope(); // 创建全局作用域 for (auto* func : ctx->funcDef()) { // 收集所有函数声明(处理互相调用) CollectFunctionDeclaration(func); } @@ -46,7 +45,6 @@ public: if (func) func->accept(this); } CheckMainFunction(); // 检查 main 函数存在且正确 - table_.exitScope(); // 退出全局作用域 return {}; } @@ -238,6 +236,157 @@ public: << std::endl; } + void CheckConstDef(SysYParser::ConstDefContext* ctx, + std::shared_ptr base_type) { + if (!ctx || !ctx->Ident()) { + throw std::runtime_error(FormatError("sema", "非法常量定义")); + } + std::string name = ctx->Ident()->getText(); + if (table_.lookupCurrent(name)) { + throw std::runtime_error(FormatError("sema", "重复定义常量: " + name)); + } + + // 确定类型 + std::shared_ptr type = base_type; + std::vector dims; + bool is_array = !ctx->constExp().empty(); + std::cout << "[DEBUG] CheckConstDef: " << name + << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") + << " is_array: " << is_array + << " dim_count: " << ctx->constExp().size() << std::endl; + + if (is_array) { + for (auto* dim_exp : ctx->constExp()) { + int dim = table_.EvaluateConstExp(dim_exp); + if (dim <= 0) { + throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); + } + dims.push_back(dim); + std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; + } + type = ir::Type::GetArrayType(base_type, dims); + std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; + } + + // ========== 绑定维度表达式 ========== + for (auto* dim_exp : ctx->constExp()) { + dim_exp->addExp()->accept(this); + } + + // 求值初始化器 + std::vector init_values; + if (ctx->constInitVal()) { + // ========== 绑定初始化表达式 ========== + BindConstInitVal(ctx->constInitVal()); + + init_values = table_.EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); + std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; + } + + // 计算期望的元素数量 + size_t expected_count = 1; + if (is_array) { + expected_count = 1; + for (int d : dims) expected_count *= d; + std::cout << "[DEBUG] 期望元素数量: " << expected_count << std::endl; + } + + // 如果初始化值不足,补零 + if (is_array && init_values.size() < expected_count) { + std::cout << "[DEBUG] 初始化值不足,补零" << std::endl; + SymbolTable::ConstValue zero; + if (base_type->IsInt32()) { + zero.kind = SymbolTable::ConstValue::INT; + zero.int_val = 0; + } else { + zero.kind = SymbolTable::ConstValue::FLOAT; + zero.float_val = 0.0f; + } + init_values.resize(expected_count, zero); + } + + // 检查初始化值数量 + if (init_values.size() > expected_count) { + throw std::runtime_error(FormatError("sema", "初始化值过多")); + } + + // 创建符号 + Symbol sym; + sym.name = name; + sym.kind = SymbolKind::Constant; + std::cout << "CheckConstDef: before addSymbol, sym.kind = " << (int)sym.kind << std::endl; + sym.type = type; + sym.scope_level = table_.currentScopeLevel(); + sym.is_initialized = true; + sym.var_def_ctx = nullptr; + sym.const_def_ctx = ctx; + std::cout << "保存常量定义上下文: " << name << ", ctx: " << ctx << std::endl; + + // ========== 存储常量值 ========== + if (is_array) { + // 存储数组常量(扁平化存储) + sym.is_array_const = true; + sym.array_const_values.clear(); + + for (const auto& val : init_values) { + Symbol::ConstantValue cv; + if (val.kind == SymbolTable::ConstValue::INT) { + cv.i32 = val.int_val; + } else { + cv.f32 = val.float_val; + } + sym.array_const_values.push_back(cv); + } + + std::cout << "[DEBUG] 存储数组常量,共 " << sym.array_const_values.size() + << " 个元素" << std::endl; + + } else if (!init_values.empty()) { + // 存储标量常量 + if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::INT) { + sym.is_int_const = true; + sym.const_value.i32 = init_values[0].int_val; + std::cout << "[DEBUG] 存储整型常量: " << init_values[0].int_val << std::endl; + } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { + sym.is_int_const = false; + sym.const_value.f32 = init_values[0].float_val; + std::cout << "[DEBUG] 存储浮点常量: " << init_values[0].float_val << std::endl; + } else if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { + // 整型常量用浮点数初始化(需要检查是否为整数) + float f = init_values[0].float_val; + int i = static_cast(f); + if (std::abs(f - i) > 1e-6) { + throw std::runtime_error(FormatError("sema", + "整型常量不能用非整数值的浮点数初始化: " + std::to_string(f))); + } + sym.is_int_const = true; + sym.const_value.i32 = i; + std::cout << "[DEBUG] 浮点转整型常量: " << f << " -> " << i << std::endl; + } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::INT) { + // 浮点常量用整型初始化,隐式转换 + sym.is_int_const = false; + sym.const_value.f32 = static_cast(init_values[0].int_val); + std::cout << "[DEBUG] 整型转浮点常量: " << init_values[0].int_val + << " -> " << static_cast(init_values[0].int_val) << std::endl; + } + } else { + // 没有初始化值,对于标量常量这是错误的 + if (!is_array) { + throw std::runtime_error(FormatError("sema", "常量必须有初始化值: " + name)); + } + std::cout << "[DEBUG] 数组常量无初始化器,将全部补零" << std::endl; + } + + table_.addSymbol(sym); + std::cout << "CheckConstDef: after addSymbol, sym.kind = " << (int)sym.kind << std::endl; + auto* stored = table_.lookup(name); + std::cout << "CheckConstDef: after addSymbol, stored const_def_ctx = " << stored->const_def_ctx << std::endl; + + std::cout << "[DEBUG] 常量符号添加完成: " << name + << " is_array_const: " << sym.is_array_const + << " element_count: " << sym.array_const_values.size() << std::endl; +} + // ==================== 常量声明 ==================== std::any visitConstDecl(SysYParser::ConstDeclContext* ctx) override { if (!ctx || !ctx->bType()) { @@ -252,91 +401,6 @@ public: return {}; } - void CheckConstDef(SysYParser::ConstDefContext* ctx, - std::shared_ptr base_type) { - if (!ctx || !ctx->Ident()) { - throw std::runtime_error(FormatError("sema", "非法常量定义")); - } - std::string name = ctx->Ident()->getText(); - if (table_.lookupCurrent(name)) { - throw std::runtime_error(FormatError("sema", "重复定义常量: " + name)); - } - // 确定类型 - std::shared_ptr type = base_type; - std::vector dims; - bool is_array = !ctx->constExp().empty(); - std::cout << "[DEBUG] CheckConstDef: " << name - << " base_type: " << (base_type->IsInt32() ? "int" : base_type->IsFloat() ? "float" : "unknown") - << " is_array: " << is_array - << " dim_count: " << ctx->constExp().size() << std::endl; - if (is_array) { - for (auto* dim_exp : ctx->constExp()) { - int dim = table_.EvaluateConstExp(dim_exp); - if (dim <= 0) { - throw std::runtime_error(FormatError("sema", "数组维度必须为正整数")); - } - dims.push_back(dim); - std::cout << "[DEBUG] dim[" << dims.size() - 1 << "] = " << dim << std::endl; - } - type = ir::Type::GetArrayType(base_type, dims); - std::cout << "[DEBUG] 创建数组类型完成,IsArray: " << type->IsArray() << std::endl; - } - - // ========== 绑定维度表达式 ========== - for (auto* dim_exp : ctx->constExp()) { - dim_exp->addExp()->accept(this); - } - - // 求值初始化器 - std::vector init_values; - if (ctx->constInitVal()) { - // ========== 绑定初始化表达式 ========== - BindConstInitVal(ctx->constInitVal()); - - init_values = table_.EvaluateConstInitVal(ctx->constInitVal(), dims, base_type); - std::cout << "[DEBUG] 初始化值数量: " << init_values.size() << std::endl; - } - // 检查初始化值数量 - size_t expected_count = 1; - if (is_array) { - expected_count = 1; - for (int d : dims) expected_count *= d; - std::cout << "[DEBUG] 期望元素数量: " << expected_count << std::endl; - } - if (init_values.size() > expected_count) { - throw std::runtime_error(FormatError("sema", "初始化值过多")); - } - Symbol sym; - sym.name = name; - sym.kind = SymbolKind::Constant; - std::cout << "CheckConstDef: before addSymbol, sym.kind = " << (int)sym.kind << std::endl; - sym.type = type; - sym.scope_level = table_.currentScopeLevel(); - sym.is_initialized = true; - sym.var_def_ctx = nullptr; - sym.const_def_ctx = ctx; - sym.const_def_ctx = ctx; - std::cout << "保存常量定义上下文: " << name << ", ctx: " << ctx << std::endl; - // 存储常量值(仅对非数组有效) - if (!is_array && !init_values.empty()) { - if (base_type->IsInt32() && init_values[0].kind == SymbolTable::ConstValue::INT) { - sym.is_int_const = true; - sym.const_value.i32 = init_values[0].int_val; - } else if (base_type->IsFloat() && init_values[0].kind == SymbolTable::ConstValue::FLOAT) { - sym.is_int_const = false; - sym.const_value.f32 = init_values[0].float_val; - } - } else if (is_array) { - std::cout << "[DEBUG] 数组常量,不存储单个常量值" << std::endl; - } - table_.addSymbol(sym); - std::cout << "CheckConstDef: after addSymbol, sym.kind = " << (int)sym.kind << std::endl; - auto* stored = table_.lookup(name); - std::cout << "CheckConstDef: after addSymbol, stored const_def_ctx = " << stored->const_def_ctx << std::endl; - - std::cout << "[DEBUG] 常量符号添加完成" << std::endl; - } - // ==================== 语句语义检查 ==================== // 处理所有语句 - 通过运行时类型判断 @@ -1004,9 +1068,27 @@ public: sema_.SetExprType(ctx, result); return {}; } - - // 获取语义上下文 + // 新增:获取符号表 + SymbolTable TakeSymbolTable() { return std::move(table_); } SemanticContext TakeSemanticContext() { return std::move(sema_); } + + // 新增:同时返回两者 + SemaResult TakeResult() { + std::cerr << "[DEBUG] TakeResult 前: 符号表作用域数量 = " + << table_.getScopeCount() << std::endl; + + // 可选:打印符号表内容 + // table_.dump(); + + SemaResult result; + result.context = std::move(sema_); + result.symbol_table = std::move(table_); + + std::cerr << "[DEBUG] TakeResult 后: 符号表作用域数量 = " + << result.symbol_table.getScopeCount() << std::endl; + return result; + } + private: SymbolTable table_; @@ -1020,7 +1102,6 @@ private: bool current_func_has_return_ = false; // ==================== 辅助函数 ==================== - ExprInfo CheckExp(SysYParser::ExpContext* ctx) { if (!ctx || !ctx->addExp()) { throw std::runtime_error(FormatError("sema", "无效表达式")); @@ -1497,9 +1578,10 @@ private: } // namespace -SemanticContext RunSema(SysYParser::CompUnitContext& comp_unit) { - SemaVisitor visitor; - comp_unit.accept(&visitor); - SemanticContext ctx = visitor.TakeSemanticContext(); - return ctx; +// 修改 RunSema 函数,使其返回 SemaResult 结构体,包含符号表和语义上下文 +SemaResult RunSema(SysYParser::CompUnitContext& comp_unit) { + SemaVisitor visitor; + comp_unit.accept(&visitor); + // 直接返回 TakeResult(),利用移动语义 + return visitor.TakeResult(); } diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 2de9fa4..4253825 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #define DEBUG_SYMBOL_TABLE @@ -17,28 +18,33 @@ // ---------- 构造函数 ---------- SymbolTable::SymbolTable() { scopes_.emplace_back(); // 初始化全局作用域 + active_scope_stack_.push_back(0); registerBuiltinFunctions(); // 注册内置库函数 } // ---------- 作用域管理 ---------- void SymbolTable::enterScope() { scopes_.emplace_back(); + active_scope_stack_.push_back(scopes_.size() - 1); } void SymbolTable::exitScope() { - if (scopes_.size() > 1) { - scopes_.pop_back(); + if (active_scope_stack_.size() > 1) { + active_scope_stack_.pop_back(); } // 不能退出全局作用域 } // ---------- 符号添加与查找 ---------- bool SymbolTable::addSymbol(const Symbol& sym) { - auto& current_scope = scopes_.back(); + auto& current_scope = scopes_[active_scope_stack_.back()]; if (current_scope.find(sym.name) != current_scope.end()) { return false; // 重复定义 } - current_scope[sym.name] = sym; + + Symbol stored_sym = sym; + stored_sym.scope_level = currentScopeLevel(); + current_scope[sym.name] = stored_sym; // 立即验证存储的符号 const auto& stored = current_scope[sym.name]; @@ -59,16 +65,15 @@ Symbol* SymbolTable::lookupCurrent(const std::string& name) { } const Symbol* SymbolTable::lookup(const std::string& name) const { - for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { - const auto& scope = *it; + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; auto found = scope.find(name); if (found != scope.end()) { std::cout << "SymbolTable::lookup: found " << name - << " in scope level " << (scopes_.rend() - it - 1) + << " in active scope index " << *it << ", kind=" << (int)found->second.kind << ", const_def_ctx=" << found->second.const_def_ctx << std::endl; - return &found->second; } } @@ -76,7 +81,7 @@ const Symbol* SymbolTable::lookup(const std::string& name) const { } const Symbol* SymbolTable::lookupCurrent(const std::string& name) const { - const auto& current_scope = scopes_.back(); + const auto& current_scope = scopes_[active_scope_stack_.back()]; auto it = current_scope.find(name); if (it != current_scope.end()) { return &it->second; @@ -84,6 +89,40 @@ const Symbol* SymbolTable::lookupCurrent(const std::string& name) const { return nullptr; } +const Symbol* SymbolTable::lookupAll(const std::string& name) const { + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + auto found = it->find(name); + if (found != it->end()) { + return &found->second; + } + } + return nullptr; +} + +const Symbol* SymbolTable::lookupByVarDef(const SysYParser::VarDefContext* decl) const { + if (!decl) return nullptr; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + for (const auto& [name, sym] : *it) { + if (sym.var_def_ctx == decl) { + return &sym; + } + } + } + return nullptr; +} + +const Symbol* SymbolTable::lookupByConstDef(const SysYParser::ConstDefContext* decl) const { + if (!decl) return nullptr; + for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { + for (const auto& [name, sym] : *it) { + if (sym.const_def_ctx == decl) { + return &sym; + } + } + } + return nullptr; +} + // ---------- 兼容原接口 ---------- void SymbolTable::Add(const std::string& name, SysYParser::VarDefContext* decl) { Symbol sym; @@ -96,9 +135,9 @@ void SymbolTable::Add(const std::string& name, SysYParser::VarDefContext* decl) } bool SymbolTable::Contains(const std::string& name) const { - // const 方法不能修改 scopes_,我们模拟查找 - for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { - if (it->find(name) != it->end()) { + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; + if (scope.find(name) != scope.end()) { return true; } } @@ -106,9 +145,10 @@ bool SymbolTable::Contains(const std::string& name) const { } SysYParser::VarDefContext* SymbolTable::Lookup(const std::string& name) const { - for (auto it = scopes_.rbegin(); it != scopes_.rend(); ++it) { - auto found = it->find(name); - if (found != it->end()) { + for (auto it = active_scope_stack_.rbegin(); it != active_scope_stack_.rend(); ++it) { + const auto& scope = scopes_[*it]; + auto found = scope.find(name); + if (found != scope.end()) { // 只返回变量定义的上下文(函数等其他符号返回 nullptr) if (found->second.kind == SymbolKind::Variable) { return found->second.var_def_ctx; @@ -638,7 +678,7 @@ std::vector SymbolTable::EvaluateConstInitVal( // 隐式类型转换 if (base_type->IsInt32() && val.kind == ConstValue::FLOAT) { val.kind = ConstValue::INT; - val.float_val = static_cast(val.int_val); + val.int_val = static_cast(val.float_val); } if (base_type->IsFloat() && val.kind == ConstValue::INT) { val.kind = ConstValue::FLOAT; @@ -648,32 +688,88 @@ std::vector SymbolTable::EvaluateConstInitVal( } // ========== 2. 数组常量(dims 非空)========== - // 计算数组总元素个数 size_t total = 1; for (int d : dims) total *= d; - - // 展平初始化列表(递归处理花括号) - std::vector flat; - flattenInit(ctx, flat, base_type); - - // 检查数量是否超过数组容量 - if (flat.size() > total) { - throw std::runtime_error("常量初始化:提供的初始值数量超过数组元素总数"); + + ConstValue zero; + if (base_type->IsInt32()) { + zero.kind = ConstValue::INT; + zero.int_val = 0; + } else { + zero.kind = ConstValue::FLOAT; + zero.float_val = 0.0f; } - - // 不足的部分补零 - if (flat.size() < total) { - ConstValue zero; + + // 先整体补零,再按 C 语言花括号规则覆盖显式初始化项。 + std::vector flat(total, zero); + + auto convert_value = [&](ConstValue v) -> ConstValue { if (base_type->IsInt32()) { - zero.kind = ConstValue::INT; - zero.int_val = 0; - } else { - zero.kind = ConstValue::FLOAT; - zero.float_val = 0.0f; + if (v.kind == ConstValue::FLOAT) { + throw std::runtime_error("常量初始化:整型数组不能使用浮点常量"); + } + return v; } - flat.resize(total, zero); - } - + if (v.kind == ConstValue::INT) { + ConstValue t; + t.kind = ConstValue::FLOAT; + t.float_val = static_cast(v.int_val); + return t; + } + return v; + }; + + auto subarray_span = [&](size_t depth) -> size_t { + size_t span = 1; + for (size_t i = depth + 1; i < dims.size(); ++i) span *= static_cast(dims[i]); + return span; + }; + + std::function fill; + fill = [&](SysYParser::ConstInitValContext* node, + size_t depth, + size_t begin, + size_t end) -> size_t { + if (!node || begin >= end) return begin; + + // 标量初始化项 + if (node->constExp()) { + ConstValue v = convert_value(EvaluateAddExp(node->constExp()->addExp())); + if (begin < flat.size()) flat[begin] = v; + return std::min(begin + 1, end); + } + + size_t cursor = begin; + for (auto* child : node->constInitVal()) { + if (cursor >= end) break; + + if (child->constExp()) { + ConstValue v = convert_value(EvaluateAddExp(child->constExp()->addExp())); + if (cursor < flat.size()) flat[cursor] = v; + ++cursor; + continue; + } + + // 花括号子列表:在非最内层需要按子聚合边界对齐。 + if (depth + 1 < dims.size()) { + const size_t span = subarray_span(depth); + const size_t rel = (cursor - begin) % span; + if (rel != 0) cursor += (span - rel); + if (cursor >= end) break; + + const size_t sub_end = std::min(cursor + span, end); + fill(child, depth + 1, cursor, sub_end); + // 一个带花括号的子初始化器会消费当前层的一个子聚合。 + cursor = sub_end; + } else { + // 最内层(标量数组)遇到额外花括号,按同层顺序展开。 + cursor = fill(child, depth, cursor, end); + } + } + return cursor; + }; + + fill(ctx, 0, 0, total); return flat; } diff --git a/sylib/sylib.c b/sylib/sylib.c index 7f26d0b..7237ef1 100644 --- a/sylib/sylib.c +++ b/sylib/sylib.c @@ -1,4 +1,162 @@ -// SysY 运行库实现: -// - 按实验/评测规范提供 I/O 等函数实现 -// - 与编译器生成的目标代码链接,支撑运行时行为 +#include "sylib.h" + +#include +#include + +extern int scanf(const char* format, ...); +extern int printf(const char* format, ...); +extern int getchar(void); +extern int putchar(int c); + +int getint(void) { + int x = 0; + scanf("%d", &x); + return x; +} + +int getch(void) { + return getchar(); +} + +int getarray(int a[]) { + int n; + scanf("%d", &n); + int i = 0; + for (; i < n; ++i) { + scanf("%d", &a[i]); + } + return n; +} + +float getfloat(void) { + float x = 0.0f; + scanf("%f", &x); + return x; +} + +int getfarray(float a[]) { + int n = 0; + if (scanf("%d", &n) != 1) { + return 0; + } + int i = 0; + for (; i < n; ++i) { + if (scanf("%f", &a[i]) != 1) { + return i; + } + } + return n; +} + +void putint(int x) { + printf("%d", x); +} + +void putch(int x) { + putchar(x); +} + +void putarray(int n, int a[]) { + int i = 0; + printf("%d:", n); + for (; i < n; ++i) { + printf(" %d", a[i]); + } + putchar('\n'); +} + +void putfloat(float x) { + printf("%a", x); +} + +void putfarray(int n, float a[]) { + int i = 0; + printf("%d:", n); + for (; i < n; ++i) { + printf(" %a", a[i]); + } + putchar('\n'); +} + +void puts(int s[]) { + if (!s) return; + while (*s) { + putchar(*s); + ++s; + } +} + +void _sysy_starttime(int lineno) { + (void)lineno; +} + +void _sysy_stoptime(int lineno) { + (void)lineno; +} + +void starttime(void) { + _sysy_starttime(0); +} + +void stoptime(void) { + _sysy_stoptime(0); +} + +int* memset(int* ptr, int value, int count) { + unsigned char* p = (unsigned char*)ptr; + unsigned char byte = (unsigned char)(value & 0xFF); + int i = 0; + for (; i < count; ++i) { + p[i] = byte; + } + return ptr; +} + +int* sysy_alloc_i32(int count) { + if (count <= 0) { + return 0; + } + return (int*)malloc((size_t)count * sizeof(int)); +} + +float* sysy_alloc_f32(int count) { + if (count <= 0) { + return 0; + } + return (float*)malloc((size_t)count * sizeof(float)); +} + +void sysy_free_i32(int* ptr) { + if (!ptr) { + return; + } + free(ptr); +} + +void sysy_free_f32(float* ptr) { + if (!ptr) { + return; + } + free(ptr); +} + +void sysy_zero_i32(int* ptr, int count) { + int i = 0; + if (!ptr || count <= 0) { + return; + } + for (; i < count; ++i) { + ptr[i] = 0; + } +} + +void sysy_zero_f32(float* ptr, int count) { + int i = 0; + if (!ptr || count <= 0) { + return; + } + for (; i < count; ++i) { + ptr[i] = 0.0f; + } +} diff --git a/sylib/sylib.h b/sylib/sylib.h index 502d488..0d81b83 100644 --- a/sylib/sylib.h +++ b/sylib/sylib.h @@ -1,4 +1,29 @@ -// SysY 运行库头文件: -// - 声明运行库函数原型(供编译器生成 call 或链接阶段引用) -// - 与 sylib.c 配套,按规范逐步补齐声明 +#pragma once + +int getint(void); +int getch(void); +int getarray(int a[]); +float getfloat(void); +int getfarray(float a[]); + +void putint(int x); +void putch(int x); +void putarray(int n, int a[]); +void putfloat(float x); +void putfarray(int n, float a[]); +void puts(int s[]); + +void _sysy_starttime(int lineno); +void _sysy_stoptime(int lineno); +void starttime(void); +void stoptime(void); + +int read_map(void); +int* memset(int* ptr, int value, int count); +int* sysy_alloc_i32(int count); +float* sysy_alloc_f32(int count); +void sysy_free_i32(int* ptr); +void sysy_free_f32(float* ptr); +void sysy_zero_i32(int* ptr, int count); +void sysy_zero_f32(float* ptr, int count);