vm_insnhelper.c: no warnings for non-object
* vm_insnhelper.c (vm_getivar): no uninitialized instance variables warnings for non-object if attr method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
dcb6e73306
commit
f92db3dd73
@ -1,3 +1,8 @@
|
||||
Wed Dec 12 13:40:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* vm_insnhelper.c (vm_getivar): no uninitialized instance variables
|
||||
warnings for non-object if attr method.
|
||||
|
||||
Wed Dec 12 06:43:37 2012 Benoit Daloze <eregontp@gmail.com>
|
||||
|
||||
* iseq.c (rb_iseq_parameters): fix limit for optional arguments.
|
||||
|
@ -1513,4 +1513,67 @@ class TestModule < Test::Unit::TestCase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class AttrTest
|
||||
class << self
|
||||
attr_accessor :cattr
|
||||
end
|
||||
attr_accessor :iattr
|
||||
def ivar
|
||||
@ivar
|
||||
end
|
||||
end
|
||||
|
||||
def test_uninitialized_instance_variable
|
||||
a = AttrTest.new
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_nil(a.ivar)
|
||||
end
|
||||
assert_match(/instance variable @ivar not initialized/, stderr)
|
||||
a.instance_variable_set(:@ivar, 42)
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_equal(42, a.ivar)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
end
|
||||
|
||||
def test_uninitialized_attr
|
||||
a = AttrTest.new
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_nil(a.iattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
a.iattr = 42
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_equal(42, a.iattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
end
|
||||
|
||||
def test_uninitialized_attr_class
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_nil(AttrTest.cattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
AttrTest.cattr = 42
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_equal(42, AttrTest.cattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
end
|
||||
|
||||
def test_uninitialized_attr_non_object
|
||||
a = Class.new(Array) do
|
||||
attr_accessor :iattr
|
||||
end.new
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_nil(a.iattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
a.iattr = 42
|
||||
stderr = EnvUtil.verbose_warning do
|
||||
assert_equal(42, a.iattr)
|
||||
end
|
||||
assert_equal("", stderr)
|
||||
end
|
||||
end
|
||||
|
@ -538,6 +538,8 @@ vm_getivar(VALUE obj, ID id, IC ic, rb_call_info_t *ci, int is_attr)
|
||||
return val;
|
||||
}
|
||||
#endif /* USE_IC_FOR_IVAR */
|
||||
if (is_attr)
|
||||
return rb_attr_get(obj, id);
|
||||
return rb_ivar_get(obj, id);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user