summaryrefslogtreecommitdiffstats
path: root/Source/cmMakefile.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-01-21 14:48:20 (GMT)
committerBrad King <brad.king@kitware.com>2009-01-21 14:48:20 (GMT)
commitbca1026250c5d2006a3829662b736660982e3a33 (patch)
treec403de025adbc273eb3ebe1f30b36ae849d72a43 /Source/cmMakefile.cxx
parentb8f5a934ecb83f0124be8485708d4d6d763682fd (diff)
downloadCMake-bca1026250c5d2006a3829662b736660982e3a33.zip
CMake-bca1026250c5d2006a3829662b736660982e3a33.tar.gz
CMake-bca1026250c5d2006a3829662b736660982e3a33.tar.bz2
ENH: Better error message for unclosed blocks
This centralizes construction of the error message for an unclosed logical block (if, foreach, etc.). We record the line at which each block is opened so it can be reported in the error message.
Diffstat (limited to 'Source/cmMakefile.cxx')
-rw-r--r--Source/cmMakefile.cxx21
1 files changed, 20 insertions, 1 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 34b4855..c6bc4f2 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -2365,7 +2365,14 @@ void cmMakefile::PopFunctionBlockerBarrier(bool reportError)
this->FunctionBlockers.pop_back();
if(reportError)
{
- fb->ScopeEnded(*this);
+ // Report the context in which the unclosed block was opened.
+ cmListFileContext const& lfc = fb->GetStartingContext();
+ cmOStringStream e;
+ e << "A logical block opening on the line\n"
+ << " " << lfc << "\n"
+ << "is not closed.";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str());
+ reportError = false;
}
}
@@ -2402,6 +2409,18 @@ bool cmMakefile::ExpandArguments(
return !cmSystemTools::GetFatalErrorOccured();
}
+//----------------------------------------------------------------------------
+void cmMakefile::AddFunctionBlocker(cmFunctionBlocker* fb)
+{
+ if(!this->CallStack.empty())
+ {
+ // Record the context in which the blocker is created.
+ fb->SetStartingContext(*(this->CallStack.back().Context));
+ }
+
+ this->FunctionBlockers.push_back(fb);
+}
+
cmsys::auto_ptr<cmFunctionBlocker>
cmMakefile::RemoveFunctionBlocker(const cmListFileFunction& lff)
{