cmState: Store snapshots for more different types.
Adjust cmMakefile implementation to create the snapshots.
This commit is contained in:
parent
dbafb01580
commit
a8e5446024
|
@ -463,11 +463,19 @@ cmMakefile::IncludeScope::IncludeScope(cmMakefile* mf,
|
||||||
this->Makefile->PushPolicyBarrier();
|
this->Makefile->PushPolicyBarrier();
|
||||||
this->Makefile->ListFileStack.push_back(filenametoread);
|
this->Makefile->ListFileStack.push_back(filenametoread);
|
||||||
this->Makefile->PushFunctionBlockerBarrier();
|
this->Makefile->PushFunctionBlockerBarrier();
|
||||||
|
|
||||||
|
this->Makefile->StateSnapshot =
|
||||||
|
this->Makefile->GetState()->CreateCallStackSnapshot(
|
||||||
|
this->Makefile->StateSnapshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmMakefile::IncludeScope::~IncludeScope()
|
cmMakefile::IncludeScope::~IncludeScope()
|
||||||
{
|
{
|
||||||
|
this->Makefile->StateSnapshot =
|
||||||
|
this->Makefile->GetState()->Pop(this->Makefile->StateSnapshot);
|
||||||
|
assert(this->Makefile->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->Makefile->PopFunctionBlockerBarrier(this->ReportError);
|
this->Makefile->PopFunctionBlockerBarrier(this->ReportError);
|
||||||
// Enforce matching policy scopes inside the included file.
|
// Enforce matching policy scopes inside the included file.
|
||||||
this->Makefile->PopPolicyBarrier(this->ReportError);
|
this->Makefile->PopPolicyBarrier(this->ReportError);
|
||||||
|
@ -567,11 +575,20 @@ public:
|
||||||
{
|
{
|
||||||
this->Makefile->ListFileStack.push_back(filenametoread);
|
this->Makefile->ListFileStack.push_back(filenametoread);
|
||||||
this->Makefile->PushPolicyBarrier();
|
this->Makefile->PushPolicyBarrier();
|
||||||
|
|
||||||
|
this->Makefile->StateSnapshot =
|
||||||
|
this->Makefile->GetState()->CreateInlineListFileSnapshot(
|
||||||
|
this->Makefile->StateSnapshot);
|
||||||
|
assert(this->Makefile->StateSnapshot.IsValid());
|
||||||
this->Makefile->PushFunctionBlockerBarrier();
|
this->Makefile->PushFunctionBlockerBarrier();
|
||||||
}
|
}
|
||||||
|
|
||||||
~ListFileScope()
|
~ListFileScope()
|
||||||
{
|
{
|
||||||
|
this->Makefile->StateSnapshot =
|
||||||
|
this->Makefile->GetState()->Pop(this->Makefile->StateSnapshot);
|
||||||
|
assert(this->Makefile->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->Makefile->PopFunctionBlockerBarrier(this->ReportError);
|
this->Makefile->PopFunctionBlockerBarrier(this->ReportError);
|
||||||
this->Makefile->PopPolicyBarrier(this->ReportError);
|
this->Makefile->PopPolicyBarrier(this->ReportError);
|
||||||
this->Makefile->ListFileStack.pop_back();
|
this->Makefile->ListFileStack.pop_back();
|
||||||
|
@ -1575,6 +1592,11 @@ void cmMakefile::InitializeFromParent(cmMakefile* parent)
|
||||||
|
|
||||||
void cmMakefile::PushFunctionScope(const cmPolicies::PolicyMap& pm)
|
void cmMakefile::PushFunctionScope(const cmPolicies::PolicyMap& pm)
|
||||||
{
|
{
|
||||||
|
this->StateSnapshot =
|
||||||
|
this->GetState()->CreateFunctionCallSnapshot(
|
||||||
|
this->StateSnapshot);
|
||||||
|
assert(this->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->Internal->PushDefinitions();
|
this->Internal->PushDefinitions();
|
||||||
|
|
||||||
this->PushLoopBlockBarrier();
|
this->PushLoopBlockBarrier();
|
||||||
|
@ -1594,6 +1616,9 @@ void cmMakefile::PopFunctionScope(bool reportError)
|
||||||
this->PopPolicyBarrier(reportError);
|
this->PopPolicyBarrier(reportError);
|
||||||
this->PopPolicy();
|
this->PopPolicy();
|
||||||
|
|
||||||
|
this->StateSnapshot = this->GetState()->Pop(this->StateSnapshot);
|
||||||
|
assert(this->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->PopFunctionBlockerBarrier(reportError);
|
this->PopFunctionBlockerBarrier(reportError);
|
||||||
|
|
||||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||||
|
@ -1609,6 +1634,11 @@ void cmMakefile::PopFunctionScope(bool reportError)
|
||||||
|
|
||||||
void cmMakefile::PushMacroScope(const cmPolicies::PolicyMap& pm)
|
void cmMakefile::PushMacroScope(const cmPolicies::PolicyMap& pm)
|
||||||
{
|
{
|
||||||
|
this->StateSnapshot =
|
||||||
|
this->GetState()->CreateMacroCallSnapshot(
|
||||||
|
this->StateSnapshot);
|
||||||
|
assert(this->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->PushFunctionBlockerBarrier();
|
this->PushFunctionBlockerBarrier();
|
||||||
|
|
||||||
this->PushPolicy(true, pm);
|
this->PushPolicy(true, pm);
|
||||||
|
@ -1620,6 +1650,9 @@ void cmMakefile::PopMacroScope(bool reportError)
|
||||||
this->PopPolicyBarrier(reportError);
|
this->PopPolicyBarrier(reportError);
|
||||||
this->PopPolicy();
|
this->PopPolicy();
|
||||||
|
|
||||||
|
this->StateSnapshot = this->GetState()->Pop(this->StateSnapshot);
|
||||||
|
assert(this->StateSnapshot.IsValid());
|
||||||
|
|
||||||
this->PopFunctionBlockerBarrier(reportError);
|
this->PopFunctionBlockerBarrier(reportError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
struct cmState::SnapshotDataType
|
struct cmState::SnapshotDataType
|
||||||
{
|
{
|
||||||
|
cmState::PositionType CallStackParent;
|
||||||
cmState::PositionType DirectoryParent;
|
cmState::PositionType DirectoryParent;
|
||||||
cmState::SnapshotType SnapshotType;
|
cmState::SnapshotType SnapshotType;
|
||||||
cmLinkedTree<cmState::BuildsystemDirectoryStateType>::iterator
|
cmLinkedTree<cmState::BuildsystemDirectoryStateType>::iterator
|
||||||
|
@ -690,6 +691,7 @@ cmState::CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot)
|
||||||
{
|
{
|
||||||
assert(originSnapshot.IsValid());
|
assert(originSnapshot.IsValid());
|
||||||
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position);
|
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position);
|
||||||
|
pos->CallStackParent = originSnapshot.Position;
|
||||||
pos->DirectoryParent = originSnapshot.Position;
|
pos->DirectoryParent = originSnapshot.Position;
|
||||||
pos->SnapshotType = BuildsystemDirectoryType;
|
pos->SnapshotType = BuildsystemDirectoryType;
|
||||||
pos->BuildSystemDirectory =
|
pos->BuildSystemDirectory =
|
||||||
|
@ -698,6 +700,59 @@ cmState::CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot)
|
||||||
return cmState::Snapshot(this, pos);
|
return cmState::Snapshot(this, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmState::Snapshot
|
||||||
|
cmState::CreateFunctionCallSnapshot(cmState::Snapshot originSnapshot)
|
||||||
|
{
|
||||||
|
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
|
||||||
|
*originSnapshot.Position);
|
||||||
|
pos->CallStackParent = originSnapshot.Position;
|
||||||
|
pos->SnapshotType = FunctionCallType;
|
||||||
|
return cmState::Snapshot(this, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cmState::Snapshot
|
||||||
|
cmState::CreateMacroCallSnapshot(cmState::Snapshot originSnapshot)
|
||||||
|
{
|
||||||
|
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
|
||||||
|
*originSnapshot.Position);
|
||||||
|
pos->CallStackParent = originSnapshot.Position;
|
||||||
|
pos->SnapshotType = MacroCallType;
|
||||||
|
return cmState::Snapshot(this, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmState::Snapshot
|
||||||
|
cmState::CreateCallStackSnapshot(cmState::Snapshot originSnapshot)
|
||||||
|
{
|
||||||
|
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
|
||||||
|
*originSnapshot.Position);
|
||||||
|
pos->CallStackParent = originSnapshot.Position;
|
||||||
|
pos->SnapshotType = CallStackType;
|
||||||
|
return cmState::Snapshot(this, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmState::Snapshot
|
||||||
|
cmState::CreateInlineListFileSnapshot(cmState::Snapshot originSnapshot)
|
||||||
|
{
|
||||||
|
PositionType pos = this->SnapshotData.Extend(originSnapshot.Position,
|
||||||
|
*originSnapshot.Position);
|
||||||
|
pos->CallStackParent = originSnapshot.Position;
|
||||||
|
pos->SnapshotType = InlineListFileType;
|
||||||
|
return cmState::Snapshot(this, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmState::Snapshot cmState::Pop(cmState::Snapshot originSnapshot)
|
||||||
|
{
|
||||||
|
PositionType pos = originSnapshot.Position;
|
||||||
|
PositionType prevPos = pos;
|
||||||
|
++prevPos;
|
||||||
|
if (prevPos == this->SnapshotData.Root())
|
||||||
|
{
|
||||||
|
return Snapshot(this, prevPos);
|
||||||
|
}
|
||||||
|
return Snapshot(this, originSnapshot.Position->CallStackParent);
|
||||||
|
}
|
||||||
|
|
||||||
cmState::Snapshot::Snapshot(cmState* state, PositionType position)
|
cmState::Snapshot::Snapshot(cmState* state, PositionType position)
|
||||||
: State(state),
|
: State(state),
|
||||||
Position(position)
|
Position(position)
|
||||||
|
|
|
@ -31,7 +31,11 @@ public:
|
||||||
|
|
||||||
enum SnapshotType
|
enum SnapshotType
|
||||||
{
|
{
|
||||||
BuildsystemDirectoryType
|
BuildsystemDirectoryType,
|
||||||
|
FunctionCallType,
|
||||||
|
MacroCallType,
|
||||||
|
CallStackType,
|
||||||
|
InlineListFileType
|
||||||
};
|
};
|
||||||
|
|
||||||
class Snapshot {
|
class Snapshot {
|
||||||
|
@ -69,7 +73,13 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
Snapshot CreateBaseSnapshot();
|
Snapshot CreateBaseSnapshot();
|
||||||
Snapshot CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot);
|
Snapshot
|
||||||
|
CreateBuildsystemDirectorySnapshot(Snapshot originSnapshot);
|
||||||
|
Snapshot CreateFunctionCallSnapshot(Snapshot originSnapshot);
|
||||||
|
Snapshot CreateMacroCallSnapshot(Snapshot originSnapshot);
|
||||||
|
Snapshot CreateCallStackSnapshot(Snapshot originSnapshot);
|
||||||
|
Snapshot CreateInlineListFileSnapshot(Snapshot originSnapshot);
|
||||||
|
Snapshot Pop(Snapshot originSnapshot);
|
||||||
|
|
||||||
enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
|
enum CacheEntryType{ BOOL=0, PATH, FILEPATH, STRING, INTERNAL,STATIC,
|
||||||
UNINITIALIZED };
|
UNINITIALIZED };
|
||||||
|
|
Loading…
Reference in New Issue