bug0141.pp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. program bug;
  2. uses objpas;
  3. type
  4. //
  5. TObjectAB = class;
  6. TObjectABCD = class;
  7. TObjectABCDEF = class;
  8. // }
  9. TObjectAB = class(tobject)
  10. a, b: integer;
  11. end ;
  12. TObjectABCD = class(TObjectAB)
  13. c, d: integer;
  14. end ;
  15. TObjectABCDEF = class(TObjectABCD)
  16. e, f: integer;
  17. end ;
  18. var
  19. a, b, c: TObject;
  20. begin
  21. a := TObjectAB.Create;
  22. WriteLn(a.InstanceSize, ' Should be: 12');
  23. b := TObjectABCD.Create;
  24. WriteLn(b.InstanceSize, ' Should be: 20');
  25. c := TObjectABCDEF.Create;
  26. WriteLn(c.InstanceSize, ' Should be: 28');
  27. end.
  28. {
  29. Here are the VMT tables from the assembler file:
  30. .globl VMT_TD$_TOBJECTAB
  31. VMT_TD$_TOBJECTAB:
  32. .long 12,-12
  33. .long VMT_OBJPAS$_TOBJECT
  34. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  35. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  36. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  37. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  38. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  39. .globl VMT_TD$_TOBJECTABCD
  40. VMT_TD$_TOBJECTABCD:
  41. .long 12,-12
  42. .long VMT_TD$_TOBJECTAB
  43. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  44. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  45. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  46. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  47. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  48. .globl VMT_TD$_TOBJECTABCDEF
  49. VMT_TD$_TOBJECTABCDEF:
  50. .long 12,-12
  51. .long VMT_TD$_TOBJECTABCD
  52. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  53. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  54. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  55. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  56. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  57. }