diff options
author | Karl Heuer <kwzh@gnu.org> | 1994-10-12 05:15:21 +0000 |
---|---|---|
committer | Karl Heuer <kwzh@gnu.org> | 1994-10-12 05:15:21 +0000 |
commit | 46b2ac21f0e626fb50c20148330f7766ebb7ed80 (patch) | |
tree | 40353b543a55dddc5351b879cde4fd3c996a8d16 | |
parent | 54dfdeb04f8dacacc3810d90503b4cfa63298948 (diff) | |
download | emacs-46b2ac21f0e626fb50c20148330f7766ebb7ed80.tar.gz |
(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.
-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) register Lisp_Object valcontents; { register Lisp_Object val; -#ifdef SWITCH_ENUM_BUG - switch ((int) XTYPE (valcontents)) -#else - switch (XTYPE (valcontents)) -#endif - { - case Lisp_Intfwd: - XSETINT (val, *XINTPTR (valcontents)); - return val; + int offset; + if (MISCP (valcontents)) + switch (XMISC (valcontents)->type) + { + case Lisp_Misc_Intfwd: + XSETINT (val, *XINTFWD (valcontents)->intvar); + return val; - case Lisp_Boolfwd: - if (*XINTPTR (valcontents)) - return Qt; - return Qnil; + case Lisp_Misc_Boolfwd: + return (*XBOOLFWD (valcontents)->boolvar ? Qt : Qnil); - case Lisp_Objfwd: - return *XOBJFWD (valcontents); + case Lisp_Misc_Objfwd: + return *XOBJFWD (valcontents)->objvar; - case Lisp_Buffer_Objfwd: - return *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer); - } + case Lisp_Misc_Buffer_Objfwd: + offset = XBUFFER_OBJFWD (valcontents)->offset; + return *(Lisp_Object *)(offset + (char *)current_buffer); + } return valcontents; } @@ -666,35 +663,42 @@ store_symval_forwarding (sym, valcontents, newval) switch (XTYPE (valcontents)) #endif { - case Lisp_Intfwd: - CHECK_NUMBER (newval, 1); - *XINTPTR (valcontents) = XINT (newval); - break; + case Lisp_Misc: + switch (XMISC (valcontents)->type) + { + case Lisp_Misc_Intfwd: + CHECK_NUMBER (newval, 1); + *XINTFWD (valcontents)->intvar = XINT (newval); + break; - case Lisp_Boolfwd: - *XINTPTR (valcontents) = NILP(newval) ? 0 : 1; - break; + case Lisp_Misc_Boolfwd: + *XBOOLFWD (valcontents)->boolvar = NILP (newval) ? 0 : 1; + break; - case Lisp_Objfwd: - *XOBJFWD (valcontents) = newval; - break; + case Lisp_Misc_Objfwd: + *XOBJFWD (valcontents)->objvar = newval; + break; - case Lisp_Buffer_Objfwd: - { - unsigned int offset = XUINT (valcontents); - Lisp_Object type; - - type = *(Lisp_Object *)(offset + (char *)&buffer_local_types); - if (! NILP (type) && ! NILP (newval) - && XTYPE (newval) != XINT (type)) - buffer_slot_type_mismatch (valcontents, newval); - - *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer) - = newval; - break; - } + case Lisp_Misc_Buffer_Objfwd: + { + int offset = XBUFFER_OBJFWD (valcontents)->offset; + Lisp_Object type; + + type = *(Lisp_Object *)(offset + (char *)&buffer_local_types); + if (! NILP (type) && ! NILP (newval) + && XTYPE (newval) != XINT (type)) + buffer_slot_type_mismatch (offset); + + *(Lisp_Object *)(offset + (char *)current_buffer) = newval; + break; + } + default: + goto def; + } + break; default: + def: valcontents = XSYMBOL (sym)->value; if (BUFFER_LOCAL_VALUEP (valcontents) || SOME_BUFFER_LOCAL_VALUEP (valcontents)) @@ -773,20 +777,23 @@ find_symbol_value (sym) valcontents = swap_in_symval_forwarding (sym, valcontents); goto retry; - case Lisp_Intfwd: - XSETINT (val, *XINTPTR (valcontents)); - return val; + case Lisp_Misc: + switch (XMISC (valcontents)->type) + { + case Lisp_Misc_Intfwd: + XSETINT (val, *XINTFWD (valcontents)->intvar); + return val; - case Lisp_Boolfwd: - if (*XINTPTR (valcontents)) - return Qt; - return Qnil; + case Lisp_Misc_Boolfwd: + return (*XBOOLFWD (valcontents)->boolvar ? Qt : Qnil); - case Lisp_Objfwd: - return *XOBJFWD (valcontents); + case Lisp_Misc_Objfwd: + return *XOBJFWD (valcontents)->objvar; - case Lisp_Buffer_Objfwd: - return *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer); + case Lisp_Misc_Buffer_Objfwd: + return *(Lisp_Object *)(XBUFFER_OBJFWD (valcontents)->offset + + (char *)current_buffer); + } } return valcontents; @@ -822,7 +829,7 @@ DEFUN ("set", Fset, Sset, 2, 2, 0, if (BUFFER_OBJFWDP (valcontents)) { - register int idx = XUINT (valcontents); + register int idx = XBUFFER_OBJFWD (valcontents)->offset; register int mask = XINT (*((Lisp_Object *) (idx + (char *)&buffer_local_flags))); if (mask > 0) @@ -938,7 +945,7 @@ default_value (sym) rather than letting do_symval_forwarding get the current value. */ if (BUFFER_OBJFWDP (valcontents)) { - register int idx = XUINT (valcontents); + register int idx = XBUFFER_OBJFWD (valcontents)->offset; if (XINT (*(Lisp_Object *) (idx + (char *) &buffer_local_flags)) != 0) return *(Lisp_Object *)(idx + (char *) &buffer_defaults); @@ -1011,7 +1018,7 @@ for this variable.") variables. */ if (BUFFER_OBJFWDP (valcontents)) { - register int idx = XUINT (valcontents); + register int idx = XBUFFER_OBJFWD (valcontents)->offset; register struct buffer *b; register int mask = XINT (*((Lisp_Object *) (idx + (char *)&buffer_local_flags))); @@ -1205,7 +1212,7 @@ From now on the default value will apply in this buffer.") if (BUFFER_OBJFWDP (valcontents)) { - register int idx = XUINT (valcontents); + register int idx = XBUFFER_OBJFWD (valcontents)->offset; register int mask = XINT (*((Lisp_Object*) (idx + (char *)&buffer_local_flags))); |