performance improvements

This commit is contained in:
Ken Martin 2003-06-24 15:11:21 -04:00
parent 117f961a5a
commit 76b344c6fe
1 changed files with 14 additions and 13 deletions

View File

@ -20,20 +20,19 @@ bool cmMacroFunctionBlocker::
IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf) IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf)
{ {
// record commands until we hit the ENDMACRO // record commands until we hit the ENDMACRO
// at the ENDMACRO call we shift gears and start looking for invocations
if(lff.m_Name == "ENDMACRO")
{
std::vector<std::string> expandedArguments;
mf.ExpandArguments(lff.m_Arguments, expandedArguments);
if(!expandedArguments.empty() && (expandedArguments[0] == m_Args[0]))
{
m_Executing = true;
return true;
}
}
if (!m_Executing) if (!m_Executing)
{ {
// at the ENDMACRO call we shift gears and start looking for invocations
if(lff.m_Name == "ENDMACRO")
{
std::vector<std::string> expandedArguments;
mf.ExpandArguments(lff.m_Arguments, expandedArguments);
if(!expandedArguments.empty() && (expandedArguments[0] == m_Args[0]))
{
m_Executing = true;
return true;
}
}
// if it wasn't an endmacro and we are not executing then we must be // if it wasn't an endmacro and we are not executing then we must be
// recording // recording
m_Functions.push_back(lff); m_Functions.push_back(lff);
@ -63,10 +62,12 @@ IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf)
} }
// Invoke all the functions that were collected in the block. // Invoke all the functions that were collected in the block.
cmListFileFunction newLFF;
for(unsigned int c = 0; c < m_Functions.size(); ++c) for(unsigned int c = 0; c < m_Functions.size(); ++c)
{ {
// Replace the formal arguments and then invoke the command. // Replace the formal arguments and then invoke the command.
cmListFileFunction newLFF; newLFF.m_Arguments.clear();
newLFF.m_Arguments.reserve(m_Functions[c].m_Arguments.size());
newLFF.m_Name = m_Functions[c].m_Name; newLFF.m_Name = m_Functions[c].m_Name;
newLFF.m_FilePath = m_Functions[c].m_FilePath; newLFF.m_FilePath = m_Functions[c].m_FilePath;
newLFF.m_Line = m_Functions[c].m_Line; newLFF.m_Line = m_Functions[c].m_Line;