summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-04 15:19:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-04 15:19:33 +0000
commitf4aca06c84eb57e1b7048e5c28daa03f39258ddc (patch)
tree9041f38521e1caf750aae67f0930686778c89c97 /variable.c
parent8d69c7f116d8f9053c91d86f437d6bccf4ab4a7b (diff)
* 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.c31
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