diff options
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/lisp.h b/src/lisp.h index 70329a07764..74957e9fe18 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -214,7 +214,6 @@ enum Lisp_Misc_Type Lisp_Misc_Objfwd, Lisp_Misc_Buffer_Objfwd, Lisp_Misc_Buffer_Local_Value, - Lisp_Misc_Some_Buffer_Local_Value, Lisp_Misc_Overlay, Lisp_Misc_Kboard_Objfwd, Lisp_Misc_Save_Value, @@ -522,7 +521,8 @@ extern size_t pure_size; /* Misc types. */ #define XMISC(a) ((union Lisp_Misc *) XPNTR(a)) -#define XMISCTYPE(a) (XMARKER (a)->type) +#define XMISCANY(a) (&(XMISC(a)->u_any)) +#define XMISCTYPE(a) (XMISCANY (a)->type) #define XMARKER(a) (&(XMISC(a)->u_marker)) #define XINTFWD(a) (&(XMISC(a)->u_intfwd)) #define XBOOLFWD(a) (&(XMISC(a)->u_boolfwd)) @@ -1124,6 +1124,13 @@ struct Lisp_Hash_Table /* These structures are used for various misc types. */ +struct Lisp_Misc_Any /* Supertype of all Misc types. */ +{ + int type : 16; /* = Lisp_Misc_Marker */ + unsigned gcmarkbit : 1; + int spacer : 15; +}; + struct Lisp_Marker { int type : 16; /* = Lisp_Misc_Marker */ @@ -1224,19 +1231,19 @@ struct Lisp_Buffer_Objfwd binding into `realvalue' (or through it). Also update LOADED-BINDING to point to the newly loaded binding. - Lisp_Misc_Buffer_Local_Value and Lisp_Misc_Some_Buffer_Local_Value - both use this kind of structure. With the former, merely setting - the variable creates a local binding for the current buffer. With - the latter, setting the variable does not do that; only - make-local-variable does that. */ + `local_if_set' indicates that merely setting the variable creates a local + binding for the current buffer. Otherwise the latter, setting the + variable does not do that; only make-local-variable does that. */ struct Lisp_Buffer_Local_Value { - int type : 16; /* = Lisp_Misc_Buffer_Local_Value - or Lisp_Misc_Some_Buffer_Local_Value */ + int type : 16; /* = Lisp_Misc_Buffer_Local_Value */ unsigned gcmarkbit : 1; - int spacer : 12; + int spacer : 11; + /* 1 means that merely setting the variable creates a local + binding for the current buffer */ + unsigned int local_if_set : 1; /* 1 means this variable is allowed to have frame-local bindings, so check for them when looking for the proper binding. */ unsigned int check_frame : 1; @@ -1326,7 +1333,8 @@ struct Lisp_Free union Lisp_Misc { - struct Lisp_Free u_free; + struct Lisp_Misc_Any u_any; /* Supertype of all Misc types. */ + struct Lisp_Free u_free; /* Includes padding to force alignment. */ struct Lisp_Marker u_marker; struct Lisp_Intfwd u_intfwd; struct Lisp_Boolfwd u_boolfwd; |
