\r
return out;\r
}\r
-std::ostream & operator<< (std::ostream & out, const Variable & v)\r
-{\r
- out << v.type << " ";\r
\r
+std::string generateModifiers (std::string s, std::vector<TypeModifier> modifiers)\r
+{\r
std::stringstream sstr;\r
- std::string s = v.name;\r
- \r
- // lookup variable and change name to reflect containing namespace\r
- auto var = findVariable(v.name, namespaces, globalCtx);\r
- if (var.has_value())\r
- s = vectorStr(std::get<1>(*var), "_", true) + s;\r
\r
- // nest modifiers, inverted because C defines them\r
+ // apply modifiers, inverted because C defines them\r
// the opposite direction\r
- for (auto m = v.type.modifiers.rbegin(); m != v.type.modifiers.rend(); m++)\r
+ for (auto m = modifiers.rbegin(); m != modifiers.rend(); m++)\r
{\r
if (m->type == TypeModifierType::Pointer)\r
{\r
s = sstr.str();\r
}\r
}\r
- out << s;\r
+\r
+ return s;\r
+}\r
+\r
+std::ostream & operator<< (std::ostream & out, const Variable & v)\r
+{\r
+ out << v.type << " ";\r
+\r
+ std::string s = v.name;\r
+ \r
+ // lookup variable and change name to reflect containing namespace\r
+ auto var = findVariable(v.name, namespaces, globalCtx);\r
+ if (var.has_value())\r
+ s = vectorStr(std::get<1>(*var), "_", true) + s;\r
+\r
+ // apply modifiers in C fashion\r
+ out << generateModifiers(s, v.type.modifiers);\r
\r
return out;\r
}\r
// regular function\r
if (f.genericTypeNames.empty())\r
{\r
- out << f.returnType << " " << namespacePrefix() << f.name << " (" << vectorStr(f.parameters, ", ") << ")";\r
+ out << f.returnType << " " << generateModifiers(namespacePrefix() + f.name, f.returnType.modifiers) << " (" << vectorStr(f.parameters, ", ") << ")";\r
\r
if (stub)\r
{\r
currentInstantiation[f.genericTypeNames[i]] = instantiation[i];\r
}\r
\r
- out << f.returnType << " " << namespacePrefix() << f.name << genericAppendix(instantiation) << " (" << vectorStr(f.parameters, ", ") << ")";\r
+ out << f.returnType << " " << generateModifiers(namespacePrefix() + f.name, f.returnType.modifiers) << genericAppendix(instantiation) << " (" << vectorStr(f.parameters, ", ") << ")";\r
\r
if (stub)\r
{\r
}\r
});\r
out << f.returnType << " " <<\r
- namespacePrefix() << s.name << "_" << f.name <<\r
+ generateModifiers(namespacePrefix() + s.name + "_" + f.name, f.returnType.modifiers) <<\r
" (" << vectorStr(f.parameters, ", ") << ");\n";\r
}\r
return;\r
}\r
});\r
out << f.returnType << " " <<\r
- namespacePrefix() << s.name << "_" << f.name <<\r
- " (" << vectorStr(f.parameters, ", ") << ")\n" << f.body;\r
+ generateModifiers(namespacePrefix() + s.name + "_" + f.name, f.returnType.modifiers) <<\r
+ " (" << vectorStr(f.parameters, ", ") << ")\n" << f.body;\r
}\r
}\r
// generic struct\r
}\r
});\r
out << f.returnType << " " <<\r
- namespacePrefix() << s.name << genericAppendix(instantiation) << "_" << f.name <<\r
+ generateModifiers(namespacePrefix() + s.name + genericAppendix(instantiation) + "_" + f.name, f.returnType.modifiers) <<\r
" (" << vectorStr(f.parameters, ", ") << ");\n";\r
}\r
return;\r
}\r
});\r
out << f.returnType << " " <<\r
- namespacePrefix() << s.name << genericAppendix(instantiation) << "_" << f.name <<\r
- " (" << vectorStr(f.parameters, ", ") << ")\n" << f.body;\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