passed local tests

This commit is contained in:
2024-08-14 14:41:02 +00:00
parent f11ff0693b
commit 746e5bae07
4 changed files with 54 additions and 18 deletions

View File

@ -55,9 +55,11 @@ class ASTNodeVirturalVisitor : public ASTNodeVisitorBase {
};
class ASTSemanticCheckVisitor : public ASTNodeVirturalVisitor {
bool is_in_func;
bool is_in_func_def;
bool has_return;
FunctionSchema cur_func_schema;
std::string cur_class_name;
bool is_in_class_def;
size_t loop_level;
std::shared_ptr<GlobalScope> global_scope;
friend std::shared_ptr<Program_ASTNode> CheckAndDecorate(std::shared_ptr<Program_ASTNode> src);
@ -68,7 +70,7 @@ class ASTSemanticCheckVisitor : public ASTNodeVirturalVisitor {
}
public:
ASTSemanticCheckVisitor() : is_in_func(false), loop_level(0) {}
ASTSemanticCheckVisitor() : is_in_func_def(false), loop_level(0) {}
// Structural AST Nodes
void ActuralVisit(FuncDef_ASTNode *node) override;
void ActuralVisit(ClassDef_ASTNode *node) override;

View File

@ -84,6 +84,9 @@ inline bool operator==(const ExprTypeInfo &l, const ExprTypeInfo &r) {
return true;
}
if (std::holds_alternative<IdentifierType>(l)) {
bool x = std::holds_alternative<IdentifierType>(r);
std::string a = std::get<IdentifierType>(l);
std::string b = std::get<IdentifierType>(r);
return std::holds_alternative<IdentifierType>(r) && std::get<IdentifierType>(l) == std::get<IdentifierType>(r);
}
if (std::holds_alternative<ArrayType>(l)) {