union GUID {
unsigned char c[16];
- unsigned long l[];
+ unsigned long l[16 / sizeof(unsigned long)];
};
uintptr_t downcast(::System::_i_Object *obj, const GUID *new_guid);
uint32_t reserved[3]; // must be zero
};
+ struct MarshCtx {
+ GrowableArray<uint8_t, ORBMM> &buf;
+ GrowableArray<ID, ORBMM> &objlist;
+ GrowableArray<NewObject, ORBMM> &newobjlist;
+ ParamInfoBlock::Segment *segs;
+ int nsegs;
+ };
+
struct VStructInfo {
// List of GUIDs of the struct and its superstructs,
// starting with System.VStruct and ending with
const int chainlen;
- int (*marshall)(GrowableArray<uint8_t, ORBMM> &buf,
- GrowableArray<ID, ORBMM> &objlist,
- GrowableArray<NewObject, ORBMM> &newobjlist,
- ParamInfoBlock::Segment *segs,
- int nsegs);
- void (*unmarshall)(Array<uint8_t, ORBMM> buf,
- Array< ::System::_i_Object *, ORBMM> objlist,
- ParamInfoBlock::Segment *segs,
- int nsegs);
+ int (*marshall)(MarshCtx &ctx);
+ void (*unmarshall)(MarshCtx &ctx);
};
-
+
namespace Priv {
// Return the caller's PC. It'd be nice if GCC had a builtin for
// the current PC, so that a simple relocation could be used rather
return false;
#endif
}
+
}
};
}