aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-11-21 20:50:27 +0100
committerMike Pall <mike>2011-11-21 20:50:27 +0100
commitbd758df76ae7a34a18c6da755b46be1959abeb79 (patch)
treee5e7ca981c232a0096dbe208859279df5d867f91 /src
parentcecbe3c15fc62921098f3468b9de86cf0b631b9e (diff)
downloadluajit-bd758df76ae7a34a18c6da755b46be1959abeb79.tar.gz
luajit-bd758df76ae7a34a18c6da755b46be1959abeb79.tar.bz2
luajit-bd758df76ae7a34a18c6da755b46be1959abeb79.zip
Replace stack slot for implicit number->string conv. in Lua/C API.
Diffstat (limited to 'src')
-rw-r--r--src/lj_api.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/lj_api.c b/src/lj_api.c
index a6fbb1c6..5ef2dff1 100644
--- a/src/lj_api.c
+++ b/src/lj_api.c
@@ -437,6 +437,7 @@ LUA_API const char *lua_tolstring(lua_State *L, int idx, size_t *len)
437 lj_gc_check(L); 437 lj_gc_check(L);
438 o = index2adr(L, idx); /* GC may move the stack. */ 438 o = index2adr(L, idx); /* GC may move the stack. */
439 s = lj_str_fromnumber(L, o); 439 s = lj_str_fromnumber(L, o);
440 setstrV(L, o, s);
440 } else { 441 } else {
441 if (len != NULL) *len = 0; 442 if (len != NULL) *len = 0;
442 return NULL; 443 return NULL;
@@ -455,6 +456,7 @@ LUALIB_API const char *luaL_checklstring(lua_State *L, int idx, size_t *len)
455 lj_gc_check(L); 456 lj_gc_check(L);
456 o = index2adr(L, idx); /* GC may move the stack. */ 457 o = index2adr(L, idx); /* GC may move the stack. */
457 s = lj_str_fromnumber(L, o); 458 s = lj_str_fromnumber(L, o);
459 setstrV(L, o, s);
458 } else { 460 } else {
459 lj_err_argt(L, idx, LUA_TSTRING); 461 lj_err_argt(L, idx, LUA_TSTRING);
460 } 462 }
@@ -476,6 +478,7 @@ LUALIB_API const char *luaL_optlstring(lua_State *L, int idx,
476 lj_gc_check(L); 478 lj_gc_check(L);
477 o = index2adr(L, idx); /* GC may move the stack. */ 479 o = index2adr(L, idx); /* GC may move the stack. */
478 s = lj_str_fromnumber(L, o); 480 s = lj_str_fromnumber(L, o);
481 setstrV(L, o, s);
479 } else { 482 } else {
480 lj_err_argt(L, idx, LUA_TSTRING); 483 lj_err_argt(L, idx, LUA_TSTRING);
481 } 484 }
@@ -499,16 +502,19 @@ LUALIB_API int luaL_checkoption(lua_State *L, int idx, const char *def,
499LUA_API size_t lua_objlen(lua_State *L, int idx) 502LUA_API size_t lua_objlen(lua_State *L, int idx)
500{ 503{
501 TValue *o = index2adr(L, idx); 504 TValue *o = index2adr(L, idx);
502 if (tvisstr(o)) 505 if (tvisstr(o)) {
503 return strV(o)->len; 506 return strV(o)->len;
504 else if (tvistab(o)) 507 } else if (tvistab(o)) {
505 return (size_t)lj_tab_len(tabV(o)); 508 return (size_t)lj_tab_len(tabV(o));
506 else if (tvisudata(o)) 509 } else if (tvisudata(o)) {
507 return udataV(o)->len; 510 return udataV(o)->len;
508 else if (tvisnumber(o)) 511 } else if (tvisnumber(o)) {
509 return lj_str_fromnumber(L, o)->len; 512 GCstr *s = lj_str_fromnumber(L, o);
510 else 513 setstrV(L, o, s);
514 return s->len;
515 } else {
511 return 0; 516 return 0;
517 }
512} 518}
513 519
514LUA_API lua_CFunction lua_tocfunction(lua_State *L, int idx) 520LUA_API lua_CFunction lua_tocfunction(lua_State *L, int idx)