cmState: Add a VariableScope snapshot type.

Match the scopes currently used in cmMakefile for definitions.
This commit is contained in:
Stephen Kelly 2015-08-01 19:41:26 +02:00
parent 1fc645bd9c
commit 6954c8936f
3 changed files with 38 additions and 1 deletions

View File

@ -4464,6 +4464,17 @@ void cmMakefile::PushScope()
{
this->Internal->PushDefinitions(Internals::VariableScope);
std::string commandName;
long line = 0;
if (!this->ContextStack.empty())
{
commandName = this->ContextStack.back()->Name;
line = this->ContextStack.back()->Line;
}
this->StateSnapshot = this->GetState()->CreateVariableScopeSnapshot(
this->StateSnapshot,
commandName,
line);
this->PushLoopBlockBarrier();
#if defined(CMAKE_BUILD_WITH_CMAKE)
@ -4482,6 +4493,9 @@ void cmMakefile::PopScope()
this->CheckForUnusedVariables();
this->Internal->PopDefinitions();
this->StateSnapshot =
this->GetState()->Pop(this->StateSnapshot);
assert(this->StateSnapshot.IsValid());
}
void cmMakefile::RaiseScope(const std::string& var, const char *varDef)

View File

@ -20,6 +20,7 @@
struct cmState::SnapshotDataType
{
cmState::PositionType ScopeParent;
cmState::PositionType DirectoryParent;
cmLinkedTree<cmState::PolicyStackEntry>::iterator Policies;
cmLinkedTree<cmState::PolicyStackEntry>::iterator PolicyRoot;
@ -736,6 +737,7 @@ cmState::Snapshot cmState::CreateBaseSnapshot()
{
PositionType pos = this->SnapshotData.Extend(this->SnapshotData.Root());
pos->DirectoryParent = this->SnapshotData.Root();
pos->ScopeParent = this->SnapshotData.Root();
pos->SnapshotType = BaseType;
pos->BuildSystemDirectory =
this->BuildsystemDirectory.Extend(this->BuildsystemDirectory.Root());
@ -763,6 +765,7 @@ cmState::CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot,
pos->EntryPointLine = entryPointLine;
pos->EntryPointCommand = entryPointCommand;
pos->DirectoryParent = originSnapshot.Position;
pos->ScopeParent = originSnapshot.Position;
pos->SnapshotType = BuildsystemDirectoryType;
pos->BuildSystemDirectory =
this->BuildsystemDirectory.Extend(
@ -787,6 +790,7 @@ cmState::CreateFunctionCallSnapshot(cmState::Snapshot originSnapshot,
{
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
*originSnapshot.Position);
pos->ScopeParent = originSnapshot.Position;
pos->EntryPointLine = entryPointLine;
pos->EntryPointCommand = entryPointCommand;
pos->SnapshotType = FunctionCallType;
@ -834,6 +838,21 @@ cmState::CreateCallStackSnapshot(cmState::Snapshot originSnapshot,
return cmState::Snapshot(this, pos);
}
cmState::Snapshot
cmState::CreateVariableScopeSnapshot(cmState::Snapshot originSnapshot,
std::string const& entryPointCommand,
long entryPointLine)
{
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
*originSnapshot.Position);
pos->ScopeParent = originSnapshot.Position;
pos->EntryPointLine = entryPointLine;
pos->EntryPointCommand = entryPointCommand;
pos->SnapshotType = VariableScopeType;
return cmState::Snapshot(this, pos);
}
cmState::Snapshot
cmState::CreateInlineListFileSnapshot(cmState::Snapshot originSnapshot,
const std::string& entryPointCommand,

View File

@ -41,7 +41,8 @@ public:
MacroCallType,
CallStackType,
InlineListFileType,
PolicyScopeType
PolicyScopeType,
VariableScopeType
};
class Directory;
@ -155,6 +156,9 @@ public:
std::string const& entryPointCommand,
long entryPointLine,
std::string const& fileName);
Snapshot CreateVariableScopeSnapshot(Snapshot originSnapshot,
std::string const& entryPointCommand,
long entryPointLine);
Snapshot CreateInlineListFileSnapshot(Snapshot originSnapshot,
const std::string& entryPointCommand,
long entryPointLine,