diff --git a/VM/include/lualib.h b/VM/include/lualib.h index 30cffaff..bd45f9ec 100644 --- a/VM/include/lualib.h +++ b/VM/include/lualib.h @@ -24,6 +24,9 @@ LUALIB_API const char* luaL_optlstring(lua_State* L, int numArg, const char* def LUALIB_API double luaL_checknumber(lua_State* L, int numArg); LUALIB_API double luaL_optnumber(lua_State* L, int nArg, double def); +LUALIB_API bool luaL_checkboolean(lua_State* L, int narg); +LUALIB_API bool luaL_optboolean(lua_State* L, int narg, bool default); + LUALIB_API int luaL_checkinteger(lua_State* L, int numArg); LUALIB_API int luaL_optinteger(lua_State* L, int nArg, int def); LUALIB_API unsigned luaL_checkunsigned(lua_State* L, int numArg); diff --git a/VM/src/laux.cpp b/VM/src/laux.cpp index 2a684ee4..c9b09649 100644 --- a/VM/src/laux.cpp +++ b/VM/src/laux.cpp @@ -183,6 +183,23 @@ LUALIB_API double luaL_optnumber(lua_State* L, int narg, double def) return luaL_opt(L, luaL_checknumber, narg, def); } +LUALIB_API bool luaL_checkboolean(lua_State* L, int narg) +{ + // This checks specifically for boolean values, ignoring + // all other truthy/falsy values. If the desired result + // is true if value is present then lua_toboolean should + // directly be used instead. + const auto val = lua_isboolean(L, narg); + if (!val) + tag_error(L, narg, LUA_TBOOLEAN); + return lua_toboolean(L, narg); +} + +LUALIB_API bool luaL_optboolean(lua_State* L, int narg, bool def) +{ + return luaL_opt(L, luaL_checkboolean, narg, def); +} + LUALIB_API int luaL_checkinteger(lua_State* L, int narg) { int isnum;