- indent(out, -2);\r
- out << "};\n";\r
- \r
- for (auto m : s.methods)\r
- {\r
- m.parameters.insert(m.parameters.begin(),\r
- {"this",\r
- {s.name,\r
- {{TypeModifierType::Pointer, false, -1}}}}); \r
- out << m.returnType << " " << s.name << "_" << m.name << " (" << m.parameters << ")\n" << m.body;\r
+ out << "struct " << namespacePrefix() << s.name << genericAppendix(instantiation);\r
+ if (stub)\r
+ {\r
+ out << ";\n";\r
+ for (auto m : s.methods)\r
+ {\r
+ Function f = m;\r
+\r
+ // add implicit this parameter\r
+ f.parameters.insert(f.parameters.begin(),\r
+ {"this",\r
+ {\r
+ namespaces,\r
+ s.name + genericAppendix(instantiation),\r
+ {\r
+ {TypeModifierType::Pointer, false, -1}\r
+ }\r
+ }\r
+ });\r
+ out << f.returnType << " " <<\r
+ generateModifiers(namespacePrefix() + s.name + genericAppendix(instantiation) + "_" + f.name, f.returnType.modifiers) <<\r
+ " (" << vectorStr(f.parameters, ", ") << ");\n";\r
+ }\r
+ return;\r
+ }\r
+ out << "\n{\n";\r
+ indentation += 2;\r
+\r
+ for (auto m : s.members)\r
+ {\r
+ indent(out);\r
+ out << m << ";\n";\r
+ }\r
+\r
+ indent(out, -2);\r
+ out << "};\n";\r
+ \r
+ for (auto m : s.methods)\r
+ {\r
+ Function f = m;\r
+ \r
+ // add implicit this parameter\r
+ f.parameters.insert(f.parameters.begin(),\r
+ {"this",\r
+ {\r
+ namespaces,\r
+ s.name + genericAppendix(instantiation),\r
+ {\r
+ {TypeModifierType::Pointer, false, -1}\r
+ }\r
+ }\r
+ });\r
+ out << f.returnType << " " <<\r
+ generateModifiers(namespacePrefix() + s.name + genericAppendix(instantiation) + "_" + f.name, f.returnType.modifiers) <<\r
+ " (" << vectorStr(f.parameters, ", ") << ")\n" << f.body;\r
+ }\r
+\r
+ currentInstantiation.clear();\r
+ }\r