diff options
author | Brad King <brad.king@kitware.com> | 2009-01-21 14:48:20 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-01-21 14:48:20 (GMT) |
commit | bca1026250c5d2006a3829662b736660982e3a33 (patch) | |
tree | c403de025adbc273eb3ebe1f30b36ae849d72a43 /Source/cmMakefile.cxx | |
parent | b8f5a934ecb83f0124be8485708d4d6d763682fd (diff) | |
download | CMake-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.cxx | 21 |
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) { |