summaryrefslogtreecommitdiff
path: root/ext/ripper/ripper_init.c.tmpl
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2024-02-18 18:14:42 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2024-02-20 19:19:31 +0900
commit7cb8fd780011a43eebf33a5aa6da1262a5c52307 (patch)
tree5eaefdf98efdd8ba44a5f60fb3b6c67918e187a3 /ext/ripper/ripper_init.c.tmpl
parentfa3d6aafb70aa06f8afa198c463bf6fac84ce0dd (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.tmpl31
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