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

ruby-changes:6841

From: nobu <ko1@a...>
Date: Mon, 4 Aug 2008 17:38:03 +0900 (JST)
Subject: [ruby-changes:6841] Ruby:r18357 (trunk): * vm_eval.c (vm_call_super): fixed typo, and get rid of too large

nobu	2008-08-04 17:37:48 +0900 (Mon, 04 Aug 2008)

  New Revision: 18357

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

  Log:
    * vm_eval.c (vm_call_super): fixed typo, and get rid of too large
      alloca.  [ruby-core:17922]

  Modified files:
    trunk/ChangeLog
    trunk/vm_eval.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18356)
+++ ChangeLog	(revision 18357)
@@ -1,3 +1,8 @@
+Mon Aug  4 17:37:46 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* vm_eval.c (vm_call_super): fixed typo, and get rid of too large
+	  alloca.  [ruby-core:17922]
+
 Mon Aug  4 16:48:50 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (deferred_nodes, compstmt, arg, fixup_nodes, range_op): fix
Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 18356)
+++ vm_eval.c	(revision 18357)
@@ -148,12 +148,21 @@
 	body = body->nd_body;
     }
     else {
-	VALUE *argv_m = ALLOCA_N(VALUE, argc+1);
+	VALUE *argv_m, result, argv_ary = 0;
+	if (argc < 0x100) {
+	    argv_m = ALLOCA_N(VALUE, argc+1);
+	}
+	else {
+	    argv_ary = rb_ary_tmp_new(argc+1);
+	    argv_m = RARRAY_PTR(argv_ary);
+	}
 	MEMCPY(argv_m + 1, argv, VALUE, argc);
 	argv_m[0] = ID2SYM(id);
 	th->method_missing_reason = 0;
 	th->passed_block = 0;
-	return rb_funcall2(recv, idMethodMissing, argc + 1, argv);
+	result = rb_funcall2(recv, idMethodMissing, argc + 1, argv_m);
+	if (argv_ary) rb_ary_clear(argv_ary);
+	return result;
     }
 
     return vm_call0(th, klass, recv, id, id, argc, argv, body, CALL_SUPER);

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

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