[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]