Skip to content

Commit 4a99f5e

Browse files
aardvark179eregon
authored andcommitted
Add spec for rb_protect setting errinfo.
(cherry picked from commit 398b0e9)
1 parent c6cd4e4 commit 4a99f5e

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,14 @@ static VALUE kernel_spec_rb_protect_yield(VALUE self, VALUE obj, VALUE ary) {
191191
return res;
192192
}
193193

194+
static VALUE kernel_spec_rb_protect_errinfo(VALUE self, VALUE obj, VALUE ary) {
195+
int status = 0;
196+
VALUE res = rb_protect(rb_yield, obj, &status);
197+
rb_ary_store(ary, 0, INT2NUM(23));
198+
rb_ary_store(ary, 1, res);
199+
return rb_errinfo();
200+
}
201+
194202
static VALUE kernel_spec_rb_protect_null_status(VALUE self, VALUE obj) {
195203
return rb_protect(rb_yield, obj, NULL);
196204
}
@@ -345,6 +353,7 @@ void Init_kernel_spec(void) {
345353
rb_define_method(cls, "rb_rescue", kernel_spec_rb_rescue, 4);
346354
rb_define_method(cls, "rb_rescue2", kernel_spec_rb_rescue2, -1);
347355
rb_define_method(cls, "rb_protect_yield", kernel_spec_rb_protect_yield, 2);
356+
rb_define_method(cls, "rb_protect_errinfo", kernel_spec_rb_protect_errinfo, 2);
348357
rb_define_method(cls, "rb_protect_null_status", kernel_spec_rb_protect_null_status, 1);
349358
rb_define_method(cls, "rb_eval_string_protect", kernel_spec_rb_eval_string_protect, 2);
350359
rb_define_method(cls, "rb_catch", kernel_spec_rb_catch, 2);

spec/ruby/optional/capi/kernel_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,12 @@
312312
@s.rb_protect_null_status(42) { |x| x + 1 }.should == 43
313313
@s.rb_protect_null_status(42) { |x| raise }.should == nil
314314
end
315+
316+
it "ppoulates errinfo with the captured exception" do
317+
proof = []
318+
@s.rb_protect_errinfo(77, proof) { |x| raise NameError }.class.should == NameError
319+
end
320+
315321
end
316322

317323
describe "rb_eval_string_protect" do

0 commit comments

Comments
 (0)