X-Git-Url: https://gitweb.ps.run/toc/blobdiff_plain/c2ba7425955ae538e220cec79d9124756d1b4c8b..c4231c6faf4e1b4650b075c641b0bb8c053739e4:/src/repr.h?ds=sidebyside diff --git a/src/repr.h b/src/repr.h index f12b0da..959e74d 100644 --- a/src/repr.h +++ b/src/repr.h @@ -39,8 +39,12 @@ struct Stmt; struct Context { + std::optional name; std::shared_ptr parent; std::vector variables; + std::vector functions; + std::vector structs; + std::vector namespaces; }; enum class TypeModifierType @@ -61,6 +65,22 @@ struct Type std::vector namespacePrefixes; std::string name; std::vector modifiers; + std::vector genericInstantiation; + + bool operator!=(const Type & that) + { + if (this->name != that.name) + return true; + + for (int i = 0; i < this->modifiers.size(); i++) + if (this->modifiers[i].type != that.modifiers[i].type) + return true; + + for (int i = 0; i < this->namespacePrefixes.size(); i++) + if (this->namespacePrefixes[i] != that.namespacePrefixes[i]) + return true; + return false; + } }; struct Variable @@ -77,10 +97,14 @@ struct Body struct Function { - Type returnType; std::string name; + Type returnType; std::vector parameters; bool defined; + + std::vector genericTypeNames; + std::vector> genericInstantiations; + Body body; }; @@ -95,6 +119,8 @@ struct StructMember struct Struct { std::string name; + std::vector genericTypeNames; + std::vector> genericInstantiations; std::vector> members; std::vector> methods; }; @@ -103,17 +129,11 @@ struct Namespace { std::string name; std::shared_ptr ctx; - std::vector structs; - std::vector functions; - std::vector namespaces; }; struct Program { std::shared_ptr ctx; - std::vector structs; - std::vector functions; - std::vector namespaces; }; enum class ExprType @@ -126,6 +146,7 @@ struct FuncExpr std::vector namespacePrefixes; std::string functionName; std::vector arguments; + std::vector genericInstantiation; }; struct MethodExpr @@ -133,6 +154,7 @@ struct MethodExpr std::shared_ptr expr; std::string methodName; std::vector arguments; + std::vector genericInstantiation; }; enum class LitType @@ -157,6 +179,7 @@ struct ParenExpr struct DotExpr { + bool isPointer; std::shared_ptr expr; std::string identifier; };