comparison src/symbols.c @ 80:1ce6082ce73f r20-0b90

Import from CVS: tag r20-0b90
author cvs
date Mon, 13 Aug 2007 09:06:37 +0200
parents 131b0175ea99
children 6a378aca36af
comparison
equal deleted inserted replaced
79:5b0a5bbffab6 80:1ce6082ce73f
474 { 474 {
475 /* #### - I wonder if it would be better to just have a new magic value 475 /* #### - I wonder if it would be better to just have a new magic value
476 type and make nil, t, and all keywords have that same magic 476 type and make nil, t, and all keywords have that same magic
477 constant_symbol value. This test is awfully specific about what is 477 constant_symbol value. This test is awfully specific about what is
478 constant and what isn't. --Stig */ 478 constant and what isn't. --Stig */
479 return (NILP (sym) || EQ (sym, Qt) 479 return
480 || (SYMBOL_VALUE_MAGIC_P (val) 480 NILP (sym) ||
481 && (XSYMBOL_VALUE_MAGIC_TYPE (val) == 481 EQ (sym, Qt) ||
482 SYMVAL_CONST_OBJECT_FORWARD || 482 (SYMBOL_VALUE_MAGIC_P (val) &&
483 XSYMBOL_VALUE_MAGIC_TYPE (val) == 483 (XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_OBJECT_FORWARD ||
484 SYMVAL_CONST_SPECIFIER_FORWARD || 484 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SPECIFIER_FORWARD ||
485 XSYMBOL_VALUE_MAGIC_TYPE (val) == 485 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_FIXNUM_FORWARD ||
486 SYMVAL_CONST_FIXNUM_FORWARD || 486 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_BOOLEAN_FORWARD ||
487 XSYMBOL_VALUE_MAGIC_TYPE (val) == 487 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_CURRENT_BUFFER_FORWARD ||
488 SYMVAL_CONST_BOOLEAN_FORWARD || 488 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SELECTED_CONSOLE_FORWARD))
489 XSYMBOL_VALUE_MAGIC_TYPE (val) ==
490 SYMVAL_CONST_CURRENT_BUFFER_FORWARD ||
491 XSYMBOL_VALUE_MAGIC_TYPE (val) ==
492 SYMVAL_CONST_SELECTED_CONSOLE_FORWARD))
493 #if 0 489 #if 0
494 /* #### - This is disabled until a new magic symbol_value for 490 /* #### - This is disabled until a new magic symbol_value for
495 constants is added */ 491 constants is added */
496 || SYMBOL_IS_KEYWORD (sym) 492 || SYMBOL_IS_KEYWORD (sym)
497 #endif 493 #endif
498 ); 494 ;
499 } 495 }
500 496
501 /* We are setting SYM's value slot (or function slot, if FUNCTION_P is 497 /* We are setting SYM's value slot (or function slot, if FUNCTION_P is
502 non-zero) to NEWVAL. Make sure this is allowed. NEWVAL is only 498 non-zero) to NEWVAL. Make sure this is allowed. NEWVAL is only
503 used in the error message. FOLLOW_PAST_LISP_MAGIC specifies 499 used in the error message. FOLLOW_PAST_LISP_MAGIC specifies
511 Lisp_Object val = 507 Lisp_Object val =
512 (function_p ? XSYMBOL (sym)->function 508 (function_p ? XSYMBOL (sym)->function
513 : fetch_value_maybe_past_magic (sym, follow_past_lisp_magic)); 509 : fetch_value_maybe_past_magic (sym, follow_past_lisp_magic));
514 510
515 if (SYMBOL_VALUE_MAGIC_P (val) && 511 if (SYMBOL_VALUE_MAGIC_P (val) &&
516 XSYMBOL_VALUE_MAGIC_TYPE (val) == 512 XSYMBOL_VALUE_MAGIC_TYPE (val) == SYMVAL_CONST_SPECIFIER_FORWARD)
517 SYMVAL_CONST_SPECIFIER_FORWARD)
518 signal_simple_error ("Use `set-specifier' to change a specifier's value", 513 signal_simple_error ("Use `set-specifier' to change a specifier's value",
519 sym); 514 sym);
520 515
521 if (symbol_is_constant (sym, val)) 516 if (symbol_is_constant (sym, val))
522 { 517 signal_error (Qsetting_constant,
523 signal_error (Qsetting_constant, 518 UNBOUNDP (newval) ? list1 (sym) : list2 (sym, newval));
524 ((UNBOUNDP (newval))
525 ? list1 (sym)
526 : list2 (sym, newval)));
527 }
528 } 519 }
529 520
530 /* Verify that it's ok to make SYM buffer-local. This rejects 521 /* Verify that it's ok to make SYM buffer-local. This rejects
531 constants and default-buffer-local variables. FOLLOW_PAST_LISP_MAGIC 522 constants and default-buffer-local variables. FOLLOW_PAST_LISP_MAGIC
532 specifies whether we delve into symbol-value-lisp-magic objects. 523 specifies whether we delve into symbol-value-lisp-magic objects.