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) ...@@ -1760,7 +1760,7 @@ bool Parser::parseReturnStatement(StatementAST *&node)
return false; return false;
} }
bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl) bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl) const
{ {
if (! simpleDecl) if (! simpleDecl)
return false; return false;
...@@ -1798,6 +1798,17 @@ bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl) ...@@ -1798,6 +1798,17 @@ bool Parser::maybeFunctionCall(SimpleDeclarationAST *simpleDecl)
return true; 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) bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
{ {
if (LA() == T_SEMICOLON) if (LA() == T_SEMICOLON)
...@@ -1810,7 +1821,9 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node) ...@@ -1810,7 +1821,9 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
SimpleDeclarationAST *simpleDecl = 0; SimpleDeclarationAST *simpleDecl = 0;
if (stmt->declaration) if (stmt->declaration)
simpleDecl = stmt->declaration->asSimpleDeclaration(); 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(); unsigned end_of_declaration_statement = cursor();
rewind(start); rewind(start);
StatementAST *expression = 0; StatementAST *expression = 0;
...@@ -1827,6 +1840,7 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node) ...@@ -1827,6 +1840,7 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
return true; return true;
} }
} }
blockErrors(blocked); blockErrors(blocked);
rewind(start); rewind(start);
return parseExpressionStatement(node); return parseExpressionStatement(node);
......
...@@ -220,7 +220,8 @@ public: ...@@ -220,7 +220,8 @@ public:
void match(int kind, unsigned *token); void match(int kind, unsigned *token);
bool maybeFunctionCall(SimpleDeclarationAST *simpleDecl); bool maybeFunctionCall(SimpleDeclarationAST *simpleDecl) const;
bool maybeSimpleExpression(SimpleDeclarationAST *simpleDecl) const;
private: private:
bool switchTemplateArguments(bool templateArguments); bool switchTemplateArguments(bool templateArguments);
......
...@@ -87,7 +87,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *) ...@@ -87,7 +87,7 @@ bool CppToolsPlugin::initialize(const QStringList & /*arguments*/, QString *)
// Objects // Objects
m_modelManager = new CppModelManager(this); m_modelManager = new CppModelManager(this);
addAutoReleasedObject(m_modelManager); addAutoReleasedObject(m_modelManager);
CppCodeCompletion *m_completion = new CppCodeCompletion(m_modelManager, m_core); m_completion = new CppCodeCompletion(m_modelManager, m_core);
addAutoReleasedObject(m_completion); addAutoReleasedObject(m_completion);
CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager, CppQuickOpenFilter *quickOpenFilter = new CppQuickOpenFilter(m_modelManager,
m_core->editorManager()); m_core->editorManager());
......
...@@ -31,6 +31,7 @@ public: ...@@ -31,6 +31,7 @@ public:
private slots: private slots:
void if_statement(); void if_statement();
void if_else_statement(); void if_else_statement();
void cpp_initializer();
}; };
void tst_AST::if_statement() void tst_AST::if_statement()
...@@ -49,6 +50,16 @@ void tst_AST::if_statement() ...@@ -49,6 +50,16 @@ void tst_AST::if_statement()
QVERIFY(stmt->statement != 0); QVERIFY(stmt->statement != 0);
QCOMPARE(stmt->else_token, 0U); QCOMPARE(stmt->else_token, 0U);
QVERIFY(stmt->else_statement == 0); 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() void tst_AST::if_else_statement()
...@@ -69,5 +80,13 @@ void tst_AST::if_else_statement() ...@@ -69,5 +80,13 @@ void tst_AST::if_else_statement()
QVERIFY(stmt->else_statement != 0); 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) QTEST_APPLESS_MAIN(tst_AST)
#include "tst_ast.moc" #include "tst_ast.moc"
DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE DEFINES += HAVE_QT CPLUSPLUS_WITH_NAMESPACE
INCLUDEPATH += $$PWD/../../../../shared/cplusplus INCLUDEPATH += $$PWD/../../../../shared/cplusplus
DEPENDPATH += $$INCLUDEPATH .
LIBS += -L$$PWD -lCPlusPlusTestSupport 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