comparison src/eval.c @ 5470:0af042a0c116

Merge with trunk.
author Mats Lidell <matsl@xemacs.org>
date Mon, 07 Feb 2011 21:22:17 +0100
parents 8d29f1c4bb98 39304a35b6b3
children b0d87f92e60b
comparison
equal deleted inserted replaced
5469:2a8a04f73c15 5470:0af042a0c116
1798 throw_level = 0; 1798 throw_level = 0;
1799 #endif 1799 #endif
1800 LONGJMP (c->jmp, 1); 1800 LONGJMP (c->jmp, 1);
1801 } 1801 }
1802 1802
1803 DECLARE_DOESNT_RETURN (throw_or_bomb_out (Lisp_Object, Lisp_Object, int, 1803 DECLARE_DOESNT_RETURN (throw_or_bomb_out_unsafe (Lisp_Object, Lisp_Object, int,
1804 Lisp_Object, Lisp_Object)); 1804 Lisp_Object, Lisp_Object));
1805 1805
1806 DOESNT_RETURN 1806 DOESNT_RETURN
1807 throw_or_bomb_out (Lisp_Object tag, Lisp_Object val, int bomb_out_p, 1807 throw_or_bomb_out_unsafe (Lisp_Object tag, Lisp_Object val, int bomb_out_p,
1808 Lisp_Object sig, Lisp_Object data) 1808 Lisp_Object sig, Lisp_Object data)
1809 { 1809 {
1810 #ifdef DEFEND_AGAINST_THROW_RECURSION
1811 /* die if we recurse more than is reasonable */
1812 assert (++throw_level <= 20);
1813 #endif
1814
1815 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
1816 check_proper_critical_section_nonlocal_exit_protection ();
1817 #endif
1818
1819 /* If bomb_out_p is t, this is being called from Fsignal as a 1810 /* If bomb_out_p is t, this is being called from Fsignal as a
1820 "last resort" when there is no handler for this error and 1811 "last resort" when there is no handler for this error and
1821 the debugger couldn't be invoked, so we are throwing to 1812 the debugger couldn't be invoked, so we are throwing to
1822 `top-level'. If this tag doesn't exist (happens during the 1813 `top-level'. If this tag doesn't exist (happens during the
1823 initialization stages) we would get in an infinite recursive 1814 initialization stages) we would get in an infinite recursive
1852 if (!bomb_out_p) 1843 if (!bomb_out_p)
1853 tag = Fsignal (Qno_catch, list2 (tag, val)); 1844 tag = Fsignal (Qno_catch, list2 (tag, val));
1854 else 1845 else
1855 call1 (Qreally_early_error_handler, Fcons (sig, data)); 1846 call1 (Qreally_early_error_handler, Fcons (sig, data));
1856 } 1847 }
1848 }
1849
1850 DECLARE_DOESNT_RETURN (throw_or_bomb_out (Lisp_Object, Lisp_Object, int,
1851 Lisp_Object, Lisp_Object));
1852
1853 DOESNT_RETURN
1854 throw_or_bomb_out (Lisp_Object tag, Lisp_Object val, int bomb_out_p,
1855 Lisp_Object sig, Lisp_Object data)
1856 {
1857 #ifdef DEFEND_AGAINST_THROW_RECURSION
1858 /* die if we recurse more than is reasonable */
1859 assert (++throw_level <= 20);
1860 #endif
1861
1862 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
1863 check_proper_critical_section_nonlocal_exit_protection ();
1864 #endif
1865 throw_or_bomb_out_unsafe (tag, val, bomb_out_p, sig, data);
1857 } 1866 }
1858 1867
1859 /* See above, where CATCHLIST is defined, for a description of how 1868 /* See above, where CATCHLIST is defined, for a description of how
1860 Fthrow() works. 1869 Fthrow() works.
1861 1870