diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-12-04 15:19:33 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2006-12-04 15:19:33 +0000 |
commit | f4aca06c84eb57e1b7048e5c28daa03f39258ddc (patch) | |
tree | 9041f38521e1caf750aae67f0930686778c89c97 /variable.c | |
parent | 8d69c7f116d8f9053c91d86f437d6bccf4ab4a7b (diff) | |
download | ruby-f4aca06c84eb57e1b7048e5c28daa03f39258ddc.tar.gz |
* intern.h, object.c, variable.c (rb_mod_constants): added an optional
flag to search ancestors, which is defaulted to true, as well as
const_defined? and const_get. [ruby-dev:29989]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11338 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/variable.c b/variable.c index 9c51b9d4d5..c992bcc9c4 100644 --- a/variable.c +++ b/variable.c @@ -1438,17 +1438,38 @@ rb_const_list(void *data) /* * call-seq: - * mod.constants => array - * + * mod.constants(inherit=true) => array + * * Returns an array of the names of the constants accessible in * <i>mod</i>. This includes the names of constants in any included - * modules (example at start of section). + * modules (example at start of section), unless the <i>all</i> + * parameter is set to <code>false</code>. + * + * IO.constants.include?("SYNC") => true + * IO.constants(false).include?("SYNC") => false + * + * Also see <code>Module::const_defined?</code>. */ VALUE -rb_mod_constants(VALUE mod) +rb_mod_constants(int argc, VALUE *argv, VALUE mod) { - return rb_const_list(rb_mod_const_of(mod, 0)); + VALUE inherit; + st_table *tbl; + + if (argc == 0) { + inherit = Qtrue; + } + else { + rb_scan_args(argc, argv, "01", &inherit); + } + if (RTEST(inherit)) { + tbl = rb_mod_const_of(mod, 0); + } + else { + tbl = rb_mod_const_at(mod, 0); + } + return rb_const_list(tbl); } static int |