# Patch for \[ruby-core:15551\]

**URL:** <https://www.ruby-forum.com/t/patch-for-ruby-core-15551/134270>\
**Category:** Development\
**Created:** [April 9, 2008, 12:23pm UTC](https://www.ruby-forum.com/t/patch-for-ruby-core-15551/134270 "2008-04-09T12:23:09Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 9, 2008, 12:23pm UTC](https://www.ruby-forum.com/t/patch-for-ruby-core-15551/134270/1 "2008-04-09T12:23:09Z")

</div>

e$B%o%J%Y$H?=$7$^$9!#e(B

[ruby-core:15551]e$B$KBP$9$k%Q%C%A$r=q$-$^$7$?!#e(B  
Proc#curry e$B$G:n$i$l$?e(B Proc  
e$B%\*%V%8%’%/%H$K%V%m%C%/$rEO$;$k$h$&$K$7$^$7$?!#e(B

proc\_call() e$BCf$Ne(B BUILTIN\_TYPE(proc-\>block.iseq) != T\_NODE  
e$B$N0UL#$,e(B  
e$B$h$/J,$+$i$J$+$C$?$N$G30$7$F$7$^$$$^$7$?$,!“e(B  
e$B2?$+FCJL$J0U?^$N$”$k\<0$J$N$G$7$g$&$+!#e(B

# Index: proc.c

— proc.c (revision 15910)  
+++ proc.c (working copy)  
@@ -496,8 +496,7 @@  
rb\_block\_t \*blockptr = 0;  
GetProcPtr(procval, proc);

- if (BUILTIN\_TYPE(proc-\>block.iseq) != T\_NODE &&
- proc-\>block.iseq-\>arg\_block != -1) {

- if (proc-\>block.iseq-\>arg\_block != -1) {

if (rb\_block\_given\_p()) {  
rb\_proc\_t \*proc;  
@@ -1620,7 +1619,7 @@  
arity = make\_curry\_proc(proc, passed, arity);  
return arity;  
}

- arity = rb\_proc\_call(proc, passed);

- arity = proc\_call(RARRAY\_LEN(passed), RARRAY\_PTR(passed), proc);  
return arity;  
}

# Index: vm.c

— vm.c (revision 15910)  
+++ vm.c (working copy)  
@@ -572,7 +572,7 @@  
val = vm\_eval\_body(th);  
}  
else {

- val = vm\_yield\_with\_cfunc(th, block, self, argc, argv);

- val = vm\_yield\_with\_cfunc(th, block, self, argc, argv, blockptr);  
}  
return val;  
}  
Index: vm\_insnhelper.c  
===================================================================  
— vm\_insnhelper.c (revision 15910)  
+++ vm\_insnhelper.c (working copy)  
@@ -644,7 +644,7 @@

static inline VALUE  
vm\_yield\_with\_cfunc(rb\_thread\_t \*th, rb\_block\_t \*block,

- 

```
   VALUE self, int argc, VALUE *argv)

```

- 

```
   VALUE self, int argc, VALUE *argv, rb_block_t *blockptr)

```

{  
NODE \*ifunc = (NODE \*) block-\>iseq;  
VALUE val;  
@@ -665,7 +665,15 @@  
self, (VALUE)block-\>dfp,  
0, th-\>cfp-\>sp, block-\>lfp, 1);

- val = (\*ifunc-\>nd\_cfnc) (arg, ifunc-\>nd\_tval, argc, argv);

- if (blockptr) {

- VALUE store\_block = th-\>cfp-\>lfp[0];

- th-\>cfp-\>lfp[0] = GC\_GUARDED\_PTR(blockptr);

- val = (\*ifunc-\>nd\_cfnc) (arg, ifunc-\>nd\_tval, argc, argv);

- th-\>cfp-\>lfp[0] = store\_block;

- }

- else {

- val = (\*ifunc-\>nd\_cfnc) (arg, ifunc-\>nd\_tval, argc, argv);

- }

- val = vm\_yield\_with\_cfunc(th, block, block-\>self, argc,  
STACK\_ADDR\_FROM\_TOP(argc));

- val = vm\_yield\_with\_cfunc(th, block, block-\>self, argc,  
STACK\_ADDR\_FROM\_TOP(argc), 0);  
POPN(argc); /\* TODO: should put before C/yield? \*/  
return val;  
}

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 10, 2008, 12:45pm UTC](https://www.ruby-forum.com/t/patch-for-ruby-core-15551/134270/2 "2008-04-10T12:45:32Z")

</div>

e$B1sF#$H?=$7$^$9!#e(B

08/04/09 e$B$Ke(B wanabe[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) e$B$5$s$O=q$-$^$7$?e(B:

> e$B%o%J%Y$H?=$7$^$9!#e(B
> 
> [ruby-core:15551]e$B$KBP$9$k%Q%C%A$r=q$-$^$7$?!#e(B  
> Proc#curry e$B$G:n$i$l$?e(B Proc e$B%\*%V%8%'%/%H$K%V%m%C%/$rEO$;$k$h$&$K$7$^$7$?!#e(B

e$B$_$_$9$P$i$7$$!#$"$j$,$H$&$4$6$$$^$9!#e(B  
e$B\<h$j9~$s$G$b$$$$$G$7$g$&$+!#e(B

Proc#curry e$B$@$1$G$J$/!"$3$s$J%3!\<%I$bF0$/$h$&$K$J$j$^$9$M!#e(B

“a”.method(:upto).to\_proc.call(“c”) {|x| p x }

> proc\_call() e$BCf$Ne(B BUILTIN\_TYPE(proc-\>block.iseq) != T\_NODE e$B$N0UL#$,e(B  
> e$B$h$/J,$+$i$J$+$C$?$N$G30$7$F$7$^$$$^$7$?$,!“e(B  
> e$B2?$+FCJL$J0U?^$N$”$k\<0$J$N$G$7$g$&$+!#e(B

BUILTIN\_TYPE(proc-\>block.iseq) == T\_NODE e$B$N\>l9g!“e(Bproc-\>block.iseq  
e$B$Ke(B  
iseq e$B$G$J$/e(B NODE\_IFUNC e$B$,F~$C$F$$$k$H$$$&$3$H$@$H;W$$$^$9!#e(B  
e$B$3$N$H$-$Ke(B proc-\>block.iseq-\>arg\_block  
e$B$r;2\>H$9$k$N$O$^$:$$$h$&$Je(B  
e$BM=46$,$7$^$9$,!”$I$&$J$s$G$7$g$&!#$3$&$9$Y$-!)e(B

# Index: proc.c

— proc.c (revision 15949)  
+++ proc.c (working copy)  
@@ -496,7 +496,7 @@  
rb\_block\_t \*blockptr = 0;  
GetProcPtr(procval, proc);

- if (BUILTIN\_TYPE(proc-\>block.iseq) != T\_NODE &&

- if (BUILTIN\_TYPE(proc-\>block.iseq) == T\_NODE ||  
proc-\>block.iseq-\>arg\_block != -1) {

if (rb\_block\_given\_p()) {

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 11, 2008, 10:22am UTC](https://www.ruby-forum.com/t/patch-for-ruby-core-15551/134270/3 "2008-04-11T10:22:11Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:34307] Re: patch for [ruby-core:15551]”  
on Thu, 10 Apr 2008 19:45:07 +0900, “Yusuke ENDOH” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|\> [ruby-core:15551]e$B$KBP$9$k%Q%C%A$r=q$-$^$7$?!#e(B  
|\> Proc#curry e$B$G:n$i$l$?e(B Proc e$B%_%V%8%'%/%H$K%V%m%C%/$rEO$;$k$h$&$K$7$^$7$?!#e(B  
|  
|e$B$_$\*$9$P$i$7$$!#$"$j$,$H$&$4$6$$$^$9!#e(B  
|e$B\<h$j9~$s$G$b$$$$$G$7$g$&$+!#e(B

e$B;d$+$i$b$\*4j$$$7$^$9!#e(B

|BUILTIN\_TYPE(proc-\>block.iseq) == T\_NODE e$B$N\>l9g!“e(Bproc-\>block.iseq e$B$Ke(B  
|iseq e$B$G$J$/e(B NODE\_IFUNC e$B$,F~$C$F$$$k$H$$$&$3$H$@$H;W$$$^$9!#e(B  
|e$B$3$N$H$-$Ke(B proc-\>block.iseq-\>arg\_block e$B$r;2\>H$9$k$N$O$^$:$$$h$&$Je(B  
|e$BM=46$,$7$^$9$,!”$I$&$J$s$G$7$g$&!#$3$&$9$Y$-!)e(B

e$B$5$5$@$/$s$8$c$J$$$HCG8@$G$-$J$$$h$&$K;W$$$^$9$,e(B(e$B$5$5$@$/$se(B  
e$B$G$b$G$-$J$$!)e(B)e$B!“$J$s$H$J$/$=$l$G$”$C$F$$$k$h$&$K;W$$$^$9!#e(B
