From 4e787e1242e1a63b55c030e9e0164e00130fd1c6 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 16 Jan 2002 02:20:25 +0000 Subject: * object.c (rb_Float): remove underscores between digits. * bignum.c (rb_cstr2inum): reject prefix followed by spaces only. * class.c (rb_class_inherited): should use Object when no super class. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- object.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'object.c') diff --git a/object.c b/object.c index fc2bd23fe..68a0b824e 100644 --- a/object.c +++ b/object.c @@ -966,7 +966,6 @@ rb_Float(val) q = p = StringValuePtr(val); while (*p && ISSPACE(*p)) p++; - again: d = strtod(p, &end); if (p == end) { bad: @@ -975,12 +974,19 @@ rb_Float(val) if (*end) { if (*end == '_') { char *buf = ALLOCA_N(char, strlen(p)); - char *n = buf, *last; + char *n = buf, *last = p; + while (p < end) *n++ = *p++; while (*p) { - if (*p == '_') { + if (*p == '_' && (n > buf && ISDIGIT(n[-1]))) { + /* remove underscores between digits */ last = ++p; - continue; + while (*p == '_') ++p; + if (!ISDIGIT(*p)) { + while (last < p) *n++ = *last++; + continue; + } + last = p; } *n++ = *p++; } @@ -989,7 +995,8 @@ rb_Float(val) if (!*last) goto bad; *n = '\0'; p = buf; - goto again; + d = strtod(p, &end); + if (p == end) goto bad; } while (*end && ISSPACE(*end)) end++; if (*end) goto bad; -- cgit