|
@@ -0,0 +1,62 @@
|
|
|
|
+program bug;
|
|
|
|
+
|
|
|
|
+uses objpas;
|
|
|
|
+type
|
|
|
|
+ //
|
|
|
|
+ TObjectAB = class;
|
|
|
|
+ TObjectABCD = class;
|
|
|
|
+ TObjectABCDEF = class;
|
|
|
|
+ // }
|
|
|
|
+ TObjectAB = class(tobject)
|
|
|
|
+ a, b: integer;
|
|
|
|
+ end ;
|
|
|
|
+ TObjectABCD = class(TObjectAB)
|
|
|
|
+ c, d: integer;
|
|
|
|
+ end ;
|
|
|
|
+ TObjectABCDEF = class(TObjectABCD)
|
|
|
|
+ e, f: integer;
|
|
|
|
+ end ;
|
|
|
|
+
|
|
|
|
+var
|
|
|
|
+ a, b, c: TObject;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+a := TObjectAB.Create;
|
|
|
|
+WriteLn(a.InstanceSize, ' Should be: 12');
|
|
|
|
+b := TObjectABCD.Create;
|
|
|
|
+WriteLn(b.InstanceSize, ' Should be: 20');
|
|
|
|
+c := TObjectABCDEF.Create;
|
|
|
|
+WriteLn(c.InstanceSize, ' Should be: 28');
|
|
|
|
+end.
|
|
|
|
+
|
|
|
|
+{
|
|
|
|
+Here are the VMT tables from the assembler file:
|
|
|
|
+
|
|
|
|
+.globl VMT_TD$_TOBJECTAB
|
|
|
|
+VMT_TD$_TOBJECTAB:
|
|
|
|
+ .long 12,-12
|
|
|
|
+ .long VMT_OBJPAS$_TOBJECT
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DESTROY
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
|
|
|
|
+.globl VMT_TD$_TOBJECTABCD
|
|
|
|
+VMT_TD$_TOBJECTABCD:
|
|
|
|
+ .long 12,-12
|
|
|
|
+ .long VMT_TD$_TOBJECTAB
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DESTROY
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
|
|
|
|
+.globl VMT_TD$_TOBJECTABCDEF
|
|
|
|
+VMT_TD$_TOBJECTABCDEF:
|
|
|
|
+ .long 12,-12
|
|
|
|
+ .long VMT_TD$_TOBJECTABCD
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DESTROY
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
|
|
|
|
+ .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
|
|
|
|
+}
|