ruby-changes:22006
From: nobu <ko1@a...>
Date: Thu, 15 Dec 2011 17:57:12 +0900 (JST)
Subject: [ruby-changes:22006] nobu:r34055 (trunk): * io.c (argf_type): make typed data.
nobu 2011-12-15 17:57:01 +0900 (Thu, 15 Dec 2011) New Revision: 34055 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34055 Log: * io.c (argf_type): make typed data. Modified files: trunk/ChangeLog trunk/io.c trunk/test/objspace/test_objspace.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 34054) +++ ChangeLog (revision 34055) @@ -1,3 +1,7 @@ +Thu Dec 15 17:56:58 2011 Nobuyoshi Nakada <nobu@r...> + + * io.c (argf_type): make typed data. + Thu Dec 15 17:40:28 2011 Nobuyoshi Nakada <nobu@r...> * error.c (rb_check_type): fix typo. Index: io.c =================================================================== --- io.c (revision 34054) +++ io.c (revision 34055) @@ -7133,6 +7133,21 @@ xfree(p); } +static size_t +argf_memsize(const void *ptr) +{ + const struct argf *p = ptr; + size_t size = sizeof(*p); + if (!ptr) return 0; + if (p->inplace) size += strlen(p->inplace) + 1; + return size; +} + +static const rb_data_type_t argf_type = { + "ARGF", + {argf_mark, argf_free, argf_memsize}, +}; + static inline void argf_init(struct argf *p, VALUE v) { @@ -7146,7 +7161,7 @@ argf_alloc(VALUE klass) { struct argf *p; - VALUE argf = Data_Make_Struct(klass, struct argf, argf_mark, argf_free, p); + VALUE argf = TypedData_Make_Struct(klass, struct argf, &argf_type, p); argf_init(p, Qnil); return argf; Index: test/objspace/test_objspace.rb =================================================================== --- test/objspace/test_objspace.rb (revision 34054) +++ test/objspace/test_objspace.rb (revision 34055) @@ -1,5 +1,6 @@ require "test/unit" require "objspace" +require_relative "../ruby/envutil" class TestObjSpace < Test::Unit::TestCase def test_memsize_of @@ -23,6 +24,17 @@ ObjectSpace.memsize_of(//.match(""))) end + def test_argf_memsize + size = ObjectSpace.memsize_of(ARGF) + assert_kind_of(Integer, size) + assert_operator(size, :>, 0) + argf = ARGF.dup + argf.inplace_mode = nil + size = ObjectSpace.memsize_of(argf) + argf.inplace_mode = "inplace_mode_suffix" + assert_equal(size + 20, ObjectSpace.memsize_of(argf)) + end + def test_memsize_of_all assert_kind_of(Integer, a = ObjectSpace.memsize_of_all) assert_kind_of(Integer, b = ObjectSpace.memsize_of_all(String)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/