summaryrefslogtreecommitdiff
path: root/spec/ruby/optional/capi/ext/rbasic_spec.c
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/optional/capi/ext/rbasic_spec.c')
-rw-r--r--spec/ruby/optional/capi/ext/rbasic_spec.c71
1 files changed, 71 insertions, 0 deletions
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