2
0

tw1658.pp 965 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. { Source provided for Free Pascal Bug Report 1658 }
  2. { Submitted by "Luis Castedo" on 2001-10-28 }
  3. { e-mail: [email protected] }
  4. program Buggy;
  5. uses
  6. erroru,
  7. Objects, Strings;
  8. type
  9. TMyStream = object(TDosStream)
  10. m_fAutoDelete: Boolean;
  11. destructor Done; virtual;
  12. end;
  13. PMyStream = ^TMyStream;
  14. destructor TMyStream.Done;
  15. var
  16. strFName: String;
  17. F : File;
  18. begin
  19. strFName := StrPas(FName);
  20. inherited Done;
  21. if not m_fAutoDelete then
  22. Exit;
  23. Assign(F, strFName);
  24. Erase(F);
  25. end;
  26. // Global vars
  27. var
  28. pTempStream: PMyStream;
  29. mem : sizeint;
  30. f : file;
  31. begin
  32. DoMem(mem);
  33. pTempStream := nil;
  34. pTempStream := New(PMyStream, Init('tw1658.tmp', stCreate));
  35. if not Assigned(pTempStream) then
  36. Halt(1);
  37. pTempStream^.m_fAutoDelete := False;
  38. Dispose(pTempStream, Done);
  39. pTempStream := nil;
  40. if DoMem(mem)<>0 then
  41. begin
  42. Writeln('Memory lost');
  43. Halt(1);
  44. end;
  45. Assign(f,'tw1658.tmp');
  46. Erase(f);
  47. end.