diff options
Diffstat (limited to 'spec/ruby/optional/capi/ext')
-rw-r--r-- | spec/ruby/optional/capi/ext/numeric_spec.c | 10 | ||||
-rw-r--r-- | spec/ruby/optional/capi/ext/object_spec.c | 40 | ||||
-rw-r--r-- | spec/ruby/optional/capi/ext/rubyspec.h | 3 |
3 files changed, 52 insertions, 1 deletions
diff --git a/spec/ruby/optional/capi/ext/numeric_spec.c b/spec/ruby/optional/capi/ext/numeric_spec.c index cd643cc66f..2f0f504549 100644 --- a/spec/ruby/optional/capi/ext/numeric_spec.c +++ b/spec/ruby/optional/capi/ext/numeric_spec.c @@ -96,6 +96,12 @@ static VALUE numeric_spec_rb_num_coerce_relop(VALUE self, VALUE x, VALUE y, VALU } #endif +#ifdef HAVE_RB_ABSINT_SINGLEBIT_P +static VALUE numeric_spec_rb_absint_singlebit_p(VALUE self, VALUE num) { + return INT2FIX(rb_absint_singlebit_p(num)); +} +#endif + void Init_numeric_spec(void) { VALUE cls; cls = rb_define_class("CApiNumericSpecs", rb_cObject); @@ -159,6 +165,10 @@ void Init_numeric_spec(void) { #ifdef HAVE_RB_NUM_COERCE_RELOP rb_define_method(cls, "rb_num_coerce_relop", numeric_spec_rb_num_coerce_relop, 3); #endif + +#ifdef HAVE_RB_ABSINT_SINGLEBIT_P +rb_define_method(cls, "rb_absint_singlebit_p", numeric_spec_rb_absint_singlebit_p, 1); +#endif } #ifdef __cplusplus diff --git a/spec/ruby/optional/capi/ext/object_spec.c b/spec/ruby/optional/capi/ext/object_spec.c index ad1ebecc78..45a28169ef 100644 --- a/spec/ruby/optional/capi/ext/object_spec.c +++ b/spec/ruby/optional/capi/ext/object_spec.c @@ -5,6 +5,32 @@ extern "C" { #endif +#ifdef HAVE_FL_ABLE +static VALUE object_spec_FL_ABLE(VALUE self, VALUE obj) { + if (FL_ABLE(obj)) { + return Qtrue; + } else { + return Qfalse; + } +} +#endif + +#ifdef HAVE_FL_TEST +static int object_spec_FL_TEST_flag(VALUE flag_string) { + char *flag_cstr = StringValueCStr(flag_string); + if (strcmp(flag_cstr, "FL_TAINT") == 0) { + return FL_TAINT; + } else if (strcmp(flag_cstr, "FL_FREEZE") == 0) { + return FL_FREEZE; + } + return 0; +} + +static VALUE object_spec_FL_TEST(VALUE self, VALUE obj, VALUE flag) { + return INT2FIX(FL_TEST(obj, object_spec_FL_TEST_flag(flag))); +} +#endif + #ifdef HAVE_OBJ_TAINT static VALUE object_spec_OBJ_TAINT(VALUE self, VALUE obj) { OBJ_TAINT(obj); @@ -204,7 +230,11 @@ static VALUE object_spec_rb_method_boundp(VALUE self, VALUE obj, VALUE method, V #ifdef HAVE_RB_SPECIAL_CONST_P static VALUE object_spec_rb_special_const_p(VALUE self, VALUE value) { - return rb_special_const_p(value); + if (rb_special_const_p(value)) { + return Qtrue; + } else { + return Qfalse; + } } #endif @@ -404,6 +434,14 @@ void Init_object_spec(void) { VALUE cls; cls = rb_define_class("CApiObjectSpecs", rb_cObject); +#ifdef HAVE_FL_ABLE + rb_define_method(cls, "FL_ABLE", object_spec_FL_ABLE, 1); +#endif + +#ifdef HAVE_FL_TEST + rb_define_method(cls, "FL_TEST", object_spec_FL_TEST, 2); +#endif + #ifdef HAVE_OBJ_TAINT rb_define_method(cls, "OBJ_TAINT", object_spec_OBJ_TAINT, 1); #endif diff --git a/spec/ruby/optional/capi/ext/rubyspec.h b/spec/ruby/optional/capi/ext/rubyspec.h index aab74b88ae..341cff0428 100644 --- a/spec/ruby/optional/capi/ext/rubyspec.h +++ b/spec/ruby/optional/capi/ext/rubyspec.h @@ -422,6 +422,7 @@ #define HAVE_RB_NUM_COERCE_BIN 1 #define HAVE_RB_NUM_COERCE_CMP 1 #define HAVE_RB_NUM_COERCE_RELOP 1 +#define HAVE_RB_ABSINT_SINGLEBIT_P 1 #define HAVE_RB_NUM_ZERODIV 1 /* Fixnum */ @@ -431,6 +432,8 @@ #endif /* Object */ +#define HAVE_FL_ABLE 1 +#define HAVE_FL_TEST 1 #define HAVE_OBJ_TAINT 1 #define HAVE_OBJ_TAINTED 1 #define HAVE_OBJ_INFECT 1 |