diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-07-02 14:35:06 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2010-07-02 14:35:06 -0300 |
| commit | a9dc7c88283a8046ad40c592f9e626d93e8e14a1 (patch) | |
| tree | 693fa40d1ca9beceb5af5d4d4325401abe3f96a2 | |
| parent | 7192afafeeb1a96b3de60af90a72cd8762b09d94 (diff) | |
| download | lua-a9dc7c88283a8046ad40c592f9e626d93e8e14a1.tar.gz lua-a9dc7c88283a8046ad40c592f9e626d93e8e14a1.tar.bz2 lua-a9dc7c88283a8046ad40c592f9e626d93e8e14a1.zip | |
functions lua_tonumber/lua_tointeger replaced by lua_tonumberx/lua_tointegerx
that have an extra out parameter with conversion status
| -rw-r--r-- | lapi.c | 19 | ||||
| -rw-r--r-- | lauxlib.c | 17 | ||||
| -rw-r--r-- | lbitlib.c | 7 | ||||
| -rw-r--r-- | loslib.c | 9 | ||||
| -rw-r--r-- | lua.h | 9 |
5 files changed, 37 insertions, 24 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.130 2010/05/31 16:08:55 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.131 2010/06/04 13:05:29 roberto Exp roberto $ |
| 3 | ** Lua API | 3 | ** Lua API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -316,27 +316,34 @@ LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { | |||
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | 318 | ||
| 319 | LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { | 319 | LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) { |
| 320 | TValue n; | 320 | TValue n; |
| 321 | const TValue *o = index2addr(L, idx); | 321 | const TValue *o = index2addr(L, idx); |
| 322 | if (tonumber(o, &n)) | 322 | if (tonumber(o, &n)) { |
| 323 | if (isnum) *isnum = 1; | ||
| 323 | return nvalue(o); | 324 | return nvalue(o); |
| 324 | else | 325 | } |
| 326 | else { | ||
| 327 | if (isnum) *isnum = 0; | ||
| 325 | return 0; | 328 | return 0; |
| 329 | } | ||
| 326 | } | 330 | } |
| 327 | 331 | ||
| 328 | 332 | ||
| 329 | LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) { | 333 | LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) { |
| 330 | TValue n; | 334 | TValue n; |
| 331 | const TValue *o = index2addr(L, idx); | 335 | const TValue *o = index2addr(L, idx); |
| 332 | if (tonumber(o, &n)) { | 336 | if (tonumber(o, &n)) { |
| 333 | lua_Integer res; | 337 | lua_Integer res; |
| 334 | lua_Number num = nvalue(o); | 338 | lua_Number num = nvalue(o); |
| 335 | lua_number2integer(res, num); | 339 | lua_number2integer(res, num); |
| 340 | if (isnum) *isnum = 1; | ||
| 336 | return res; | 341 | return res; |
| 337 | } | 342 | } |
| 338 | else | 343 | else { |
| 344 | if (isnum) *isnum = 0; | ||
| 339 | return 0; | 345 | return 0; |
| 346 | } | ||
| 340 | } | 347 | } |
| 341 | 348 | ||
| 342 | 349 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lauxlib.c,v 1.216 2010/06/30 17:40:27 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.217 2010/07/02 11:38:13 roberto Exp roberto $ |
| 3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -308,8 +308,9 @@ LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, | |||
| 308 | 308 | ||
| 309 | 309 | ||
| 310 | LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { | 310 | LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { |
| 311 | lua_Number d = lua_tonumber(L, narg); | 311 | int isnum; |
| 312 | if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ | 312 | lua_Number d = lua_tonumberx(L, narg, &isnum); |
| 313 | if (!isnum) | ||
| 313 | tag_error(L, narg, LUA_TNUMBER); | 314 | tag_error(L, narg, LUA_TNUMBER); |
| 314 | return d; | 315 | return d; |
| 315 | } | 316 | } |
| @@ -321,8 +322,9 @@ LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { | |||
| 321 | 322 | ||
| 322 | 323 | ||
| 323 | LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { | 324 | LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { |
| 324 | lua_Integer d = lua_tointeger(L, narg); | 325 | int isnum; |
| 325 | if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ | 326 | lua_Integer d = lua_tointegerx(L, narg, &isnum); |
| 327 | if (!isnum) | ||
| 326 | tag_error(L, narg, LUA_TNUMBER); | 328 | tag_error(L, narg, LUA_TNUMBER); |
| 327 | return d; | 329 | return d; |
| 328 | } | 330 | } |
| @@ -624,9 +626,10 @@ LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { | |||
| 624 | 626 | ||
| 625 | LUALIB_API int luaL_len (lua_State *L, int idx) { | 627 | LUALIB_API int luaL_len (lua_State *L, int idx) { |
| 626 | int l; | 628 | int l; |
| 629 | int isnum; | ||
| 627 | lua_len(L, idx); | 630 | lua_len(L, idx); |
| 628 | l = lua_tointeger(L, -1); | 631 | l = lua_tointegerx(L, -1, &isnum); |
| 629 | if (l == 0 && !lua_isnumber(L, -1)) | 632 | if (!isnum) |
| 630 | luaL_error(L, "object length is not a number"); | 633 | luaL_error(L, "object length is not a number"); |
| 631 | lua_pop(L, 1); /* remove object */ | 634 | lua_pop(L, 1); /* remove object */ |
| 632 | return l; | 635 | return l; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lbitlib.c,v 1.4 2010/02/11 15:55:29 roberto Exp roberto $ | 2 | ** $Id: lbitlib.c,v 1.5 2010/07/02 11:38:13 roberto Exp roberto $ |
| 3 | ** Standard library for bitwise operations | 3 | ** Standard library for bitwise operations |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -23,8 +23,9 @@ typedef unsigned LUA_INT32 b_uint; | |||
| 23 | 23 | ||
| 24 | static b_uint getuintarg (lua_State *L, int arg) { | 24 | static b_uint getuintarg (lua_State *L, int arg) { |
| 25 | b_uint r; | 25 | b_uint r; |
| 26 | lua_Number x = lua_tonumber(L, arg); | 26 | int isnum; |
| 27 | if (x == 0) luaL_checktype(L, arg, LUA_TNUMBER); | 27 | lua_Number x = lua_tonumberx(L, arg, &isnum); |
| 28 | if (!isnum) luaL_typeerror(L, arg, "number"); | ||
| 28 | lua_number2uint(r, x); | 29 | lua_number2uint(r, x); |
| 29 | return r; | 30 | return r; |
| 30 | } | 31 | } |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: loslib.c,v 1.29 2009/12/17 13:08:51 roberto Exp roberto $ | 2 | ** $Id: loslib.c,v 1.30 2010/07/02 11:38:13 roberto Exp roberto $ |
| 3 | ** Standard Operating System library | 3 | ** Standard Operating System library |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -146,11 +146,10 @@ static int getboolfield (lua_State *L, const char *key) { | |||
| 146 | 146 | ||
| 147 | 147 | ||
| 148 | static int getfield (lua_State *L, const char *key, int d) { | 148 | static int getfield (lua_State *L, const char *key, int d) { |
| 149 | int res; | 149 | int res, isnum; |
| 150 | lua_getfield(L, -1, key); | 150 | lua_getfield(L, -1, key); |
| 151 | if (lua_isnumber(L, -1)) | 151 | res = (int)lua_tointegerx(L, -1, &isnum); |
| 152 | res = (int)lua_tointeger(L, -1); | 152 | if (!isnum) { |
| 153 | else { | ||
| 154 | if (d < 0) | 153 | if (d < 0) |
| 155 | return luaL_error(L, "field " LUA_QS " missing in date table", key); | 154 | return luaL_error(L, "field " LUA_QS " missing in date table", key); |
| 156 | res = d; | 155 | res = d; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lua.h,v 1.269 2010/05/10 13:50:20 roberto Exp roberto $ | 2 | ** $Id: lua.h,v 1.270 2010/05/12 14:09:20 roberto Exp roberto $ |
| 3 | ** Lua - A Scripting Language | 3 | ** Lua - A Scripting Language |
| 4 | ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) | 4 | ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) |
| 5 | ** See Copyright Notice at the end of this file | 5 | ** See Copyright Notice at the end of this file |
| @@ -153,8 +153,8 @@ LUA_API int (lua_isuserdata) (lua_State *L, int idx); | |||
| 153 | LUA_API int (lua_type) (lua_State *L, int idx); | 153 | LUA_API int (lua_type) (lua_State *L, int idx); |
| 154 | LUA_API const char *(lua_typename) (lua_State *L, int tp); | 154 | LUA_API const char *(lua_typename) (lua_State *L, int tp); |
| 155 | 155 | ||
| 156 | LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); | 156 | LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); |
| 157 | LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); | 157 | LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); |
| 158 | LUA_API int (lua_toboolean) (lua_State *L, int idx); | 158 | LUA_API int (lua_toboolean) (lua_State *L, int idx); |
| 159 | LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); | 159 | LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); |
| 160 | LUA_API size_t (lua_rawlen) (lua_State *L, int idx); | 160 | LUA_API size_t (lua_rawlen) (lua_State *L, int idx); |
| @@ -296,6 +296,9 @@ LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); | |||
| 296 | ** =============================================================== | 296 | ** =============================================================== |
| 297 | */ | 297 | */ |
| 298 | 298 | ||
| 299 | #define lua_tonumber(L,i) lua_tonumberx(L,i,NULL) | ||
| 300 | #define lua_tointeger(L,i) lua_tointegerx(L,i,NULL) | ||
| 301 | |||
| 299 | #define lua_pop(L,n) lua_settop(L, -(n)-1) | 302 | #define lua_pop(L,n) lua_settop(L, -(n)-1) |
| 300 | 303 | ||
| 301 | #define lua_newtable(L) lua_createtable(L, 0, 0) | 304 | #define lua_newtable(L) lua_createtable(L, 0, 0) |
