diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-06-26 14:25:11 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-06-26 14:25:11 -0300 |
| commit | 84fe52dbeb0f75d31e5c87e801d4bd98ec26ce60 (patch) | |
| tree | 7dc42b19195feffd2205b5adb9191fc00c5413a8 | |
| parent | 10200585a7d634b9d8688ecf8afab5b203619508 (diff) | |
| download | lua-84fe52dbeb0f75d31e5c87e801d4bd98ec26ce60.tar.gz lua-84fe52dbeb0f75d31e5c87e801d4bd98ec26ce60.tar.bz2 lua-84fe52dbeb0f75d31e5c87e801d4bd98ec26ce60.zip | |
unsigned-manipulation functions (lua_puhsunsigned, lua_tounsigned, etc.)
deprecated
| -rw-r--r-- | lapi.c | 49 |
1 files changed, 1 insertions, 48 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.219 2014/06/19 18:27:20 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.220 2014/06/24 17:00:13 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 | */ |
| @@ -372,45 +372,6 @@ LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *pisnum) { | |||
| 372 | } | 372 | } |
| 373 | 373 | ||
| 374 | 374 | ||
| 375 | #if !defined(LUAI_FTWO2N) | ||
| 376 | /* 2.0^(numbits in an integer), computed without roundings */ | ||
| 377 | #define LUAI_FTWO2N (cast_num(LUA_MININTEGER) * cast_num(-2)) | ||
| 378 | #endif | ||
| 379 | |||
| 380 | LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *pisnum) { | ||
| 381 | lua_Unsigned res = 0; | ||
| 382 | const TValue *o = index2addr(L, idx); | ||
| 383 | int isnum = 0; | ||
| 384 | switch (ttype(o)) { | ||
| 385 | case LUA_TNUMINT: { | ||
| 386 | res = l_castS2U(ivalue(o)); | ||
| 387 | isnum = 1; | ||
| 388 | break; | ||
| 389 | } | ||
| 390 | case LUA_TNUMFLT: { /* compute floor(n) % 2^(numbits in an integer) */ | ||
| 391 | const lua_Number two2n = LUAI_FTWO2N; | ||
| 392 | lua_Number n = fltvalue(o); /* get value */ | ||
| 393 | int neg = 0; | ||
| 394 | n = l_floor(n); /* get its floor */ | ||
| 395 | if (n < 0) { | ||
| 396 | neg = 1; | ||
| 397 | n = -n; /* make 'n' positive, so that 'fmod' is the same as '%' */ | ||
| 398 | } | ||
| 399 | n = l_mathop(fmod)(n, two2n); /* n = n % 2^(numbits in an integer) */ | ||
| 400 | if (luai_numisnan(n)) /* not a number? */ | ||
| 401 | break; /* not an integer, too */ | ||
| 402 | res = cast(lua_Unsigned, n); /* 'n' now must fit in an unsigned */ | ||
| 403 | if (neg) res = 0u - res; /* back to negative, if needed */ | ||
| 404 | isnum = 1; | ||
| 405 | break; | ||
| 406 | } | ||
| 407 | default: break; | ||
| 408 | } | ||
| 409 | if (pisnum) *pisnum = isnum; | ||
| 410 | return res; | ||
| 411 | } | ||
| 412 | |||
| 413 | |||
| 414 | LUA_API int lua_toboolean (lua_State *L, int idx) { | 375 | LUA_API int lua_toboolean (lua_State *L, int idx) { |
| 415 | const TValue *o = index2addr(L, idx); | 376 | const TValue *o = index2addr(L, idx); |
| 416 | return !l_isfalse(o); | 377 | return !l_isfalse(o); |
| @@ -517,14 +478,6 @@ LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { | |||
| 517 | } | 478 | } |
| 518 | 479 | ||
| 519 | 480 | ||
| 520 | LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) { | ||
| 521 | lua_lock(L); | ||
| 522 | setivalue(L->top, l_castU2S(u)); | ||
| 523 | api_incr_top(L); | ||
| 524 | lua_unlock(L); | ||
| 525 | } | ||
| 526 | |||
| 527 | |||
| 528 | LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { | 481 | LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { |
| 529 | TString *ts; | 482 | TString *ts; |
| 530 | lua_lock(L); | 483 | lua_lock(L); |
