* 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
This commit is contained in:
nobu 2006-12-04 15:19:33 +00:00
parent 8d69c7f116
commit f4aca06c84
5 changed files with 40 additions and 10 deletions

View file

@ -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