#include "commands.h"
#include "keyboard.h"
#include "dispextern.h"
+#include "frame.h" /* For XFRAME. */
#if HAVE_X_WINDOWS
#include "xterm.h"
so that old-code that affects n_a before the aliasing is setup
still works. */
if (NILP (Fboundp (base_variable)))
- set_internal (base_variable, find_symbol_value (new_alias), NULL, 1);
+ set_internal (base_variable, find_symbol_value (new_alias), Qnil, 1);
{
struct specbinding *p;
if (!sym->constant)
SET_SYMBOL_VAL (sym, value);
else
- set_internal (symbol, value, 0, 1);
+ set_internal (symbol, value, Qnil, 1);
break;
}
case SYMBOL_LOCALIZED: case SYMBOL_FORWARDED:
specpdl_ptr->symbol = symbol;
specpdl_ptr++;
- set_internal (symbol, value, 0, 1);
+ set_internal (symbol, value, Qnil, 1);
break;
}
default: abort ();
if (NILP (where))
Fset_default (symbol, this_binding.old_value);
+ /* If `where' is non-nil, reset the value in the appropriate
+ local binding, but only if that binding still exists. */
else if (BUFFERP (where))
- if (!NILP (Flocal_variable_p (symbol, where)))
- set_internal (symbol, this_binding.old_value, XBUFFER (where), 1);
- /* else if (!NILP (Fbuffer_live_p (where)))
- error ("Unbinding local %s to global!", symbol); */
- else
- ;
- else
- set_internal (symbol, this_binding.old_value, NULL, 1);
+ {
+ if (BUFFERP (where)
+ ? !NILP (Flocal_variable_p (symbol, where))
+ : !NILP (Fassq (symbol, XFRAME (where)->param_alist)))
+ set_internal (symbol, this_binding.old_value, where, 1);
+ }
}
+ /* If variable has a trivial value (no forwarding), we can
+ just set it. No need to check for constant symbols here,
+ since that was already done by specbind. */
+ else if (XSYMBOL (this_binding.symbol)->redirect == SYMBOL_PLAINVAL)
+ SET_SYMBOL_VAL (XSYMBOL (this_binding.symbol),
+ this_binding.old_value);
else
- {
- /* If variable has a trivial value (no forwarding), we can
- just set it. No need to check for constant symbols here,
- since that was already done by specbind. */
- if (XSYMBOL (this_binding.symbol)->redirect == SYMBOL_PLAINVAL)
- SET_SYMBOL_VAL (XSYMBOL (this_binding.symbol),
- this_binding.old_value);
- else
- set_internal (this_binding.symbol, this_binding.old_value, 0, 1);
- }
+ /* NOTE: we only ever come here if make_local_foo was used for
+ the first time on this var within this let. */
+ Fset_default (this_binding.symbol, this_binding.old_value);
}
if (NILP (Vquit_flag) && !NILP (quitf))