guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] GNU Guile branch, master, updated. release_1-9-1-50-gdab


From: Ludovic Courtès
Subject: [Guile-commits] GNU Guile branch, master, updated. release_1-9-1-50-gdab1ed3
Date: Mon, 10 Aug 2009 17:25:18 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=dab1ed3767c4fb8840401624e6c5a315e5cb5692

The branch, master has been updated
       via  dab1ed3767c4fb8840401624e6c5a315e5cb5692 (commit)
      from  32be5735cd89931048f12283f3977c72cd292f77 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit dab1ed3767c4fb8840401624e6c5a315e5cb5692
Author: Ludovic Courtès <address@hidden>
Date:   Mon Aug 10 19:24:34 2009 +0200

    Change `defined?' to accept a module as its second argument.
    
    Reported by Daniel Kraft <address@hidden>.
    
    * doc/ref/api-binding.texi (Binding Reflection): Update documentation of
      `defined?'.
    
    * libguile/evalext.c (scm_defined_p): Expect a module as the second
      argument, not a lexical environment.

-----------------------------------------------------------------------

Summary of changes:
 doc/ref/api-binding.texi |   16 +++++++++++-----
 libguile/evalext.c       |   46 ++++++++++------------------------------------
 2 files changed, 21 insertions(+), 41 deletions(-)

diff --git a/doc/ref/api-binding.texi b/doc/ref/api-binding.texi
index b42f556..e53c480 100644
--- a/doc/ref/api-binding.texi
+++ b/doc/ref/api-binding.texi
@@ -1,6 +1,6 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Guile Reference Manual.
address@hidden Copyright (C)  1996, 1997, 2000, 2001, 2002, 2003, 2004
address@hidden Copyright (C)  1996, 1997, 2000, 2001, 2002, 2003, 2004, 2009
 @c   Free Software Foundation, Inc.
 @c See the file guile.texi for copying conditions.
 
@@ -271,10 +271,16 @@ with duplicate bindings.
 Guile provides a procedure for checking whether a symbol is bound in the
 top level environment.
 
address@hidden NJFIXME explain [env]
address@hidden {Scheme Procedure} defined? sym [env]
address@hidden {C Function} scm_defined_p (sym, env)
-Return @code{#t} if @var{sym} is defined in the lexical environment @var{env}. 
 When @var{env} is not specified, look in the top-level environment as defined 
by the current module.
address@hidden {Scheme Procedure} defined? sym [module]
address@hidden {C Function} scm_defined_p (sym, module)
+Return @code{#t} if @var{sym} is defined in the module @var{module} or
+the current module when @var{module} is not specified; otherwise return
address@hidden
+
+Up to Guile 1.8, the second optional argument had to be @dfn{lexical
+environment} as returned by @code{the-environment}, for example.  The
+behavior of this function remains unchanged when the second argument is
+omitted.
 @end deffn
 
 
diff --git a/libguile/evalext.c b/libguile/evalext.c
index 56f74e2..19d8f2e 100644
--- a/libguile/evalext.c
+++ b/libguile/evalext.c
@@ -31,49 +31,23 @@
 #include "libguile/evalext.h"
 
 SCM_DEFINE (scm_defined_p, "defined?", 1, 1, 0,
-            (SCM sym, SCM env),
-           "Return @code{#t} if @var{sym} is defined in the lexical "
-           "environment @var{env}.  When @var{env} is not specified, "
-           "look in the top-level environment as defined by the "
-           "current module.")
+            (SCM sym, SCM module),
+           "Return @code{#t} if @var{sym} is defined in the module "
+           "@var{module} or the current module when @var{module} is not"
+           "specified.")
 #define FUNC_NAME s_scm_defined_p
 {
   SCM var;
 
   SCM_VALIDATE_SYMBOL (1, sym);
 
-  if (SCM_UNBNDP (env))
-    var = scm_sym2var (sym, scm_current_module_lookup_closure (),
-                        SCM_BOOL_F);
+  if (SCM_UNBNDP (module))
+    module = scm_current_module ();
   else
-    {
-      SCM frames = env;
-      register SCM b;
-      for (; SCM_NIMP (frames); frames = SCM_CDR (frames))
-       {
-         SCM_ASSERT (scm_is_pair (frames), env, SCM_ARG2, FUNC_NAME);
-         b = SCM_CAR (frames);
-         if (scm_is_true (scm_procedure_p (b)))
-           break;
-         SCM_ASSERT (scm_is_pair (b), env, SCM_ARG2, FUNC_NAME);
-         for (b = SCM_CAR (b); SCM_NIMP (b); b = SCM_CDR (b))
-           {
-             if (!scm_is_pair (b))
-               {
-                 if (scm_is_eq (b, sym))
-                   return SCM_BOOL_T;
-                 else
-                   break;
-               }
-             if (scm_is_eq (SCM_CAR (b), sym))
-               return SCM_BOOL_T;
-           }
-       }
-      var = scm_sym2var (sym,
-                        SCM_NIMP (frames) ? SCM_CAR (frames) : SCM_BOOL_F,
-                        SCM_BOOL_F);
-    }
-             
+    SCM_VALIDATE_MODULE (2, module);
+
+  var = scm_module_variable (module, sym);
+
   return (scm_is_false (var) || SCM_UNBNDP (SCM_VARIABLE_REF (var))
          ? SCM_BOOL_F
          : SCM_BOOL_T);


hooks/post-receive
-- 
GNU Guile




reply via email to

[Prev in Thread] Current Thread [Next in Thread]