luaur_vm/functions/
math_log.rs1use crate::functions::lua_l_checknumber::lua_l_checknumber;
2use crate::functions::lua_pushnumber::lua_pushnumber;
3use crate::macros::lua_isnoneornil::lua_isnoneornil;
4use crate::type_aliases::lua_state::lua_State;
5
6pub unsafe fn math_log(l: *mut lua_State) -> i32 {
7 let x = lua_l_checknumber(l, 1);
8 let res = if lua_isnoneornil!(l, 2) {
9 x.ln()
10 } else {
11 let base = lua_l_checknumber(l, 2);
12 if base == 2.0 {
13 x.log2()
14 } else if base == 10.0 {
15 x.log10()
16 } else {
17 x.ln() / base.ln()
18 }
19 };
20
21 lua_pushnumber(l, res);
22 1
23}