TokenList: actually consider configured standard in `isKeyword()` (#5619)
This commit is contained in:
parent
d3d70dcc4e
commit
87886576fc
|
@ -2051,14 +2051,13 @@ bool TokenList::isKeyword(const std::string &str) const
|
||||||
if (cpp_types.find(str) != cpp_types.end())
|
if (cpp_types.find(str) != cpp_types.end())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO: properly apply configured standard
|
if (mSettings) {
|
||||||
if (!mSettings || mSettings->standards.cpp >= Standards::CPP20) {
|
const auto &cpp_keywords = Keywords::getAll(mSettings->standards.cpp);
|
||||||
static const auto& cpp20_keywords = Keywords::getAll(Standards::cppstd_t::CPP20);
|
return cpp_keywords.find(str) != cpp_keywords.end();
|
||||||
return cpp20_keywords.find(str) != cpp20_keywords.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const auto& cpp_keywords = Keywords::getAll(Standards::cppstd_t::CPP11);
|
static const auto& latest_cpp_keywords = Keywords::getAll(Standards::cppstd_t::CPPLatest);
|
||||||
return cpp_keywords.find(str) != cpp_keywords.end();
|
return latest_cpp_keywords.find(str) != latest_cpp_keywords.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: integrate into Keywords?
|
// TODO: integrate into Keywords?
|
||||||
|
@ -2067,7 +2066,11 @@ bool TokenList::isKeyword(const std::string &str) const
|
||||||
if (c_types.find(str) != c_types.end())
|
if (c_types.find(str) != c_types.end())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO: use configured standard
|
if (mSettings) {
|
||||||
static const auto& c_keywords = Keywords::getAll(Standards::cstd_t::C99);
|
const auto &c_keywords = Keywords::getAll(mSettings->standards.c);
|
||||||
return c_keywords.find(str) != c_keywords.end();
|
return c_keywords.find(str) != c_keywords.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
static const auto& latest_c_keywords = Keywords::getAll(Standards::cstd_t::CLatest);
|
||||||
|
return latest_c_keywords.find(str) != latest_c_keywords.end();
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,56 @@ private:
|
||||||
ASSERT_EQUALS(true, tokenlist.front()->tokAt(4)->isLiteral());
|
ASSERT_EQUALS(true, tokenlist.front()->tokAt(4)->isLiteral());
|
||||||
ASSERT_EQUALS(false, tokenlist.front()->tokAt(4)->isControlFlowKeyword());
|
ASSERT_EQUALS(false, tokenlist.front()->tokAt(4)->isControlFlowKeyword());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "_Generic"; // C11 keyword
|
||||||
|
TokenList tokenlist(nullptr); // no settings use latest standard
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.cpp");
|
||||||
|
ASSERT_EQUALS(false, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "_Generic"; // C11 keyword
|
||||||
|
TokenList tokenlist(nullptr); // no settings use latest standard
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.c");
|
||||||
|
ASSERT_EQUALS(true, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "_Generic"; // C11 keyword
|
||||||
|
const Settings s = settingsBuilder().c(Standards::C89).build();
|
||||||
|
TokenList tokenlist(&s);
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.c");
|
||||||
|
ASSERT_EQUALS(false, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "co_return"; // C++20 keyword
|
||||||
|
TokenList tokenlist(nullptr); // no settings use latest standard
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.cpp");
|
||||||
|
ASSERT_EQUALS(true, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "co_return"; // C++20 keyword
|
||||||
|
TokenList tokenlist(nullptr); // no settings use latest standard
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.c");
|
||||||
|
ASSERT_EQUALS(false, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const char code2[] = "noexcept"; // C++11 keyword
|
||||||
|
const Settings s = settingsBuilder().cpp(Standards::CPP03).build();
|
||||||
|
TokenList tokenlist(&s);
|
||||||
|
std::istringstream istr(code2);
|
||||||
|
tokenlist.createTokens(istr, "a.cpp");
|
||||||
|
ASSERT_EQUALS(false, tokenlist.front()->isKeyword());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue