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

ruby-changes:22068

From: nobu <ko1@a...>
Date: Sat, 24 Dec 2011 12:39:09 +0900 (JST)
Subject: [ruby-changes:22068] nobu:r34117 (trunk): * proc.c (proc_call): get rid of optimazation-out by clang.

nobu	2011-12-24 12:38:56 +0900 (Sat, 24 Dec 2011)

  New Revision: 34117

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

  Log:
    * proc.c (proc_call): get rid of optimazation-out by clang.
    * proc.c (rb_proc_call, rb_proc_call_with_block): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/proc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34116)
+++ ChangeLog	(revision 34117)
@@ -1,3 +1,9 @@
+Sat Dec 24 12:38:53 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* proc.c (proc_call): get rid of optimazation-out by clang.
+
+	* proc.c (rb_proc_call, rb_proc_call_with_block): ditto.
+
 Sat Dec 24 10:56:32 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* ext/readline/readline.c (readline_readline): check if outstream
Index: proc.c
===================================================================
--- proc.c	(revision 34116)
+++ proc.c	(revision 34117)
@@ -544,6 +544,7 @@
 static VALUE
 proc_call(int argc, VALUE *argv, VALUE procval)
 {
+    VALUE vret;
     rb_proc_t *proc;
     rb_block_t *blockptr = 0;
     rb_iseq_t *iseq;
@@ -560,8 +561,10 @@
 	}
     }
 
-    return rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
+    vret = rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
 			     argc, argv, blockptr);
+    RB_GC_GUARD(procval);
+    return vret;
 }
 
 #if SIZEOF_LONG > SIZEOF_INT
@@ -581,15 +584,20 @@
 VALUE
 rb_proc_call(VALUE self, VALUE args)
 {
+    VALUE vret;
     rb_proc_t *proc;
     GetProcPtr(self, proc);
-    return rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
+    vret = rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
 			     check_argc(RARRAY_LEN(args)), RARRAY_PTR(args), 0);
+    RB_GC_GUARD(self);
+    RB_GC_GUARD(args);
+    return vret;
 }
 
 VALUE
 rb_proc_call_with_block(VALUE self, int argc, VALUE *argv, VALUE pass_procval)
 {
+    VALUE vret;
     rb_proc_t *proc;
     rb_block_t *block = 0;
     GetProcPtr(self, proc);
@@ -600,8 +608,11 @@
 	block = &pass_proc->block;
     }
 
-    return rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
+    vret = rb_vm_invoke_proc(GET_THREAD(), proc, proc->block.self,
 			     argc, argv, block);
+    RB_GC_GUARD(self);
+    RB_GC_GUARD(pass_procval);
+    return vret;
 }
 
 /*

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

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