@@ -1672,6 +1672,12 @@ HSaveError ReadManagedPool(Stream *in, int32_t /*cmp_ver*/, soff_t cmp_size, con
16721672 return HSaveError::None ();
16731673}
16741674
1675+ enum RTTISaveVersion
1676+ {
1677+ kRTTISvgVer_Initial = 4000000 ,
1678+ kRTTISvgVer_400_22 = 4000022 ,
1679+ };
1680+
16751681HSaveError WriteRTTI (Stream *out)
16761682{
16771683 // Write the minimal necessary RTTI data, enough to resolve types when restoring a save;
@@ -1695,6 +1701,9 @@ HSaveError WriteRTTI(Stream *out)
16951701 out->WriteInt32 (type.parent_id );
16961702 out->WriteInt32 (type.flags );
16971703 out->WriteInt32 (type.size );
1704+ // kRTTISvgVer_400_22
1705+ out->WriteInt32 (type.base_id );
1706+ out->WriteInt32 (type.dim_num );
16981707 // Managed ptrs offsets
16991708 const auto man_offs = helper->GetManagedOffsetsForType (type.this_id );
17001709 out->WriteInt32 (man_offs.second - man_offs.first );
@@ -1725,7 +1734,14 @@ HSaveError ReadRTTI(Stream *in, int32_t cmp_ver, soff_t cmp_size, const Preserve
17251734 uint32_t parent_id = in->ReadInt32 ();
17261735 uint32_t flags = in->ReadInt32 ();
17271736 uint32_t size = in->ReadInt32 ();
1728- rb.AddType (buf, i, loc_id, parent_id, flags | RTTI::kType_Generated , size);
1737+ uint32_t base_id = 0u ;
1738+ uint32_t dim_num = 0u ;
1739+ if (cmp_ver >= kRTTISvgVer_400_22 )
1740+ {
1741+ base_id = in->ReadInt32 ();
1742+ dim_num = in->ReadInt32 ();
1743+ }
1744+ rb.AddType (buf, i, loc_id, base_id, parent_id, flags | RTTI::kType_Generated , size, dim_num);
17291745 // Read managed ptrs offsets and generate pseudo-fields for these
17301746 uint32_t num_offs = in->ReadInt32 ();
17311747 for (uint32_t oi = 0 ; oi < num_offs; ++oi)
@@ -1940,8 +1956,8 @@ ComponentHandler ComponentHandlers[] =
19401956 },
19411957 {
19421958 " RTTI" ,
1943- 4000000 ,
1944- 4000000 ,
1959+ kRTTISvgVer_400_22 ,
1960+ kRTTISvgVer_Initial ,
19451961 kSaveCmp_Scripts , // must go along with scripts
19461962 WriteRTTI,
19471963 ReadRTTI,
0 commit comments