Browse Source

performance improvements

Ken Martin 22 years ago
parent
commit
76b344c6fe
1 changed files with 13 additions and 12 deletions
  1. 13 12
      Source/cmMacroCommand.cxx

+ 13 - 12
Source/cmMacroCommand.cxx

@@ -20,20 +20,19 @@ bool cmMacroFunctionBlocker::
 IsFunctionBlocked(const cmListFileFunction& lff, cmMakefile &mf) 
 {
   // record commands until we hit the ENDMACRO
-  // at the ENDMACRO call we shift gears and start looking for invocations
-  if(lff.m_Name == "ENDMACRO")
+  if (!m_Executing)
     {
-    std::vector<std::string> expandedArguments;
-    mf.ExpandArguments(lff.m_Arguments, expandedArguments);
-    if(!expandedArguments.empty() && (expandedArguments[0] == m_Args[0]))
+    // at the ENDMACRO call we shift gears and start looking for invocations
+    if(lff.m_Name == "ENDMACRO")
       {
-      m_Executing = true;
-      return true;
+      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 it wasn't an endmacro and we are not executing then we must be
     // recording
     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.
+    cmListFileFunction newLFF;
     for(unsigned int c = 0; c < m_Functions.size(); ++c)
       {
       // 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_FilePath = m_Functions[c].m_FilePath;
       newLFF.m_Line = m_Functions[c].m_Line;