changeset 28317:a7da319e3765

(struct buffer): Remove member local_var_flags, add local_flags. (MAX_BUFFER_LOCAL_VARS): New macro. (BUFFER_LOCAL_VAR_OFFSET, BUFFER_LOCAL_VAR_IDX) (BUFFER_HAS_LOCAL_VALUE_P, SET_BUFFER_HAS_LOCAL_VALUE_P) (BUFFER_LOCAL_IDX, BUFFER_LOCAL_DEFAULT_VALUE, BUFFER_LOCAL_VALUE) (BUFFER_LOCAL_SYMBOL, BUFFER_LOCAL_TYPE): New macros.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 26 Mar 2000 14:08:52 +0000
parents 869387703a36
children ff71c3a83b75
files src/buffer.h
diffstat 1 files changed, 80 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.h	Sun Mar 26 14:08:22 2000 +0000
+++ b/src/buffer.h	Sun Mar 26 14:08:52 2000 +0000
@@ -477,9 +477,14 @@
        In an ordinary buffer, it is 0.  */
     struct buffer *base_buffer;
 
-    /* Flags saying which DEFVAR_PER_BUFFER variables
-       are local to this buffer.  */
-    int local_var_flags;
+    /* A non-zero value in slot IDX means that per-buffer variable
+       with index IDX has a local value in this buffer.  The index IDX
+       for a buffer-local variable is stored in that variable's slot
+       in buffer_local_flags as a Lisp integer.  If the index is -1,
+       this means the variable is always local in all buffers.  */
+#define MAX_BUFFER_LOCAL_VARS 30
+    char local_flags[MAX_BUFFER_LOCAL_VARS];
+    
     /* Set to the modtime of the visited file when read or written.
        -1 means visited file was nonexistent.
        0 means visited file modtime unknown; in no case complain
@@ -749,8 +754,8 @@
    The value has only one nonzero bit.
 
    When a buffer has its own local value for a slot,
-   the bit for that slot (found in the same slot in this structure)
-   is turned on in the buffer's local_var_flags slot.
+   the entry for that slot (found in the same slot in this structure)
+   is turned on in the buffer's local_flags array.
 
    If a slot in this structure is zero, then even though there may
    be a Lisp-level local variable for the slot, it has no default value,
@@ -850,3 +855,73 @@
 #define R_ALLOC_DECLARE(var,data)
 #endif
 
+/***********************************************************************
+			Buffer-local Variables
+ ***********************************************************************/
+
+/* Number of per-buffer variables used.  */
+
+extern int max_buffer_local_idx;
+
+/* Return the offset in bytes of member VAR of struct buffer
+   from the start of a buffer structure.  */
+
+#define BUFFER_LOCAL_VAR_OFFSET(VAR) \
+    ((char *) &buffer_local_flags.VAR - (char *) &buffer_local_flags)
+
+/* Return the index of buffer-local variable VAR.  Each per-buffer
+   variable has an index > 0 associated with it, except when it always
+   has buffer-local values, in which case the index is -1.  If this is
+   0, this is a bug and means that the slot of VAR in
+   buffer_local_flags wasn't intiialized.  */
+
+#define BUFFER_LOCAL_VAR_IDX(VAR) \
+    BUFFER_LOCAL_IDX (BUFFER_LOCAL_VAR_OFFSET (VAR))
+
+/* Value is non-zero if the variable with index IDX has a local value
+   in buffer B.  */
+
+#define BUFFER_HAS_LOCAL_VALUE_P(B, IDX)	\
+    (((IDX) < 0 || IDX >= max_buffer_local_idx)	\
+     ? (abort (), 0)				\
+     : ((B)->local_flags[IDX] != 0))
+
+/* Set whether per-buffer variable with index IDX has a buffer-local
+   value in buffer B.  VAL zero means it hasn't.  */
+
+#define SET_BUFFER_HAS_LOCAL_VALUE_P(B, IDX, VAL)	\
+     do {						\
+       if ((IDX) < 0 || (IDX) >= max_buffer_local_idx)	\
+	 abort ();					\
+       (B)->local_flags[IDX] = (VAL);			\
+     } while (0)
+
+/* Return the index of the per-buffer variable at offset OFFSET in the
+   buffer structure.  */
+
+#define BUFFER_LOCAL_IDX(OFFSET) \
+      XINT (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_flags))
+
+/* Return the default value of the per-buffer variable at offset
+   OFFSET in the buffer structure.  */
+
+#define BUFFER_LOCAL_DEFAULT_VALUE(OFFSET) \
+      (*(Lisp_Object *)((OFFSET) + (char *) &buffer_defaults))
+
+/* Return the buffer-local value of the per-buffer variable at offset
+   OFFSET in the buffer structure.  */
+
+#define BUFFER_LOCAL_VALUE(BUFFER, OFFSET) \
+      (*(Lisp_Object *)((OFFSET) + (char *) (BUFFER)))
+
+/* Return the symbol of the per-buffer variable at offset OFFSET in
+   the buffer structure.  */
+
+#define BUFFER_LOCAL_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 BUFFER_LOCAL_TYPE(OFFSET) \
+      (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_types))