diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 9607f7f3aa5839830ddc91fa8f0574d3c390b35b..04c19150f25219aa87ccd09a507563c797bb403b 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -3661,9 +3661,13 @@ bool Parser::parseUnaryExpression(ExpressionAST *&node) case T_PLUS: case T_MINUS: case T_EXCLAIM: { + unsigned op = cursor(); UnaryExpressionAST *ast = new (_pool) UnaryExpressionAST; ast->unary_op_token = consumeToken(); - parseCastExpression(ast->expression); + if (! parseCastExpression(ast->expression)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); + } node = ast; return true; } @@ -3917,8 +3921,11 @@ bool Parser::parsePmExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseCastExpression(rightExpr)) + if (! parseCastExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -3939,8 +3946,11 @@ bool Parser::parseMultiplicativeExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parsePmExpression(rightExpr)) + if (! parsePmExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -3961,8 +3971,11 @@ bool Parser::parseAdditiveExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseMultiplicativeExpression(rightExpr)) + if (! parseMultiplicativeExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -3983,8 +3996,11 @@ bool Parser::parseShiftExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseAdditiveExpression(rightExpr)) + if (! parseAdditiveExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4006,8 +4022,11 @@ bool Parser::parseRelationalExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseShiftExpression(rightExpr)) + if (! parseShiftExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4028,8 +4047,11 @@ bool Parser::parseEqualityExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseRelationalExpression(rightExpr)) + if (! parseRelationalExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4050,8 +4072,11 @@ bool Parser::parseAndExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseEqualityExpression(rightExpr)) + if (! parseEqualityExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4072,8 +4097,11 @@ bool Parser::parseExclusiveOrExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseAndExpression(rightExpr)) + if (! parseAndExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4094,8 +4122,11 @@ bool Parser::parseInclusiveOrExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseExclusiveOrExpression(rightExpr)) + if (! parseExclusiveOrExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4117,8 +4148,11 @@ bool Parser::parseLogicalAndExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseInclusiveOrExpression(rightExpr)) + if (! parseInclusiveOrExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4139,8 +4173,11 @@ bool Parser::parseLogicalOrExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseLogicalAndExpression(rightExpr)) + if (! parseLogicalAndExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op; @@ -4204,8 +4241,11 @@ bool Parser::parseAssignmentExpression(ExpressionAST *&node) unsigned op = consumeToken(); ExpressionAST *rightExpr = 0; - if (! parseAssignmentExpression(rightExpr)) + if (! parseAssignmentExpression(rightExpr)) { + _translationUnit->error(op, "expected expression after token `%s'", + _translationUnit->spell(op)); return false; + } BinaryExpressionAST *ast = new (_pool) BinaryExpressionAST; ast->binary_op_token = op;