summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-28 15:58:32 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-28 15:58:32 +0000
commit962bcf1394762f297331f0a5a79c8fc3cc55ed10 (patch)
treed82f07a115b775135a5399260bce12db80469899 /variable.c
parent2a05d8c7fb304a24f716458104128b830d435322 (diff)
* eval.c (ev_const_get), variable.c (rb_const_get_0): retry only when
autoload succeeded. * variable.c (rb_autoload_load): now return true if autoload succeeded. fixed: [ruby-dev:27331] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/variable.c b/variable.c
index 24a339b09d..afa05e3ff8 100644
--- a/variable.c
+++ b/variable.c
@@ -1215,16 +1215,16 @@ autoload_delete(VALUE mod, ID id)
return (NODE *)load;
}
-void
+VALUE
rb_autoload_load(VALUE klass, ID id)
{
VALUE file;
NODE *load = autoload_delete(klass, id);
if (!load || !(file = load->nd_lit) || rb_provided(RSTRING(file)->ptr)) {
- const_missing(klass, id);
+ return Qfalse;
}
- rb_require_safe(file, load->nd_nth);
+ return rb_require_safe(file, load->nd_nth);
}
static VALUE
@@ -1283,7 +1283,7 @@ rb_const_get_0(VALUE klass, ID id, int exclude, int recurse)
while (tmp) {
while (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,&value)) {
if (value == Qundef) {
- rb_autoload_load(tmp, id);
+ if (!RTEST(rb_autoload_load(tmp, id))) break;
continue;
}
if (exclude && tmp == rb_cObject && klass != rb_cObject) {