diff options
| author | Karl Heuer | 1994-10-12 05:15:21 +0000 |
|---|---|---|
| committer | Karl Heuer | 1994-10-12 05:15:21 +0000 |
| commit | 46b2ac21f0e626fb50c20148330f7766ebb7ed80 (patch) | |
| tree | 40353b543a55dddc5351b879cde4fd3c996a8d16 /src/data.c | |
| parent | 54dfdeb04f8dacacc3810d90503b4cfa63298948 (diff) | |
| download | emacs-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.c | 121 |
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 | ||