diff options
Diffstat (limited to 'ext/-test-/symbol/init.c')
| -rw-r--r-- | ext/-test-/symbol/init.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/ext/-test-/symbol/init.c b/ext/-test-/symbol/init.c new file mode 100644 index 0000000000..4038701ac9 --- /dev/null +++ b/ext/-test-/symbol/init.c @@ -0,0 +1,39 @@ +#include "ruby.h" + +#define init(n) {void Init_##n(VALUE klass); Init_##n(klass);} + +static VALUE +sym_find(VALUE dummy, VALUE sym) +{ + return rb_check_symbol(&sym); +} + +static VALUE +sym_pinneddown_p(VALUE dummy, VALUE sym) +{ + ID id = rb_check_id(&sym); + if (!id) return Qnil; +#ifdef ULL2NUM + return ULL2NUM(id); +#else + return ULONG2NUM(id); +#endif +} + +static VALUE +sym_iv_get(VALUE dummy, VALUE obj, VALUE name) +{ + const char *n = StringValueCStr(name); + return rb_iv_get(obj, n); +} + +void +Init_symbol(void) +{ + VALUE mBug = rb_define_module("Bug"); + VALUE klass = rb_define_class_under(mBug, "Symbol", rb_cSymbol); + rb_define_singleton_method(klass, "find", sym_find, 1); + rb_define_singleton_method(klass, "pinneddown?", sym_pinneddown_p, 1); + rb_define_singleton_method(klass, "iv_get", sym_iv_get, 2); + TEST_INIT_FUNCS(init); +} |
