Skip to content

Commit f1b40cd

Browse files
committed
Add specs for rb_block_lambda()
1 parent 420be8d commit f1b40cd

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

spec/ruby/optional/capi/ext/kernel_spec.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ VALUE kernel_spec_rb_block_proc(VALUE self) {
2626
return rb_block_proc();
2727
}
2828

29+
VALUE kernel_spec_rb_block_lambda(VALUE self) {
30+
return rb_block_lambda();
31+
}
2932

3033
VALUE block_call_inject(VALUE yield_value, VALUE data2) {
3134
/* yield_value yields the first block argument */
@@ -286,6 +289,7 @@ void Init_kernel_spec(void) {
286289
rb_define_method(cls, "rb_block_call_multi_arg", kernel_spec_rb_block_call_multi_arg, 1);
287290
rb_define_method(cls, "rb_block_call_no_func", kernel_spec_rb_block_call_no_func, 1);
288291
rb_define_method(cls, "rb_block_proc", kernel_spec_rb_block_proc, 0);
292+
rb_define_method(cls, "rb_block_lambda", kernel_spec_rb_block_lambda, 0);
289293
rb_define_method(cls, "rb_frame_this_func_test", kernel_spec_rb_frame_this_func, 0);
290294
rb_define_method(cls, "rb_frame_this_func_test_again", kernel_spec_rb_frame_this_func, 0);
291295
rb_define_method(cls, "rb_ensure", kernel_spec_rb_ensure, 4);

spec/ruby/optional/capi/kernel_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,32 @@ def proc_caller
440440
proc = @s.rb_block_proc() { 1+1 }
441441
proc.should be_kind_of(Proc)
442442
proc.call.should == 2
443+
proc.lambda?.should == false
444+
end
445+
446+
it "passes through an existing lambda and does not convert to a proc" do
447+
b = -> { 1+1 }
448+
proc = @s.rb_block_proc(&b)
449+
proc.should equal(b)
450+
proc.call.should == 2
451+
proc.lambda?.should == true
452+
end
453+
end
454+
455+
describe "rb_block_lambda" do
456+
it "converts the implicit block into a Proc but does not convert it to a lambda" do
457+
proc = @s.rb_block_proc { 1+1 }
458+
proc.should be_kind_of(Proc)
459+
proc.call.should == 2
460+
proc.lambda?.should == false
461+
end
462+
463+
it "passes through an existing Proc and does not convert to a lambda" do
464+
b = proc { 1+1 }
465+
proc = @s.rb_block_proc(&b)
466+
proc.should equal(b)
467+
proc.call.should == 2
468+
proc.lambda?.should == false
443469
end
444470
end
445471

0 commit comments

Comments
 (0)