mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 13:51:33 -06:00
Merge topic 'parser-cleanup'
4959276c02cmListFileCache: Remove cmCommandContext0386641142cmListFileCache: Rename FromCommandContext to FromListFileFunction3c4fa4c892cmListFileCache: Move cmListFileFunction earlier Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !6899
This commit is contained in:
@@ -27,7 +27,7 @@ bool cmFunctionBlocker::IsFunctionBlocked(const cmListFileFunction& lff,
|
||||
if (!this->ArgumentsMatch(lff, mf)) {
|
||||
cmListFileContext const& lfc = this->GetStartingContext();
|
||||
cmListFileContext closingContext =
|
||||
cmListFileContext::FromCommandContext(lff, lfc.FilePath);
|
||||
cmListFileContext::FromListFileFunction(lff, lfc.FilePath);
|
||||
std::ostringstream e;
|
||||
/* clang-format off */
|
||||
e << "A logical block opening on the line\n"
|
||||
|
||||
@@ -369,68 +369,68 @@ cm::optional<cmListFileContext> cmListFileParser::CheckNesting() const
|
||||
if (name == "if") {
|
||||
stack.push_back({
|
||||
NestingStateEnum::If,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
});
|
||||
} else if (name == "elseif") {
|
||||
if (!TopIs(stack, NestingStateEnum::If)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.back() = {
|
||||
NestingStateEnum::If,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
};
|
||||
} else if (name == "else") {
|
||||
if (!TopIs(stack, NestingStateEnum::If)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.back() = {
|
||||
NestingStateEnum::Else,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
};
|
||||
} else if (name == "endif") {
|
||||
if (!TopIs(stack, NestingStateEnum::If) &&
|
||||
!TopIs(stack, NestingStateEnum::Else)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.pop_back();
|
||||
} else if (name == "while") {
|
||||
stack.push_back({
|
||||
NestingStateEnum::While,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
});
|
||||
} else if (name == "endwhile") {
|
||||
if (!TopIs(stack, NestingStateEnum::While)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.pop_back();
|
||||
} else if (name == "foreach") {
|
||||
stack.push_back({
|
||||
NestingStateEnum::Foreach,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
});
|
||||
} else if (name == "endforeach") {
|
||||
if (!TopIs(stack, NestingStateEnum::Foreach)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.pop_back();
|
||||
} else if (name == "function") {
|
||||
stack.push_back({
|
||||
NestingStateEnum::Function,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
});
|
||||
} else if (name == "endfunction") {
|
||||
if (!TopIs(stack, NestingStateEnum::Function)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.pop_back();
|
||||
} else if (name == "macro") {
|
||||
stack.push_back({
|
||||
NestingStateEnum::Macro,
|
||||
cmListFileContext::FromCommandContext(func, this->FileName),
|
||||
cmListFileContext::FromListFileFunction(func, this->FileName),
|
||||
});
|
||||
} else if (name == "endmacro") {
|
||||
if (!TopIs(stack, NestingStateEnum::Macro)) {
|
||||
return cmListFileContext::FromCommandContext(func, this->FileName);
|
||||
return cmListFileContext::FromListFileFunction(func, this->FileName);
|
||||
}
|
||||
stack.pop_back();
|
||||
}
|
||||
|
||||
@@ -23,28 +23,6 @@
|
||||
|
||||
class cmMessenger;
|
||||
|
||||
struct cmCommandContext
|
||||
{
|
||||
struct cmCommandName
|
||||
{
|
||||
std::string Original;
|
||||
std::string Lower;
|
||||
cmCommandName() = default;
|
||||
cmCommandName(std::string name)
|
||||
: Original(std::move(name))
|
||||
, Lower(cmSystemTools::LowerCase(this->Original))
|
||||
{
|
||||
}
|
||||
} Name;
|
||||
long Line = 0;
|
||||
cmCommandContext() = default;
|
||||
cmCommandContext(std::string name, long line)
|
||||
: Name(std::move(name))
|
||||
, Line(line)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
struct cmListFileArgument
|
||||
{
|
||||
enum Delimiter
|
||||
@@ -70,6 +48,54 @@ struct cmListFileArgument
|
||||
long Line = 0;
|
||||
};
|
||||
|
||||
class cmListFileFunction
|
||||
{
|
||||
public:
|
||||
cmListFileFunction(std::string name, long line,
|
||||
std::vector<cmListFileArgument> args)
|
||||
: Impl{ std::make_shared<Implementation>(std::move(name), line,
|
||||
std::move(args)) }
|
||||
{
|
||||
}
|
||||
|
||||
std::string const& OriginalName() const noexcept
|
||||
{
|
||||
return this->Impl->OriginalName;
|
||||
}
|
||||
|
||||
std::string const& LowerCaseName() const noexcept
|
||||
{
|
||||
return this->Impl->LowerCaseName;
|
||||
}
|
||||
|
||||
long Line() const noexcept { return this->Impl->Line; }
|
||||
|
||||
std::vector<cmListFileArgument> const& Arguments() const noexcept
|
||||
{
|
||||
return this->Impl->Arguments;
|
||||
}
|
||||
|
||||
private:
|
||||
struct Implementation
|
||||
{
|
||||
Implementation(std::string name, long line,
|
||||
std::vector<cmListFileArgument> args)
|
||||
: OriginalName{ std::move(name) }
|
||||
, LowerCaseName{ cmSystemTools::LowerCase(this->OriginalName) }
|
||||
, Line{ line }
|
||||
, Arguments{ std::move(args) }
|
||||
{
|
||||
}
|
||||
|
||||
std::string OriginalName;
|
||||
std::string LowerCaseName;
|
||||
long Line = 0;
|
||||
std::vector<cmListFileArgument> Arguments;
|
||||
};
|
||||
|
||||
std::shared_ptr<Implementation const> Impl;
|
||||
};
|
||||
|
||||
class cmListFileContext
|
||||
{
|
||||
public:
|
||||
@@ -99,14 +125,14 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
static cmListFileContext FromCommandContext(
|
||||
cmCommandContext const& lfcc, std::string const& fileName,
|
||||
static cmListFileContext FromListFileFunction(
|
||||
cmListFileFunction const& lff, std::string const& fileName,
|
||||
cm::optional<std::string> deferId = {})
|
||||
{
|
||||
cmListFileContext lfc;
|
||||
lfc.FilePath = fileName;
|
||||
lfc.Line = lfcc.Line;
|
||||
lfc.Name = lfcc.Name.Original;
|
||||
lfc.Line = lff.Line();
|
||||
lfc.Name = lff.OriginalName();
|
||||
lfc.DeferId = std::move(deferId);
|
||||
return lfc;
|
||||
}
|
||||
@@ -117,50 +143,6 @@ bool operator<(const cmListFileContext& lhs, const cmListFileContext& rhs);
|
||||
bool operator==(cmListFileContext const& lhs, cmListFileContext const& rhs);
|
||||
bool operator!=(cmListFileContext const& lhs, cmListFileContext const& rhs);
|
||||
|
||||
class cmListFileFunction
|
||||
{
|
||||
public:
|
||||
cmListFileFunction(std::string name, long line,
|
||||
std::vector<cmListFileArgument> args)
|
||||
: Impl{ std::make_shared<Implementation>(std::move(name), line,
|
||||
std::move(args)) }
|
||||
{
|
||||
}
|
||||
|
||||
std::string const& OriginalName() const noexcept
|
||||
{
|
||||
return this->Impl->Name.Original;
|
||||
}
|
||||
|
||||
std::string const& LowerCaseName() const noexcept
|
||||
{
|
||||
return this->Impl->Name.Lower;
|
||||
}
|
||||
|
||||
long Line() const noexcept { return this->Impl->Line; }
|
||||
|
||||
std::vector<cmListFileArgument> const& Arguments() const noexcept
|
||||
{
|
||||
return this->Impl->Arguments;
|
||||
}
|
||||
|
||||
operator cmCommandContext const&() const noexcept { return *this->Impl; }
|
||||
|
||||
private:
|
||||
struct Implementation : public cmCommandContext
|
||||
{
|
||||
Implementation(std::string name, long line,
|
||||
std::vector<cmListFileArgument> args)
|
||||
: cmCommandContext{ std::move(name), line }
|
||||
, Arguments{ std::move(args) }
|
||||
{
|
||||
}
|
||||
std::vector<cmListFileArgument> Arguments;
|
||||
};
|
||||
|
||||
std::shared_ptr<Implementation const> Impl;
|
||||
};
|
||||
|
||||
// Represent a backtrace (call stack). Provide value semantics
|
||||
// but use efficient reference-counting underneath to avoid copies.
|
||||
class cmListFileBacktrace
|
||||
|
||||
@@ -339,7 +339,7 @@ public:
|
||||
cm::optional<std::string> deferId, cmExecutionStatus& status)
|
||||
: Makefile(mf)
|
||||
{
|
||||
cmListFileContext const& lfc = cmListFileContext::FromCommandContext(
|
||||
cmListFileContext const& lfc = cmListFileContext::FromListFileFunction(
|
||||
lff, this->Makefile->StateSnapshot.GetExecutionListFile(),
|
||||
std::move(deferId));
|
||||
this->Makefile->Backtrace = this->Makefile->Backtrace.Push(lfc);
|
||||
|
||||
Reference in New Issue
Block a user