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

ruby-changes:8125

From: nobu <ko1@a...>
Date: Wed, 1 Oct 2008 19:12:07 +0900 (JST)
Subject: [ruby-changes:8125] Ruby:r19653 (ruby_1_8, trunk): * marshal.c (marshal_dump): fixed for check_dump_arg.

nobu	2008-10-01 19:11:51 +0900 (Wed, 01 Oct 2008)

  New Revision: 19653

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19653

  Log:
    * marshal.c (marshal_dump): fixed for check_dump_arg.

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/marshal.c
    trunk/ChangeLog
    trunk/marshal.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19652)
+++ ChangeLog	(revision 19653)
@@ -1,5 +1,7 @@
-Wed Oct  1 18:57:31 2008  Nobuyoshi Nakada  <nobu@r...>
+Wed Oct  1 19:11:48 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* marshal.c (marshal_dump): fixed for check_dump_arg.
+
 	* marshal.c (marshal_dump): initializes dump_arg before any funcall.
 	  [ruby-dev:36648]
 
Index: marshal.c
===================================================================
--- marshal.c	(revision 19652)
+++ marshal.c	(revision 19653)
@@ -79,7 +79,7 @@
 #define TYPE_LINK	'@'
 
 static ID s_dump, s_load, s_mdump, s_mload;
-static ID s_dump_data, s_load_data, s_alloc;
+static ID s_dump_data, s_load_data, s_alloc, s_call;
 static ID s_getbyte, s_read, s_write, s_binmode;
 
 ID rb_id_encoding(void);
@@ -150,10 +150,11 @@
 };
 
 static void
-check_dump_arg(struct dump_arg *arg)
+check_dump_arg(struct dump_arg *arg, ID sym)
 {
     if (!DATA_PTR(arg->wrapper)) {
-	rb_raise(rb_eRuntimeError, "Marshal.dump reentered");
+        rb_raise(rb_eRuntimeError, "Marshal.dump reentered at %s",
+		 rb_id2name(sym));
     }
 }
 
@@ -591,7 +592,7 @@
             st_add_direct(arg->data, obj, arg->data->num_entries);
 
 	    v = rb_funcall(obj, s_mdump, 0, 0);
-	    check_dump_arg(arg);
+	    check_dump_arg(arg, s_mdump);
 	    w_class(TYPE_USRMARSHAL, obj, arg, Qfalse);
 	    w_object(v, arg, limit);
 	    if (hasiv) w_ivar(obj, 0, &c_arg);
@@ -603,7 +604,7 @@
             int hasiv2;
 
 	    v = rb_funcall(obj, s_dump, 1, INT2NUM(limit));
-	    check_dump_arg(arg);
+	    check_dump_arg(arg, s_dump);
 	    if (TYPE(v) != T_STRING) {
 		rb_raise(rb_eTypeError, "_dump() must return string");
 	    }
@@ -771,7 +772,7 @@
 			     rb_obj_classname(obj));
 		}
 		v = rb_funcall(obj, s_dump_data, 0);
-		check_dump_arg(arg);
+		check_dump_arg(arg, s_dump_data);
 		w_class(TYPE_DATA, obj, arg, Qtrue);
 		w_object(v, arg, limit);
 	    }
@@ -882,7 +883,7 @@
 	arg.dest = port;
 	if (rb_respond_to(port, s_binmode)) {
 	    rb_funcall2(port, s_binmode, 0, 0);
-	    check_dump_arg(&arg, s_dump_data);
+	    check_dump_arg(&arg, s_binmode);
 	}
     }
     else {
@@ -915,10 +916,11 @@
 };
 
 static void
-check_load_arg(struct load_arg *arg)
+check_load_arg(struct load_arg *arg, ID sym)
 {
     if (!DATA_PTR(arg->wrapper)) {
-	rb_raise(rb_eRuntimeError, "Marshal.load reentered");
+        rb_raise(rb_eRuntimeError, "Marshal.load reentered at %s",
+		 rb_id2name(sym));
     }
 }
 
@@ -952,7 +954,7 @@
     else {
 	VALUE src = arg->src;
 	VALUE v = rb_funcall2(src, s_getbyte, 0, 0);
-	check_load_arg(arg);
+	check_load_arg(arg, s_getbyte);
 	if (NIL_P(v)) rb_eof_error();
 	c = (unsigned char)NUM2CHR(v);
     }
@@ -1029,7 +1031,7 @@
 	VALUE src = arg->src;
 	VALUE n = LONG2NUM(len);
 	str = rb_funcall2(src, s_read, 1, &n);
-	check_load_arg(arg);
+	check_load_arg(arg, s_read);
 	if (NIL_P(str)) goto too_short;
 	StringValue(str);
 	if (RSTRING_LEN(str) != len) goto too_short;
@@ -1129,8 +1131,8 @@
         v = real_obj;
     }
     if (arg->proc) {
-	v = rb_funcall(arg->proc, rb_intern("call"), 1, v);
-	check_load_arg(arg);
+	v = rb_funcall(arg->proc, s_call, 1, v);
+	check_load_arg(arg, s_call);
     }
     return v;
 }
@@ -1215,8 +1217,8 @@
 	}
 	v = (VALUE)link;
 	if (arg->proc) {
-	    v = rb_funcall(arg->proc, rb_intern("call"), 1, v);
-	    check_load_arg(arg);
+	    v = rb_funcall(arg->proc, s_call, 1, v);
+	    check_load_arg(arg, s_call);
 	}
 	break;
 
@@ -1460,7 +1462,7 @@
 		*ivp = Qfalse;
 	    }
 	    v = rb_funcall(klass, s_load, 1, data);
-	    check_load_arg(arg);
+	    check_load_arg(arg, s_load);
 	    v = r_entry(v, arg);
             v = r_leave(v, arg);
 	}
@@ -1485,7 +1487,7 @@
 	    v = r_entry(v, arg);
 	    data = r_object(arg);
 	    rb_funcall(v, s_mload, 1, data);
-	    check_load_arg(arg);
+	    check_load_arg(arg, s_mload);
             v = r_leave(v, arg);
 	}
         break;
@@ -1512,7 +1514,7 @@
 		   warn = Qfalse;
 	       }
 	       v = rb_funcall(klass, s_alloc, 0);
-	       check_load_arg(arg);
+	       check_load_arg(arg, s_alloc);
            }
 	   else {
 	       v = rb_obj_alloc(klass);
@@ -1527,7 +1529,7 @@
                         rb_class2name(klass));
            }
            rb_funcall(v, s_load_data, 1, r_object0(arg, 0, extmod));
-	   check_load_arg(arg);
+	   check_load_arg(arg, s_load_data);
            v = r_leave(v, arg);
        }
        break;
@@ -1712,6 +1714,7 @@
     s_dump_data = rb_intern("_dump_data");
     s_load_data = rb_intern("_load_data");
     s_alloc = rb_intern("_alloc");
+    s_call = rb_intern("call");
     s_getbyte = rb_intern("getbyte");
     s_read = rb_intern("read");
     s_write = rb_intern("write");
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 19652)
+++ ruby_1_8/ChangeLog	(revision 19653)
@@ -1,5 +1,7 @@
-Wed Oct  1 18:57:31 2008  Nobuyoshi Nakada  <nobu@r...>
+Wed Oct  1 19:11:48 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* marshal.c (marshal_dump): fixed for check_dump_arg.
+
 	* marshal.c (marshal_dump): initializes dump_arg before any funcall.
 	  [ruby-dev:36648]
 
Index: ruby_1_8/marshal.c
===================================================================
--- ruby_1_8/marshal.c	(revision 19652)
+++ ruby_1_8/marshal.c	(revision 19653)
@@ -791,7 +791,7 @@
 	arg.dest = port;
 	if (rb_respond_to(port, s_binmode)) {
 	    rb_funcall2(port, s_binmode, 0, 0);
-	    check_dump_arg(&arg, s_dump_data);
+	    check_dump_arg(&arg, s_binmode);
 	}
     }
     else {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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