summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorksss <[email protected]>2016-11-17 14:57:30 +0900
committerksss <[email protected]>2016-11-17 14:57:30 +0900
commit176d93d72a9322f7f8e41aea0b06a857b7ba23aa (patch)
treedadf6c3fdaef2ce164177830e8df42ea46cf12a4
parent1685eff2a5e672173d67916a1c96648df92b7271 (diff)
downloadmruby-176d93d72a9322f7f8e41aea0b06a857b7ba23aa.tar.gz
mruby-176d93d72a9322f7f8e41aea0b06a857b7ba23aa.zip
Ranges should not rewrite
-rw-r--r--src/range.c3
-rw-r--r--test/t/range.rb2
2 files changed, 5 insertions, 0 deletions
diff --git a/src/range.c b/src/range.c
index 079a1035e..41b41237c 100644
--- a/src/range.c
+++ b/src/range.c
@@ -129,6 +129,9 @@ mrb_range_initialize(mrb_state *mrb, mrb_value range)
exclusive = FALSE;
}
/* Ranges are immutable, so that they should be initialized only once. */
+ if (mrb_range_ptr(range)->edges) {
+ mrb_name_error(mrb, mrb_intern_lit(mrb, "initialize"), "`initialize' called twice");
+ }
range_init(mrb, range, beg, end, exclusive);
return range;
}
diff --git a/test/t/range.rb b/test/t/range.rb
index 278b26902..c542c8f06 100644
--- a/test/t/range.rb
+++ b/test/t/range.rb
@@ -57,6 +57,8 @@ assert('Range#initialize', '15.2.14.4.9') do
assert_true a.exclude_end?
assert_equal (1..10), b
assert_false b.exclude_end?
+
+ assert_raise(NameError) { (0..1).send(:initialize, 1, 3) }
end
assert('Range#last', '15.2.14.4.10') do