From 9e2ace863b568ed7c3ef42bf687c7cafd3a71bb7 Mon Sep 17 00:00:00 2001 From: Benoit Giannangeli Date: Sat, 25 Feb 2017 14:49:09 +0100 Subject: math.tointeger, math.floor, math.ceil --- src/lmathlib.js | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 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 -- cgit v1.2.3-70-g09d2