diff options
-rw-r--r-- | libguile/modules.c | 27 | ||||
-rw-r--r-- | test-suite/tests/modules.test | 12 |
2 files changed, 25 insertions, 14 deletions
diff --git a/libguile/modules.c b/libguile/modules.c index 545281a18..fc6ff3b47 100644 --- a/libguile/modules.c +++ b/libguile/modules.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998,2000,2001,2002,2003,2004,2006,2007,2008,2009 Free Software Foundation, Inc. +/* Copyright (C) 1998,2000,2001,2002,2003,2004,2006,2007,2008,2009,2010 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -801,6 +801,8 @@ SCM_DEFINE (scm_module_reverse_lookup, "module-reverse-lookup", 2, 0, 0, obarray = SCM_MODULE_OBARRAY (module); } + SCM_VALIDATE_VARIABLE (SCM_ARG2, variable); + if (!SCM_HASHTABLE_P (obarray)) return SCM_BOOL_F; @@ -830,17 +832,18 @@ SCM_DEFINE (scm_module_reverse_lookup, "module-reverse-lookup", 2, 0, 0, } } - /* Try the `uses' list. */ - { - SCM uses = SCM_MODULE_USES (module); - while (scm_is_pair (uses)) - { - SCM sym = scm_module_reverse_lookup (SCM_CAR (uses), variable); - if (scm_is_true (sym)) - return sym; - uses = SCM_CDR (uses); - } - } + if (!scm_is_false (module)) + { + /* Try the `uses' list. */ + SCM uses = SCM_MODULE_USES (module); + while (scm_is_pair (uses)) + { + SCM sym = scm_module_reverse_lookup (SCM_CAR (uses), variable); + if (scm_is_true (sym)) + return sym; + uses = SCM_CDR (uses); + } + } return SCM_BOOL_F; } diff --git a/test-suite/tests/modules.test b/test-suite/tests/modules.test index f22cfe9c1..ebcafe3a0 100644 --- a/test-suite/tests/modules.test +++ b/test-suite/tests/modules.test @@ -1,6 +1,6 @@ ;;;; modules.test --- exercise some of guile's module stuff -*- scheme -*- -;;;; Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. +;;;; Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -125,7 +125,15 @@ (map module-variable (map resolve-interface mods) syms) - locals)))) + locals))) + + (pass-if "module-reverse-lookup [pre-module-obarray]" + (let ((var (module-variable (current-module) 'string?))) + (eq? 'string? (module-reverse-lookup #f var)))) + + (pass-if-exception "module-reverse-lookup [wrong-type-arg]" + exception:wrong-type-arg + (module-reverse-lookup (current-module) 'foo))) |