Fit symbol_redirect snugly in two bits
This allows the C compiler to do away with all default clauses when switching on the `redirect` field. * src/lisp.h (enum symbol_redirect): Use values in the 0..3 range, which also matches the old comment in struct Lisp_Symbol. (enum symbol_interned, enum symbol_redirect) (enum symbol_trapped_write): Comment members. Remove explicit values. (struct Lisp_Symbol): Shrink the `redirect` member to 2 bits. Use the correct type for the `interned` field. Move value comments to their types. * src/pdumper.c (dump_symbol): Update hashes.
This commit is contained in:
parent
bc61a1afdd
commit
3c8167ec0f
2 changed files with 16 additions and 24 deletions
36
src/lisp.h
36
src/lisp.h
|
@ -810,24 +810,24 @@ typedef struct { void const *fwdptr; } lispfwd;
|
||||||
|
|
||||||
enum symbol_interned
|
enum symbol_interned
|
||||||
{
|
{
|
||||||
SYMBOL_UNINTERNED = 0,
|
SYMBOL_UNINTERNED, /* not interned anywhere */
|
||||||
SYMBOL_INTERNED = 1,
|
SYMBOL_INTERNED, /* interned but not in initial obarray */
|
||||||
SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2
|
SYMBOL_INTERNED_IN_INITIAL_OBARRAY /* interned in initial obarray */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum symbol_redirect
|
enum symbol_redirect
|
||||||
{
|
{
|
||||||
SYMBOL_PLAINVAL = 4,
|
SYMBOL_PLAINVAL, /* plain var, value is in the `value' field */
|
||||||
SYMBOL_VARALIAS = 1,
|
SYMBOL_VARALIAS, /* var alias, value is really in the `alias' symbol */
|
||||||
SYMBOL_LOCALIZED = 2,
|
SYMBOL_LOCALIZED, /* localized var, value is in the `blv' object */
|
||||||
SYMBOL_FORWARDED = 3
|
SYMBOL_FORWARDED /* forwarding var, value is in `forward' */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum symbol_trapped_write
|
enum symbol_trapped_write
|
||||||
{
|
{
|
||||||
SYMBOL_UNTRAPPED_WRITE = 0,
|
SYMBOL_UNTRAPPED_WRITE, /* normal case, just set the value */
|
||||||
SYMBOL_NOWRITE = 1,
|
SYMBOL_NOWRITE, /* constant, cannot set, e.g. nil, t, :keyword */
|
||||||
SYMBOL_TRAPPED_WRITE = 2
|
SYMBOL_TRAPPED_WRITE /* trap the write, call watcher functions */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Lisp_Symbol
|
struct Lisp_Symbol
|
||||||
|
@ -838,21 +838,13 @@ struct Lisp_Symbol
|
||||||
{
|
{
|
||||||
bool_bf gcmarkbit : 1;
|
bool_bf gcmarkbit : 1;
|
||||||
|
|
||||||
/* Indicates where the value can be found:
|
/* Indicates where the value can be found. */
|
||||||
0 : it's a plain var, the value is in the `value' field.
|
ENUM_BF (symbol_redirect) redirect : 2;
|
||||||
1 : it's a varalias, the value is really in the `alias' symbol.
|
|
||||||
2 : it's a localized var, the value is in the `blv' object.
|
|
||||||
3 : it's a forwarding variable, the value is in `forward'. */
|
|
||||||
ENUM_BF (symbol_redirect) redirect : 3;
|
|
||||||
|
|
||||||
/* 0 : normal case, just set the value
|
|
||||||
1 : constant, cannot set, e.g. nil, t, :keywords.
|
|
||||||
2 : trap the write, call watcher functions. */
|
|
||||||
ENUM_BF (symbol_trapped_write) trapped_write : 2;
|
ENUM_BF (symbol_trapped_write) trapped_write : 2;
|
||||||
|
|
||||||
/* Interned state of the symbol. This is an enumerator from
|
/* Interned state of the symbol. */
|
||||||
enum symbol_interned. */
|
ENUM_BF (symbol_interned) interned : 2;
|
||||||
unsigned interned : 2;
|
|
||||||
|
|
||||||
/* True means that this variable has been explicitly declared
|
/* True means that this variable has been explicitly declared
|
||||||
special (with `defvar' etc), and shouldn't be lexically bound. */
|
special (with `defvar' etc), and shouldn't be lexically bound. */
|
||||||
|
|
|
@ -2459,10 +2459,10 @@ dump_symbol (struct dump_context *ctx,
|
||||||
Lisp_Object object,
|
Lisp_Object object,
|
||||||
dump_off offset)
|
dump_off offset)
|
||||||
{
|
{
|
||||||
#if CHECK_STRUCTS && !defined HASH_Lisp_Symbol_999DC26DEC
|
#if CHECK_STRUCTS && !defined HASH_Lisp_Symbol_61B174C9F4
|
||||||
# error "Lisp_Symbol changed. See CHECK_STRUCTS comment in config.h."
|
# error "Lisp_Symbol changed. See CHECK_STRUCTS comment in config.h."
|
||||||
#endif
|
#endif
|
||||||
#if CHECK_STRUCTS && !defined (HASH_symbol_redirect_ADB4F5B113)
|
#if CHECK_STRUCTS && !defined (HASH_symbol_redirect_EA72E4BFF5)
|
||||||
# error "symbol_redirect changed. See CHECK_STRUCTS comment in config.h."
|
# error "symbol_redirect changed. See CHECK_STRUCTS comment in config.h."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue