]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - idlcomp/languages/c++/main.cc
Add distributors to liability disclaimer. Need to update file headers.
[polintos/scott/priv.git] / idlcomp / languages / c++ / main.cc
index 8fb4b7259dd1f23351f7be5e1109ab33157167eb..4368bca4d95bbddb9e56ced6a98dad3c490bfbcd 100644 (file)
@@ -52,7 +52,7 @@ dirname(dir)
                throw UserError();
        }
        
-       file <<   "// " << *ns->get_fq_name()->flatten(".")
+       file <<   "// " << *ns->get_fq_name()->flatten()
             << "\n// This is a C++ language binding generated by idlc.\n"
             <<   "// Do not modify this file directly.\n\n";
 
@@ -259,7 +259,7 @@ void cpp_output_type(ostream &file, Type *t, bool array, bool is_mutable)
        cpp_output_name(file, t);
 
        if (array)
-               file << ">";
+               file << ", ::System::RunTime::ORBMM>";
 
        file << ' ';
 }
@@ -293,7 +293,7 @@ void cpp_output_type(ostream &file, CompiledBasicType &t, bool is_mutable)
        }
        
        if (is_array(t))
-               file << '>';
+               file << ", ::System::RunTime::ORBMM>";
        
        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_pass(sym, trav_nsdecl);
                                output_nsdecl_end(sym);
                        } else {
-                               output_nsdecl(sym);
+                               output_nsdecl_begin(sym);
+                               output_nsdecl_children(sym);
+                               output_marshall_pass(sym, trav_nsdecl);
+                               output_nsdecl_end(sym);
                        }
 
                        break;
@@ -717,6 +719,8 @@ void CPPFile::output(Struct *sym, int pass, void *arg2)
                                if (sym->is_virtual())
                                        output_struct_ctor(sym, true);
                        }
+                       
+                       output_marshall_pass(sym, trav_full);
 
                        upscope();
                        file << indent << "};\n";
@@ -732,6 +736,10 @@ void CPPFile::output(Struct *sym, int pass, void *arg2)
 
                        break;
                }
+
+               case trav_marshall:
+                       output_marshall(sym, static_cast<Datum *>(arg2));
+                       break;
                
                default:
                        BUG();
@@ -840,6 +848,10 @@ void CPPFile::output(Interface *sym, int pass, void *arg2)
                        }
        
                        break;
+
+               case trav_marshall:
+                       output_marshall(sym, static_cast<Datum *>(arg2));
+                       break;
                
                default:
                        BUG();
@@ -990,6 +1002,10 @@ void CPPFile::output(BitField *sym, int pass, void *arg2)
                        break;
                }
 
+               case trav_marshall:
+                       output_marshall(sym, static_cast<Datum *>(arg2));
+                       break;
+
                default:
                        BUG();
        }
@@ -1060,6 +1076,10 @@ void CPPFile::output(Enum *sym, int pass, void *arg2)
                        output_pass(sym, trav_forward);
                        break;
 
+               case trav_marshall:
+                       output_marshall(sym, static_cast<Datum *>(arg2));
+                       break;
+
                default:
                        BUG();
        }
@@ -1097,6 +1117,10 @@ void CPPFile::output(BasicType *sym, int pass, void *arg2)
                        output_pass(sym, trav_forward);
                        break;
 
+               case trav_marshall:
+                       output_marshall(sym, static_cast<Datum *>(arg2));
+                       break;
+
                default:
                        BUG();
        }