X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/c0ff0ac2275b5311b5f347ab0a8a18530090625e..42c30833c2f65f8d44f3a9f7564f41deac939659:/src/lisp.h diff --git a/src/lisp.h b/src/lisp.h index 14d378f04a..86d20cea0a 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -303,45 +303,11 @@ DEFINE_GDB_SYMBOL_END (USE_LSB_TAG) #define lisp_h_SYMBOL_CONSTANT_P(sym) (XSYMBOL (sym)->constant) #define lisp_h_SYMBOL_VAL(sym) \ (eassert ((sym)->redirect == SYMBOL_PLAINVAL), (sym)->val.value) -#define lisp_h_SYMBOLP(x) (SMOB_TYPEP (x, lisp_symbol_tag)) +#define lisp_h_SYMBOLP(x) (x && scm_is_symbol (x)) #define lisp_h_VECTORLIKEP(x) (SMOB_TYPEP (x, lisp_vectorlike_tag)) #define lisp_h_XCAR(c) (scm_car (c)) #define lisp_h_XCDR(c) (scm_cdr (c)) #define lisp_h_XHASH(a) (SCM_UNPACK (a)) -#define lisp_h_XSYMBOL(a) \ - (eassert (SYMBOLP (a)), (struct Lisp_Symbol *) SMOB_PTR (a)) - -/* When compiling via gcc -O0, define the key operations as macros, as - Emacs is too slow otherwise. To disable this optimization, compile - with -DINLINING=false. */ -#if 0 -#if (defined __NO_INLINE__ \ - && ! defined __OPTIMIZE__ && ! defined __OPTIMIZE_SIZE__ \ - && ! (defined INLINING && ! INLINING)) -# define XLI(o) lisp_h_XLI (o) -# define XIL(i) lisp_h_XIL (i) -# define CHECK_LIST_CONS(x, y) lisp_h_CHECK_LIST_CONS (x, y) -# define CHECK_NUMBER(x) lisp_h_CHECK_NUMBER (x) -# define CHECK_SYMBOL(x) lisp_h_CHECK_SYMBOL (x) -# define CHECK_TYPE(ok, predicate, x) lisp_h_CHECK_TYPE (ok, predicate, x) -# define CONSP(x) lisp_h_CONSP (x) -# define EQ(x, y) lisp_h_EQ (x, y) -# define FLOATP(x) lisp_h_FLOATP (x) -# define INTEGERP(x) lisp_h_INTEGERP (x) -# define MARKERP(x) lisp_h_MARKERP (x) -# define MISCP(x) lisp_h_MISCP (x) -# define NILP(x) lisp_h_NILP (x) -# define SET_SYMBOL_VAL(sym, v) lisp_h_SET_SYMBOL_VAL (sym, v) -# define SYMBOL_CONSTANT_P(sym) lisp_h_SYMBOL_CONSTANT_P (sym) -# define SYMBOL_VAL(sym) lisp_h_SYMBOL_VAL (sym) -# define SYMBOLP(x) lisp_h_SYMBOLP (x) -# define VECTORLIKEP(x) lisp_h_VECTORLIKEP (x) -# define XCAR(c) lisp_h_XCAR (c) -# define XCDR(c) lisp_h_XCDR (c) -# define XHASH(a) lisp_h_XHASH (a) -# define XSYMBOL(a) lisp_h_XSYMBOL (a) -#endif -#endif /* Define NAME as a lisp.h inline function that returns TYPE and has arguments declared as ARGDECLS and passed as ARGS. ARGDECLS and @@ -374,7 +340,6 @@ DEFINE_GDB_SYMBOL_END (USE_LSB_TAG) #define ENUM_BF(TYPE) enum TYPE #endif -scm_t_bits lisp_symbol_tag; scm_t_bits lisp_misc_tag; scm_t_bits lisp_string_tag; scm_t_bits lisp_vectorlike_tag; @@ -679,7 +644,20 @@ XSTRING (Lisp_Object a) return SMOB_PTR (a); } -LISP_MACRO_DEFUN (XSYMBOL, struct Lisp_Symbol *, (Lisp_Object a), (a)) +extern void initialize_symbol (Lisp_Object, Lisp_Object); +INLINE Lisp_Object build_string (const char *); +extern Lisp_Object symbol_module; +extern Lisp_Object function_module; +extern Lisp_Object plist_module; + +INLINE struct Lisp_Symbol * +XSYMBOL (Lisp_Object a) +{ + Lisp_Object tem; + eassert (SYMBOLP (a)); + tem = scm_variable_ref (scm_module_lookup (symbol_module, a)); + return scm_to_pointer (tem); +} /* Pseudovector types. */ @@ -1306,15 +1284,6 @@ CHAR_TABLE_EXTRA_SLOTS (struct Lisp_Char_Table *ct) Symbols ***********************************************************************/ -/* Interned state of a symbol. */ - -enum symbol_interned -{ - SYMBOL_UNINTERNED = 0, - SYMBOL_INTERNED = 1, - SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2 -}; - enum symbol_redirect { SYMBOL_PLAINVAL = 4, @@ -1339,10 +1308,6 @@ struct Lisp_Symbol can be changed, but only by `defconst'. */ unsigned constant : 2; - /* Interned state of the symbol. This is an enumerator from - enum symbol_interned. */ - unsigned interned : 2; - /* True means that this variable has been explicitly declared special (with `defvar' etc), and shouldn't be lexically bound. */ bool_bf declared_special : 1; @@ -1350,9 +1315,6 @@ struct Lisp_Symbol /* True if pointed to from purespace and hence can't be GC'd. */ bool_bf pinned : 1; - /* The symbol's name, as a Lisp string. */ - Lisp_Object name; - /* Value of the symbol or Qunbound if unbound. Which alternative of the union is used depends on the `redirect' field above. */ union { @@ -1361,15 +1323,6 @@ struct Lisp_Symbol struct Lisp_Buffer_Local_Value *blv; union Lisp_Fwd *fwd; } val; - - /* Function value of the symbol or Qnil if not fboundp. */ - Lisp_Object function; - - /* The symbol's property list. */ - Lisp_Object plist; - - /* Next symbol in obarray bucket, if the symbol is interned. */ - struct Lisp_Symbol *next; }; /* Value is name of symbol. */ @@ -1420,7 +1373,7 @@ SET_SYMBOL_FWD (struct Lisp_Symbol *sym, union Lisp_Fwd *v) INLINE Lisp_Object SYMBOL_NAME (Lisp_Object sym) { - return XSYMBOL (sym)->name; + return build_string (scm_to_locale_string (scm_symbol_to_string (sym))); } /* Value is true if SYM is an interned symbol. */ @@ -1428,15 +1381,13 @@ SYMBOL_NAME (Lisp_Object sym) INLINE bool SYMBOL_INTERNED_P (Lisp_Object sym) { - return XSYMBOL (sym)->interned != SYMBOL_UNINTERNED; + return scm_is_true (scm_symbol_interned_p (sym)); } -/* Value is true if SYM is interned in initial_obarray. */ - -INLINE bool -SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P (Lisp_Object sym) +INLINE Lisp_Object +SYMBOL_FUNCTION (Lisp_Object sym) { - return XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY; + return scm_variable_ref (scm_module_lookup (function_module, sym)); } /* Value is non-zero if symbol is considered a constant, i.e. its @@ -2783,19 +2734,19 @@ set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val) INLINE void set_symbol_function (Lisp_Object sym, Lisp_Object function) { - XSYMBOL (sym)->function = function; + scm_variable_set_x (scm_module_lookup (function_module, sym), function); } -INLINE void -set_symbol_plist (Lisp_Object sym, Lisp_Object plist) +INLINE Lisp_Object +symbol_plist (Lisp_Object sym) { - XSYMBOL (sym)->plist = plist; + return scm_variable_ref (scm_module_lookup (plist_module, sym)); } INLINE void -set_symbol_next (Lisp_Object sym, struct Lisp_Symbol *next) +set_symbol_plist (Lisp_Object sym, Lisp_Object plist) { - XSYMBOL (sym)->next = next; + scm_variable_set_x (scm_module_lookup (plist_module, sym), plist); } /* Buffer-local (also frame-local) variable access functions. */ @@ -3331,6 +3282,7 @@ extern Lisp_Object Qlexical_binding; extern Lisp_Object check_obarray (Lisp_Object); extern Lisp_Object intern_1 (const char *, ptrdiff_t); extern Lisp_Object intern_c_string_1 (const char *, ptrdiff_t); +extern Lisp_Object obhash (Lisp_Object); extern Lisp_Object oblookup (Lisp_Object, const char *, ptrdiff_t, ptrdiff_t); INLINE void LOADHIST_ATTACH (Lisp_Object x)