From 6759f3ec5e845db6d2637f401d82d707411e41ed Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 3 Oct 2000 11:03:21 -0300 Subject: no more `proprietary' convertion algorithm (too complex) --- lobject.c | 63 +++++++-------------------------------------------------------- 1 file changed, 7 insertions(+), 56 deletions(-) diff --git a/lobject.c b/lobject.c index 9c478692..8f10ee03 100644 --- a/lobject.c +++ b/lobject.c @@ -1,5 +1,5 @@ /* -** $Id: lobject.c,v 1.49 2000/09/29 12:42:13 roberto Exp roberto $ +** $Id: lobject.c,v 1.50 2000/10/02 20:10:55 roberto Exp roberto $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ @@ -66,62 +66,13 @@ char *luaO_openspace (lua_State *L, size_t n) { } -static double expten (unsigned int e) { - double exp = 10.0; - double res = 1.0; - for (; e; e>>=1) { - if (e & 1) res *= exp; - exp *= exp; - } - return res; -} - - int luaO_str2d (const char *s, Number *result) { /* LUA_NUMBER */ - double a = 0.0; - int point = 0; /* number of decimal digits */ - int sig; - while (isspace((unsigned char)*s)) s++; - sig = 0; - switch (*s) { - case '-': sig = 1; /* go through */ - case '+': s++; - } - if (! (isdigit((unsigned char)*s) || - (*s == '.' && isdigit((unsigned char)*(s+1))))) - return 0; /* not (at least one digit before or after the point) */ - while (isdigit((unsigned char)*s)) - a = 10.0*a + (*(s++)-'0'); - if (*s == '.') { - s++; - while (isdigit((unsigned char)*s)) { - a = 10.0*a + (*(s++)-'0'); - point++; - } - } - if (sig) a = -a; - if (*s == 'e' || *s == 'E') { - int e = 0; - s++; - sig = 0; - switch (*s) { - case '-': sig = 1; /* go through */ - case '+': s++; - } - if (!isdigit((unsigned char)*s)) return 0; /* no digit in the exponent? */ - do { - e = 10*e + (*(s++)-'0'); - } while (isdigit((unsigned char)*s)); - if (sig) e = -e; - point -= e; - } - while (isspace((unsigned char)*s)) s++; - if (*s != '\0') return 0; /* invalid trailing characters? */ - if (point != 0) { - if (point > 0) a /= expten(point); - else a *= expten(-point); - } - *result = a; + char *endptr; + Number res = lua_str2number(s, &endptr); + if (endptr == s) return 0; /* no conversion */ + while (isspace((unsigned char)*endptr)) endptr++; + if (*endptr != '\0') return 0; /* invalid trailing characters? */ + *result = res; return 1; } -- cgit v1.2.3-55-g6feb