C++: Also parse static_assert as top-level declaration

Add some checks for C++11 flag as well.

Change-Id: Ic5ee81d72bc88a22e71b324ef01014791b833604
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Leandro Melo
2012-06-05 11:54:38 +02:00
committed by hjk
parent 4a8bdec7ea
commit 809a4ed91a
2 changed files with 22 additions and 6 deletions

View File

@@ -585,6 +585,7 @@ bool Parser::parseDeclaration(DeclarationAST *&node)
case T_ASM:
return parseAsmDefinition(node);
case T_TEMPLATE:
case T_EXPORT:
return parseTemplateDeclaration(node);
@@ -623,11 +624,15 @@ bool Parser::parseDeclaration(DeclarationAST *&node)
consumeToken();
break;
// C++11
case T_INLINE:
if (_cxx0xEnabled && LA(2) == T_NAMESPACE)
return parseNamespace(node);
// else: intentionally fall-through
return parseSimpleDeclaration(node);
case T_STATIC_ASSERT:
if (_cxx0xEnabled)
return parseStaticAssertDeclaration(node);
return parseSimpleDeclaration(node);
default: {
if (_objCEnabled && LA() == T___ATTRIBUTE__) {
@@ -2306,9 +2311,10 @@ bool Parser::parseMemberSpecification(DeclarationAST *&node, ClassSpecifierAST *
case T_Q_INTERFACES:
return parseQtInterfaces(node);
// C++11
case T_STATIC_ASSERT:
return parseStaticAssertDeclaration(node);
if (_cxx0xEnabled)
return parseStaticAssertDeclaration(node);
// fall-through
default:
return parseSimpleDeclaration(node, declaringClass);
@@ -3023,8 +3029,15 @@ bool Parser::parseExpressionOrDeclarationStatement(StatementAST *&node)
const unsigned start = cursor();
if (lookAtCVQualifier() || lookAtStorageClassSpecifier() || lookAtBuiltinTypeSpecifier() || LA() == T_TYPENAME || LA() == T_ENUM || lookAtClassKey() || LA() == T_STATIC_ASSERT)
if (lookAtCVQualifier()
|| lookAtStorageClassSpecifier()
|| lookAtBuiltinTypeSpecifier()
|| LA() == T_TYPENAME
|| LA() == T_ENUM
|| lookAtClassKey()
|| (LA() == T_STATIC_ASSERT && _cxx0xEnabled)) {
return parseDeclarationStatement(node);
}
if (LA() == T_IDENTIFIER || (LA() == T_COLON_COLON && LA(2) == T_IDENTIFIER)) {
const bool blocked = blockErrors(true);
@@ -3435,7 +3448,9 @@ bool Parser::parseBlockDeclaration(DeclarationAST *&node)
return parseNamespaceAliasDefinition(node);
case T_STATIC_ASSERT:
return parseStaticAssertDeclaration(node);
if (_cxx0xEnabled)
return parseStaticAssertDeclaration(node);
// fall-through
default:
return parseSimpleDeclaration(node);