1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Ripper#validate_object: check if the object is hidden

This commit is contained in:
Nobuyoshi Nakada 2019-07-19 07:55:40 +09:00
parent 0b826418af
commit fd461dea06
No known key found for this signature in database
GPG key ID: 4BC7D6DF58D8DF60

15
parse.y
View file

@ -12487,7 +12487,7 @@ ripper_validate_object(VALUE self, VALUE x)
if (x == Qtrue) return x; if (x == Qtrue) return x;
if (x == Qnil) return x; if (x == Qnil) return x;
if (x == Qundef) if (x == Qundef)
rb_raise(rb_eArgError, "Qundef given"); rb_raise(rb_eArgError, "Qundef given");
if (FIXNUM_P(x)) return x; if (FIXNUM_P(x)) return x;
if (SYMBOL_P(x)) return x; if (SYMBOL_P(x)) return x;
switch (BUILTIN_TYPE(x)) { switch (BUILTIN_TYPE(x)) {
@ -12498,15 +12498,20 @@ ripper_validate_object(VALUE self, VALUE x)
case T_FLOAT: case T_FLOAT:
case T_COMPLEX: case T_COMPLEX:
case T_RATIONAL: case T_RATIONAL:
return x; break;
case T_NODE: case T_NODE:
if (nd_type((NODE *)x) != NODE_RIPPER) { if (nd_type((NODE *)x) != NODE_RIPPER) {
rb_raise(rb_eArgError, "NODE given: %p", (void *)x); rb_raise(rb_eArgError, "NODE given: %p", (void *)x);
} }
return ((NODE *)x)->nd_rval; x = ((NODE *)x)->nd_rval;
break;
default: default:
rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
(void *)x, rb_obj_classname(x)); (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; return x;
} }