* include/ruby/ruby.h (rb_funcall_passing_block): add prototype.

a patch by James M. Lawrence at [ruby-core:35501]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-03-17 15:54:22 +00:00
Родитель 05529fa1cb
Коммит 247fdeedf8
5 изменённых файлов: 60 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Fri Mar 18 00:54:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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@fsij.org>
* ext/openssl/ossl_x509name.c: parenthesize macro arguments.

Просмотреть файл

@ -0,0 +1,2 @@
require 'mkmf'
create_makefile("-test-/funcall/funcall")

Просмотреть файл

@ -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);
}

Просмотреть файл

@ -1144,6 +1144,7 @@ VALUE rb_eval_string_wrap(const char*, int*);
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*);

Просмотреть файл

@ -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