mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* pack.c (pack_pack): template f should not accept non float
values. [ruby-dev:37656] * object.c (rb_to_float): new function to type check floats. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
6bbd76a732
commit
ad00464489
4 changed files with 24 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Mon Dec 29 22:37:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* pack.c (pack_pack): template f should not accept non float
|
||||||
|
values. [ruby-dev:37656]
|
||||||
|
|
||||||
|
* object.c (rb_to_float): new function to type check floats.
|
||||||
|
|
||||||
Mon Dec 29 22:27:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Mon Dec 29 22:27:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* random.c (rb_f_rand): type check simplified. strings are no
|
* random.c (rb_f_rand): type check simplified. strings are no
|
||||||
|
|
|
@ -434,6 +434,7 @@ VALUE rb_check_convert_type(VALUE,int,const char*,const char*);
|
||||||
VALUE rb_check_to_integer(VALUE, const char *);
|
VALUE rb_check_to_integer(VALUE, const char *);
|
||||||
VALUE rb_to_int(VALUE);
|
VALUE rb_to_int(VALUE);
|
||||||
VALUE rb_Integer(VALUE);
|
VALUE rb_Integer(VALUE);
|
||||||
|
VALUE rb_to_float(VALUE);
|
||||||
VALUE rb_Float(VALUE);
|
VALUE rb_Float(VALUE);
|
||||||
VALUE rb_String(VALUE);
|
VALUE rb_String(VALUE);
|
||||||
VALUE rb_Array(VALUE);
|
VALUE rb_Array(VALUE);
|
||||||
|
|
15
object.c
15
object.c
|
@ -2267,6 +2267,21 @@ rb_f_float(VALUE obj, VALUE arg)
|
||||||
return rb_Float(arg);
|
return rb_Float(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VALUE
|
||||||
|
rb_to_float(VALUE val)
|
||||||
|
{
|
||||||
|
VALUE v;
|
||||||
|
|
||||||
|
if (TYPE(val) == T_FLOAT) return val;
|
||||||
|
v = convert_type(val, "Float", "to_f", Qtrue);
|
||||||
|
if (TYPE(v) != T_FLOAT) {
|
||||||
|
const char *cname = rb_obj_classname(val);
|
||||||
|
rb_raise(rb_eTypeError, "can't convert %s to Float (%s#to_f gives %s)",
|
||||||
|
cname, cname, rb_obj_classname(v));
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
rb_num2dbl(VALUE val)
|
rb_num2dbl(VALUE val)
|
||||||
{
|
{
|
||||||
|
|
2
pack.c
2
pack.c
|
@ -789,7 +789,7 @@ pack_pack(VALUE ary, VALUE fmt)
|
||||||
float f;
|
float f;
|
||||||
|
|
||||||
from = NEXTFROM;
|
from = NEXTFROM;
|
||||||
f = RFLOAT_VALUE(rb_Float(from));
|
f = RFLOAT_VALUE(rb_to_float(from));
|
||||||
rb_str_buf_cat(res, (char*)&f, sizeof(float));
|
rb_str_buf_cat(res, (char*)&f, sizeof(float));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue