C++: Add parsing of Q_PRIVATE_PROPERTY.

Reviewed-by: Roberto Raggi
This commit is contained in:
Christian Kamm
2010-12-08 15:08:03 +01:00
parent 40725cfd6d
commit 16542241c9
11 changed files with 90 additions and 1 deletions

View File

@@ -286,6 +286,7 @@ void Parser::skipUntilDeclaration()
case T_Q_SIGNALS:
case T_Q_SLOTS:
case T_Q_PROPERTY:
case T_Q_PRIVATE_PROPERTY:
case T_Q_ENUMS:
case T_Q_FLAGS:
case T_Q_INTERFACES:
@@ -1972,13 +1973,26 @@ bool Parser::parseAccessDeclaration(DeclarationAST *&node)
bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
{
DEBUG_THIS_RULE();
if (LA() != T_Q_PROPERTY)
const bool privateProperty = (LA() == T_Q_PRIVATE_PROPERTY);
if (LA() != T_Q_PROPERTY && !privateProperty)
return false;
QtPropertyDeclarationAST *ast = new (_pool)QtPropertyDeclarationAST;
ast->property_specifier_token = consumeToken();
if (LA() == T_LPAREN) {
ast->lparen_token = consumeToken();
if (privateProperty) {
if (parsePostfixExpression(ast->expression)) {
match(T_COMMA, &ast->comma_token);
} else {
error(cursor(),
"expected expression before `%s'",
tok().spell());
return true;
}
}
parseTypeId(ast->type_id);
SimpleNameAST *property_name = new (_pool) SimpleNameAST;
@@ -2238,6 +2252,7 @@ bool Parser::parseMemberSpecification(DeclarationAST *&node, ClassSpecifierAST *
return parseAccessDeclaration(node);
case T_Q_PROPERTY:
case T_Q_PRIVATE_PROPERTY:
return parseQtPropertyDeclaration(node);
case T_Q_ENUMS: