changeset 1674:7670d88516af

[xemacs-hg @ 2003-09-10 08:40:30 by michaels] 2003-09-08 Mike Sperber <mike@xemacs.org> * symbols.c (Fvariable_binding_locus): Add, as per suggestion from RMS at: http://article.gmane.org/gmane.emacs.pretest.bugs/1010
author michaels
date Wed, 10 Sep 2003 08:40:41 +0000
parents 9f8a8fc32b1b
children 114679353c2f
files src/ChangeLog src/symbols.c
diffstat 2 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Sep 09 21:53:44 2003 +0000
+++ b/src/ChangeLog	Wed Sep 10 08:40:41 2003 +0000
@@ -1,3 +1,9 @@
+2003-09-08  Mike Sperber  <mike@xemacs.org>
+
+	* symbols.c (Fvariable_binding_locus): Add, as per suggestion from
+	RMS at:
+	http://article.gmane.org/gmane.emacs.pretest.bugs/1010
+
 2003-09-03  Steve Youngs  <youngs@xemacs.org>
 
 	* XEmacs 21.5.15 "celery" is released.
--- a/src/symbols.c	Tue Sep 09 21:53:44 2003 +0000
+++ b/src/symbols.c	Wed Sep 10 08:40:41 2003 +0000
@@ -3211,6 +3211,31 @@
   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                            */
@@ -3597,7 +3622,6 @@
   DEFSYMBOL (Qsymbol_value_in_buffer);
   DEFSYMBOL (Qsymbol_value_in_console);
   DEFSYMBOL (Qlocal_variable_p);
-
   DEFSYMBOL (Qconst_integer);
   DEFSYMBOL (Qconst_boolean);
   DEFSYMBOL (Qconst_object);
@@ -3644,6 +3668,7 @@
   DEFSUBR (Fdefvaralias);
   DEFSUBR (Fvariable_alias);
   DEFSUBR (Findirect_variable);
+  DEFSUBR (Fvariable_binding_locus);
   DEFSUBR (Fdontusethis_set_symbol_value_handler);
 }