]> git.buserror.net Git - polintos/scott/priv.git/commitdiff
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
       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
    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
 
       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.
 
       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
    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"
        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";
 
        
             << indent << "};\n";
 
        
index 2391b37980b9e1476e15b6a94e008d918fff415c..ca7a2f960e14c4b6dd2e38864293e483b92af321 100644 (file)
@@ -18,6 +18,13 @@ void CPPFile::output_ifaceinfo(Interface *iface)
 {
        extra_newline();
 
 {
        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"
        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;
                }
                
                struct IFaceInfo;
+               typedef uint32_t ID;
 
                struct IFaceTable {
                        const IFaceInfo *info;
                        const ptrdiff_t offset;
                };
                
 
                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[];
                union GUID {
                        unsigned char c[16];
                        unsigned long l[];
@@ -345,7 +334,6 @@ namespace System {
                                  guid1[3] == guid2[3])));
                }
                
                                  guid1[3] == guid2[3])));
                }
                
-               typedef uint32_t ID;
                struct ParamInfoBlock {
                        uint32_t buffer_size;
                        uint32_t copy_size;
                struct ParamInfoBlock {
                        uint32_t buffer_size;
                        uint32_t copy_size;
@@ -398,6 +386,23 @@ namespace System {
 
                struct IFaceInfo {
                        const GUID *guid;
 
                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,
                        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;
        };
 
                return ptr;
        };
 
+//     ::System::Object create_wrapper(
+
        namespace Priv {
                typedef void (*MethodEntry)(ParamInfoBlock *pib);
 
        namespace Priv {
                typedef void (*MethodEntry)(ParamInfoBlock *pib);