X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsymbols.c;h=1bdd929e74ed271d6405b95dec9d3985a8e2cf9f;hb=614724a49443bec0091c9522103c214ec0b2d4d0;hp=906637c945fde6a2691604180c8c4979602f4c05;hpb=0c693dc08f0794304711787b2eb47c144ea4bef1;p=chise%2Fxemacs-chise.git diff --git a/src/symbols.c b/src/symbols.c index 906637c..1bdd929 100644 --- a/src/symbols.c +++ b/src/symbols.c @@ -790,10 +790,15 @@ Set SYMBOL's property list to NEWPLIST, and return NEWPLIST. the symbol-value-forward. (See below.) SYMVAL_FIXNUM_FORWARD: + (declare with DEFVAR_INT) + Similar to SYMVAL_OBJECT_FORWARD except that the C variable + is of type "Fixnum", a typedef for "EMACS_INT", and the corresponding + lisp variable is always the corresponding integer. + SYMVAL_BOOLEAN_FORWARD: - (declare with DEFVAR_INT or DEFVAR_BOOL) + (declare with DEFVAR_BOOL) Similar to SYMVAL_OBJECT_FORWARD except that the C variable - is of type "int" and is an integer or boolean, respectively. + is of type "int" and is a boolean. SYMVAL_CONST_OBJECT_FORWARD: SYMVAL_CONST_FIXNUM_FORWARD: @@ -1073,7 +1078,7 @@ do_symval_forwarding (Lisp_Object valcontents, struct buffer *buffer, { case SYMVAL_FIXNUM_FORWARD: case SYMVAL_CONST_FIXNUM_FORWARD: - return make_int (*((int *)symbol_value_forward_forward (fwd))); + return make_int (*((Fixnum *)symbol_value_forward_forward (fwd))); case SYMVAL_BOOLEAN_FORWARD: case SYMVAL_CONST_BOOLEAN_FORWARD: @@ -1246,7 +1251,7 @@ store_symval_forwarding (Lisp_Object sym, Lisp_Object ovalue, CHECK_INT (newval); if (magicfun) magicfun (sym, &newval, Qnil, 0); - *((int *) symbol_value_forward_forward (fwd)) = XINT (newval); + *((Fixnum *) symbol_value_forward_forward (fwd)) = XINT (newval); return; case SYMVAL_BOOLEAN_FORWARD: @@ -3187,6 +3192,31 @@ variable chain of symbols. return follow_varalias_pointers (object, follow_past_lisp_magic); } +DEFUN ("variable-binding-locus", Fvariable_binding_locus, 1, 1, 0, /* +Return a value indicating where VARIABLE's current binding comes from. +If the current binding is buffer-local, the value is the current buffer. +If the current binding is global (the default), the value is nil. +*/ + (variable)) +{ + Lisp_Object valcontents; + + CHECK_SYMBOL (variable); + variable = Findirect_variable (variable, Qnil); + + /* Make sure the current binding is actually swapped in. */ + find_symbol_value (variable); + + valcontents = XSYMBOL (variable)->value; + + if (SYMBOL_VALUE_MAGIC_P (valcontents) + && ((XSYMBOL_VALUE_MAGIC_TYPE (valcontents) == SYMVAL_BUFFER_LOCAL) + || (XSYMBOL_VALUE_MAGIC_TYPE (valcontents) == SYMVAL_SOME_BUFFER_LOCAL)) + && (!NILP (Flocal_variable_p (variable, Fcurrent_buffer (), Qnil)))) + return Fcurrent_buffer (); + else + return Qnil; +} /************************************************************************/ /* initialization */ @@ -3259,6 +3289,11 @@ init_symbols_once_early (void) XSYMBOL (Qnil)->function = Qunbound; +#ifdef UTF2000 + /* [tomo:2002-01-22] We should not define Qunloaded as a normal symbol */ + defsymbol (&Qunloaded, "#"); +#endif + defsymbol (&Qt, "t"); XSYMBOL (Qt)->value = Qt; /* Veritas aeterna */ Vquit_flag = Qnil; @@ -3287,8 +3322,8 @@ defsymbol_massage_name_1 (Lisp_Object *location, const char *name, int dump_p, int multiword_predicate_p) { char temp[500]; - int len = strlen (name) - 1; - int i; + size_t len = strlen (name) - 1; + size_t i; if (multiword_predicate_p) assert (len + 1 < sizeof (temp)); @@ -3364,7 +3399,7 @@ void defkeyword_massage_name (Lisp_Object *location, const char *name) { char temp[500]; - int len = strlen (name); + size_t len = strlen (name); assert (len < sizeof (temp)); strcpy (temp, name); @@ -3499,8 +3534,8 @@ deferror_massage_name_and_message (Lisp_Object *symbol, const char *name, Lisp_Object inherits_from) { char temp[500]; - int i; - int len = strlen (name) - 1; + size_t i; + size_t len = strlen (name) - 1; assert (len < sizeof (temp)); strcpy (temp, name + 1); /* Remove initial Q */ @@ -3543,7 +3578,6 @@ syms_of_symbols (void) DEFSYMBOL (Qsymbol_value_in_buffer); DEFSYMBOL (Qsymbol_value_in_console); DEFSYMBOL (Qlocal_variable_p); - DEFSYMBOL (Qconst_integer); DEFSYMBOL (Qconst_boolean); DEFSYMBOL (Qconst_object); @@ -3590,6 +3624,7 @@ syms_of_symbols (void) DEFSUBR (Fdefvaralias); DEFSUBR (Fvariable_alias); DEFSUBR (Findirect_variable); + DEFSUBR (Fvariable_binding_locus); DEFSUBR (Fdontusethis_set_symbol_value_handler); }