aboutsummaryrefslogtreecommitdiff
path: root/lobject.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-04-30 13:48:44 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-04-30 13:48:44 -0300
commit5388aa9fc0185b5d7a852e679484e26ba53e5d4d (patch)
tree2085a65550d299ee37369985f47af4fd9f5c951e /lobject.c
parentb123a88673fcf37ebfcc8ea866a3d27da6cdf82e (diff)
downloadlua-5388aa9fc0185b5d7a852e679484e26ba53e5d4d.tar.gz
lua-5388aa9fc0185b5d7a852e679484e26ba53e5d4d.tar.bz2
lua-5388aa9fc0185b5d7a852e679484e26ba53e5d4d.zip
'luaO_str2d' + 'luaO_str2int' replaced by 'luaO_str2num' (which converts
to float or integer according to the string syntax)
Diffstat (limited to 'lobject.c')
-rw-r--r--lobject.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/lobject.c b/lobject.c
index 6034feaf..a95948f5 100644
--- a/lobject.c
+++ b/lobject.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.c,v 2.81 2014/04/27 14:41:11 roberto Exp roberto $ 2** $Id: lobject.c,v 2.82 2014/04/29 18:14:16 roberto Exp roberto $
3** Some generic functions over Lua objects 3** Some generic functions over Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -254,7 +254,7 @@ static lua_Number lua_strx2number (const char *s, char **endptr) {
254/* }====================================================== */ 254/* }====================================================== */
255 255
256 256
257int luaO_str2d (const char *s, size_t len, lua_Number *result) { 257static int l_str2d (const char *s, size_t len, lua_Number *result) {
258 char *endptr; 258 char *endptr;
259 if (strpbrk(s, "nN")) /* reject 'inf' and 'nan' */ 259 if (strpbrk(s, "nN")) /* reject 'inf' and 'nan' */
260 return 0; 260 return 0;
@@ -268,7 +268,7 @@ int luaO_str2d (const char *s, size_t len, lua_Number *result) {
268} 268}
269 269
270 270
271int luaO_str2int (const char *s, size_t len, lua_Integer *result) { 271static int l_str2int (const char *s, size_t len, lua_Integer *result) {
272 const char *ends = s + len; 272 const char *ends = s + len;
273 lua_Unsigned a = 0; 273 lua_Unsigned a = 0;
274 int empty = 1; 274 int empty = 1;
@@ -298,6 +298,20 @@ int luaO_str2int (const char *s, size_t len, lua_Integer *result) {
298} 298}
299 299
300 300
301int luaO_str2num (const char *s, size_t len, TValue *o) {
302 lua_Integer i; lua_Number n;
303 if (l_str2int(s, len, &i)) { /* try as an integer */
304 setivalue(o, i);
305 }
306 else if (l_str2d(s, len, &n)) { /* else try as a float */
307 setfltvalue(o, n);
308 }
309 else
310 return 0; /* conversion failed */
311 return 1; /* success */
312}
313
314
301int luaO_utf8esc (char *buff, unsigned int x) { 315int luaO_utf8esc (char *buff, unsigned int x) {
302 int n = 1; /* number of bytes put in buffer (backwards) */ 316 int n = 1; /* number of bytes put in buffer (backwards) */
303 if (x < 0x80) /* ascii? */ 317 if (x < 0x80) /* ascii? */