Commit 33bf1525 authored by dt's avatar dt
Browse files

Merge branch 'master' of git@scm.dev.nokia.troll.no:creator/mainline

parents bedca00d 011049dd
......@@ -1760,7 +1760,7 @@ bool Parser::parseReturnStatement(StatementAST *&node)
return false;
}
bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl)
bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl) const
{
if (! simpleDecl)
return false;
......@@ -1798,6 +1798,17 @@ bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl)
return true;
}
bool Parser::maybeSimpleExpression(SimpleDeclarationAST *simpleDecl) const
{
if (! simpleDecl->declarators) {
SpecifierAST *spec = simpleDecl->decl_specifier_seq;
if (spec && ! spec->next && spec->asNamedTypeSpecifier()) {
return true;
}
}
return false;
}
bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
{
if (LA() == T_SEMICOLON)
......@@ -1810,7 +1821,9 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
SimpleDeclarationAST *simpleDecl = 0;
if (stmt->declaration)
simpleDecl = stmt->declaration->asSimpleDeclaration();
if (simpleDecl && simpleDecl->decl_specifier_seq && ! maybeFunctionCall(simpleDecl)) {
if (simpleDecl && simpleDecl->decl_specifier_seq &&
! maybeFunctionCall(simpleDecl) && ! maybeSimpleExpression(simpleDecl)) {
unsigned end_of_declaration_statement = cursor();
rewind(start);
StatementAST *expression = 0;
......@@ -1827,6 +1840,7 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
return true;
}
}
blockErrors(blocked);
rewind(start);
return parseExpressionStatement(node);
......
......@@ -220,7 +220,8 @@ public:
void match(int kind, unsigned *token);
bool maybeFunctionCall(SimpleDeclarationAST *simpleDecl);
bool maybeFunctionCall(SimpleDeclarationAST *simpleDecl) const;
bool maybeSimpleExpression(SimpleDeclarationAST *simpleDecl) const;
private:
bool switchTemplateArguments(bool templateArguments);
......
......@@ -87,7 +87,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
// Objects
m_modelManager = new CppModelManager(this);
addAutoReleasedObject(m_modelManager);
CppCodeCompletion *m_completion = new CppCodeCompletion(m_modelManager, m_core);
m_completion = new CppCodeCompletion(m_modelManager, m_core);
addAutoReleasedObject(m_completion);
CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager,
m_core->editorManager());
......
......@@ -31,6 +31,7 @@ public:
private slots:
void if_statement();
void if_else_statement();
void cpp_initializer();
};
void tst_AST::if_statement()
......@@ -49,6 +50,16 @@ void tst_AST::if_statement()
QVERIFY(stmt->statement != 0);
QCOMPARE(stmt->else_token, 0U);
QVERIFY(stmt->else_statement == 0);
// check the `then' statement
ExpressionStatementAST *then_stmt = stmt->statement->asExpressionStatement();
QVERIFY(then_stmt != 0);
QVERIFY(then_stmt->expression != 0);
QCOMPARE(then_stmt->semicolon_token, 6U);
SimpleNameAST *id_expr = then_stmt->expression->asSimpleName();
QVERIFY(id_expr != 0);
QCOMPARE(id_expr->identifier_token, 5U);
}
void tst_AST::if_else_statement()
......@@ -69,5 +80,13 @@ void tst_AST::if_else_statement()
QVERIFY(stmt->else_statement != 0);
}
void tst_AST::cpp_initializer()
{
QSharedPointer<TranslationUnit> unit(parseStatement("QFileInfo fileInfo(foo);"));
AST *ast = unit->ast();
QVERIFY(ast != 0);
}
QTEST_APPLESS_MAIN(tst_AST)
#include "tst_ast.moc"
DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE
INCLUDEPATH += $$PWD/../../../../shared/cplusplus
DEPENDPATH += $$INCLUDEPATH .
LIBS += -L$$PWD -lCPlusPlusTestSupport
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment