diff --git a/src/modules/audio/wrap_Audio.cpp b/src/modules/audio/wrap_Audio.cpp index 8d3faa56c..97d2dfa03 100644 --- a/src/modules/audio/wrap_Audio.cpp +++ b/src/modules/audio/wrap_Audio.cpp @@ -443,7 +443,10 @@ int w_getEffect(lua_State *L) const char *keystr, *valstr; Effect::Type type = static_cast((int)params[Effect::EFFECT_TYPE]); - lua_createtable(L, 0, params.size()); + if (lua_istable(L, 2)) + lua_pushvalue(L, 2); + else + lua_createtable(L, 0, params.size()); for (auto p : params) { diff --git a/src/modules/audio/wrap_Source.cpp b/src/modules/audio/wrap_Source.cpp index 95f66bdfe..4b600e40d 100644 --- a/src/modules/audio/wrap_Source.cpp +++ b/src/modules/audio/wrap_Source.cpp @@ -400,12 +400,15 @@ int setFilterReadFilter(lua_State *L, int idx, std::map ¶ms) +void getFilterWriteFilter(lua_State *L, int idx, std::map ¶ms) { const char *keystr, *valstr; Filter::Type type = static_cast((int)params[Filter::FILTER_TYPE]); - lua_createtable(L, 0, params.size()); + if (lua_istable(L, idx)) + lua_pushvalue(L, idx); + else + lua_createtable(L, 0, params.size()); for (auto p : params) { @@ -452,7 +455,7 @@ int w_Source_getFilter(lua_State *L) if (!t->getFilter(params)) return 0; - getFilterWriteFilter(L, params); + getFilterWriteFilter(L, 2, params); return 1; } @@ -489,7 +492,7 @@ int w_Source_getEffect(lua_State *L) if (params.size() == 0) return 0; - getFilterWriteFilter(L, params); + getFilterWriteFilter(L, 3, params); return 1; } diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index d77690c0b..008768281 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -371,7 +371,10 @@ int w_getInfo(lua_State *L) if (!Filesystem::getConstant(info.type, typestr)) return luaL_error(L, "Unknown file type."); - lua_createtable(L, 0, 3); + if (lua_istable(L, 2)) + lua_pushvalue(L, 2); + else + lua_createtable(L, 0, 3); lua_pushstring(L, typestr); lua_setfield(L, -2, "type"); diff --git a/src/modules/graphics/wrap_Graphics.cpp b/src/modules/graphics/wrap_Graphics.cpp index e213bab32..5ec7e1375 100644 --- a/src/modules/graphics/wrap_Graphics.cpp +++ b/src/modules/graphics/wrap_Graphics.cpp @@ -1992,7 +1992,11 @@ int w_setDefaultShaderCode(lua_State *L) int w_getSupported(lua_State *L) { const Graphics::Capabilities &caps = instance()->getCapabilities(); - lua_createtable(L, 0, (int) Graphics::FEATURE_MAX_ENUM); + + if (lua_istable(L, 1)) + lua_pushvalue(L, 1); + else + lua_createtable(L, 0, (int) Graphics::FEATURE_MAX_ENUM); for (int i = 0; i < (int) Graphics::FEATURE_MAX_ENUM; i++) { @@ -2009,9 +2013,12 @@ int w_getSupported(lua_State *L) return 1; } -static int w__getFormats(lua_State *L, bool (*isFormatSupported)(PixelFormat), bool (*ignore)(PixelFormat)) +static int w__getFormats(lua_State *L, int idx, bool (*isFormatSupported)(PixelFormat), bool (*ignore)(PixelFormat)) { - lua_createtable(L, 0, (int) PIXELFORMAT_MAX_ENUM); + if (lua_istable(L, idx)) + lua_pushvalue(L, idx); + else + lua_createtable(L, 0, (int) PIXELFORMAT_MAX_ENUM); for (int i = 0; i < (int) PIXELFORMAT_MAX_ENUM; i++) { @@ -2032,8 +2039,10 @@ int w_getCanvasFormats(lua_State *L) { bool (*supported)(PixelFormat); - if (!lua_isnoneornil(L, 1)) + int idx = 1; + if (lua_type(L, 1) == LUA_TBOOLEAN) { + idx = 2; if (luax_checkboolean(L, 1)) { supported = [](PixelFormat format) -> bool @@ -2057,7 +2066,7 @@ int w_getCanvasFormats(lua_State *L) }; } - return w__getFormats(L, supported, isPixelFormatCompressed); + return w__getFormats(L, idx, supported, isPixelFormatCompressed); } int w_getImageFormats(lua_State *L) @@ -2072,13 +2081,17 @@ int w_getImageFormats(lua_State *L) return !(image::ImageData::validPixelFormat(format) || isPixelFormatCompressed(format)); }; - return w__getFormats(L, supported, ignore); + return w__getFormats(L, 1, supported, ignore); } int w_getTextureTypes(lua_State *L) { const Graphics::Capabilities &caps = instance()->getCapabilities(); - lua_createtable(L, 0, (int) TEXTURE_MAX_ENUM); + + if (lua_istable(L, 1)) + lua_pushvalue(L, 1); + else + lua_createtable(L, 0, (int) TEXTURE_MAX_ENUM); for (int i = 0; i < (int) TEXTURE_MAX_ENUM; i++) { @@ -2110,7 +2123,11 @@ int w_getRendererInfo(lua_State *L) int w_getSystemLimits(lua_State *L) { const Graphics::Capabilities &caps = instance()->getCapabilities(); - lua_createtable(L, 0, (int) Graphics::LIMIT_MAX_ENUM); + + if (lua_istable(L, 1)) + lua_pushvalue(L, 1); + else + lua_createtable(L, 0, (int) Graphics::LIMIT_MAX_ENUM); for (int i = 0; i < (int) Graphics::LIMIT_MAX_ENUM; i++) { @@ -2131,7 +2148,10 @@ int w_getStats(lua_State *L) { Graphics::Stats stats = instance()->getStats(); - lua_createtable(L, 0, 7); + if (lua_istable(L, 1)) + lua_pushvalue(L, 1); + else + lua_createtable(L, 0, 7); lua_pushinteger(L, stats.drawCalls); lua_setfield(L, -2, "drawcalls"); diff --git a/src/modules/window/wrap_Window.cpp b/src/modules/window/wrap_Window.cpp index 8b8692029..a56f8b854 100644 --- a/src/modules/window/wrap_Window.cpp +++ b/src/modules/window/wrap_Window.cpp @@ -171,7 +171,10 @@ int w_getMode(lua_State *L) lua_pushnumber(L, w); lua_pushnumber(L, h); - lua_newtable(L); + if (lua_istable(L, 1)) + lua_pushvalue(L, 1); + else + lua_newtable(L); const char *fstypestr = "desktop"; Window::getConstant(settings.fstype, fstypestr);