val = eval_sub (Fcar (XCDR (elt)));
}
- if (!NILP (lexenv) && SYMBOLP (var)
- && !XSYMBOL (var)->u.s.declared_special
+ var = maybe_remove_pos_from_symbol (var);
+ if (!NILP (lexenv) && BARE_SYMBOL_P (var)
+ && !XBARE_SYMBOL (var)->u.s.declared_special
&& NILP (Fmemq (var, Vinternal_interpreter_environment)))
/* Lexically bind VAR by adding it to the interpreter's binding
alist. */
varlist = XCAR (args);
for (argnum = 0; argnum < nvars && CONSP (varlist); argnum++)
{
- Lisp_Object var;
-
elt = XCAR (varlist);
varlist = XCDR (varlist);
- var = SYMBOLP (elt) ? elt : Fcar (elt);
+ Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt
+ : Fcar (elt));
tem = temps[argnum];
if (!NILP (lexenv) && SYMBOLP (var)
struct handler *oldhandlerlist = handlerlist;
ptrdiff_t CACHEABLE clausenb = 0;
+ var = maybe_remove_pos_from_symbol (var);
CHECK_SYMBOL (var);
Lisp_Object success_handler = Qnil;
lexenv = Fcons (Fcons (next, arg), lexenv);
else
/* Dynamically bind NEXT. */
- specbind (next, arg);
+ specbind (maybe_remove_pos_from_symbol (next), arg);
previous_rest = false;
}
}
void
specbind (Lisp_Object symbol, Lisp_Object value)
{
- struct Lisp_Symbol *sym;
-
- CHECK_SYMBOL (symbol);
- sym = XSYMBOL (symbol);
+ /* The caller must ensure that the SYMBOL argument is a bare symbol. */
+ struct Lisp_Symbol *sym = XBARE_SYMBOL (symbol);
start:
switch (sym->u.s.redirect)