Issue #6936 has been updated by naruse (Yui NARUSE). ko1 (Koichi Sasada) wrote: > (2012/08/27 22:35), NARUSE, Yui wrote: > > (2012/08/27 17:46), KOSAKI Motohiro wrote: > >>>> å¾??????®å?·ä????????æ³???¯ã??????¤ã??????????¨æ???????¾ã??????????³å?¤ã?¯æ??????????? frozen ??«ã????¦ã??????¨ã????????????????ªã?¨æ????£ã?¦ã????¾ã????? > >>> > >>> ???Numeric ??? freeze ?????¡ã?????ï¼???¨ã???????®ã????¨ã??????? ? ?§ã???????????ï¼? > >> > >> ??¼ã???¯ã??????????¨ã?????????????°ã?¨ã?????æ¦?念ã?¯ä??????????¯ã????¾ã??????????????????????£ã????®ã????????????????????¨ã?????ä¸??????§ã????? > > > > ????????§ã????ã????????????????¨çµ±ä¸?????????ºã?????????????ªã???????ªã????¨æ????£ã?¦ã????¾ã????? > > ?????¨ã???????????å½±é?¿ã??å°???ªã???????ªï??Float ?????? frozen ??«ã????¡ã???????®ã?¯ã?©ã????§ã????? > ??????ï¼? 以ä????®ã???????ªæ???????§ã???????? diff --git a/class.c b/class.c index 1d871fb..1df38e4 100644 --- a/class.c +++ b/class.c @@ -1324,6 +1324,10 @@ singleton_class_of(VALUE obj) rb_bug("unknown immediate %p", (void *)obj); return klass; } + else { + if (BUILTIN_TYPE(obj) == T_FLOAT) + rb_raise(rb_eTypeError, "can't define singleton"); + } if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) && rb_ivar_get(RBASIC(obj)->klass, id_attached) == obj) { diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index a674de8..53de6a8 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -1129,7 +1129,7 @@ struct RBignum { (FL_TAINT | FL_UNTRUSTED); \ } while (0) -#define OBJ_FROZEN(x) (!!FL_TEST((x), FL_FREEZE)) +#define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):FLONUM_P(x))) #define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE) #if SIZEOF_INT < SIZEOF_LONG diff --git a/numeric.c b/numeric.c index 58ac7ad..6a72fba 100644 --- a/numeric.c +++ b/numeric.c @@ -621,6 +621,7 @@ rb_float_new_in_heap(double d) OBJSETUP(flt, rb_cFloat, T_FLOAT); flt->float_value = d; + OBJ_FREEZE(flt); return (VALUE)flt; } ---------------------------------------- Feature #6936: Forbid singleton class and instance variabls for float https://bugs.ruby-lang.org/issues/6936#change-29181 Author: naruse (Yui NARUSE) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 2.0.0 [Feature #6763] ??ªã?©ã?§è°è«?????????¦ã????? flonum ??? r36798 ??§ã????¥ã?£ã?????????§ã???????? 1. Float ??®ã?ªã????¸ã?§ã?¯ã??ID ??®ä??æ§????å¤???? 2. flonum ??? float ??«ç?¹ç?°ã?¡ã?½ã????????追å??ä¸??? 3. flonum ??? float ??«ç?¹ç?°ã?¯ã?©ã?¹ã??ä½????ä¸??? 4. flonum ??? float ??¯å???????¤å??士ã?§ã?¤ã?³ã?¹ã?¿ã?³ã?¹å????°ã????±æ??????????? ??¨ã????£ã?????äº???????å???¨ã????¾ã????? ?????£ã?¨ã?????1. ??¯é??常æ??????????¯ã????®ã?ªã????¨ã???????§ã????????2. ??¯å????????ç¦?æ¢ã???????¦ã????¾ã????? æ°???«ã?ªã????®ã?? 3. ??? 4. ??§ã??????????? 1.9.3 ??¨æ??????????°ã?ªã??????????§ã?ªã???? 32bit ??°å????§ã?? 2.0 ??????64bit??°å????? flonum ??§ã?ªã?? float ??ªã????¸ã?§ã?¯ã????¨ã?????????????°ã?ªã????¾ã????? å®?????????¨ã????¦å??害ã?¯ã?ªã??????????ªæ??????????¾ã?????????????®ã???????ªé????????極ã????¦å??è£?ä¸???®å????§ã?? Ruby ä¸???????è¦??????ªã????¨ã???????«å????¨ã???????®ã?¯æ???????¡æ?ªã?????????¾ã????? ?????£ã?¦ã??以ä????®ã???????«ã???????¨ã???????®ã?§ã?¯ã?ªã????§ã?????????????? * flonum ??§ã?ªã?? float ??§ã????¹ç?°ã?¯ã?©ã?¹ã?®ä????????ç¦?æ? * float ??¸ã?®ã?¤ã?³ã?¹ã?¿ã?³ã?¹å????°ä????????ç¦?æ? å¾??????®å?·ä????????æ³???¯ã??????¤ã??????????¨æ???????¾ã??????????³å?¤ã?¯æ??????????? frozen ??«ã????¦ã??????¨ã????????????????ªã?¨æ????£ã?¦ã????¾ã????? 話ã????ºæ?£ã??????????¨ã???????®è©±??? true, false, nil, Fixnum, Symbol ??®ã???????ªå?³å?¤ã???????? Bignum ??????Time ??®ã???????? immutable ??£ã?½ã????ªã????¸ã?§ã?¯ã????«ã??å½???¦ã?¯ã?¾ã??æ°?????????¦ã????¾ã????? -- http://bugs.ruby-lang.org/