From 42c98194b37bf2c0b0f3f88f8530f46f55a6d55c Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 19 Oct 2017 10:58:08 +0000 Subject: [PATCH] freeze Complex and Rational * complex.c (nucomp_s_new_internal, nucomp_loader): Complex instances are always frozen now. [Feature #13983] * rational.c (nurat_s_new_internal, nurat_loader): Rational instances are always frozen now. [Feature #13983] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- complex.c | 2 ++ rational.c | 2 ++ test/ruby/test_complex.rb | 4 ---- test/ruby/test_rational.rb | 4 ---- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/complex.c b/complex.c index 5d84106441..b340a55502 100644 --- a/complex.c +++ b/complex.c @@ -298,6 +298,7 @@ nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag) RCOMPLEX_SET_REAL(obj, real); RCOMPLEX_SET_IMAG(obj, imag); + OBJ_FREEZE_RAW(obj); return (VALUE)obj; } @@ -1406,6 +1407,7 @@ nucomp_loader(VALUE self, VALUE a) RCOMPLEX_SET_REAL(dat, rb_ivar_get(a, id_i_real)); RCOMPLEX_SET_IMAG(dat, rb_ivar_get(a, id_i_imag)); + OBJ_FREEZE_RAW(self); return self; } diff --git a/rational.c b/rational.c index ce95facda0..0617fd7327 100644 --- a/rational.c +++ b/rational.c @@ -410,6 +410,7 @@ nurat_s_new_internal(VALUE klass, VALUE num, VALUE den) RRATIONAL_SET_NUM(obj, num); RRATIONAL_SET_DEN(obj, den); + OBJ_FREEZE_RAW(obj); return (VALUE)obj; } @@ -1855,6 +1856,7 @@ nurat_loader(VALUE self, VALUE a) nurat_canonicalize(&num, &den); RRATIONAL_SET_NUM(dat, num); RRATIONAL_SET_DEN(dat, den); + OBJ_FREEZE_RAW(self); return self; } diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb index a195e0d4fb..ded316841a 100644 --- a/test/ruby/test_complex.rb +++ b/test/ruby/test_complex.rb @@ -75,7 +75,6 @@ class Complex_Test < Test::Unit::TestCase def test_freeze c = Complex(1) - c.freeze assert_predicate(c, :frozen?) assert_instance_of(String, c.to_s) end @@ -534,12 +533,10 @@ class Complex_Test < Test::Unit::TestCase def test_marshal c = Complex(1,2) - c.instance_eval{@ivar = 9} s = Marshal.dump(c) c2 = Marshal.load(s) assert_equal(c, c2) - assert_equal(9, c2.instance_variable_get(:@ivar)) assert_instance_of(Complex, c2) c = Complex(Rational(1,2),Rational(2,3)) @@ -551,7 +548,6 @@ class Complex_Test < Test::Unit::TestCase bug3656 = '[ruby-core:31622]' c = Complex(1,2) - c.freeze assert_predicate(c, :frozen?) result = c.marshal_load([2,3]) rescue :fail assert_equal(:fail, result, bug3656) diff --git a/test/ruby/test_rational.rb b/test/ruby/test_rational.rb index be90bf85bf..d94ded3fe3 100644 --- a/test/ruby/test_rational.rb +++ b/test/ruby/test_rational.rb @@ -59,7 +59,6 @@ class Rational_Test < Test::Unit::TestCase def test_freeze c = Rational(1) - c.freeze assert_predicate(c, :frozen?) assert_instance_of(String, c.to_s) end @@ -639,12 +638,10 @@ class Rational_Test < Test::Unit::TestCase def test_marshal c = Rational(1,2) - c.instance_eval{@ivar = 9} s = Marshal.dump(c) c2 = Marshal.load(s) assert_equal(c, c2) - assert_equal(9, c2.instance_variable_get(:@ivar)) assert_instance_of(Rational, c2) assert_raise(TypeError){ @@ -657,7 +654,6 @@ class Rational_Test < Test::Unit::TestCase bug3656 = '[ruby-core:31622]' c = Rational(1,2) - c.freeze assert_predicate(c, :frozen?) result = c.marshal_load([2,3]) rescue :fail assert_equal(:fail, result, bug3656)