1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

range.c: check if range modifiable

* range.c (range_modify): frozen object cannot be modified.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56693 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-11-10 10:39:51 +00:00
parent 04a4fd8957
commit 1a7aba1b47
2 changed files with 7 additions and 0 deletions

View file

@ -80,6 +80,7 @@ rb_range_new(VALUE beg, VALUE end, int exclude_end)
static void
range_modify(VALUE range)
{
rb_check_frozen(range);
/* Ranges are immutable, so that they should be initialized only once. */
if (RANGE_EXCL(range) != Qnil) {
rb_name_err_raise("`initialize' called twice", range, ID2SYM(idInitialize));

View file

@ -11,6 +11,12 @@ class TestRange < Test::Unit::TestCase
assert_equal((0...2), Range.new(0, 2, true))
end
def test_frozen_initialize
r = Range.allocate
r.freeze
assert_raise(RuntimeError){r.__send__(:initialize, 1, 2)}
end
def test_range_string
# XXX: Is this really the test of Range?
assert_equal([], ("a" ... "a").to_a)