tjmp.pp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. { Tests the system unit routines for longjmp and setjmp }
  2. { By Carl Eric Codere - Copyright (c) 2002 }
  3. program tjmp;
  4. var
  5. global_envbuf: jmp_buf;
  6. type
  7. tmyobject = object
  8. envbuf : jmp_buf;
  9. j : integer;
  10. jmpresult : integer;
  11. constructor init;
  12. destructor done;
  13. procedure testlongjmp;virtual;
  14. procedure testsetjmp;virtual;
  15. end;
  16. pderivedobject = ^tderivedobject;
  17. tderivedobject = object(tmyobject)
  18. procedure testlongjmp; virtual;
  19. procedure testsetjmp; virtual;
  20. end;
  21. constructor tmyobject.init;
  22. begin
  23. end;
  24. destructor tmyobject.done;
  25. begin
  26. end;
  27. procedure tmyobject.testlongjmp;
  28. begin
  29. end;
  30. procedure tmyobject.testsetjmp;
  31. begin
  32. end;
  33. procedure tderivedobject.testlongjmp;
  34. begin
  35. longjmp(envbuf, 255);
  36. end;
  37. procedure tderivedobject.testsetjmp;
  38. var
  39. i : integer;
  40. begin
  41. j:=0;
  42. jmpresult:=setjmp(envbuf);
  43. case jmpresult of
  44. 0 :
  45. begin
  46. for i:=0 to 255 do
  47. begin
  48. j:=j + 13;
  49. if j = 13 then
  50. self.testlongjmp;
  51. end;
  52. end;
  53. 255 : WriteLn('Sucess!');
  54. else
  55. begin
  56. WriteLn('Failure!');
  57. halt(1);
  58. end
  59. end;
  60. end;
  61. procedure testlongjmp;
  62. begin
  63. longjmp(global_envbuf, 255);
  64. end;
  65. procedure testsetjmp;
  66. var
  67. i, j : integer;
  68. jmpresult : integer;
  69. begin
  70. j:=0;
  71. jmpresult:=setjmp(global_envbuf);
  72. case jmpresult of
  73. 0 :
  74. begin
  75. for i:=0 to 255 do
  76. begin
  77. j:=j + 13;
  78. if j = 13 then
  79. testlongjmp;
  80. end;
  81. end;
  82. 255 : WriteLn('Sucess!');
  83. else
  84. begin
  85. WriteLn('Failure!');
  86. halt(1);
  87. end
  88. end;
  89. end;
  90. var
  91. pobj : pderivedobject;
  92. begin
  93. Write('Testing setjmp/longjmp simple case...');
  94. testsetjmp;
  95. Write('Testing setjmp/longjmp in virtual method...');
  96. pobj:=new(pderivedobject, init);
  97. pobj^.testsetjmp;
  98. dispose(pobj, done);
  99. end.