Mercurial > emacs
changeset 21434:276b22459b98
(keyword_symbols_constant_flag): New variable.
(syms_of_data): Set up Lisp variable.
(set_internal): Obey it and give error for :-symbols.
(Fmakunbound): Likewise.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Wed, 08 Apr 1998 18:56:20 +0000 |
parents | 25b02305130b |
children | 41fa600fadc4 |
files | src/data.c |
diffstat | 1 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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);