mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 08:19:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
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$$$$
 | 
						|
} |