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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user