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

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
This commit is contained in:
nobu 2017-10-19 10:58:08 +00:00
parent 8b501f6d7f
commit 42c98194b3
4 changed files with 4 additions and 8 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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)

View file

@ -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)