Mercurial > emacs
changeset 86285:59344cb482f3
* lisp.h (struct Lisp_Buffer_Objfwd): Add a `slottype' field.
* data.c (store_symval_forwarding): Get type from buffer_objfwd.
Update call to buffer_slot_type_mismatch.
* buffer.h (buffer_local_types, PER_BUFFER_TYPE): Remove.
(buffer_slot_type_mismatch): Update.
* buffer.c (buffer_local_types): Remove.
(buffer_slot_type_mismatch): Get the symbol and type as arguments.
(defvar_per_buffer): Set the type in the buffer_objfwd.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 21 Nov 2007 20:59:47 +0000 |
parents | d0c1a4ea2562 |
children | 08ed3671eb2d |
files | src/ChangeLog src/buffer.c src/buffer.h src/data.c src/lisp.h |
diffstat | 5 files changed, 24 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Wed Nov 21 20:37:22 2007 +0000 +++ b/src/ChangeLog Wed Nov 21 20:59:47 2007 +0000 @@ -1,7 +1,18 @@ +2007-11-21 Stefan Monnier <monnier@iro.umontreal.ca> + + * lisp.h (struct Lisp_Buffer_Objfwd): Add a `slottype' field. + * data.c (store_symval_forwarding): Get type from buffer_objfwd. + Update call to buffer_slot_type_mismatch. + * buffer.h (buffer_local_types, PER_BUFFER_TYPE): Remove. + (buffer_slot_type_mismatch): Update. + * buffer.c (buffer_local_types): Remove. + (buffer_slot_type_mismatch): Get the symbol and type as arguments. + (defvar_per_buffer): Set the type in the buffer_objfwd. + 2007-11-21 Jason Rumney <jasonr@gnu.org> - * w32bdf.c (w32_init_bdf_font, w32_BDF_to_x_font): CreateFileMapping - returns NULL on failure. + * w32bdf.c (w32_init_bdf_font, w32_BDF_to_x_font): + CreateFileMapping returns NULL on failure. 2007-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
--- a/src/buffer.c Wed Nov 21 20:37:22 2007 +0000 +++ b/src/buffer.c Wed Nov 21 20:59:47 2007 +0000 @@ -99,17 +99,6 @@ /* A Lisp_Object pointer to the above, used for staticpro */ static Lisp_Object Vbuffer_local_symbols; -/* This structure holds the required types for the values in the - buffer-local slots. If a slot contains Qnil, then the - corresponding buffer slot may contain a value of any type. If a - slot contains an integer, then prospective values' tags must be - equal to that integer (except nil is always allowed). - When a tag does not match, the function - buffer_slot_type_mismatch will signal an error. - - If a slot here contains -1, the corresponding variable is read-only. */ -struct buffer buffer_local_types; - /* Flags indicating which built-in buffer-local variables are permanent locals. */ static char buffer_permanent_local_flags[MAX_PER_BUFFER_VARS]; @@ -4402,13 +4391,13 @@ in the slot with offset OFFSET. */ void -buffer_slot_type_mismatch (offset) - int offset; +buffer_slot_type_mismatch (sym, type) + Lisp_Object sym; + int type; { - Lisp_Object sym; char *type_name; - switch (XINT (PER_BUFFER_TYPE (offset))) + switch (type) { case Lisp_Int: type_name = "integers"; @@ -4426,7 +4415,6 @@ abort (); } - sym = PER_BUFFER_SYMBOL (offset); error ("Only %s should be stored in the buffer-local variable %s", type_name, SDATA (SYMBOL_NAME (sym))); } @@ -5274,9 +5262,9 @@ XMISCTYPE (val) = Lisp_Misc_Buffer_Objfwd; XBUFFER_OBJFWD (val)->offset = offset; + XBUFFER_OBJFWD (val)->slottype = type; SET_SYMBOL_VALUE (sym, val); PER_BUFFER_SYMBOL (offset) = sym; - PER_BUFFER_TYPE (offset) = type; if (PER_BUFFER_IDX (offset) == 0) /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
--- a/src/buffer.h Wed Nov 21 20:37:22 2007 +0000 +++ b/src/buffer.h Wed Nov 21 20:59:47 2007 +0000 @@ -818,18 +818,6 @@ that don't have such names. */ extern struct buffer buffer_local_symbols; - -/* This structure holds the required types for the values in the - buffer-local slots. If a slot contains Qnil, then the - corresponding buffer slot may contain a value of any type. If a - slot contains an integer, then prospective values' tags must be - equal to that integer (except nil is always allowed). - When a tag does not match, the function - buffer_slot_type_mismatch will signal an error. - - If a slot here contains -1, the corresponding variable is read-only. */ - -extern struct buffer buffer_local_types; extern void delete_all_overlays P_ ((struct buffer *)); extern void reset_buffer P_ ((struct buffer *)); @@ -843,7 +831,7 @@ extern void set_buffer_internal_1 P_ ((struct buffer *)); extern void set_buffer_temp P_ ((struct buffer *)); extern void record_buffer P_ ((Lisp_Object)); -extern void buffer_slot_type_mismatch P_ ((int)) NO_RETURN; +extern void buffer_slot_type_mismatch P_ ((Lisp_Object, int)) NO_RETURN; extern void fix_overlays_before P_ ((struct buffer *, EMACS_INT, EMACS_INT)); extern void mmap_set_vars P_ ((int)); @@ -995,11 +983,5 @@ #define PER_BUFFER_SYMBOL(OFFSET) \ (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_symbols)) -/* Return the type of the per-buffer variable at offset OFFSET in the - buffer structure. */ - -#define PER_BUFFER_TYPE(OFFSET) \ - (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_types)) - /* arch-tag: 679305dd-d41c-4a50-b170-3caf5c97b2d1 (do not change this comment) */
--- a/src/data.c Wed Nov 21 20:37:22 2007 +0000 +++ b/src/data.c Wed Nov 21 20:59:47 2007 +0000 @@ -930,7 +930,7 @@ break; case Lisp_Misc_Boolfwd: - *XBOOLFWD (valcontents)->boolvar = NILP (newval) ? 0 : 1; + *XBOOLFWD (valcontents)->boolvar = !NILP (newval); break; case Lisp_Misc_Objfwd: @@ -970,12 +970,11 @@ case Lisp_Misc_Buffer_Objfwd: { int offset = XBUFFER_OBJFWD (valcontents)->offset; - Lisp_Object type; - - type = PER_BUFFER_TYPE (offset); + Lisp_Object type = XBUFFER_OBJFWD (valcontents)->slottype; + if (! NILP (type) && ! NILP (newval) && XTYPE (newval) != XINT (type)) - buffer_slot_type_mismatch (offset); + buffer_slot_type_mismatch (symbol, XINT (type)); if (buf == NULL) buf = current_buffer;