bignum.c: hide intermediate Bignums
* bignum.c (rb_big_eq): hide intermediate Bignums not just freeing memory. [ruby-core:53893] [Bug #8204] * object.c (rb_obj_hide): hide an object by clearing klass. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b30a6b8d1d
commit
adf1c94ffe
@ -1,4 +1,9 @@
|
|||||||
Wed Apr 3 16:34:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Wed Apr 3 16:35:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* bignum.c (rb_big_eq): hide intermediate Bignums not just freeing
|
||||||
|
memory. [ruby-core:53893] [Bug #8204]
|
||||||
|
|
||||||
|
* object.c (rb_obj_hide): hide an object by clearing klass.
|
||||||
|
|
||||||
* bignum.c (rb_big_eq): test as Fixnum if possible and get rid of zero
|
* bignum.c (rb_big_eq): test as Fixnum if possible and get rid of zero
|
||||||
length Bignum. [ruby-core:53893] [Bug #8204]
|
length Bignum. [ruby-core:53893] [Bug #8204]
|
||||||
|
2
bignum.c
2
bignum.c
@ -1095,6 +1095,8 @@ big2str_karatsuba(VALUE x, int base, char* ptr,
|
|||||||
|
|
||||||
b = power_cache_get_power(base, n1, &m1);
|
b = power_cache_get_power(base, n1, &m1);
|
||||||
bigdivmod(x, b, &q, &r);
|
bigdivmod(x, b, &q, &r);
|
||||||
|
rb_obj_hide(q);
|
||||||
|
rb_obj_hide(r);
|
||||||
lh = big2str_karatsuba(q, base, ptr, (len - m1)/2,
|
lh = big2str_karatsuba(q, base, ptr, (len - m1)/2,
|
||||||
len - m1, hbase, trim);
|
len - m1, hbase, trim);
|
||||||
rb_big_resize(q, 0);
|
rb_big_resize(q, 0);
|
||||||
|
@ -196,6 +196,7 @@ VALUE rb_int_pred(VALUE num);
|
|||||||
|
|
||||||
/* object.c */
|
/* object.c */
|
||||||
VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
|
VALUE rb_obj_equal(VALUE obj1, VALUE obj2);
|
||||||
|
VALUE rb_obj_hide(VALUE obj);
|
||||||
|
|
||||||
/* parse.y */
|
/* parse.y */
|
||||||
VALUE rb_parser_get_yydebug(VALUE);
|
VALUE rb_parser_get_yydebug(VALUE);
|
||||||
|
9
object.c
9
object.c
@ -43,6 +43,15 @@ static ID id_const_missing;
|
|||||||
(!SPECIAL_CONST_P(obj) && \
|
(!SPECIAL_CONST_P(obj) && \
|
||||||
(BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE))
|
(BUILTIN_TYPE(obj) == T_CLASS || BUILTIN_TYPE(obj) == T_MODULE))
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_obj_hide(VALUE obj)
|
||||||
|
{
|
||||||
|
if (!SPECIAL_CONST_P(obj)) {
|
||||||
|
RBASIC(obj)->klass = 0;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* obj === other -> true or false
|
* obj === other -> true or false
|
||||||
|
Loading…
x
Reference in New Issue
Block a user