# HG changeset patch # User Karl Heuer # Date 892061780 0 # Node ID 276b22459b980dc2a177c9099dff7dbef491febc # Parent 25b02305130b241005ef15bbd864c5fc6a902129 (keyword_symbols_constant_flag): New variable. (syms_of_data): Set up Lisp variable. (set_internal): Obey it and give error for :-symbols. (Fmakunbound): Likewise. diff -r 25b02305130b -r 276b22459b98 src/data.c --- a/src/data.c Wed Apr 08 18:53:13 1998 +0000 +++ b/src/data.c Wed Apr 08 18:56:20 1998 +0000 @@ -68,6 +68,10 @@ 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 @@ 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 @@ 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 @@ 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);