@@ -230,8 +230,10 @@ def WriteVtable(self):
230
230
vtKey .append (elem )
231
231
232
232
vtKey = tuple (vtKey )
233
- vt2Offset = self .vtables .get (vtKey )
234
- if vt2Offset is None :
233
+ # calculate the size of the object
234
+ objectSize = UOffsetTFlags .py_type (objectOffset - self .objectEnd )
235
+ vt2Offset , vt2Size = self .vtables .get (vtKey ) or (None , None )
236
+ if vt2Offset is None or vt2Size != objectSize :
235
237
# Did not find a vtable, so write this one to the buffer.
236
238
237
239
# Write out the current vtable in reverse , because
@@ -259,7 +261,6 @@ def WriteVtable(self):
259
261
# The two metadata fields are written last.
260
262
261
263
# First, store the object bytesize:
262
- objectSize = UOffsetTFlags .py_type (objectOffset - self .objectEnd )
263
264
self .PrependVOffsetT (VOffsetTFlags .py_type (objectSize ))
264
265
265
266
# Second, store the vtable bytesize:
@@ -275,7 +276,7 @@ def WriteVtable(self):
275
276
276
277
# Finally, store this vtable in memory for future
277
278
# deduplication:
278
- self .vtables [vtKey ] = self .Offset ()
279
+ self .vtables [vtKey ] = ( self .Offset (), objectSize )
279
280
else :
280
281
# Found a duplicate vtable.
281
282
objectStart = SOffsetTFlags .py_type (len (self .Bytes ) - objectOffset )
0 commit comments