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

ruby-changes:25135

From: ko1 <ko1@a...>
Date: Mon, 15 Oct 2012 09:44:26 +0900 (JST)
Subject: [ruby-changes:25135] ko1:r37187 (trunk): * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): skip CI_SET_FASTPATH() if

ko1	2012-10-15 09:44:04 +0900 (Mon, 15 Oct 2012)

  New Revision: 37187

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

  Log:
    * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): skip CI_SET_FASTPATH() if
      it was called from vm_yield_setup_args().

  Modified files:
    trunk/ChangeLog
    trunk/vm_insnhelper.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37186)
+++ ChangeLog	(revision 37187)
@@ -1,3 +1,8 @@
+Mon Oct 15 09:41:17 2012  Koichi Sasada  <ko1@a...>
+
+	* vm_insnhelper.c (VM_CALLEE_SETUP_ARG): skip CI_SET_FASTPATH() if
+	  it was called from vm_yield_setup_args().
+
 Mon Oct 15 05:20:13 2012  Koichi Sasada  <ko1@a...>
 
 	* vm_insnhelper.h CI_SET_FASTPATH: introduce new macro
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 37186)
+++ vm_insnhelper.c	(revision 37187)
@@ -1176,14 +1176,14 @@
 
 static VALUE vm_call_iseq_setup_2(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci);
 
-#define VM_CALLEE_SETUP_ARG(th, ci, iseq, argv) \
+#define VM_CALLEE_SETUP_ARG(th, ci, iseq, argv, is_lambda) \
     if (LIKELY((iseq)->arg_simple & 0x01)) { \
 	/* simple check */ \
 	if ((ci)->argc != (iseq)->argc) { \
 	    argument_error((iseq), ((ci)->argc), (iseq)->argc, (iseq)->argc); \
 	} \
 	(ci)->opt_pc = 0; \
-	CI_SET_FASTPATH((ci), vm_call_iseq_setup_2); \
+	if (!is_lambda) CI_SET_FASTPATH((ci), vm_call_iseq_setup_2); \
     } \
     else { \
 	(ci)->opt_pc = vm_callee_setup_arg_complex((th), (ci), (iseq), (argv)); \
@@ -1192,7 +1192,7 @@
 static VALUE
 vm_call_iseq_setup(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
 {
-    VM_CALLEE_SETUP_ARG(th, ci, ci->me->def->body.iseq, cfp->sp - ci->argc);
+    VM_CALLEE_SETUP_ARG(th, ci, ci->me->def->body.iseq, cfp->sp - ci->argc, 0);
     return vm_call_iseq_setup_2(th, cfp, ci);
 }
 
@@ -1955,7 +1955,7 @@
 	ci_entry.flag = 0;
 	ci_entry.argc = argc;
 	ci_entry.blockptr = (rb_block_t *)blockptr;
-	VM_CALLEE_SETUP_ARG(th, &ci_entry, iseq, argv);
+	VM_CALLEE_SETUP_ARG(th, &ci_entry, iseq, argv, 1);
 	return ci_entry.opt_pc;
     }
     else {

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

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