mirror of
https://github.com/love2d/love.git
synced 2026-08-12 16:40:57 +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:
@@ -31,6 +31,7 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <sstream>
|
||||
|
||||
namespace love
|
||||
{
|
||||
@@ -832,6 +833,25 @@ extern "C" int luax_typerror(lua_State *L, int narg, const char *tname)
|
||||
return luaL_argerror(L, narg, msg);
|
||||
}
|
||||
|
||||
int luax_enumerror(lua_State *L, const char *enumName, const char *value)
|
||||
{
|
||||
return luaL_error(L, "Invalid %s: %s", enumName, value);
|
||||
}
|
||||
|
||||
int luax_enumerror(lua_State *L, const char *enumName, const std::vector<std::string> &values, const char *value)
|
||||
{
|
||||
std::stringstream valueStream;
|
||||
bool first = true;
|
||||
for (auto value : values)
|
||||
{
|
||||
valueStream << (first ? "'" : ", '") << value << "'";
|
||||
first = false;
|
||||
}
|
||||
|
||||
std::string valueString = valueStream.str();
|
||||
return luaL_error(L, "Invalid %s '%s', expected one of: %s", enumName, value, valueString.c_str());
|
||||
}
|
||||
|
||||
size_t luax_objlen(lua_State *L, int ndx)
|
||||
{
|
||||
#if LUA_VERSION_NUM == 501
|
||||
|
||||
Reference in New Issue
Block a user