diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-01 04:32:43 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-01 04:32:43 +0000 |
commit | 4d399f12d4354c17bbb1ea2b12de4c11c6ac03ff (patch) | |
tree | 996a9f52ab0cd10d044d0949116c276627caad02 /object.c | |
parent | 2067e4eb30eb78b36c252baff319c6d581700460 (diff) | |
download | ruby-4d399f12d4354c17bbb1ea2b12de4c11c6ac03ff.tar.gz |
* object.c (rb_cstr_to_dbl): return 0.0 if hexadecimal and
baccheck is FALSE: Float("0x1p+0") works, but "0x1p+0".to_f
doesn't. [ruby-dev:40650]
* util.c (ruby_strtod): allow hexdecimal integers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -2246,6 +2246,11 @@ rb_cstr_to_dbl(const char *p, int badcheck) if (!p) return 0.0; q = p; while (ISSPACE(*p)) p++; + + if (!badcheck && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { + return 0.0; + } + d = strtod(p, &end); if (errno == ERANGE) { OutOfRange(); @@ -2284,6 +2289,11 @@ rb_cstr_to_dbl(const char *p, int badcheck) } *n = '\0'; p = buf; + + if (!badcheck && p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { + return 0.0; + } + d = strtod(p, &end); if (errno == ERANGE) { OutOfRange(); |