diff --git a/src/extractor/scripting_environment_lua.cpp b/src/extractor/scripting_environment_lua.cpp index baef341cb..99295e337 100644 --- a/src/extractor/scripting_environment_lua.cpp +++ b/src/extractor/scripting_environment_lua.cpp @@ -939,6 +939,22 @@ Sol2ScriptingEnvironment::GetStringListFromFunction(const std::string &function_ return strings; } +namespace { + +// string list can be defined either as a Set(see profiles/lua/set.lua) or as a Sequence (see profiles/lua/sequence.lua) +// `Set` is a table with keys that are actual values we are looking for and values that always `true`. +// `Sequence` is a table with keys that are indices and values that are actual values we are looking for. + +std::string GetSetOrSequenceValue(const std::pair& pair) { + if (pair.second.is()) + { + return pair.second.as(); + } + return pair.first.as(); +} + +} // namespace + std::vector Sol2ScriptingEnvironment::GetStringListFromTable(const std::string &table_name) { @@ -950,7 +966,7 @@ Sol2ScriptingEnvironment::GetStringListFromTable(const std::string &table_name) { for (auto &&pair : *table) { - strings.push_back(pair.second.as()); + strings.emplace_back(GetSetOrSequenceValue(pair)); } } return strings; @@ -981,7 +997,7 @@ Sol2ScriptingEnvironment::GetStringListsFromTable(const std::string &table_name) std::vector inner_vector; for (const auto &inner_pair : inner_table) { - inner_vector.push_back(inner_pair.first.as()); + inner_vector.emplace_back(GetSetOrSequenceValue(inner_pair)); } string_lists.push_back(std::move(inner_vector)); }