improve parse error recovery paths
to reduce collateral damage from parse errors. (cherry picked from qtcreator/00c0d0d5e42d28e03c2846c17d3acbcd8420859d) Change-Id: Ic59700d657069d3b15372509b4bff966057d27a9 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
This commit is contained in:
parent
0d6f1ef588
commit
ae3f95a951
@ -1027,13 +1027,14 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg
|
||||
const QString *defName;
|
||||
ushort defType;
|
||||
if (m_tmp == statics.strfor) {
|
||||
flushCond(tokPtr);
|
||||
putLineMarker(tokPtr);
|
||||
if (m_invert || m_operator == OrOperator) {
|
||||
// '|' could actually work reasonably, but qmake does nonsense here.
|
||||
parseError(fL1S("Unexpected operator in front of for()."));
|
||||
bogusTest(tokPtr);
|
||||
return;
|
||||
}
|
||||
flushCond(tokPtr);
|
||||
putLineMarker(tokPtr);
|
||||
if (*uce == (TokLiteral|TokNewStr)) {
|
||||
nlen = uce[1];
|
||||
uc = uce + 2 + nlen;
|
||||
@ -1076,12 +1077,13 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg
|
||||
defName = &statics.strdefineTest;
|
||||
defType = TokTestDef;
|
||||
deffunc:
|
||||
flushScopes(tokPtr);
|
||||
putLineMarker(tokPtr);
|
||||
if (m_invert) {
|
||||
parseError(fL1S("Unexpected operator in front of function definition."));
|
||||
bogusTest(tokPtr);
|
||||
return;
|
||||
}
|
||||
flushScopes(tokPtr);
|
||||
putLineMarker(tokPtr);
|
||||
if (*uce == (TokLiteral|TokNewStr)) {
|
||||
uint nlen = uce[1];
|
||||
if (uce[nlen + 2] == TokFuncTerminator) {
|
||||
@ -1101,6 +1103,7 @@ void QMakeParser::finalizeCall(ushort *&tokPtr, ushort *uc, ushort *ptr, int arg
|
||||
if (m_state != StNew || m_blockstack.top().braceLevel || m_blockstack.size() > 1
|
||||
|| m_invert || m_operator != NoOperator) {
|
||||
parseError(fL1S("option() must appear outside any control structures."));
|
||||
bogusTest(tokPtr);
|
||||
return;
|
||||
}
|
||||
if (*uce == (TokLiteral|TokNewStr)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user