tb0122.pp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. { %OPT= -S2 }
  2. { Old file: tbs0141.pp }
  3. { Wrong Class sizes when using forwardly defined classes. OK 0.99.6 }
  4. program bug;
  5. { uses objpas; not with -S2 !! }
  6. type
  7. //
  8. TObjectAB = class;
  9. TObjectABCD = class;
  10. TObjectABCDEF = class;
  11. // }
  12. TObjectAB = class(tobject)
  13. a, b: integer;
  14. end ;
  15. TObjectABCD = class(TObjectAB)
  16. c, d: integer;
  17. end ;
  18. TObjectABCDEF = class(TObjectABCD)
  19. e, f: integer;
  20. end ;
  21. var
  22. a, b, c: TObject;
  23. begin
  24. a := TObjectAB.Create;
  25. WriteLn(a.InstanceSize, ' Should be: 12');
  26. if a.InstanceSize + SizeOf(integer)*2 <> TObjectABCD.InstanceSize then
  27. Halt(1);
  28. b := TObjectABCD.Create;
  29. if b.InstanceSize + SizeOf(integer)*2 <> TObjectABCDEF.InstanceSize then
  30. Halt(1);
  31. WriteLn(b.InstanceSize, ' Should be: 20');
  32. c := TObjectABCDEF.Create;
  33. WriteLn(c.InstanceSize, ' Should be: 28');
  34. end.
  35. {
  36. Here are the VMT tables from the assembler file:
  37. .globl VMT_TD$_TOBJECTAB
  38. VMT_TD$_TOBJECTAB:
  39. .long 12,-12
  40. .long VMT_OBJPAS$_TOBJECT
  41. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  42. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  43. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  44. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  45. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  46. .globl VMT_TD$_TOBJECTABCD
  47. VMT_TD$_TOBJECTABCD:
  48. .long 12,-12
  49. .long VMT_TD$_TOBJECTAB
  50. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  51. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  52. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  53. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  54. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  55. .globl VMT_TD$_TOBJECTABCDEF
  56. VMT_TD$_TOBJECTABCDEF:
  57. .long 12,-12
  58. .long VMT_TD$_TOBJECTABCD
  59. .long _OBJPAS$$_$$_TOBJECT_DESTROY
  60. .long _OBJPAS$$_$$_TOBJECT_NEWINSTANCE
  61. .long _OBJPAS$$_$$_TOBJECT_FREEINSTANCE
  62. .long _OBJPAS$$_$$_TOBJECT_SAFECALLEXCEPTION$TOBJECT$POINTER
  63. .long _OBJPAS$$_$$_TOBJECT_DEFAULTHANDLER$$$$
  64. }