aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorKarl Heuer1994-10-12 05:15:21 +0000
committerKarl Heuer1994-10-12 05:15:21 +0000
commit46b2ac21f0e626fb50c20148330f7766ebb7ed80 (patch)
tree40353b543a55dddc5351b879cde4fd3c996a8d16 /src/data.c
parent54dfdeb04f8dacacc3810d90503b4cfa63298948 (diff)
downloademacs-46b2ac21f0e626fb50c20148330f7766ebb7ed80.tar.gz
emacs-46b2ac21f0e626fb50c20148330f7766ebb7ed80.zip
(do_symval_forwarding, store_symval_forwarding, find_symbol_value, Fset,
default_value, Fset_default, Fkill_local_variable): Use the new substructure. (store_symval_forwarding): Change args to buffer_slot_type_mismatch.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c121
1 files changed, 64 insertions, 57 deletions
diff --git a/src/data.c b/src/data.c
index 1453bafb056..545756c18a1 100644
--- a/src/data.c
+++ b/src/data.c
@@ -626,27 +626,24 @@ do_symval_forwarding (valcontents)
626 register Lisp_Object valcontents; 626 register Lisp_Object valcontents;
627{ 627{
628 register Lisp_Object val; 628 register Lisp_Object val;
629#ifdef SWITCH_ENUM_BUG 629 int offset;
630 switch ((int) XTYPE (valcontents)) 630 if (MISCP (valcontents))
631#else 631 switch (XMISC (valcontents)->type)
632 switch (XTYPE (valcontents)) 632 {
633#endif 633 case Lisp_Misc_Intfwd:
634 { 634 XSETINT (val, *XINTFWD (valcontents)->intvar);
635 case Lisp_Intfwd: 635 return val;
636 XSETINT (val, *XINTPTR (valcontents));
637 return val;
638 636
639 case Lisp_Boolfwd: 637 case Lisp_Misc_Boolfwd:
640 if (*XINTPTR (valcontents)) 638 return (*XBOOLFWD (valcontents)->boolvar ? Qt : Qnil);
641 return Qt;
642 return Qnil;
643 639
644 case Lisp_Objfwd: 640 case Lisp_Misc_Objfwd:
645 return *XOBJFWD (valcontents); 641 return *XOBJFWD (valcontents)->objvar;
646 642
647 case Lisp_Buffer_Objfwd: 643 case Lisp_Misc_Buffer_Objfwd:
648 return *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer); 644 offset = XBUFFER_OBJFWD (valcontents)->offset;
649 } 645 return *(Lisp_Object *)(offset + (char *)current_buffer);
646 }
650 return valcontents; 647 return valcontents;
651} 648}
652 649
@@ -666,35 +663,42 @@ store_symval_forwarding (sym, valcontents, newval)
666 switch (XTYPE (valcontents)) 663 switch (XTYPE (valcontents))
667#endif 664#endif
668 { 665 {
669 case Lisp_Intfwd: 666 case Lisp_Misc:
670 CHECK_NUMBER (newval, 1); 667 switch (XMISC (valcontents)->type)
671 *XINTPTR (valcontents) = XINT (newval); 668 {
672 break; 669 case Lisp_Misc_Intfwd:
670 CHECK_NUMBER (newval, 1);
671 *XINTFWD (valcontents)->intvar = XINT (newval);
672 break;
673 673
674 case Lisp_Boolfwd: 674 case Lisp_Misc_Boolfwd:
675 *XINTPTR (valcontents) = NILP(newval) ? 0 : 1; 675 *XBOOLFWD (valcontents)->boolvar = NILP (newval) ? 0 : 1;
676 break; 676 break;
677 677
678 case Lisp_Objfwd: 678 case Lisp_Misc_Objfwd:
679 *XOBJFWD (valcontents) = newval; 679 *XOBJFWD (valcontents)->objvar = newval;
680 break; 680 break;
681 681
682 case Lisp_Buffer_Objfwd: 682 case Lisp_Misc_Buffer_Objfwd:
683 { 683 {
684 unsigned int offset = XUINT (valcontents); 684 int offset = XBUFFER_OBJFWD (valcontents)->offset;
685 Lisp_Object type; 685 Lisp_Object type;
686 686
687 type = *(Lisp_Object *)(offset + (char *)&buffer_local_types); 687 type = *(Lisp_Object *)(offset + (char *)&buffer_local_types);
688 if (! NILP (type) && ! NILP (newval) 688 if (! NILP (type) && ! NILP (newval)
689 && XTYPE (newval) != XINT (type)) 689 && XTYPE (newval) != XINT (type))
690 buffer_slot_type_mismatch (valcontents, newval); 690 buffer_slot_type_mismatch (offset);
691 691
692 *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer) 692 *(Lisp_Object *)(offset + (char *)current_buffer) = newval;
693 = newval; 693 break;
694 break; 694 }
695 } 695 default:
696 goto def;
697 }
698 break;
696 699
697 default: 700 default:
701 def:
698 valcontents = XSYMBOL (sym)->value; 702 valcontents = XSYMBOL (sym)->value;
699 if (BUFFER_LOCAL_VALUEP (valcontents) 703 if (BUFFER_LOCAL_VALUEP (valcontents)
700 || SOME_BUFFER_LOCAL_VALUEP (valcontents)) 704 || SOME_BUFFER_LOCAL_VALUEP (valcontents))
@@ -773,20 +777,23 @@ find_symbol_value (sym)
773 valcontents = swap_in_symval_forwarding (sym, valcontents); 777 valcontents = swap_in_symval_forwarding (sym, valcontents);
774 goto retry; 778 goto retry;
775 779
776 case Lisp_Intfwd: 780 case Lisp_Misc:
777 XSETINT (val, *XINTPTR (valcontents)); 781 switch (XMISC (valcontents)->type)
778 return val; 782 {
783 case Lisp_Misc_Intfwd:
784 XSETINT (val, *XINTFWD (valcontents)->intvar);
785 return val;
779 786
780 case Lisp_Boolfwd: 787 case Lisp_Misc_Boolfwd:
781 if (*XINTPTR (valcontents)) 788 return (*XBOOLFWD (valcontents)->boolvar ? Qt : Qnil);
782 return Qt;
783 return Qnil;
784 789
785 case Lisp_Objfwd: 790 case Lisp_Misc_Objfwd:
786 return *XOBJFWD (valcontents); 791 return *XOBJFWD (valcontents)->objvar;
787 792
788 case Lisp_Buffer_Objfwd: 793 case Lisp_Misc_Buffer_Objfwd:
789 return *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer); 794 return *(Lisp_Object *)(XBUFFER_OBJFWD (valcontents)->offset
795 + (char *)current_buffer);
796 }
790 } 797 }
791 798
792 return valcontents; 799 return valcontents;
@@ -822,7 +829,7 @@ DEFUN ("set", Fset, Sset, 2, 2, 0,
822 829
823 if (BUFFER_OBJFWDP (valcontents)) 830 if (BUFFER_OBJFWDP (valcontents))
824 { 831 {
825 register int idx = XUINT (valcontents); 832 register int idx = XBUFFER_OBJFWD (valcontents)->offset;
826 register int mask = XINT (*((Lisp_Object *) 833 register int mask = XINT (*((Lisp_Object *)
827 (idx + (char *)&buffer_local_flags))); 834 (idx + (char *)&buffer_local_flags)));
828 if (mask > 0) 835 if (mask > 0)
@@ -938,7 +945,7 @@ default_value (sym)
938 rather than letting do_symval_forwarding get the current value. */ 945 rather than letting do_symval_forwarding get the current value. */
939 if (BUFFER_OBJFWDP (valcontents)) 946 if (BUFFER_OBJFWDP (valcontents))
940 { 947 {
941 register int idx = XUINT (valcontents); 948 register int idx = XBUFFER_OBJFWD (valcontents)->offset;
942 949
943 if (XINT (*(Lisp_Object *) (idx + (char *) &buffer_local_flags)) != 0) 950 if (XINT (*(Lisp_Object *) (idx + (char *) &buffer_local_flags)) != 0)
944 return *(Lisp_Object *)(idx + (char *) &buffer_defaults); 951 return *(Lisp_Object *)(idx + (char *) &buffer_defaults);
@@ -1011,7 +1018,7 @@ for this variable.")
1011 variables. */ 1018 variables. */
1012 if (BUFFER_OBJFWDP (valcontents)) 1019 if (BUFFER_OBJFWDP (valcontents))
1013 { 1020 {
1014 register int idx = XUINT (valcontents); 1021 register int idx = XBUFFER_OBJFWD (valcontents)->offset;
1015 register struct buffer *b; 1022 register struct buffer *b;
1016 register int mask = XINT (*((Lisp_Object *) 1023 register int mask = XINT (*((Lisp_Object *)
1017 (idx + (char *)&buffer_local_flags))); 1024 (idx + (char *)&buffer_local_flags)));
@@ -1205,7 +1212,7 @@ From now on the default value will apply in this buffer.")
1205 1212
1206 if (BUFFER_OBJFWDP (valcontents)) 1213 if (BUFFER_OBJFWDP (valcontents))
1207 { 1214 {
1208 register int idx = XUINT (valcontents); 1215 register int idx = XBUFFER_OBJFWD (valcontents)->offset;
1209 register int mask = XINT (*((Lisp_Object*) 1216 register int mask = XINT (*((Lisp_Object*)
1210 (idx + (char *)&buffer_local_flags))); 1217 (idx + (char *)&buffer_local_flags)));
1211 1218