diff options
author | yui-knk <spiketeika@gmail.com> | 2024-02-18 18:14:42 +0900 |
---|---|---|
committer | Yuichiro Kaneko <spiketeika@gmail.com> | 2024-02-20 19:19:31 +0900 |
commit | 7cb8fd780011a43eebf33a5aa6da1262a5c52307 (patch) | |
tree | 5eaefdf98efdd8ba44a5f60fb3b6c67918e187a3 /ext/ripper/ripper_init.c.tmpl | |
parent | fa3d6aafb70aa06f8afa198c463bf6fac84ce0dd (diff) |
Move ripper_validate_object to ripper_init.c.tmpl
Diffstat (limited to 'ext/ripper/ripper_init.c.tmpl')
-rw-r--r-- | ext/ripper/ripper_init.c.tmpl | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/ext/ripper/ripper_init.c.tmpl b/ext/ripper/ripper_init.c.tmpl index 1cd701844c..2386f54c0e 100644 --- a/ext/ripper/ripper_init.c.tmpl +++ b/ext/ripper/ripper_init.c.tmpl @@ -477,6 +477,37 @@ ripper_raw_value(VALUE self, VALUE obj) { return ULONG2NUM(obj); } + +/* :nodoc: */ +static VALUE +ripper_validate_object(VALUE self, VALUE x) +{ + if (x == Qfalse) return x; + if (x == Qtrue) return x; + if (NIL_P(x)) return x; + if (UNDEF_P(x)) + rb_raise(rb_eArgError, "Qundef given"); + if (FIXNUM_P(x)) return x; + if (SYMBOL_P(x)) return x; + switch (BUILTIN_TYPE(x)) { + case T_STRING: + case T_OBJECT: + case T_ARRAY: + case T_BIGNUM: + case T_FLOAT: + case T_COMPLEX: + case T_RATIONAL: + break; + default: + rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", + (void *)x, rb_obj_classname(x)); + } + if (!RBASIC_CLASS(x)) { + rb_raise(rb_eArgError, "hidden ruby object: %p (%s)", + (void *)x, rb_builtin_type_name(TYPE(x))); + } + return x; +} #endif #ifdef UNIVERSAL_PARSER |