diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-29 15:34:31 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-29 15:34:31 +0000 |
commit | 7f30d00b53bd5ce680c13f3bcd57e8e29039aaee (patch) | |
tree | 6ceef42f0bb8a863216d8fefc295f8a359796722 /object.c | |
parent | 7a480ae850182881b45a28d6dcce06e0d8417391 (diff) |
object.c: no TypeError at special const
* object.c (special_object_p): no longer raise a TypeError for
Integer and Float, and return itself instead. [Feature#12979]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56933 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -297,6 +297,19 @@ init_copy(VALUE dest, VALUE obj) } } +static inline int +special_object_p(VALUE obj) +{ + if (SPECIAL_CONST_P(obj)) return TRUE; + switch (BUILTIN_TYPE(obj)) { + case T_BIGNUM: + case T_FLOAT: + return TRUE; + default: + return FALSE; + } +} + /* * call-seq: * obj.clone(freeze: true) -> an_object @@ -345,7 +358,7 @@ rb_obj_clone2(int argc, VALUE *argv, VALUE obj) } } - if (rb_special_const_p(obj)) { + if (special_object_p(obj)) { if (kwfreeze == Qfalse) rb_raise(rb_eArgError, "can't unfreeze %s", rb_obj_classname(obj)); return obj; @@ -424,7 +437,7 @@ rb_obj_dup(VALUE obj) { VALUE dup; - if (rb_special_const_p(obj)) { + if (special_object_p(obj)) { return obj; } dup = rb_obj_alloc(rb_obj_class(obj)); |