ruby-changes:19080
From: nobu <ko1@a...>
Date: Fri, 18 Mar 2011 00:54:32 +0900 (JST)
Subject: [ruby-changes:19080] Ruby:r31119 (trunk): * include/ruby/ruby.h (rb_funcall_passing_block): add prototype.
nobu 2011-03-18 00:54:22 +0900 (Fri, 18 Mar 2011) New Revision: 31119 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31119 Log: * include/ruby/ruby.h (rb_funcall_passing_block): add prototype. a patch by James M. Lawrence at [ruby-core:35501] Added directories: trunk/ext/-test-/funcall/ trunk/test/-ext-/funcall/ Added files: trunk/ext/-test-/funcall/extconf.rb trunk/ext/-test-/funcall/passing_block.c trunk/test/-ext-/funcall/test_passing_block.rb Modified files: trunk/ChangeLog trunk/include/ruby/ruby.h Index: include/ruby/ruby.h =================================================================== --- include/ruby/ruby.h (revision 31118) +++ include/ruby/ruby.h (revision 31119) @@ -1144,6 +1144,7 @@ VALUE rb_funcall(VALUE, ID, int, ...); VALUE rb_funcall2(VALUE, ID, int, const VALUE*); VALUE rb_funcall3(VALUE, ID, int, const VALUE*); +VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE*); int rb_scan_args(int, const VALUE*, const char*, ...); VALUE rb_call_super(int, const VALUE*); Index: ChangeLog =================================================================== --- ChangeLog (revision 31118) +++ ChangeLog (revision 31119) @@ -1,3 +1,8 @@ +Fri Mar 18 00:54:20 2011 Nobuyoshi Nakada <nobu@r...> + + * include/ruby/ruby.h (rb_funcall_passing_block): add prototype. + a patch by James M. Lawrence at [ruby-core:35501] + Wed Mar 16 08:40:39 2011 Tanaka Akira <akr@f...> * ext/openssl/ossl_x509name.c: parenthesize macro arguments. Index: ext/-test-/funcall/passing_block.c =================================================================== --- ext/-test-/funcall/passing_block.c (revision 0) +++ ext/-test-/funcall/passing_block.c (revision 31119) @@ -0,0 +1,30 @@ +#include "ruby.h" + +VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE*); + +static VALUE +with_funcall2(int argc, VALUE *argv, VALUE self) +{ + return rb_funcall2(self, rb_intern("target"), argc, argv); +} + +static VALUE +with_funcall_passing_block(int argc, VALUE *argv, VALUE self) +{ + return rb_funcall_passing_block(self, rb_intern("target"), argc, argv); +} + +void +Init_funcall(void) +{ + VALUE cRelay = rb_path2class("TestFuncall::Relay"); + + rb_define_singleton_method(cRelay, + "with_funcall2", + with_funcall2, + -1); + rb_define_singleton_method(cRelay, + "with_funcall_passing_block", + with_funcall_passing_block, + -1); +} Property changes on: ext/-test-/funcall/passing_block.c ___________________________________________________________________ Added: svn:eol-style + LF Index: ext/-test-/funcall/extconf.rb =================================================================== --- ext/-test-/funcall/extconf.rb (revision 0) +++ ext/-test-/funcall/extconf.rb (revision 31119) @@ -0,0 +1,2 @@ +require 'mkmf' +create_makefile("-test-/funcall/funcall") Property changes on: ext/-test-/funcall/extconf.rb ___________________________________________________________________ Added: svn:eol-style + LF Index: test/-ext-/funcall/test_passing_block.rb =================================================================== --- test/-ext-/funcall/test_passing_block.rb (revision 0) +++ test/-ext-/funcall/test_passing_block.rb (revision 31119) @@ -0,0 +1,22 @@ +require 'test/unit' + +class TestFuncall < Test::Unit::TestCase + module Relay + def self.target(*args, &block) + yield(*args) if block + end + end + require '-test-/funcall/funcall' + + def test_with_funcall2 + ok = nil + Relay.with_funcall2("feature#4504") {|arg| ok = arg || true} + assert_nil(ok) + end + + def test_with_funcall_passing_block + ok = nil + Relay.with_funcall_passing_block("feature#4504") {|arg| ok = arg || true} + assert_equal("feature#4504", ok) + end +end Property changes on: test/-ext-/funcall/test_passing_block.rb ___________________________________________________________________ Added: svn:eol-style + LF -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/