summaryrefslogtreecommitdiff
path: root/spec/ruby/optional/capi/ext
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/optional/capi/ext')
-rw-r--r--spec/ruby/optional/capi/ext/class_spec.c24
-rw-r--r--spec/ruby/optional/capi/ext/rbasic_spec.c71
-rw-r--r--spec/ruby/optional/capi/ext/symbol_spec.c5
-rw-r--r--spec/ruby/optional/capi/ext/tracepoint_spec.c49
4 files changed, 149 insertions, 0 deletions
diff --git a/spec/ruby/optional/capi/ext/class_spec.c b/spec/ruby/optional/capi/ext/class_spec.c
index e62b9efe2e..36b8c8f2f3 100644
--- a/spec/ruby/optional/capi/ext/class_spec.c
+++ b/spec/ruby/optional/capi/ext/class_spec.c
@@ -37,6 +37,26 @@ static VALUE class_spec_rb_path_to_class(VALUE self, VALUE path) {
return rb_path_to_class(path);
}
+static VALUE class_spec_rb_class_instance_methods(int argc, VALUE* argv, VALUE self) {
+ VALUE mod = argv[0];
+ return rb_class_instance_methods(--argc, ++argv, mod);
+}
+
+static VALUE class_spec_rb_class_public_instance_methods(int argc, VALUE* argv, VALUE self) {
+ VALUE mod = argv[0];
+ return rb_class_public_instance_methods(--argc, ++argv, mod);
+}
+
+static VALUE class_spec_rb_class_protected_instance_methods(int argc, VALUE* argv, VALUE self) {
+ VALUE mod = argv[0];
+ return rb_class_protected_instance_methods(--argc, ++argv, mod);
+}
+
+static VALUE class_spec_rb_class_private_instance_methods(int argc, VALUE* argv, VALUE self) {
+ VALUE mod = argv[0];
+ return rb_class_private_instance_methods(--argc, ++argv, mod);
+}
+
static VALUE class_spec_rb_class_new(VALUE self, VALUE super) {
return rb_class_new(super);
}
@@ -146,6 +166,10 @@ void Init_class_spec(void) {
rb_define_method(cls, "rb_class2name", class_spec_rb_class2name, 1);
rb_define_method(cls, "rb_path2class", class_spec_rb_path2class, 1);
rb_define_method(cls, "rb_path_to_class", class_spec_rb_path_to_class, 1);
+ rb_define_method(cls, "rb_class_instance_methods", class_spec_rb_class_instance_methods, -1);
+ rb_define_method(cls, "rb_class_public_instance_methods", class_spec_rb_class_public_instance_methods, -1);
+ rb_define_method(cls, "rb_class_protected_instance_methods", class_spec_rb_class_protected_instance_methods, -1);
+ rb_define_method(cls, "rb_class_private_instance_methods", class_spec_rb_class_private_instance_methods, -1);
rb_define_method(cls, "rb_class_new", class_spec_rb_class_new, 1);
rb_define_method(cls, "rb_class_new_instance", class_spec_rb_class_new_instance, 3);
rb_define_method(cls, "rb_class_real", class_spec_rb_class_real, 1);
diff --git a/spec/ruby/optional/capi/ext/rbasic_spec.c b/spec/ruby/optional/capi/ext/rbasic_spec.c
new file mode 100644
index 0000000000..b5779ef062
--- /dev/null
+++ b/spec/ruby/optional/capi/ext/rbasic_spec.c
@@ -0,0 +1,71 @@
+#include "ruby.h"
+#include "rubyspec.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+VALUE rbasic_spec_taint_flag(VALUE self) {
+ return INT2FIX(RUBY_FL_TAINT);
+}
+
+VALUE rbasic_spec_freeze_flag(VALUE self) {
+ return INT2FIX(RUBY_FL_FREEZE);
+}
+
+VALUE rbasic_spec_get_flags(VALUE self, VALUE val) {
+ return INT2FIX(RBASIC(val)->flags);
+}
+
+VALUE rbasic_spec_set_flags(VALUE self, VALUE val, VALUE flags) {
+ RBASIC(val)->flags = FIX2INT(flags);
+ return INT2FIX(RBASIC(val)->flags);
+}
+
+VALUE rbasic_spec_copy_flags(VALUE self, VALUE to, VALUE from) {
+ RBASIC(to)->flags = RBASIC(from)->flags;
+ return INT2FIX(RBASIC(to)->flags);
+}
+
+VALUE rbasic_spec_get_klass(VALUE self, VALUE val) {
+ return RBASIC(val)->klass;
+}
+
+VALUE rbasic_rdata_spec_get_flags(VALUE self, VALUE structure) {
+ return INT2FIX(RDATA(structure)->basic.flags);
+}
+
+VALUE rbasic_rdata_spec_set_flags(VALUE self, VALUE structure, VALUE flags) {
+ RDATA(structure)->basic.flags = FIX2INT(flags);
+ return INT2FIX(RDATA(structure)->basic.flags);
+}
+
+VALUE rbasic_rdata_spec_copy_flags(VALUE self, VALUE to, VALUE from) {
+ RDATA(to)->basic.flags = RDATA(from)->basic.flags;
+ return INT2FIX(RDATA(to)->basic.flags);
+}
+
+VALUE rbasic_rdata_spec_get_klass(VALUE self, VALUE structure) {
+ return RDATA(structure)->basic.klass;
+}
+
+void Init_rbasic_spec(void) {
+ VALUE cls = rb_define_class("CApiRBasicSpecs", rb_cObject);
+ rb_define_method(cls, "taint_flag", rbasic_spec_taint_flag, 0);
+ rb_define_method(cls, "freeze_flag", rbasic_spec_freeze_flag, 0);
+ rb_define_method(cls, "get_flags", rbasic_spec_get_flags, 1);
+ rb_define_method(cls, "set_flags", rbasic_spec_set_flags, 2);
+ rb_define_method(cls, "copy_flags", rbasic_spec_copy_flags, 2);
+ rb_define_method(cls, "get_klass", rbasic_spec_get_klass, 1);
+
+ cls = rb_define_class("CApiRBasicRDataSpecs", rb_cObject);
+ rb_define_method(cls, "get_flags", rbasic_rdata_spec_get_flags, 1);
+ rb_define_method(cls, "set_flags", rbasic_rdata_spec_set_flags, 2);
+ rb_define_method(cls, "copy_flags", rbasic_rdata_spec_copy_flags, 2);
+ rb_define_method(cls, "get_klass", rbasic_rdata_spec_get_klass, 1);
+}
+
+#ifdef __cplusplus
+}
+#endif \ No newline at end of file
diff --git a/spec/ruby/optional/capi/ext/symbol_spec.c b/spec/ruby/optional/capi/ext/symbol_spec.c
index d2ca62d81e..7d9a7b4379 100644
--- a/spec/ruby/optional/capi/ext/symbol_spec.c
+++ b/spec/ruby/optional/capi/ext/symbol_spec.c
@@ -75,6 +75,10 @@ VALUE symbol_spec_rb_sym2str(VALUE self, VALUE sym) {
return rb_sym2str(sym);
}
+VALUE symbol_spec_rb_to_symbol(VALUE self, VALUE val) {
+ return rb_to_symbol(val);
+}
+
void Init_symbol_spec(void) {
VALUE cls = rb_define_class("CApiSymbolSpecs", rb_cObject);
rb_define_method(cls, "SYMBOL_P", symbol_spec_SYMBOL_P, 1);
@@ -93,6 +97,7 @@ void Init_symbol_spec(void) {
rb_define_method(cls, "rb_is_const_id", symbol_spec_rb_is_const_id, 1);
rb_define_method(cls, "rb_is_instance_id", symbol_spec_rb_is_instance_id, 1);
rb_define_method(cls, "rb_sym2str", symbol_spec_rb_sym2str, 1);
+ rb_define_method(cls, "rb_to_symbol", symbol_spec_rb_to_symbol, 1);
}
#ifdef __cplusplus
diff --git a/spec/ruby/optional/capi/ext/tracepoint_spec.c b/spec/ruby/optional/capi/ext/tracepoint_spec.c
new file mode 100644
index 0000000000..78c459d6cb
--- /dev/null
+++ b/spec/ruby/optional/capi/ext/tracepoint_spec.c
@@ -0,0 +1,49 @@
+#include "ruby.h"
+#include "rubyspec.h"
+
+#include <ruby/debug.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static VALUE callback_called = Qnil;
+
+static void callback(VALUE tpval, void *data) {
+ callback_called = (VALUE) data;
+}
+
+static VALUE tracepoint_spec_rb_tracepoint_new(VALUE self, VALUE data) {
+ return rb_tracepoint_new(Qnil, RUBY_EVENT_LINE, callback, (void*) data);
+}
+
+static VALUE tracepoint_spec_callback_called(VALUE self){
+ return callback_called;
+}
+
+static VALUE tracepoint_spec_rb_tracepoint_disable(VALUE self, VALUE trace) {
+ rb_tracepoint_disable(trace);
+ return rb_tracepoint_enabled_p(trace);
+}
+
+static VALUE tracepoint_spec_rb_tracepoint_enable(VALUE self, VALUE trace) {
+ rb_tracepoint_enable(trace);
+ return rb_tracepoint_enabled_p(trace);
+}
+
+static VALUE tracepoint_spec_rb_tracepoint_enabled_p(VALUE self, VALUE trace) {
+ return rb_tracepoint_enabled_p(trace);
+}
+
+void Init_tracepoint_spec(void) {
+ VALUE cls = rb_define_class("CApiTracePointSpecs", rb_cObject);
+ rb_define_method(cls, "rb_tracepoint_new", tracepoint_spec_rb_tracepoint_new, 1);
+ rb_define_method(cls, "rb_tracepoint_disable", tracepoint_spec_rb_tracepoint_disable, 1);
+ rb_define_method(cls, "rb_tracepoint_enable", tracepoint_spec_rb_tracepoint_enable, 1);
+ rb_define_method(cls, "rb_tracepoint_enabled_p", tracepoint_spec_rb_tracepoint_enabled_p, 1);
+ rb_define_method(cls, "callback_called?", tracepoint_spec_callback_called, 0);
+}
+
+#ifdef __cplusplus
+}
+#endif