new interface for `luaO_strtod', which now checks signal, too.

This commit is contained in:
Roberto Ierusalimschy 1999-09-06 17:34:18 -03:00
parent ff9c0da783
commit 2e13cd77ab
4 changed files with 12 additions and 26 deletions

5
llex.c
View File

@ -1,5 +1,5 @@
/*
** $Id: llex.c,v 1.37 1999/07/22 19:29:42 roberto Exp roberto $
** $Id: llex.c,v 1.38 1999/08/16 20:52:00 roberto Exp roberto $
** Lexical Analyzer
** See Copyright Notice in lua.h
*/
@ -402,8 +402,7 @@ int luaX_lex (LexState *LS) {
save_and_next(LS);
}
save('\0');
LS->seminfo.r = luaO_str2d(L->Mbuffer+L->Mbuffbase);
if (LS->seminfo.r < 0)
if (!luaO_str2d(L->Mbuffer+L->Mbuffbase, &LS->seminfo.r))
luaX_error(LS, "invalid numeric format");
return NUMBER;

View File

@ -1,5 +1,5 @@
/*
** $Id: lobject.h,v 1.28 1999/03/16 16:43:27 roberto Exp roberto $
** $Id: lobject.h,v 1.29 1999/08/16 20:52:00 roberto Exp roberto $
** Type definitions for Lua objects
** See Copyright Notice in lua.h
*/
@ -190,7 +190,7 @@ extern const TObject luaO_nilobject;
int luaO_equalval (const TObject *t1, const TObject *t2);
int luaO_redimension (int oldsize);
void luaO_insertlist (GCnode *root, GCnode *node);
double luaO_str2d (const char *s);
int luaO_str2d (const char *s, real *result);
#ifdef OLD_ANSI
void luaO_memup (void *dest, void *src, int size);

View File

@ -1,5 +1,5 @@
/*
** $Id: lundump.c,v 1.12 1999/07/08 12:43:23 roberto Exp roberto $
** $Id: lundump.c,v 1.13 1999/08/16 20:52:00 roberto Exp roberto $
** load bytecodes from files
** See Copyright Notice in lua.h
*/
@ -50,12 +50,12 @@ static unsigned long LoadLong (ZIO* Z)
/*
* convert number from text
*/
double luaU_str2d (const char* b, const char* where)
real luaU_str2d (const char* b, const char* where)
{
int negative=(b[0]=='-');
double x=luaO_str2d(b+negative);
if (x<0) luaL_verror("cannot convert number '%s' in %s",b,where);
return negative ? -x : x;
real x;
if (!luaO_str2d(b, &x))
luaL_verror("cannot convert number '%s' in %s",b,where);
return x;
}
static real LoadNumber (ZIO* Z, int native)

17
lvm.c
View File

@ -1,5 +1,5 @@
/*
** $Id: lvm.c,v 1.59 1999/08/10 12:55:47 roberto Exp roberto $
** $Id: lvm.c,v 1.60 1999/08/16 20:52:00 roberto Exp roberto $
** Lua virtual machine
** See Copyright Notice in lua.h
*/
@ -53,21 +53,8 @@ int luaV_tonumber (TObject *obj) { /* LUA_NUMBER */
if (ttype(obj) != LUA_T_STRING)
return 1;
else {
real t;
char *e = svalue(obj);
int sig = 1;
while (isspace((unsigned char)*e)) e++;
if (*e == '-') {
e++;
sig = -1;
}
else if (*e == '+') e++;
/* no digit before or after decimal point? */
if (!isdigit((unsigned char)*e) && !isdigit((unsigned char)*(e+1)))
if (!luaO_str2d(svalue(obj), &nvalue(obj)))
return 2;
t = (real)luaO_str2d(e);
if (t<0) return 2;
nvalue(obj) = t*sig;
ttype(obj) = LUA_T_NUMBER;
return 0;
}