aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorKenichi Handa2012-08-22 18:05:50 +0900
committerKenichi Handa2012-08-22 18:05:50 +0900
commitfabc1281e9cde34ff9a19d843316d2ceca8647ad (patch)
treef38f13cab3ec6c32ab8ab49ea2e60f64969a0d22 /src/eval.c
parent4ff819d728960bf5e52b72501c606f4bb3fde028 (diff)
parent842e3a93aa3a0826cb4148376e54cd1527d10901 (diff)
downloademacs-fabc1281e9cde34ff9a19d843316d2ceca8647ad.tar.gz
emacs-fabc1281e9cde34ff9a19d843316d2ceca8647ad.zip
merge trunk
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/eval.c b/src/eval.c
index f3f14d60e1c..c41e3f54d4d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -133,7 +133,21 @@ Lisp_Object inhibit_lisp_code;
133static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *); 133static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
134static int interactive_p (int); 134static int interactive_p (int);
135static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args); 135static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args);
136 136
137/* Functions to set Lisp_Object slots of struct specbinding. */
138
139static inline void
140set_specpdl_symbol (Lisp_Object symbol)
141{
142 specpdl_ptr->symbol = symbol;
143}
144
145static inline void
146set_specpdl_old_value (Lisp_Object oldval)
147{
148 specpdl_ptr->old_value = oldval;
149}
150
137void 151void
138init_eval_once (void) 152init_eval_once (void)
139{ 153{
@@ -3136,8 +3150,8 @@ specbind (Lisp_Object symbol, Lisp_Object value)
3136 case SYMBOL_PLAINVAL: 3150 case SYMBOL_PLAINVAL:
3137 /* The most common case is that of a non-constant symbol with a 3151 /* The most common case is that of a non-constant symbol with a
3138 trivial value. Make that as fast as we can. */ 3152 trivial value. Make that as fast as we can. */
3139 specpdl_ptr->symbol = symbol; 3153 set_specpdl_symbol (symbol);
3140 specpdl_ptr->old_value = SYMBOL_VAL (sym); 3154 set_specpdl_old_value (SYMBOL_VAL (sym));
3141 specpdl_ptr->func = NULL; 3155 specpdl_ptr->func = NULL;
3142 ++specpdl_ptr; 3156 ++specpdl_ptr;
3143 if (!sym->constant) 3157 if (!sym->constant)
@@ -3152,7 +3166,7 @@ specbind (Lisp_Object symbol, Lisp_Object value)
3152 { 3166 {
3153 Lisp_Object ovalue = find_symbol_value (symbol); 3167 Lisp_Object ovalue = find_symbol_value (symbol);
3154 specpdl_ptr->func = 0; 3168 specpdl_ptr->func = 0;
3155 specpdl_ptr->old_value = ovalue; 3169 set_specpdl_old_value (ovalue);
3156 3170
3157 eassert (sym->redirect != SYMBOL_LOCALIZED 3171 eassert (sym->redirect != SYMBOL_LOCALIZED
3158 || (EQ (SYMBOL_BLV (sym)->where, 3172 || (EQ (SYMBOL_BLV (sym)->where,
@@ -3169,12 +3183,12 @@ specbind (Lisp_Object symbol, Lisp_Object value)
3169 if (!NILP (Flocal_variable_p (symbol, Qnil))) 3183 if (!NILP (Flocal_variable_p (symbol, Qnil)))
3170 { 3184 {
3171 eassert (sym->redirect != SYMBOL_LOCALIZED 3185 eassert (sym->redirect != SYMBOL_LOCALIZED
3172 || (BLV_FOUND (SYMBOL_BLV (sym)) 3186 || (blv_found (SYMBOL_BLV (sym))
3173 && EQ (cur_buf, SYMBOL_BLV (sym)->where))); 3187 && EQ (cur_buf, SYMBOL_BLV (sym)->where)));
3174 where = cur_buf; 3188 where = cur_buf;
3175 } 3189 }
3176 else if (sym->redirect == SYMBOL_LOCALIZED 3190 else if (sym->redirect == SYMBOL_LOCALIZED
3177 && BLV_FOUND (SYMBOL_BLV (sym))) 3191 && blv_found (SYMBOL_BLV (sym)))
3178 where = SYMBOL_BLV (sym)->where; 3192 where = SYMBOL_BLV (sym)->where;
3179 else 3193 else
3180 where = Qnil; 3194 where = Qnil;
@@ -3186,7 +3200,7 @@ specbind (Lisp_Object symbol, Lisp_Object value)
3186 let_shadows_buffer_binding_p which is itself only used 3200 let_shadows_buffer_binding_p which is itself only used
3187 in set_internal for local_if_set. */ 3201 in set_internal for local_if_set. */
3188 eassert (NILP (where) || EQ (where, cur_buf)); 3202 eassert (NILP (where) || EQ (where, cur_buf));
3189 specpdl_ptr->symbol = Fcons (symbol, Fcons (where, cur_buf)); 3203 set_specpdl_symbol (Fcons (symbol, Fcons (where, cur_buf)));
3190 3204
3191 /* If SYMBOL is a per-buffer variable which doesn't have a 3205 /* If SYMBOL is a per-buffer variable which doesn't have a
3192 buffer-local value here, make the `let' change the global 3206 buffer-local value here, make the `let' change the global
@@ -3203,7 +3217,7 @@ specbind (Lisp_Object symbol, Lisp_Object value)
3203 } 3217 }
3204 } 3218 }
3205 else 3219 else
3206 specpdl_ptr->symbol = symbol; 3220 set_specpdl_symbol (symbol);
3207 3221
3208 specpdl_ptr++; 3222 specpdl_ptr++;
3209 set_internal (symbol, value, Qnil, 1); 3223 set_internal (symbol, value, Qnil, 1);
@@ -3221,8 +3235,8 @@ record_unwind_protect (Lisp_Object (*function) (Lisp_Object), Lisp_Object arg)
3221 if (specpdl_ptr == specpdl + specpdl_size) 3235 if (specpdl_ptr == specpdl + specpdl_size)
3222 grow_specpdl (); 3236 grow_specpdl ();
3223 specpdl_ptr->func = function; 3237 specpdl_ptr->func = function;
3224 specpdl_ptr->symbol = Qnil; 3238 set_specpdl_symbol (Qnil);
3225 specpdl_ptr->old_value = arg; 3239 set_specpdl_old_value (arg);
3226 specpdl_ptr++; 3240 specpdl_ptr++;
3227} 3241}
3228 3242