]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - idlcomp/languages/c++/main.cc
Some weak symbol usage, and some marshalling stuff.
[polintos/scott/priv.git] / idlcomp / languages / c++ / main.cc
index 8fb4b7259dd1f23351f7be5e1109ab33157167eb..57f94556bb594a17bee0a493c64c88731ab98704 100644 (file)
@@ -385,7 +385,7 @@ void CPPFile::output_guid(const uint64_t *guid64)
        const unsigned char *guid = reinterpret_cast<const unsigned char *>(guid64);
        char guidhex[7];
        
-       file << indent << "static const __attribute__((unused))\n"
+       file << indent << "__attribute__((weak))\n"
             << indent << "::System::RunTime::GUID _guid = {\n"
             << indent << "\t{ ";
        
@@ -459,8 +459,8 @@ void CPPFile::output_vstruct_info(Struct *sym)
 {
        all_ns_in(sym, true, "VINFO_");
 
-       file << indent << "static const __attribute__((unused)) "
-                         "unsigned long *const _guids[] = {\n";
+       file << indent << "__attribute__((weak)) "
+                         "unsigned long * _guids[] = {\n";
        
        stack<StructRef> supers;
        sym->chainlen = 0;
@@ -480,12 +480,10 @@ void CPPFile::output_vstruct_info(Struct *sym)
        }
 
        file << indent << "};\n\n"
-            << indent << "static const __attribute__((unused)) "
+            << indent << "__attribute__((weak)) "
                          "::System::RunTime::VStructInfo _info = {\n"
             << indent << "\t_guids, " << sym->chainlen << ",\n"
-#if 0
-            << indent << "\t_marshall, _unmarshall,\n"
-#endif
+//          << indent << "\t_marshall, _unmarshall,\n"
             << indent << "};\n";
 
        
@@ -521,7 +519,7 @@ void CPPFile::output_vstruct_main(Struct *sym)
 
        if (super)
                file << '\n'
-                    << indent << "static " << name << " *downcast(::System::VStruct *base)\n"
+                    << indent << "static __attribute__((weak)) " << name << " *downcast(::System::VStruct *base)\n"
                     << indent << "{\n"
                     << indent << "\tif (!base)\n"
                     << indent << "\t\treturn NULL;\n\n"
@@ -642,9 +640,13 @@ void CPPFile::output(Struct *sym, int pass, void *arg2)
                                output_nsdecl_begin(sym);
                                output_nsdecl_children(sym);
                                output_guid(sym->def.guid);
+                               output_marshall(sym, trav_nsdecl);
                                output_nsdecl_end(sym);
                        } else {
-                               output_nsdecl(sym);
+                               output_nsdecl_begin(sym);
+                               output_nsdecl_children(sym);
+                               output_marshall(sym, trav_nsdecl);
+                               output_nsdecl_end(sym);
                        }
 
                        break;