This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
if (SPECPDL_INDEX () + 100 > max_specpdl_size)
max_specpdl_size = SPECPDL_INDEX () + 100;
-#ifdef HAVE_X_WINDOWS
+#ifdef HAVE_WINDOW_SYSTEM
if (display_hourglass_p)
cancel_hourglass ();
#endif
and the result should be a form to be evaluated instead of the original.
DECL is a declaration, optional, which can specify how to indent
-calls to this macro and how Edebug should handle it. It looks like this:
+calls to this macro, how Edebug should handle it, and which argument
+should be treated as documentation. It looks like this:
(declare SPECS...)
The elements can look like this:
(indent INDENT)
(debug DEBUG)
Set NAME's `edebug-form-spec' property to DEBUG. (This is
equivalent to writing a `def-edebug-spec' for the macro.)
+
+ (doc-string ELT)
+ Set NAME's `doc-string-elt' property to ELT.
+
usage: (defmacro NAME ARGLIST [DOCSTRING] [DECL] BODY...) */)
(args)
Lisp_Object args;
doc: /* Make NEW-ALIAS a variable alias for symbol BASE-VARIABLE.
Aliased variables always have the same value; setting one sets the other.
Third arg DOCSTRING, if non-nil, is documentation for NEW-ALIAS. If it is
- omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
- or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
- itself an alias.
+omitted or nil, NEW-ALIAS gets the documentation string of BASE-VARIABLE,
+or of the variable at the end of the chain of aliases, if BASE-VARIABLE is
+itself an alias. If NEW-ALIAS is bound, and BASE-VARIABLE is not,
+then the value of BASE-VARIABLE is set to that of NEW-ALIAS.
The return value is BASE-VARIABLE. */)
(new_alias, base_variable, docstring)
Lisp_Object new_alias, base_variable, docstring;
error ("Cannot make a constant an alias");
sym = XSYMBOL (new_alias);
+ /* http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg00834.html
+ If n_a is bound, but b_v is not, set the value of b_v to n_a.
+ This is for the sake of define-obsolete-variable-alias and user
+ customizations. */
+ if (NILP (Fboundp (base_variable)) && !NILP (Fboundp (new_alias)))
+ XSYMBOL(base_variable)->value = sym->value;
sym->indirect_variable = 1;
sym->value = base_variable;
sym->constant = SYMBOL_CONSTANT_P (base_variable);
return Qnil;
}
+static Lisp_Object
+lisp_indirect_variable (Lisp_Object sym)
+{
+ XSETSYMBOL (sym, indirect_variable (XSYMBOL (sym)));
+ return sym;
+}
+
DEFUN ("user-variable-p", Fuser_variable_p, Suser_variable_p, 1, 1, 0,
doc: /* Return t if VARIABLE is intended to be set and modified by users.
\(The alternative is a variable used internally in a Lisp program.)
/* If indirect and there's an alias loop, don't check anything else. */
if (XSYMBOL (variable)->indirect_variable
- && NILP (internal_condition_case_1 (indirect_variable, variable,
+ && NILP (internal_condition_case_1 (lisp_indirect_variable, variable,
Qt, user_variable_p_eh)))
return Qnil;
#if 0 /* rms: I don't know why this was here,
but it is surely wrong for an error that is handled. */
-#ifdef HAVE_X_WINDOWS
+#ifdef HAVE_WINDOW_SYSTEM
if (display_hourglass_p)
cancel_hourglass ();
#endif
else
error ("Invalid byte code");
}
- AREF (object, COMPILED_BYTECODE) = XCAR (tem);
- AREF (object, COMPILED_CONSTANTS) = XCDR (tem);
+ ASET (object, COMPILED_BYTECODE, XCAR (tem));
+ ASET (object, COMPILED_CONSTANTS, XCDR (tem));
}
return object;
}