Mercurial > hg > xemacs-beta
comparison src/eval.c @ 173:8eaf7971accc r20-3b13
Import from CVS: tag r20-3b13
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:49:09 +0200 |
parents | 85ec50267440 |
children | 9ad43877534d |
comparison
equal
deleted
inserted
replaced
172:a38aed19690b | 173:8eaf7971accc |
---|---|
287 ((markobj) (b->doc_and_interactive)); | 287 ((markobj) (b->doc_and_interactive)); |
288 #ifdef COMPILED_FUNCTION_ANNOTATION_HACK | 288 #ifdef COMPILED_FUNCTION_ANNOTATION_HACK |
289 ((markobj) (b->annotated)); | 289 ((markobj) (b->annotated)); |
290 #endif | 290 #endif |
291 /* tail-recurse on constants */ | 291 /* tail-recurse on constants */ |
292 return (b->constants); | 292 return b->constants; |
293 } | 293 } |
294 | 294 |
295 static int | 295 static int |
296 compiled_function_equal (Lisp_Object o1, Lisp_Object o2, int depth) | 296 compiled_function_equal (Lisp_Object o1, Lisp_Object o2, int depth) |
297 { | 297 { |
417 do_debug_on_exit (Lisp_Object val) | 417 do_debug_on_exit (Lisp_Object val) |
418 { | 418 { |
419 /* This is falsified by call_debugger */ | 419 /* This is falsified by call_debugger */ |
420 Lisp_Object v = call_debugger (list2 (Qexit, val)); | 420 Lisp_Object v = call_debugger (list2 (Qexit, val)); |
421 | 421 |
422 return ((!UNBOUNDP (v)) ? v : val); | 422 return !UNBOUNDP (v) ? v : val; |
423 } | 423 } |
424 | 424 |
425 /* Called when debug-on-call behavior is called for. Enter the debugger | 425 /* Called when debug-on-call behavior is called for. Enter the debugger |
426 with the appropriate args for this. VAL is either t for a call | 426 with the appropriate args for this. VAL is either t for a call |
427 through `eval' or 'lambda for a call through `funcall'. | 427 through `eval' or 'lambda for a call through `funcall'. |
481 skip_debugger (Lisp_Object conditions, Lisp_Object data) | 481 skip_debugger (Lisp_Object conditions, Lisp_Object data) |
482 { | 482 { |
483 /* This function can GC */ | 483 /* This function can GC */ |
484 Lisp_Object tail; | 484 Lisp_Object tail; |
485 int first_string = 1; | 485 int first_string = 1; |
486 Lisp_Object error_message; | 486 Lisp_Object error_message = Qnil; |
487 | 487 |
488 for (tail = Vdebug_ignored_errors; CONSP (tail); tail = XCDR (tail)) | 488 for (tail = Vdebug_ignored_errors; CONSP (tail); tail = XCDR (tail)) |
489 { | 489 { |
490 if (STRINGP (XCAR (tail))) | 490 if (STRINGP (XCAR (tail))) |
491 { | 491 { |
513 /* Actually generate a backtrace on STREAM. */ | 513 /* Actually generate a backtrace on STREAM. */ |
514 | 514 |
515 static Lisp_Object | 515 static Lisp_Object |
516 backtrace_259 (Lisp_Object stream) | 516 backtrace_259 (Lisp_Object stream) |
517 { | 517 { |
518 return (Fbacktrace (stream, Qt)); | 518 return Fbacktrace (stream, Qt); |
519 } | 519 } |
520 | 520 |
521 /* An error was signalled. Maybe call the debugger, if the `debug-on-error' | 521 /* An error was signalled. Maybe call the debugger, if the `debug-on-error' |
522 etc. variables call for this. CONDITIONS is the list of conditions | 522 etc. variables call for this. CONDITIONS is the list of conditions |
523 associated with the error being signalled. SIG is the actual error | 523 associated with the error being signalled. SIG is the actual error |
629 *debugger_entered = 1; | 629 *debugger_entered = 1; |
630 } | 630 } |
631 | 631 |
632 UNGCPRO; | 632 UNGCPRO; |
633 Vcondition_handlers = all_handlers; | 633 Vcondition_handlers = all_handlers; |
634 return (unbind_to (speccount, val)); | 634 return unbind_to (speccount, val); |
635 } | 635 } |
636 | 636 |
637 | 637 |
638 /**********************************************************************/ | 638 /**********************************************************************/ |
639 /* The basic special forms */ | 639 /* The basic special forms */ |
1354 /* Call FUNC. */ | 1354 /* Call FUNC. */ |
1355 if (SETJMP (c.jmp)) | 1355 if (SETJMP (c.jmp)) |
1356 { | 1356 { |
1357 /* Throw works by a longjmp that comes right here. */ | 1357 /* Throw works by a longjmp that comes right here. */ |
1358 if (threw) *threw = 1; | 1358 if (threw) *threw = 1; |
1359 return (c.val); | 1359 return c.val; |
1360 } | 1360 } |
1361 c.val = (*func) (arg); | 1361 c.val = (*func) (arg); |
1362 if (threw) *threw = 0; | 1362 if (threw) *threw = 0; |
1363 catchlist = c.next; | 1363 catchlist = c.next; |
1364 return (c.val); | 1364 return c.val; |
1365 } | 1365 } |
1366 | 1366 |
1367 | 1367 |
1368 /* Unwind the specbind, catch, and handler stacks back to CATCH, and | 1368 /* Unwind the specbind, catch, and handler stacks back to CATCH, and |
1369 jump to that CATCH, returning VALUE as the value of that catch. | 1369 jump to that CATCH, returning VALUE as the value of that catch. |
1551 | 1551 |
1552 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */ | 1552 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */ |
1553 Vcondition_handlers = victim->cdr; | 1553 Vcondition_handlers = victim->cdr; |
1554 | 1554 |
1555 free_cons (victim); | 1555 free_cons (victim); |
1556 return (Qnil); | 1556 return Qnil; |
1557 } | 1557 } |
1558 | 1558 |
1559 static Lisp_Object | 1559 static Lisp_Object |
1560 condition_case_unwind (Lisp_Object loser) | 1560 condition_case_unwind (Lisp_Object loser) |
1561 { | 1561 { |
1568 victim = XCONS (loser); | 1568 victim = XCONS (loser); |
1569 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */ | 1569 if (EQ (loser, Vcondition_handlers)) /* may have been rebound to some tail */ |
1570 Vcondition_handlers = victim->cdr; | 1570 Vcondition_handlers = victim->cdr; |
1571 | 1571 |
1572 free_cons (victim); | 1572 free_cons (victim); |
1573 return (Qnil); | 1573 return Qnil; |
1574 } | 1574 } |
1575 | 1575 |
1576 /* Split out from condition_case_3 so that primitive C callers | 1576 /* Split out from condition_case_3 so that primitive C callers |
1577 don't have to cons up a lisp handler form to be evaluated. */ | 1577 don't have to cons up a lisp handler form to be evaluated. */ |
1578 | 1578 |
1662 c.next = catchlist; | 1662 c.next = catchlist; |
1663 | 1663 |
1664 if (SETJMP (c.jmp)) | 1664 if (SETJMP (c.jmp)) |
1665 { | 1665 { |
1666 /* throw does ungcpro, etc */ | 1666 /* throw does ungcpro, etc */ |
1667 return ((*hfun) (c.val, harg)); | 1667 return (*hfun) (c.val, harg); |
1668 } | 1668 } |
1669 | 1669 |
1670 record_unwind_protect (condition_case_unwind, c.tag); | 1670 record_unwind_protect (condition_case_unwind, c.tag); |
1671 | 1671 |
1672 catchlist = &c; | 1672 catchlist = &c; |
1690 have this code here, and it doesn't cost anything, so I'm leaving it.*/ | 1690 have this code here, and it doesn't cost anything, so I'm leaving it.*/ |
1691 UNGCPRO; | 1691 UNGCPRO; |
1692 catchlist = c.next; | 1692 catchlist = c.next; |
1693 Vcondition_handlers = XCDR (c.tag); | 1693 Vcondition_handlers = XCDR (c.tag); |
1694 | 1694 |
1695 return (unbind_to (speccount, c.val)); | 1695 return unbind_to (speccount, c.val); |
1696 } | 1696 } |
1697 | 1697 |
1698 static Lisp_Object | 1698 static Lisp_Object |
1699 run_condition_case_handlers (Lisp_Object val, Lisp_Object var) | 1699 run_condition_case_handlers (Lisp_Object val, Lisp_Object var) |
1700 { | 1700 { |
1711 return val; | 1711 return val; |
1712 #else | 1712 #else |
1713 int speccount; | 1713 int speccount; |
1714 | 1714 |
1715 if (NILP (var)) | 1715 if (NILP (var)) |
1716 return (Fprogn (Fcdr (val))); /* tailcall */ | 1716 return Fprogn (Fcdr (val)); /* tailcall */ |
1717 | 1717 |
1718 speccount = specpdl_depth_counter; | 1718 speccount = specpdl_depth_counter; |
1719 specbind (var, Fcar (val)); | 1719 specbind (var, Fcar (val)); |
1720 val = Fprogn (Fcdr (val)); | 1720 val = Fprogn (Fcdr (val)); |
1721 return unbind_to (speccount, val); | 1721 return unbind_to (speccount, val); |
1822 record_unwind_protect (condition_bind_unwind, tem); | 1822 record_unwind_protect (condition_bind_unwind, tem); |
1823 Vcondition_handlers = tem; | 1823 Vcondition_handlers = tem; |
1824 | 1824 |
1825 /* Caller should have GC-protected args */ | 1825 /* Caller should have GC-protected args */ |
1826 tem = Ffuncall (nargs - 1, args + 1); | 1826 tem = Ffuncall (nargs - 1, args + 1); |
1827 return (unbind_to (speccount, tem)); | 1827 return unbind_to (speccount, tem); |
1828 } | 1828 } |
1829 | 1829 |
1830 static int | 1830 static int |
1831 condition_type_p (Lisp_Object type, Lisp_Object conditions) | 1831 condition_type_p (Lisp_Object type, Lisp_Object conditions) |
1832 { | 1832 { |
1833 if (EQ (type, Qt)) | 1833 if (EQ (type, Qt)) |
1834 /* (condition-case c # (t c)) catches -all- signals | 1834 /* (condition-case c # (t c)) catches -all- signals |
1835 * Use with caution! */ | 1835 * Use with caution! */ |
1836 return (1); | 1836 return 1; |
1837 else | 1837 else |
1838 { | 1838 { |
1839 if (SYMBOLP (type)) | 1839 if (SYMBOLP (type)) |
1840 { | 1840 { |
1841 return (!NILP (Fmemq (type, conditions))); | 1841 return !NILP (Fmemq (type, conditions)); |
1842 } | 1842 } |
1843 else if (CONSP (type)) | 1843 else if (CONSP (type)) |
1844 { | 1844 { |
1845 while (CONSP (type)) | 1845 while (CONSP (type)) |
1846 { | 1846 { |
1861 #if 1 /* RMS Claims: */ | 1861 #if 1 /* RMS Claims: */ |
1862 /* Most callers are not prepared to handle gc if this | 1862 /* Most callers are not prepared to handle gc if this |
1863 returns. So, since this feature is not very useful, | 1863 returns. So, since this feature is not very useful, |
1864 take it out. */ | 1864 take it out. */ |
1865 /* Have called debugger; return value to signaller */ | 1865 /* Have called debugger; return value to signaller */ |
1866 return (value); | 1866 return value; |
1867 #else /* But the reality is that that stinks, because: */ | 1867 #else /* But the reality is that that stinks, because: */ |
1868 /* GACK!!! Really want some way for debug-on-quit errors | 1868 /* GACK!!! Really want some way for debug-on-quit errors |
1869 to be continuable!! */ | 1869 to be continuable!! */ |
1870 error ("Returning a value from an error is no longer supported"); | 1870 error ("Returning a value from an error is no longer supported"); |
1871 #endif | 1871 #endif |
1953 NNUNGCPRO; | 1953 NNUNGCPRO; |
1954 } | 1954 } |
1955 NUNGCPRO; | 1955 NUNGCPRO; |
1956 #if 0 | 1956 #if 0 |
1957 if (!EQ (tem, Qsignal)) | 1957 if (!EQ (tem, Qsignal)) |
1958 return (return_from_signal (tem)); | 1958 return return_from_signal (tem); |
1959 #endif | 1959 #endif |
1960 /* If handler didn't throw, try another handler */ | 1960 /* If handler didn't throw, try another handler */ |
1961 Vcondition_handlers = all_handlers; | 1961 Vcondition_handlers = all_handlers; |
1962 } | 1962 } |
1963 | 1963 |
1966 /* t is used by handlers for all conditions, set up by C code. | 1966 /* t is used by handlers for all conditions, set up by C code. |
1967 * debugger is not called even if debug_on_error */ | 1967 * debugger is not called even if debug_on_error */ |
1968 else if (EQ (handler_data, Qt)) | 1968 else if (EQ (handler_data, Qt)) |
1969 { | 1969 { |
1970 UNGCPRO; | 1970 UNGCPRO; |
1971 return (Fthrow (handlers, Fcons (sig, data))); | 1971 return Fthrow (handlers, Fcons (sig, data)); |
1972 } | 1972 } |
1973 /* `error' is used similarly to the way `t' is used, but in | 1973 /* `error' is used similarly to the way `t' is used, but in |
1974 addition it invokes the debugger if debug_on_error. | 1974 addition it invokes the debugger if debug_on_error. |
1975 This is normally used for the outer command-loop error | 1975 This is normally used for the outer command-loop error |
1976 handler. */ | 1976 handler. */ |
1981 &stack_trace_displayed, | 1981 &stack_trace_displayed, |
1982 &debugger_entered); | 1982 &debugger_entered); |
1983 | 1983 |
1984 UNGCPRO; | 1984 UNGCPRO; |
1985 if (!UNBOUNDP (tem)) | 1985 if (!UNBOUNDP (tem)) |
1986 return (return_from_signal (tem)); | 1986 return return_from_signal (tem); |
1987 | 1987 |
1988 tem = Fcons (sig, data); | 1988 tem = Fcons (sig, data); |
1989 return (Fthrow (handlers, tem)); | 1989 return Fthrow (handlers, tem); |
1990 } | 1990 } |
1991 else | 1991 else |
1992 { | 1992 { |
1993 /* handler established by real (Lisp) condition-case */ | 1993 /* handler established by real (Lisp) condition-case */ |
1994 Lisp_Object h; | 1994 Lisp_Object h; |
2004 outer_handlers, 1, | 2004 outer_handlers, 1, |
2005 &stack_trace_displayed, | 2005 &stack_trace_displayed, |
2006 &debugger_entered); | 2006 &debugger_entered); |
2007 UNGCPRO; | 2007 UNGCPRO; |
2008 if (!UNBOUNDP (tem)) | 2008 if (!UNBOUNDP (tem)) |
2009 return (return_from_signal (tem)); | 2009 return return_from_signal (tem); |
2010 | 2010 |
2011 /* Doesn't return */ | 2011 /* Doesn't return */ |
2012 tem = Fcons (Fcons (sig, data), Fcdr (clause)); | 2012 tem = Fcons (Fcons (sig, data), Fcdr (clause)); |
2013 return (Fthrow (handlers, tem)); | 2013 return Fthrow (handlers, tem); |
2014 } | 2014 } |
2015 } | 2015 } |
2016 } | 2016 } |
2017 } | 2017 } |
2018 | 2018 |
2088 | 2088 |
2089 static Lisp_Object | 2089 static Lisp_Object |
2090 call_with_suspended_errors_1 (Lisp_Object opaque_arg) | 2090 call_with_suspended_errors_1 (Lisp_Object opaque_arg) |
2091 { | 2091 { |
2092 Lisp_Object *kludgy_args = (Lisp_Object *) get_opaque_ptr (opaque_arg); | 2092 Lisp_Object *kludgy_args = (Lisp_Object *) get_opaque_ptr (opaque_arg); |
2093 return (primitive_funcall ((lisp_fn_t) get_opaque_ptr (kludgy_args[0]), | 2093 return primitive_funcall ((lisp_fn_t) get_opaque_ptr (kludgy_args[0]), |
2094 XINT (kludgy_args[1]), kludgy_args + 2)); | 2094 XINT (kludgy_args[1]), kludgy_args + 2); |
2095 } | 2095 } |
2096 | 2096 |
2097 static Lisp_Object | 2097 static Lisp_Object |
2098 restore_current_warning_class (Lisp_Object warning_class) | 2098 restore_current_warning_class (Lisp_Object warning_class) |
2099 { | 2099 { |
2510 /* note that this is continuable. */ | 2510 /* note that this is continuable. */ |
2511 Fsignal (Qquit, Qnil); | 2511 Fsignal (Qquit, Qnil); |
2512 } | 2512 } |
2513 | 2513 |
2514 | 2514 |
2515 DEFUN ("strerror", Fstrerror, 1, 1, 0, /* | |
2516 Return the error string associated with integer ERRNUM. | |
2517 This function is an interface to strerror(3). | |
2518 The returned string may or may not be translated. | |
2519 */ | |
2520 (errnum)) | |
2521 { | |
2522 CHECK_INT (errnum); | |
2523 return build_ext_string (strerror (XINT (errnum)), FORMAT_NATIVE); | |
2524 } | |
2525 | |
2526 | |
2527 /**********************************************************************/ | 2515 /**********************************************************************/ |
2528 /* User commands */ | 2516 /* User commands */ |
2529 /**********************************************************************/ | 2517 /**********************************************************************/ |
2530 | 2518 |
2531 DEFUN ("commandp", Fcommandp, 1, 1, 0, /* | 2519 DEFUN ("commandp", Fcommandp, 1, 1, 0, /* |
2629 PUSH_BACKTRACE (backtrace); | 2617 PUSH_BACKTRACE (backtrace); |
2630 | 2618 |
2631 final = Fcall_interactively (cmd, record, keys); | 2619 final = Fcall_interactively (cmd, record, keys); |
2632 | 2620 |
2633 POP_BACKTRACE (backtrace); | 2621 POP_BACKTRACE (backtrace); |
2634 return (final); | 2622 return final; |
2635 } | 2623 } |
2636 else if (STRINGP (final) || VECTORP (final)) | 2624 else if (STRINGP (final) || VECTORP (final)) |
2637 { | 2625 { |
2638 return Fexecute_kbd_macro (final, prefixarg); | 2626 return Fexecute_kbd_macro (final, prefixarg); |
2639 } | 2627 } |
3017 lisp_eval_depth--; | 3005 lisp_eval_depth--; |
3018 if (backtrace.debug_on_exit) | 3006 if (backtrace.debug_on_exit) |
3019 val = do_debug_on_exit (val); | 3007 val = do_debug_on_exit (val); |
3020 POP_BACKTRACE (backtrace); | 3008 POP_BACKTRACE (backtrace); |
3021 UNGCPRO; | 3009 UNGCPRO; |
3022 return (val); | 3010 return val; |
3023 } | 3011 } |
3024 | 3012 |
3025 else | 3013 else |
3026 { | 3014 { |
3027 struct gcpro gcpro1, gcpro2, gcpro3; | 3015 struct gcpro gcpro1, gcpro2, gcpro3; |
3076 | 3064 |
3077 lisp_eval_depth--; | 3065 lisp_eval_depth--; |
3078 if (backtrace.debug_on_exit) | 3066 if (backtrace.debug_on_exit) |
3079 val = do_debug_on_exit (val); | 3067 val = do_debug_on_exit (val); |
3080 POP_BACKTRACE (backtrace); | 3068 POP_BACKTRACE (backtrace); |
3081 return (val); | 3069 return val; |
3082 } | 3070 } |
3083 | 3071 |
3084 | 3072 |
3085 Lisp_Object | 3073 Lisp_Object |
3086 funcall_recording_as (Lisp_Object recorded_as, int nargs, | 3074 funcall_recording_as (Lisp_Object recorded_as, int nargs, |
3514 /* Do the debug-on-exit now, while arg_vector still exists. */ | 3502 /* Do the debug-on-exit now, while arg_vector still exists. */ |
3515 if (backtrace_list->debug_on_exit) | 3503 if (backtrace_list->debug_on_exit) |
3516 tem = do_debug_on_exit (tem); | 3504 tem = do_debug_on_exit (tem); |
3517 /* Don't do it again when we return to eval. */ | 3505 /* Don't do it again when we return to eval. */ |
3518 backtrace_list->debug_on_exit = 0; | 3506 backtrace_list->debug_on_exit = 0; |
3519 return (tem); | 3507 return tem; |
3520 } | 3508 } |
3521 | 3509 |
3522 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR | 3510 /* Apply a Lisp function FUN to the NARGS evaluated arguments in ARG_VECTOR |
3523 and return the result of evaluation. | 3511 and return the result of evaluation. |
3524 FUN must be either a lambda-expression or a compiled-code object. */ | 3512 FUN must be either a lambda-expression or a compiled-code object. */ |
3895 /* This function can GC */ | 3883 /* This function can GC */ |
3896 struct gcpro gcpro1; | 3884 struct gcpro gcpro1; |
3897 Lisp_Object args[2]; | 3885 Lisp_Object args[2]; |
3898 | 3886 |
3899 if (NILP (arg)) | 3887 if (NILP (arg)) |
3900 return (Ffuncall (1, &fn)); | 3888 return Ffuncall (1, &fn); |
3901 GCPRO1 (args[0]); | 3889 GCPRO1 (args[0]); |
3902 gcpro1.nvars = 2; | 3890 gcpro1.nvars = 2; |
3903 args[0] = fn; | 3891 args[0] = fn; |
3904 args[1] = arg; | 3892 args[1] = arg; |
3905 RETURN_UNGCPRO (Fapply (2, args)); | 3893 RETURN_UNGCPRO (Fapply (2, args)); |
4443 | 4431 |
4444 if (SYMBOLP (function)) | 4432 if (SYMBOLP (function)) |
4445 { | 4433 { |
4446 tem = XSYMBOL (function)->function; | 4434 tem = XSYMBOL (function)->function; |
4447 if (NILP (tem) || UNBOUNDP (tem)) | 4435 if (NILP (tem) || UNBOUNDP (tem)) |
4448 return (Qnil); | 4436 return Qnil; |
4449 } | 4437 } |
4450 | 4438 |
4451 GCPRO2 (opaque, function); | 4439 GCPRO2 (opaque, function); |
4452 specbind (Qinhibit_quit, Qt); | 4440 specbind (Qinhibit_quit, Qt); |
4453 /* gc_currently_forbidden = 1; Currently no reason to do this; */ | 4441 /* gc_currently_forbidden = 1; Currently no reason to do this; */ |
4491 | 4479 |
4492 if (SYMBOLP (function)) | 4480 if (SYMBOLP (function)) |
4493 { | 4481 { |
4494 tem = XSYMBOL (function)->function; | 4482 tem = XSYMBOL (function)->function; |
4495 if (NILP (tem) || UNBOUNDP (tem)) | 4483 if (NILP (tem) || UNBOUNDP (tem)) |
4496 return (Qnil); | 4484 return Qnil; |
4497 } | 4485 } |
4498 | 4486 |
4499 GCPRO4 (cons, opaque, function, object); | 4487 GCPRO4 (cons, opaque, function, object); |
4500 | 4488 |
4501 specbind (Qinhibit_quit, Qt); | 4489 specbind (Qinhibit_quit, Qt); |
4528 | 4516 |
4529 if (SYMBOLP (function)) | 4517 if (SYMBOLP (function)) |
4530 { | 4518 { |
4531 tem = XSYMBOL (function)->function; | 4519 tem = XSYMBOL (function)->function; |
4532 if (NILP (tem) || UNBOUNDP (tem)) | 4520 if (NILP (tem) || UNBOUNDP (tem)) |
4533 return (Qnil); | 4521 return Qnil; |
4534 } | 4522 } |
4535 | 4523 |
4536 GCPRO5 (cons, opaque, function, object1, object2); | 4524 GCPRO5 (cons, opaque, function, object1, object2); |
4537 specbind (Qinhibit_quit, Qt); | 4525 specbind (Qinhibit_quit, Qt); |
4538 /* gc_currently_forbidden = 1; Currently no reason to do this; */ | 4526 /* gc_currently_forbidden = 1; Currently no reason to do this; */ |
4617 Fset_buffer (buf); | 4605 Fset_buffer (buf); |
4618 Fset (symbol, ovalue); | 4606 Fset (symbol, ovalue); |
4619 Fset_buffer (current); | 4607 Fset_buffer (current); |
4620 UNGCPRO; | 4608 UNGCPRO; |
4621 } | 4609 } |
4622 return (symbol); | 4610 return symbol; |
4623 } | 4611 } |
4624 | 4612 |
4625 static Lisp_Object | 4613 static Lisp_Object |
4626 specbind_unwind_wasnt_local (Lisp_Object buffer) | 4614 specbind_unwind_wasnt_local (Lisp_Object buffer) |
4627 { | 4615 { |
4650 Fset_buffer (buffer); | 4638 Fset_buffer (buffer); |
4651 Fkill_local_variable (symbol); | 4639 Fkill_local_variable (symbol); |
4652 Fset_buffer (current); | 4640 Fset_buffer (current); |
4653 UNGCPRO; | 4641 UNGCPRO; |
4654 } | 4642 } |
4655 return (symbol); | 4643 return symbol; |
4656 } | 4644 } |
4657 | 4645 |
4658 | 4646 |
4659 /* Don't want to include buffer.h just for this */ | 4647 /* Don't want to include buffer.h just for this */ |
4660 extern struct buffer *current_buffer; | 4648 extern struct buffer *current_buffer; |
4757 if (quitf) | 4745 if (quitf) |
4758 Vquit_flag = Qt; | 4746 Vquit_flag = Qt; |
4759 | 4747 |
4760 UNGCPRO; | 4748 UNGCPRO; |
4761 | 4749 |
4762 return (value); | 4750 return value; |
4763 } | 4751 } |
4764 | 4752 |
4765 | 4753 |
4766 int | 4754 int |
4767 specpdl_depth (void) | 4755 specpdl_depth (void) |
4768 { | 4756 { |
4769 return (specpdl_depth_counter); | 4757 return specpdl_depth_counter; |
4770 } | 4758 } |
4771 | 4759 |
4772 | 4760 |
4773 /* Get the value of symbol's global binding, even if that binding is | 4761 /* Get the value of symbol's global binding, even if that binding is |
4774 not now dynamically visible. May return Qunbound or magic values. */ | 4762 not now dynamically visible. May return Qunbound or magic values. */ |
5120 DEFSUBR (Funwind_protect); | 5108 DEFSUBR (Funwind_protect); |
5121 DEFSUBR (Fcondition_case); | 5109 DEFSUBR (Fcondition_case); |
5122 DEFSUBR (Fcall_with_condition_handler); | 5110 DEFSUBR (Fcall_with_condition_handler); |
5123 DEFSUBR (Fsignal); | 5111 DEFSUBR (Fsignal); |
5124 DEFSUBR (Finteractive_p); | 5112 DEFSUBR (Finteractive_p); |
5125 DEFSUBR (Fstrerror); | |
5126 DEFSUBR (Fcommandp); | 5113 DEFSUBR (Fcommandp); |
5127 DEFSUBR (Fcommand_execute); | 5114 DEFSUBR (Fcommand_execute); |
5128 DEFSUBR (Fautoload); | 5115 DEFSUBR (Fautoload); |
5129 DEFSUBR (Feval); | 5116 DEFSUBR (Feval); |
5130 DEFSUBR (Fapply); | 5117 DEFSUBR (Fapply); |