Function: local-variable-p
local-variable-p is a function defined in data.c.
Signature
(local-variable-p VARIABLE &optional BUFFER)
Documentation
Non-nil if VARIABLE has a local binding in buffer BUFFER.
BUFFER defaults to the current buffer.
Also see buffer-local-boundp.
Probably introduced at or before Emacs version 19.29.
Source Code
// Defined in /usr/src/emacs/src/data.c
{
struct buffer *buf = decode_buffer (buffer);
struct Lisp_Symbol *sym;
CHECK_SYMBOL (variable);
sym = XSYMBOL (variable);
start:
switch (sym->u.s.redirect)
{
case SYMBOL_VARALIAS: sym = SYMBOL_ALIAS (sym); goto start;
case SYMBOL_PLAINVAL: return Qnil;
case SYMBOL_LOCALIZED:
{
Lisp_Object tmp;
struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym);
XSETBUFFER (tmp, buf);
XSETSYMBOL (variable, sym); /* Update in case of aliasing. */
if (BASE_EQ (blv->where, tmp)) /* The binding is already loaded. */
return blv_found (blv) ? Qt : Qnil;
else
return NILP (assq_no_quit (variable, BVAR (buf, local_var_alist)))
? Qnil
: Qt;
}
case SYMBOL_FORWARDED:
{
lispfwd valcontents = SYMBOL_FWD (sym);
if (BUFFER_OBJFWDP (valcontents))
{
int offset = XBUFFER_OBJFWD (valcontents)->offset;
int idx = PER_BUFFER_IDX (offset);
if (idx == -1 || PER_BUFFER_VALUE_P (buf, idx))
return Qt;
}
return Qnil;
}
default: emacs_abort ();
}
}