diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-03-05 12:35:05 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-21 14:43:13 +0200 |
commit | efcdf39bcebcc48c27c340e562fcb01af12fa0a7 (patch) | |
tree | 7bf99c90cc5481a71692ec89b390112db399be12 | |
parent | cfd4e097176d324f2fbc27cd068977c61e9ef183 (diff) | |
download | qttools-efcdf39bcebcc48c27c340e562fcb01af12fa0a7.tar.gz |
permit returning from files
this allows skipping an entire feature file if a condition is not
fulfilled, without putting the whole body inside a conditional.
Change-Id: I84fe9c94dda58c794fb52c3f163b40563b0db30a
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
(cherry picked from qtbase/525eb337670f61078383c20ad9be274dcf2d0928)
-rw-r--r-- | src/linguist/shared/qmakeparser.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/linguist/shared/qmakeparser.cpp b/src/linguist/shared/qmakeparser.cpp index 0dbc3ce07..93c7a54ab 100644 --- a/src/linguist/shared/qmakeparser.cpp +++ b/src/linguist/shared/qmakeparser.cpp @@ -1024,7 +1024,6 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg m_tmp.setRawData((QChar *)uc + 4, nlen); const QString *defName; ushort defType; - uchar nest; if (m_tmp == statics.strfor) { if (m_invert || m_operator == OrOperator) { // '|' could actually work reasonably, but qmake does nonsense here. @@ -1101,13 +1100,20 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg parseError(fL1S("%1(function) requires one literal argument.").arg(*defName)); return; } else if (m_tmp == statics.strreturn) { - if (argc > 1) { - parseError(fL1S("return() requires zero or one argument.")); - bogusTest(tokPtr); - return; + if (m_blockstack.top().nest & NestFunction) { + if (argc > 1) { + parseError(fL1S("return() requires zero or one argument.")); + bogusTest(tokPtr); + return; + } + } else { + if (*uce != TokFuncTerminator) { + parseError(fL1S("Top-level return() requires zero arguments.")); + bogusTest(tokPtr); + return; + } } defType = TokReturn; - nest = NestFunction; goto ctrlstm2; } else if (m_tmp == statics.strnext) { defType = TokNext; @@ -1120,15 +1126,14 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg bogusTest(tokPtr); return; } - nest = NestLoop; - ctrlstm2: - if (m_invert) { - parseError(fL1S("Unexpected NOT operator in front of %1().").arg(m_tmp)); + if (!(m_blockstack.top().nest & NestLoop)) { + parseError(fL1S("Unexpected %1().").arg(m_tmp)); bogusTest(tokPtr); return; } - if (!(m_blockstack.top().nest & nest)) { - parseError(fL1S("Unexpected %1().").arg(m_tmp)); + ctrlstm2: + if (m_invert) { + parseError(fL1S("Unexpected NOT operator in front of %1().").arg(m_tmp)); bogusTest(tokPtr); return; } |