bool prototype, bool retval);
void output_one_method_ptr(Method *m, Interface *iface);
- static void output_iface_ns(CPPFile *file, NameSpace *sym);
-
//// Misc members:
// Output the static const guid[] value, and the IFaceInfo struct.
int output_datum(Struct *ns, Datum *d, int offset);
- static void output_vstruct_ns(CPPFile *file, NameSpace *sym);
void output_vstruct_info(Struct *sym);
void output_vstruct_main(Struct *sym);
void output_struct_ctor(Struct *sym, bool extra_vstruct);
// namespace, before any namespace members have been
// emitted.
- typedef void (*nsdecl_callback)(CPPFile *file, NameSpace *ns);
- void output_nsdecl(NameSpace *ns, nsdecl_callback cb = NULL);
+ void output_nsdecl_begin(NameSpace *ns);
+ void output_nsdecl_children(NameSpace *ns);
+ void output_nsdecl_end(NameSpace *ns);
+ void output_nsdecl(NameSpace *ns);
void output_aliases_and_types(NameSpace *ns);
do_extra_newline = true;
}
-void CPPFile::output_nsdecl(NameSpace *ns, nsdecl_callback cb)
+void CPPFile::output_nsdecl_begin(NameSpace *ns)
{
// If indent level is not zero, this is a nested struct or interface.
if (indent.indent_level == 0)
file << indent << "namespace " << **ns->name << "_ns {\n";
downscope();
+}
- if (cb)
- cb(this, ns);
-
+void CPPFile::output_nsdecl_children(NameSpace *ns)
+{
for (NameSpace::const_iterator i = ns->begin(); i != ns->end(); ++i) {
Symbol *sym = (*i).second;
output_pass(sym, trav_forward);
output_pass(sym, trav_nsdecl);
}
-
+}
+
+void CPPFile::output_nsdecl_end(NameSpace *ns)
+{
upscope();
file << indent << "}\n";
ns_out(ns);
}
+void CPPFile::output_nsdecl(NameSpace *ns)
+{
+ output_nsdecl_begin(ns);
+ output_nsdecl_children(ns);
+ output_nsdecl_end(ns);
+}
+
void CPPFile::output_aliases_and_types(NameSpace *ns)
{
for (NameSpace::const_iterator i = ns->begin(); i != ns->end(); ++i) {
}
}
-void CPPFile::output_vstruct_ns(CPPFile *cpp, NameSpace *sym)
-{
- Struct *str = dynamic_cast<Struct *>(sym);
- assert(str);
- assert(str->is_virtual());
-
- cpp->output_guid(str->def.guid);
-}
-
void CPPFile::output_vstruct_info(Struct *sym)
{
all_ns_in(sym, true, "VINFO_");
switch (pass) {
case trav_nsdecl:
if (sym->is_virtual()) {
- output_nsdecl(sym, output_vstruct_ns);
+ output_nsdecl_begin(sym);
+ output_nsdecl_children(sym);
+ output_guid(sym->def.guid);
+ output_nsdecl_end(sym);
} else {
output_nsdecl(sym);
}
}
}
-void CPPFile::output_iface_ns(CPPFile *file, NameSpace *sym)
-{
- Interface *i = dynamic_cast<Interface *>(sym);
- assert(i);
-
- file->output_guid(i->def.guid);
- file->output_ifaceinfo(i);
-}
-
void CPPFile::output(Interface *sym, int pass, void *arg2)
{
switch (pass) {
case trav_nsdecl:
- output_nsdecl(sym, output_iface_ns);
+ output_nsdecl_begin(sym);
+ output_nsdecl_children(sym);
+
+ output_guid(sym->def.guid);
+ output_ifaceinfo(sym);
+
+ output_nsdecl_end(sym);
break;
case trav_forward: {