]> gitweb.ps.run Git - toc/blobdiff - src/repr.h
structs and functions in ctx
[toc] / src / repr.h
index f196427fbe6a9cfae8cf34e6ac95a6d8978caa14..709528d3c8b55986ea65e73c164ff69f27d95855 100644 (file)
@@ -37,6 +37,15 @@ struct AssignStmt;
 struct ReturnStmt;\r
 struct Stmt;\r
 \r
+struct Context\r
+{\r
+  std::optional<std::string> name;\r
+  std::shared_ptr<Context> parent;\r
+  std::vector<Variable> variables;\r
+  std::vector<Function> functions;\r
+  std::vector<Struct> structs;\r
+};\r
+\r
 enum class TypeModifierType\r
 {\r
   Pointer, Array\r
@@ -55,6 +64,7 @@ struct Type
   std::vector<std::string> namespacePrefixes;\r
   std::string name;\r
   std::vector<TypeModifier> modifiers;\r
+  std::vector<Type> genericInstantiation;\r
 };\r
 \r
 struct Variable\r
@@ -65,15 +75,20 @@ struct Variable
 \r
 struct Body\r
 {\r
-  std::vector<Variable> variables;\r
+  std::shared_ptr<Context> ctx;\r
   std::vector<Stmt> statements;\r
 };\r
 \r
 struct Function\r
 {\r
-  Type returnType;\r
   std::string name;\r
+  Type returnType;\r
   std::vector<Variable> parameters;\r
+  bool defined;\r
+\r
+  std::vector<std::string> genericTypeNames;\r
+  std::vector<std::vector<Type>> genericInstantiations;\r
+\r
   Body body;\r
 };\r
 \r
@@ -88,6 +103,8 @@ struct StructMember
 struct Struct\r
 {\r
   std::string name;\r
+  std::vector<std::string> genericTypeNames;\r
+  std::vector<std::vector<Type>> genericInstantiations;\r
   std::vector<StructMember<Variable>> members;\r
   std::vector<StructMember<Function>> methods;\r
 };\r
@@ -95,17 +112,13 @@ struct Struct
 struct Namespace\r
 {\r
   std::string name;\r
-  std::vector<Variable> variables;\r
-  std::vector<Struct> structs;\r
-  std::vector<Function> functions;\r
+  std::shared_ptr<Context> ctx;\r
   std::vector<Namespace> namespaces;\r
 };\r
 \r
 struct Program\r
 {\r
-  std::vector<Variable> variables;\r
-  std::vector<Struct> structs;\r
-  std::vector<Function> functions;\r
+  std::shared_ptr<Context> ctx;\r
   std::vector<Namespace> namespaces;\r
 };\r
 \r
@@ -119,6 +132,7 @@ struct FuncExpr
   std::vector<std::string> namespacePrefixes;\r
   std::string functionName;\r
   std::vector<Expr> arguments;\r
+  std::vector<Type> genericInstantiation;\r
 };\r
 \r
 struct MethodExpr\r
@@ -126,6 +140,7 @@ struct MethodExpr
   std::shared_ptr<Expr> expr;\r
   std::string methodName;\r
   std::vector<Expr> arguments;\r
+  std::vector<Type> genericInstantiation;\r
 };\r
 \r
 enum class LitType\r
@@ -150,6 +165,7 @@ struct ParenExpr
 \r
 struct DotExpr\r
 {\r
+  bool isPointer;\r
   std::shared_ptr<Expr> expr;\r
   std::string identifier;\r
 };\r