summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-15 06:15:14 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-05-15 06:15:14 +0000
commitf4a0a7317566bba66b8ea59df99b4b59b3d35d5c (patch)
tree29bf67599b90336e835b9a5ee8d111de41068a63 /variable.c
parentf7c9c767691f0b6f398f28132828893221f45673 (diff)
* variable.c (rb_autoload_load): checks if iv_tbl is valid.
[ruby-dev:38456] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/variable.c b/variable.c
index f2acd13d42..c622229094 100644
--- a/variable.c
+++ b/variable.c
@@ -1432,11 +1432,23 @@ autoload_node(VALUE mod, ID id, int noload)
return 0;
}
+static NODE *
+autoload_node_ptr(VALUE mod, ID id)
+{
+ struct st_table *tbl = RCLASS_IV_TBL(mod);
+ st_data_t val;
+
+ if (!tbl || !st_lookup(tbl, id, &val) || val != Qundef) {
+ return 0;
+ }
+ return autoload_node(mod, id, 0);
+}
+
VALUE
rb_autoload_load(VALUE klass, ID id)
{
VALUE file;
- NODE *load = autoload_node(klass, id, 0);
+ NODE *load = autoload_node_ptr(klass, id);
if (!load) return Qfalse;
file = load->nd_lit;
@@ -1446,15 +1458,10 @@ rb_autoload_load(VALUE klass, ID id)
VALUE
rb_autoload_p(VALUE mod, ID id)
{
- struct st_table *tbl = RCLASS_IV_TBL(mod);
- st_data_t val;
- NODE *load;
VALUE file;
+ NODE *load = autoload_node_ptr(mod, id);
- if (!tbl || !st_lookup(tbl, id, &val) || val != Qundef) {
- return Qnil;
- }
- load = autoload_node(mod, id, 0);
+ if (!load) return Qnil;
return load && (file = load->nd_lit) ? file : Qnil;
}