Project

General

Profile

Feature #11330 ยป 0001-string.c-ensure-String-freeze-resizes-internal-buffe.patch

normalperson (Eric Wong), 07/04/2015 05:28 AM

View differences:

string.c
rb_define_method(rb_cString, "byteslice", rb_str_byteslice, -1);
rb_define_method(rb_cString, "scrub", str_scrub, -1);
rb_define_method(rb_cString, "scrub!", str_scrub_bang, -1);
rb_define_method(rb_cString, "freeze", rb_obj_freeze, 0);
rb_define_method(rb_cString, "freeze", rb_str_freeze, 0);
rb_define_method(rb_cString, "to_i", rb_str_to_i, -1);
rb_define_method(rb_cString, "to_f", rb_str_to_f, 0);
test/ruby/test_optimization.rb
require 'test/unit'
require 'objspace'
class TestRubyOptimization < Test::Unit::TestCase
......
assert_redefine_method('String', 'freeze', 'assert_nil "foo".freeze')
end
def test_string_freeze_saves_memory
n = 16384
data = '.'.freeze
r, w = IO.pipe
w.write data
s = r.readpartial(n, '')
assert_operator ObjectSpace.memsize_of(s), :>=, n,
'IO buffer NOT resized prematurely because will likely be reused'
s.freeze
assert_equal ObjectSpace.memsize_of(data), ObjectSpace.memsize_of(s),
'buffer resized on freeze since it cannot be written to again'
ensure
r.close if r
w.close if w
end
def test_string_eq_neq
%w(== !=).each do |m|
assert_redefine_method('String', m, <<-end)
-
    (1-1/1)