diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/-test-/recursion/extconf.rb | 2 | ||||
-rw-r--r-- | ext/-test-/recursion/recursion.c | 28 |
2 files changed, 30 insertions, 0 deletions
diff --git a/ext/-test-/recursion/extconf.rb b/ext/-test-/recursion/extconf.rb new file mode 100644 index 0000000000..92b28657f0 --- /dev/null +++ b/ext/-test-/recursion/extconf.rb @@ -0,0 +1,2 @@ +require 'mkmf' +create_makefile("-test-/recursion") diff --git a/ext/-test-/recursion/recursion.c b/ext/-test-/recursion/recursion.c new file mode 100644 index 0000000000..13d41f0ba8 --- /dev/null +++ b/ext/-test-/recursion/recursion.c @@ -0,0 +1,28 @@ +#include <ruby.h> + +static VALUE +recursive_i(VALUE obj, VALUE mid, int recur) +{ + if (recur) return Qnil; + return rb_funcallv(obj, rb_to_id(mid), 0, 0); +} + +static VALUE +exec_recursive(VALUE self, VALUE mid) +{ + return rb_exec_recursive(recursive_i, self, mid); +} + +static VALUE +exec_recursive_outer(VALUE self, VALUE mid) +{ + return rb_exec_recursive_outer(recursive_i, self, mid); +} + +void +Init_recursion(void) +{ + VALUE m = rb_define_module_under(rb_define_module("Bug"), "Recursive"); + rb_define_method(m, "exec_recursive", exec_recursive, 1); + rb_define_method(m, "exec_recursive_outer", exec_recursive_outer, 1); +} |