mirror of
https://github.com/love2d/love.git
synced 2026-08-16 00:02:12 +02:00
Show (short) list of possible enum values when an invalid value is encountered (resolves #1318)
All enum errors have (hopefully) been changed to a luax_enumerror, which has a fixed error message. If additionally a list of valid options is passed, it lists that in the error message. For every enum error with few options I've implemented this using a getConstants call. This solution has been designed specifically to reduce the number of template instantiations (as I've been told that was a concern). All new template code happens in places where there already was an instantiation of the relevant StringMap. Of course there is still std::vector<std::string>... --HG-- branch : minor
This commit is contained in:
@@ -67,7 +67,7 @@ static int readWindowSettings(lua_State *L, int idx, WindowSettings &settings)
|
||||
Window::Setting setting;
|
||||
|
||||
if (!Window::getConstant(key, setting))
|
||||
return luaL_error(L, "Invalid window setting: %s", key);
|
||||
return luax_enumerror(L, "window setting", key);
|
||||
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
@@ -77,7 +77,7 @@ static int readWindowSettings(lua_State *L, int idx, WindowSettings &settings)
|
||||
{
|
||||
const char *typestr = luaL_checkstring(L, -1);
|
||||
if (!Window::getConstant(typestr, settings.fstype))
|
||||
return luaL_error(L, "Invalid fullscreen type: %s", typestr);
|
||||
return luax_enumerror(L, "fullscreen type", Window::getConstants(settings.fstype), typestr);
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
@@ -274,7 +274,7 @@ int w_setFullscreen(lua_State *L)
|
||||
|
||||
const char *typestr = lua_isnoneornil(L, 2) ? 0 : luaL_checkstring(L, 2);
|
||||
if (typestr && !Window::getConstant(typestr, fstype))
|
||||
return luaL_error(L, "Invalid fullscreen type: %s", typestr);
|
||||
return luax_enumerror(L, "fullscreen type", Window::getConstants(fstype), typestr);
|
||||
|
||||
bool success = false;
|
||||
luax_catchexcept(L, [&]() {
|
||||
@@ -527,7 +527,7 @@ int w_showMessageBox(lua_State *L)
|
||||
|
||||
const char *typestr = lua_isnoneornil(L, 4) ? nullptr : luaL_checkstring(L, 4);
|
||||
if (typestr && !Window::getConstant(typestr, data.type))
|
||||
return luaL_error(L, "Invalid messagebox type: %s", typestr);
|
||||
return luax_enumerror(L, "messagebox type", Window::getConstants(data.type), typestr);
|
||||
|
||||
data.attachToWindow = luax_optboolean(L, 5, true);
|
||||
|
||||
@@ -538,7 +538,7 @@ int w_showMessageBox(lua_State *L)
|
||||
{
|
||||
const char *typestr = lua_isnoneornil(L, 3) ? nullptr : luaL_checkstring(L, 3);
|
||||
if (typestr && !Window::getConstant(typestr, data.type))
|
||||
return luaL_error(L, "Invalid messagebox type: %s", typestr);
|
||||
return luax_enumerror(L, "messagebox type", Window::getConstants(data.type), typestr);
|
||||
|
||||
data.attachToWindow = luax_optboolean(L, 4, true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user