Try to resolve enums old-style if new-style fails

This makes e.g. cmd(blend,add) work like cmd(blend,'BlendMode_Add').
Resolution in this case is case-insensitive like it used to be.
This commit is contained in:
Devin J. Pohly
2014-02-23 15:28:20 -05:00
parent 5051d85288
commit 2907fa06a7
+18
View File
@@ -22,6 +22,24 @@ int CheckEnum( lua_State *L, LuaReference &table, int iPos, int iInvalid, const
lua_pushvalue( L, iPos );
lua_gettable( L, -2 );
// If not found, check case-insensitively for legacy compatibility
if( lua_isnil(L, -1) && lua_isstring(L, iPos) ) {
RString sLower;
// Get rid of nil value on stack
lua_pop( L, 1 );
// Get the string and lowercase it
lua_pushvalue( L, iPos );
LuaHelpers::Pop( L, sLower );
sLower.MakeLower();
// Try again to read the value
table.PushSelf( L );
LuaHelpers::Push( L, sLower );
lua_gettable( L, -2 );
}
// If the result is nil, then a string was passed that is not a member of this enum. Throw
// an error. To specify the invalid value, pass nil. That way, typos will throw an error,
// and not silently result in nil, or an out-of-bounds value.