summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--range.c4
-rw-r--r--test/ruby/test_range.rb7
3 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c462ede0e4..b7707a7271 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,10 @@
-Mon Sep 10 15:22:24 2007 Tanaka Akira <akr@fsij.org>
+Mon Sep 10 15:48:31 2007 Tanaka Akira <akr@fsij.org>
* range.c: represent initialized state using EXCL instead of FL_USER3.
+ * range.c (range_dumper): make uninitialized range dumpable.
+ (range_loader): make uninitialized range loadable.
+
Mon Sep 10 13:44:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* array.c (rb_ary_cycle): avoid infinite loop for empty array.
diff --git a/range.c b/range.c
index 079ed6bf6c..4823391d3b 100644
--- a/range.c
+++ b/range.c
@@ -758,7 +758,7 @@ range_dumper(VALUE range)
v = (VALUE)m;
- rb_ivar_set(v, id_excl, EXCL(range) ? Qtrue : Qfalse);
+ rb_ivar_set(v, id_excl, RANGE_EXCL(range));
rb_ivar_set(v, id_beg, RANGE_BEG(range));
rb_ivar_set(v, id_end, RANGE_END(range));
return v;
@@ -773,7 +773,7 @@ range_loader(VALUE range, VALUE obj)
RSTRUCT(range)->as.ary[0] = rb_ivar_get(obj, id_beg);
RSTRUCT(range)->as.ary[1] = rb_ivar_get(obj, id_end);
- SET_EXCL(range, RTEST(rb_ivar_get(obj, id_excl)));
+ RSTRUCT(range)->as.ary[2] = rb_ivar_get(obj, id_excl);
return range;
}
diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb
index 847e261f97..34179af74d 100644
--- a/test/ruby/test_range.rb
+++ b/test/ruby/test_range.rb
@@ -64,4 +64,11 @@ class TestRange < Test::Unit::TestCase
r = eval("1..2")
assert_raise(NameError) { r.instance_eval { initialize 3, 4 } }
end
+
+ def test_uninitialized_range
+ r = Range.allocate
+ s = Marshal.dump(r)
+ r = Marshal.load(s)
+ assert_nothing_raised { r.instance_eval { initialize 5, 6} }
+ end
end