]> git.eshelyaron.com Git - emacs.git/commitdiff
(store_symval_forwarding) <Lisp_Misc_Buffer_Objfwd>:
authorKarl Heuer <kwzh@gnu.org>
Fri, 27 Feb 1998 21:56:28 +0000 (21:56 +0000)
committerKarl Heuer <kwzh@gnu.org>
Fri, 27 Feb 1998 21:56:28 +0000 (21:56 +0000)
If buffer_local_types has -1, this variable is read-only.
(Fset_default) <BUFFER_OBJFWDP>:
Unconditionally set the slot in buffer_defaults.

src/data.c

index ba7ed98b5279f36fa8875050f32f11929fc13b71..492b87e30b7a612e92fe86909831b884f2c383a6 100644 (file)
@@ -784,6 +784,9 @@ store_symval_forwarding (symbol, valcontents, newval)
            Lisp_Object type;
 
            type = *(Lisp_Object *)(offset + (char *)&buffer_local_types);
+           if (XINT (type) == -1)
+             error ("Variable %s is read-only", XSYMBOL (symbol)->name->data);
+
            if (! NILP (type) && ! NILP (newval)
                && XTYPE (newval) != XINT (type))
              buffer_slot_type_mismatch (offset);
@@ -1146,9 +1149,12 @@ for this variable.")
       register int mask = XINT (*((Lisp_Object *)
                                  (idx + (char *)&buffer_local_flags)));
 
+      *(Lisp_Object *)(idx + (char *) &buffer_defaults) = value;
+
+      /* If this variable is not always local in all buffers,
+        set it in the buffers that don't nominally have a local value.  */
       if (mask > 0)
        {
-         *(Lisp_Object *)(idx + (char *) &buffer_defaults) = value;
          for (b = all_buffers; b; b = b->next)
            if (!(b->local_var_flags & mask))
              *(Lisp_Object *)(idx + (char *) b) = value;