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>
|
Wed Dec 12 06:43:37 2012 Benoit Daloze <eregontp@gmail.com>
|
||||||
|
|
||||||
* iseq.c (rb_iseq_parameters): fix limit for optional arguments.
|
* iseq.c (rb_iseq_parameters): fix limit for optional arguments.
|
||||||
|
@ -1513,4 +1513,67 @@ class TestModule < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
end
|
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
|
end
|
||||||
|
@ -538,6 +538,8 @@ vm_getivar(VALUE obj, ID id, IC ic, rb_call_info_t *ci, int is_attr)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
#endif /* USE_IC_FOR_IVAR */
|
#endif /* USE_IC_FOR_IVAR */
|
||||||
|
if (is_attr)
|
||||||
|
return rb_attr_get(obj, id);
|
||||||
return rb_ivar_get(obj, id);
|
return rb_ivar_get(obj, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user