Commit 5c5aad07 authored by Karl Heuer's avatar Karl Heuer
Browse files

(keyword_symbols_constant_flag): New variable.

(syms_of_data): Set up Lisp variable.
(set_internal): Obey it and give error for :-symbols.
(Fmakunbound): Likewise.
parent 0dfb1b75
......@@ -68,6 +68,10 @@ Boston, MA 02111-1307, USA. */
extern double atof ();
#endif /* !atof */
/* Nonzero means it is an error to set a symbol whose name starts with
colon. */
int keyword_symbols_constant_flag;
Lisp_Object Qnil, Qt, Qquote, Qlambda, Qsubr, Qunbound;
Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
Lisp_Object Qerror, Qquit, Qwrong_type_argument, Qargs_out_of_range;
......@@ -611,7 +615,9 @@ DEFUN ("makunbound", Fmakunbound, Smakunbound, 1, 1, 0, "Make SYMBOL's value be
register Lisp_Object symbol;
{
CHECK_SYMBOL (symbol, 0);
if (NILP (symbol) || EQ (symbol, Qt))
if (NILP (symbol) || EQ (symbol, Qt)
|| (XSYMBOL (symbol)->name->data[0] == ':'
&& keyword_symbols_constant_flag))
return Fsignal (Qsetting_constant, Fcons (symbol, Qnil));
Fset (symbol, Qunbound);
return symbol;
......@@ -960,7 +966,9 @@ set_internal (symbol, newval, bindflag)
register Lisp_Object valcontents, tem1, current_alist_element;
CHECK_SYMBOL (symbol, 0);
if (NILP (symbol) || EQ (symbol, Qt))
if (NILP (symbol) || EQ (symbol, Qt)
|| (XSYMBOL (symbol)->name->data[0] == ':'
&& keyword_symbols_constant_flag))
return Fsignal (Qsetting_constant, Fcons (symbol, Qnil));
valcontents = XSYMBOL (symbol)->value;
......@@ -2833,6 +2841,11 @@ syms_of_data ()
staticpro (&Qchar_table);
staticpro (&Qbool_vector);
DEFVAR_BOOL ("keyword-symbols-constant-flag", &keyword_symbols_constant_flag,
"Non-nil means it is an error to set a keyword symbol.\n\
A keyword symbol is a symbol whose name starts with a colon (`:').");
keyword_symbols_constant_flag = 1;
defsubr (&Seq);
defsubr (&Snull);
defsubr (&Stype_of);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment