+static std::vector<std::string> namespaces;\r
+static std::string namespacePrefix() {\r
+ std::stringstream sstr;\r
+ for (auto n : namespaces)\r
+ {\r
+ sstr << n << "_";\r
+ }\r
+ return sstr.str();\r
+}\r
+\r
+static std::map<std::string, Type> currentInstantiation;\r
+\r
+static Program globalPrg;\r
+static std::shared_ptr<Context> globalCtx;\r
+\r
+\r
+\r
+// std::string getPrefix(std::shared_ptr<Context> ctx)\r
+// {\r
+// std::string result;\r
+// for (auto it = ctx; it != nullptr; it = it->parent)\r
+// {\r
+// if (it->name.has_value())\r
+// {\r
+// result = it->name.value() + "_" + result;\r
+// }\r
+// }\r
+// return result;\r
+// }\r
+\r
+std::ostream & operator<< (std::ostream & out, const Type & t)\r
+{\r
+ for (auto kv : currentInstantiation)\r
+ {\r
+ if (t.name == kv.first)\r
+ {\r
+ out << kv.second;\r
+ return out;\r
+ }\r
+ }\r
+ TypeInfo ti = typeType(globalCtx, t);\r
+ if (ti.isStruct)\r
+ out << "struct ";\r
+ auto s = findStruct(t.name, t.namespacePrefixes, globalCtx);\r
+ if (s.has_value())\r
+ out << vectorStr(std::get<1>(*s), "_", true) << t.name; \r
+ else\r
+ out << vectorStr(t.namespacePrefixes, "_", true) << t.name;\r
+ if (!t.genericInstantiation.empty())\r
+ out << genericAppendix(t.genericInstantiation);\r