diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-24 14:06:31 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-24 14:06:31 +0000 |
commit | d3326ddf1113a0b0788658e5ef6131f2722ab3c4 (patch) | |
tree | dfaf4aee22a13609637b194305a8d7820048598b | |
parent | 0e3822c1e2e81baa96793e881cbbdfc2db7aba3a (diff) |
* vm_insnhelper.c (vm_get_ev_const): should not autoload in
defined? mode.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31170 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/ruby/test_defined.rb | 11 | ||||
-rw-r--r-- | vm_insnhelper.c | 1 |
3 files changed, 16 insertions, 1 deletions
@@ -1,4 +1,7 @@ -Thu Mar 24 23:05:42 2011 Nobuyoshi Nakada <nobu@ruby-lang.org> +Thu Mar 24 23:06:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * vm_insnhelper.c (vm_get_ev_const): should not autoload in + defined? mode. * variable.c (rb_const_defined_0): fix autoloading base. [ruby-core:35509] diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb index e1d685275d..6a1f702648 100644 --- a/test/ruby/test_defined.rb +++ b/test/ruby/test_defined.rb @@ -103,4 +103,15 @@ class TestDefined < Test::Unit::TestCase end assert_equal("constant", klass.new.a?, bug) end + + def test_autoloaded_noload + klass = Class.new do + autoload(:A, "a") + def a? + defined?(A) + end + end + x = klass.new + assert_equal("constant", x.a?) + end end diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 3666aed53e..00a21e3669 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1177,6 +1177,7 @@ vm_get_ev_const(rb_thread_t *th, const rb_iseq_t *iseq, if (val == Qundef) { if (am == klass) break; am = klass; + if (is_defined) return 1; rb_autoload_load(klass, id); goto search_continue; } |