diff options
author | Benoit Giannangeli <giann008@gmail.com> | 2017-02-25 14:49:09 +0100 |
---|---|---|
committer | Benoit Giannangeli <giann008@gmail.com> | 2017-02-25 14:49:09 +0100 |
commit | 9e2ace863b568ed7c3ef42bf687c7cafd3a71bb7 (patch) | |
tree | e750c42fc3b75938c6f223d3d3226d399eb35dfd | |
parent | 0a006ad403733a85abe5be3f242c0264a4556afb (diff) | |
download | fengari-9e2ace863b568ed7c3ef42bf687c7cafd3a71bb7.tar.gz fengari-9e2ace863b568ed7c3ef42bf687c7cafd3a71bb7.tar.bz2 fengari-9e2ace863b568ed7c3ef42bf687c7cafd3a71bb7.zip |
math.tointeger, math.floor, math.ceil
-rw-r--r-- | src/lmathlib.js | 54 | ||||
-rw-r--r-- | src/luaconf.js | 6 |
2 files changed, 52 insertions, 8 deletions
diff --git a/src/lmathlib.js b/src/lmathlib.js index d1daca5..9921cc9 100644 --- a/src/lmathlib.js +++ b/src/lmathlib.js @@ -52,14 +52,54 @@ const math_atan = function(L) { return 1; }; +const math_toint = function(L) { + let n = lapi.lua_tointegerx(L, 1) + if (n !== false) + lapi.lua_pushinteger(L, n); + else { + lauxlib.luaL_checkany(L, 1); + lapi.lua_pushnil(L); /* value is not convertible to integer */ + } + return 1; +}; + +const pushnumint = function(L, d) { + let n = luaconf.lua_numbertointeger(d); + if (n !== false) /* does 'd' fit in an integer? */ + lapi.lua_pushinteger(L, n); /* result is integer */ + else + lapi.lua_pushnumber(L, d); /* result is float */ +}; + +const math_floor = function(L) { + if (lapi.lua_isinteger(L, 1)) + lapi.lua_settop(L, 1); + else + pushnumint(L, lauxlib.luaL_checknumber(L, 1)); + + return 1; +}; + +const math_ceil = function(L) { + if (lapi.lua_isinteger(L, 1)) + lapi.lua_settop(L, 1); + else + pushnumint(L, Math.ceil(lauxlib.luaL_checknumber(L, 1))); + + return 1; +}; + const mathlib = { - "abs": math_abs, - "sin": math_sin, - "cos": math_cos, - "tan": math_tan, - "asin": math_asin, - "acos": math_acos, - "atan": math_atan + "abs": math_abs, + "acos": math_acos, + "asin": math_asin, + "atan": math_atan, + "ceil": math_ceil, + "cos": math_cos, + "floor": math_floor, + "sin": math_sin, + "tan": math_tan, + "tointeger": math_toint }; const luaopen_math = function(L) { diff --git a/src/luaconf.js b/src/luaconf.js index c415a65..7297b28 100644 --- a/src/luaconf.js +++ b/src/luaconf.js @@ -14,7 +14,11 @@ const LUAI_MAXSTACK = 1000000; @@ of a function in debug information. ** CHANGE it if you want a different size. */ -const LUA_IDSIZE = 60 +const LUA_IDSIZE = 60; + +const lua_numbertointeger = function(n) { + return n|0; +}; module.exports.LUAI_MAXSTACK = LUAI_MAXSTACK; module.exports.LUA_IDSIZE = LUA_IDSIZE;
\ No newline at end of file |