xfer to laptop
authorScott Wood <scott@thor.buserror.net>
Thu, 27 Sep 2007 21:52:28 +0000 (16:52 -0500)
committerScott Wood <scott@thor.buserror.net>
Thu, 27 Sep 2007 21:52:28 +0000 (16:52 -0500)
doc/orb/parameter-info-block
idlcomp/languages/c++/main.cc
idlcomp/languages/c++/marshall.cc
include/c++/orb.h
lib/c++/orb.cc

index a39372b637408ba9ad4f2bc7fe6f1514160284bd..b868a4474a0a7dcc6070fb7d6f9751716d6d3d38 100644 (file)
@@ -24,7 +24,9 @@ Parameter Info Block (PIB)
       This is like buffer_size, but for Copy segments.
 
    objlist_ptr     pointer Pointer to the object list
+       newobj_ptr      pointer Pointer to the new object list.
    objlist_len     32-bit  Length of the object list, in IDs
+       newobj_len      32-bit  Length of the new object list.
 
       The object list is a special segment that contains object IDs
       rather than arbitrary data.  Each object ID will be translated
@@ -33,6 +35,13 @@ Parameter Info Block (PIB)
       regardless of the pointer size.  The first object in the list
       is the object to receive the message.
 
+               Objects which live in this address space have the high bit
+               clear; remote objects have the high bit set.  When sending
+               an object reference that has not been exposed to the kernel
+               before, its interface hash should exist in the newobj list.
+
+               
+
    num_segments    32-bit  Number of data segments
 
    segment.ptr     pointer Pointer to data segment
index 7c6ebe8243e27fe00ab3d002b1f7348502402f35..12cb65c503e3a166fcdb8e66002af58f809c5c3c 100644 (file)
@@ -481,7 +481,10 @@ void CPPFile::output_vstruct_info(Struct *sym)
        file << indent << "};\n\n"
             << indent << "static const __attribute__((unused)) "
                          "::System::RunTime::VStructInfo _info = {\n"
-            << indent << "\t_guids, " << sym->chainlen << '\n'
+            << indent << "\t_guids, " << sym->chainlen << ",\n"
+#if 0
+            << indent << "\t_marshall, _unmarshall,\n"
+#endif
             << indent << "};\n";
 
        
index 2391b37980b9e1476e15b6a94e008d918fff415c..ca7a2f960e14c4b6dd2e38864293e483b92af321 100644 (file)
@@ -18,6 +18,13 @@ void CPPFile::output_ifaceinfo(Interface *iface)
 {
        extra_newline();
 
+#if 0
+       file << indent << "void _invoke(::System::RunTime::Array"
+                      << "< ::System::RunTime::ID> objlist,\n"
+            << indent << "             ::System::RunTime::ParamInfoBlock::Segment *segs,\n"
+            << indent << "             int nsegs);\n\n";
+#endif
+
        file << indent << "static const __attribute__((unused))\n"
             << indent << "::System::RunTime::IFaceInfo _info = {\n"
             << indent << "\t&_guid,\n"
index 72daad843dcedaaed5ab6175e8e174d9c55ad62d..484c1426473e4a88c67f3e6b57d72cef48886c9f 100644 (file)
@@ -309,24 +309,13 @@ namespace System {
                }
                
                struct IFaceInfo;
+               typedef uint32_t ID;
 
                struct IFaceTable {
                        const IFaceInfo *info;
                        const ptrdiff_t offset;
                };
                
-               struct VStructInfo {
-                       // List of GUIDs of the struct and its superstructs,
-                       // starting with System.VStruct and ending with
-                       // the concrete struct.
-                       
-                       const unsigned long *const *const guids;
-
-                       // Length of inheritance chain; 1 for System.VStruct
-                       
-                       const int chainlen;
-               };
-               
                union GUID {
                        unsigned char c[16];
                        unsigned long l[];
@@ -345,7 +334,6 @@ namespace System {
                                  guid1[3] == guid2[3])));
                }
                
-               typedef uint32_t ID;
                struct ParamInfoBlock {
                        uint32_t buffer_size;
                        uint32_t copy_size;
@@ -398,6 +386,23 @@ namespace System {
 
                struct IFaceInfo {
                        const GUID *guid;
+                       void (*invoke)(Array<ID> objlist,
+                                      ParamInfoBlock::Segment *segs,
+                                      int nsegs);
+                       ::System::_i_Object *(*wrapper)(ID id);
+               };
+
+               struct VStructInfo {
+                       // List of GUIDs of the struct and its superstructs,
+                       // starting with System.VStruct and ending with
+                       // the concrete struct.
+                       
+                       const unsigned long *const *const guids;
+
+                       // Length of inheritance chain; 1 for System.VStruct
+                       
+                       const int chainlen;
+
                        int (*marshall)(GrowableArray<uint8_t> &buf,
                                        GrowableArray<ID> &objlist,
                                        ParamInfoBlock::Segment *segs,
index 8533f52347146f677a142a539cca850b675819e3..636ee9a9a8694930f973912c476b4c369f15d944 100644 (file)
@@ -48,6 +48,8 @@ namespace RunTime {
                return ptr;
        };
 
+//     ::System::Object create_wrapper(
+
        namespace Priv {
                typedef void (*MethodEntry)(ParamInfoBlock *pib);