X-Git-Url: https://gitweb.ps.run/toc/blobdiff_plain/b9322dfb8efe37f6f88a899269bdf21015f4db9a..HEAD:/src/repr.h diff --git a/src/repr.h b/src/repr.h index b30aecd..569411c 100644 --- a/src/repr.h +++ b/src/repr.h @@ -8,6 +8,8 @@ using namespace std; +// This contains a 1 to 1 representation of the defined language + struct Type; struct Variable; struct Body; @@ -37,10 +39,17 @@ struct AssignStmt; struct ReturnStmt; struct Stmt; +// Context is a collection of everything that can be defined in a namespace +// that is reused for bodies so that the hierarchy can be walked uniformly +// both up and down using the parent variable struct Context { + std::optional name; std::shared_ptr parent; std::vector variables; + std::vector functions; + std::vector structs; + std::vector namespaces; }; enum class TypeModifierType @@ -62,6 +71,21 @@ struct Type 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 @@ -79,11 +103,13 @@ struct Body struct Function { std::string name; - std::vector genericTypeNames; - std::vector> genericInstantiations; Type returnType; std::vector parameters; bool defined; + + std::vector genericTypeNames; + std::vector> genericInstantiations; + Body body; }; @@ -108,17 +134,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 @@ -169,6 +189,8 @@ struct DotExpr std::string identifier; }; +// OperatorType enum with corresponding string array to lookup +// enum from string and the other way round enum class PrefixOperatorType { Plus, Minus, Increment, Decrement,