Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ( óÔÒÕËÔÕÒÉÒÏ×ÁÎÎÁÑ ÏÂÒÁÂÏÔËÁ ÉÓËÌÀÞÅÎÉÊ.
  2.   Copyright [C] 1992-1999 A.Cherezov ac@forth.org
  3.   ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ 16-ÒÁÚÒÑÄÎÏÇÏ × 32-ÒÁÚÒÑÄÎÙÊ ËÏÄ - 1995-96ÇÇ
  4.   òÅ×ÉÚÉÑ - ÓÅÎÔÑÂÒØ 1999
  5. )
  6.  
  7. ' NOOP ->VECT FATAL-HANDLER
  8. \ ÅÓÌÉ × ÒÅÚÕÌØÔÁÔÅ ÓÂÏÅ× ÐÏ×ÒÅÄÉÌÏÓØ ÉÓÈÏÄÎÏÅ ÚÎÁÞÅÎÉÅ HANDLER,
  9. \ ÕÓÔÁÎÏ×ÌÅÎÎÏÅ ÐÒÉ ×ÈÏÄÅ × ÐÏÔÏË/ÚÁÄÁÞÕ ÉÌÉ ÐÏÚÄÎÅÅ,
  10. \ ÔÏ ×ÙÐÏÌÎÉÔÓÑ ÜÔÏÔ ÏÂÒÁÂÏÔÞÉË FATAL-HANDLER
  11.  
  12. : (THROW)
  13. \ áÎÁÌÏÇ THROW ÎÏ × ÓÌÕÞÁÅ 0 ÐÏÓÌÅÄÎÉÊ ÎÅ ÕÂÉÒÁÅÔÓÑ ÓÏ ÓÔÅËÁ
  14. \ äÌÑ ÏÐÔÉÍÉÚÁÔÏÒÁ.
  15.  DUP
  16.  IF
  17.     DUP 109 = IF DROP EXIT THEN \ broken pipe - ÏÂÙÞÎÏ ÎÅ ÏÛÉÂËÁ, Á ËÏÎÅà ×ÈÏÄÎÏÇÏ ÐÏÔÏËÁ × CGI
  18.     HANDLER @
  19.     DUP
  20.     IF RP!
  21.        R> HANDLER !
  22.        R> SWAP >R
  23.        SP! DROP R>
  24.     ELSE DROP FATAL-HANDLER THEN
  25.  THEN
  26. ;
  27.  
  28. : THROW
  29. \ åÓÌÉ ÌÀÂÙÅ ÂÉÔÙ n ÎÅÎÕÌÅ×ÙÅ, ×ÚÑÔØ ×ÅÒÈÎÉÊ ËÁÄÒ ÉÓËÌÀÞÅÎÉÊ ÓÏ ÓÔÅËÁ
  30. \ ÉÓËÌÀÞÅÎÉÊ, ×ËÌÀÞÁÑ ×ÓÅ ÎÁ ÓÔÅËÅ ×ÏÚ×ÒÁÔÏ× ÎÁÄ ÜÔÉÍ ËÁÄÒÏÍ. úÁÔÅÍ
  31. \ ×ÏÓÓÔÁÎÏ×ÉÔØ ÓÐÅÃÉÆÉËÁÃÉÉ ×ÈÏÄÎÏÇÏ ÐÏÔÏËÁ, ËÏÔÏÒÙÊ ÉÓÐÏÌØÚÏ×ÁÌÓÑ ÐÅÒÅÄ
  32. \ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ CATCH, É ÕÓÔÁÎÏ×ÉÔØ ÇÌÕÂÉÎÙ ×ÓÅÈ ÓÔÅËÏ×, ÏÐÒÅÄÅÌÅÎÎÙÈ
  33. \ × ÜÔÏÍ óÔÁÎÄÁÒÔÅ, × ÔÏ ÓÏÓÔÏÑÎÉÅ, ËÏÔÏÒÏÅ ÂÙÌÏ ÓÏÈÒÁÎÅÎÏ × ËÁÄÒÅ
  34. \ ÉÓËÌÀÞÅÎÉÊ (i - ÜÔÏ ÔÏ ÖÅ ÞÉÓÌÏ, ÞÔÏ É i ×Ï ×ÈÏÄÎÙÈ ÁÒÇÕÍÅÎÔÁÈ
  35. \ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ CATCH), ÐÏÌÏÖÉÔØ n ÎÁ ×ÅÒÛÉÎÕ ÓÔÅËÁ ÄÁÎÎÙÈ É ÐÅÒÅÄÁÔØ
  36. \ ÕÐÒÁ×ÌÅÎÉÅ × ÔÏÞËÕ ÓÒÁÚÕ ÐÏÓÌÅ CATCH, ËÏÔÏÒÏÅ ÐÏÌÏÖÉÌÏ ÜÔÏÔ ËÁÄÒ
  37. \ ÉÓËÌÀÞÅÎÉÊ.
  38. \ åÓÌÉ ×ÅÒÛÉÎÁ ÓÔÅËÁ ÎÅ ÎÏÌØ, É ÎÁ ÓÔÅËÅ ÉÓËÌÀÞÅÎÉÊ ÅÓÔØ ËÁÄÒ
  39. \ ÉÓËÌÀÞÅÎÉÊ, ÔÏ ÐÏ×ÅÄÅÎÉÅ ÓÌÅÄÕÀÝÅÅ:
  40. \  åÓÌÉ n=-1, ×ÙÐÏÌÎÉÔØ ÆÕÎËÃÉÀ ABORT (×ÅÒÓÉÀ ABORT ÉÚ ÓÌÏ× CORE),
  41. \  ÎÅ ×Ù×ÏÄÑ ÓÏÏÂÝÅÎÉÊ.
  42. \  åÓÌÉ n=-2, ×ÙÐÏÌÎÉÔØ ÆÕÎËÃÉÀ ABORT" (×ÅÒÓÉÀ ABORT" ÉÚ ÓÌÏ× CORE),
  43. \  ×Ù×ÏÄÑ ÓÉÍ×ÏÌÙ ccc, ÁÓÓÏÃÉÉÒÏ×ÁÎÎÙÅ Ó ABORT", ÇÅÎÅÒÉÒÕÀÝÉÍ THROW.
  44. \  éÎÁÞÅ ÓÉÓÔÅÍÁ ÍÏÖÅÔ ×Ù×ÅÓÔÉ ÎÁ ÄÉÓÐÌÅÊ ÚÁ×ÉÓÑÝÅÅ ÏÔ ÒÅÁÌÉÚÁÃÉÉ
  45. \  ÓÏÏÂÝÅÎÉÅ Ï ÕÓÌÏ×ÉÉ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÍ THROW Ó ËÏÄÏÍ n. úÁÔÅÍ
  46. \  ÓÉÓÔÅÍÁ ×ÙÐÏÌÎÉÔ ÆÕÎËÃÉÀ ABORT (×ÅÒÓÉÀ ABORT ÉÚ CORE).
  47.  ?DUP
  48.  IF HANDLER @
  49.     ?DUP
  50.     IF RP!
  51.        R> HANDLER !
  52.        R> SWAP >R
  53.        SP! DROP R>
  54.     ELSE FATAL-HANDLER THEN
  55.  THEN
  56. ;
  57.  
  58. VECT <SET-EXC-HANDLER> \ ÕÓÔÁÎÏ×ÉÔØ ÏÂÒÁÂÏÔÞÉË ÁÐÐÁÒÁÔÎÙÈ ÉÓËÌÀÞÅÎÉÊ
  59.  
  60. : CATCH ( i*x xt -- j*x 0 | i*x n ) \ 94 EXCEPTION
  61. \ ðÏÌÏÖÉÔØ ÎÁ ÓÔÅË ÉÓËÌÀÞÅÎÉÊ ËÁÄÒ ÐÅÒÅÈ×ÁÔÁ ÉÓËÌÀÞÉÔÅÌØÎÙÈ ÓÉÔÕÁÃÉÊ
  62. \ É ×ÙÐÏÌÎÉÔØ ÔÏËÅÎ xt (ËÁË ÐÏ EXECUTE) ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏÂÙ ÕÐÒÁ×ÌÅÎÉÅ
  63. \ ÍÏÇÌÏ ÂÙÔØ ÐÅÒÅÄÁÎÏ × ÔÏÞËÕ ÓÒÁÚÕ ÐÏÓÌÅ CATCH, ÅÓÌÉ ×Ï ×ÒÅÍÑ ×ÙÐÏÌÎÅÎÉÑ
  64. \ xt ×ÙÐÏÌÎÑÅÔÓÑ THROW.
  65. \ åÓÌÉ ×ÙÐÏÌÎÅÎÉÅ xt ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÏÒÍÁÌØÎÏ (Ô.Å. ËÁÄÒ ÉÓËÌÀÞÅÎÉÊ,
  66. \ ÐÏÌÏÖÅÎÎÙÊ ÎÁ ÓÔÅË ÓÌÏ×ÏÍ CATCH ÎÅ ÂÙÌ ×ÚÑÔ ×ÙÐÏÌÎÅÎÉÅÍ THROW),
  67. \ ×ÚÑÔØ ËÁÄÒ ÉÓËÌÀÞÅÎÉÊ É ×ÅÒÎÕÔØ ÎÏÌØ ÎÁ ×ÅÒÛÉÎÕ ÓÔÅËÁ ÄÁÎÎÙÈ,
  68. \ ÏÓÔÁÌØÎÙÅ ÜÌÅÍÅÎÔÙ ÓÔÅËÁ ×ÏÚ×ÒÁÝÁÀÔÓÑ xt EXECUTE. éÎÁÞÅ ÏÓÔÁÔÏË
  69. \ ÓÅÍÁÎÔÉËÉ ×ÙÐÏÌÎÅÎÉÑ ÄÁÅÔÓÑ THROW.
  70. \ <SET-EXC-HANDLER>
  71.  SP@ >R  HANDLER @ >R
  72.  RP@ HANDLER !
  73.  EXECUTE
  74.  R> HANDLER !
  75.  RDROP
  76.  0
  77. ;
  78. : ABORT  \ 94 EXCEPTION EXT
  79. \ òÁÓÛÉÒÉÔØ ÓÅÍÁÔÉËÕ CORE ABORT ÞÔÏÂÙ ÂÙÌÏ:
  80.  ( i*x -- ) ( R: j*x -- )
  81. \ ÷ÙÐÏÌÎÉÔØ ÆÕÎËÃÉÀ -1 THROW
  82.  -1 THROW
  83. ;
  84.