diff options
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 53 |
1 files changed, 4 insertions, 49 deletions
diff --git a/src/eval.c b/src/eval.c index f8874ddd559..947e28a2e9c 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -167,6 +167,8 @@ Lisp_Object Vmacro_declaration_function; | |||
| 167 | 167 | ||
| 168 | static Lisp_Object funcall_lambda (Lisp_Object, int, Lisp_Object*); | 168 | static Lisp_Object funcall_lambda (Lisp_Object, int, Lisp_Object*); |
| 169 | static void unwind_to_catch (struct catchtag *, Lisp_Object) NO_RETURN; | 169 | static void unwind_to_catch (struct catchtag *, Lisp_Object) NO_RETURN; |
| 170 | static int interactive_p (int); | ||
| 171 | static Lisp_Object apply_lambda (Lisp_Object, Lisp_Object, int); | ||
| 170 | 172 | ||
| 171 | void | 173 | void |
| 172 | init_eval_once (void) | 174 | init_eval_once (void) |
| @@ -581,7 +583,7 @@ way to do this), or via (not (or executing-kbd-macro noninteractive)). */) | |||
| 581 | EXCLUDE_SUBRS_P non-zero means always return 0 if the function | 583 | EXCLUDE_SUBRS_P non-zero means always return 0 if the function |
| 582 | called is a built-in. */ | 584 | called is a built-in. */ |
| 583 | 585 | ||
| 584 | int | 586 | static int |
| 585 | interactive_p (int exclude_subrs_p) | 587 | interactive_p (int exclude_subrs_p) |
| 586 | { | 588 | { |
| 587 | struct backtrace *btp; | 589 | struct backtrace *btp; |
| @@ -2685,53 +2687,6 @@ run_hook_with_args (int nargs, Lisp_Object *args, enum run_hooks_condition cond) | |||
| 2685 | } | 2687 | } |
| 2686 | } | 2688 | } |
| 2687 | 2689 | ||
| 2688 | /* Run a hook symbol ARGS[0], but use FUNLIST instead of the actual | ||
| 2689 | present value of that symbol. | ||
| 2690 | Call each element of FUNLIST, | ||
| 2691 | passing each of them the rest of ARGS. | ||
| 2692 | The caller (or its caller, etc) must gcpro all of ARGS, | ||
| 2693 | except that it isn't necessary to gcpro ARGS[0]. */ | ||
| 2694 | |||
| 2695 | Lisp_Object | ||
| 2696 | run_hook_list_with_args (Lisp_Object funlist, int nargs, Lisp_Object *args) | ||
| 2697 | { | ||
| 2698 | Lisp_Object sym; | ||
| 2699 | Lisp_Object val; | ||
| 2700 | Lisp_Object globals; | ||
| 2701 | struct gcpro gcpro1, gcpro2, gcpro3; | ||
| 2702 | |||
| 2703 | sym = args[0]; | ||
| 2704 | globals = Qnil; | ||
| 2705 | GCPRO3 (sym, val, globals); | ||
| 2706 | |||
| 2707 | for (val = funlist; CONSP (val); val = XCDR (val)) | ||
| 2708 | { | ||
| 2709 | if (EQ (XCAR (val), Qt)) | ||
| 2710 | { | ||
| 2711 | /* t indicates this hook has a local binding; | ||
| 2712 | it means to run the global binding too. */ | ||
| 2713 | |||
| 2714 | for (globals = Fdefault_value (sym); | ||
| 2715 | CONSP (globals); | ||
| 2716 | globals = XCDR (globals)) | ||
| 2717 | { | ||
| 2718 | args[0] = XCAR (globals); | ||
| 2719 | /* In a global value, t should not occur. If it does, we | ||
| 2720 | must ignore it to avoid an endless loop. */ | ||
| 2721 | if (!EQ (args[0], Qt)) | ||
| 2722 | Ffuncall (nargs, args); | ||
| 2723 | } | ||
| 2724 | } | ||
| 2725 | else | ||
| 2726 | { | ||
| 2727 | args[0] = XCAR (val); | ||
| 2728 | Ffuncall (nargs, args); | ||
| 2729 | } | ||
| 2730 | } | ||
| 2731 | UNGCPRO; | ||
| 2732 | return Qnil; | ||
| 2733 | } | ||
| 2734 | |||
| 2735 | /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */ | 2690 | /* Run the hook HOOK, giving each function the two args ARG1 and ARG2. */ |
| 2736 | 2691 | ||
| 2737 | void | 2692 | void |
| @@ -3063,7 +3018,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) | |||
| 3063 | return val; | 3018 | return val; |
| 3064 | } | 3019 | } |
| 3065 | 3020 | ||
| 3066 | Lisp_Object | 3021 | static Lisp_Object |
| 3067 | apply_lambda (Lisp_Object fun, Lisp_Object args, int eval_flag) | 3022 | apply_lambda (Lisp_Object fun, Lisp_Object args, int eval_flag) |
| 3068 | { | 3023 | { |
| 3069 | Lisp_Object args_left; | 3024 | Lisp_Object args_left; |