diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index f301963936080684dfc7fea8b41db61936aea0a4..9607f7f3aa5839830ddc91fa8f0574d3c390b35b 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -163,50 +163,48 @@ bool Parser::skipUntil(int token) return false; } -bool Parser::skipUntilDeclaration() +void Parser::skipUntilDeclaration() { - while (int tk = LA()) { - switch (tk) { - case T_SEMICOLON: - case T_TILDE: - case T_COLON_COLON: - case T_IDENTIFIER: - case T_OPERATOR: - case T_CHAR: - case T_WCHAR_T: - case T_BOOL: - case T_SHORT: - case T_INT: - case T_LONG: - case T_SIGNED: - case T_UNSIGNED: - case T_FLOAT: - case T_DOUBLE: - case T_VOID: - case T_EXTERN: - case T_NAMESPACE: - case T_USING: - case T_TYPEDEF: - case T_ASM: - case T_TEMPLATE: - case T_EXPORT: - case T_CONST: - case T_VOLATILE: - case T_PUBLIC: - case T_PROTECTED: - case T_PRIVATE: - case T_CLASS: - case T_STRUCT: - case T_UNION: - case T_TYPENAME: - return true; + for (; ; consumeToken()) { + switch (LA()) { + case T_EOF_SYMBOL: - default: - consumeToken(); - } - } + // names + case T_IDENTIFIER: + case T_COLON_COLON: + case T_TILDE: + case T_OPERATOR: - return false; + // empty declaration + case T_SEMICOLON: + + // member specification + case T_USING: + case T_TEMPLATE: + case T_PUBLIC: + case T_PROTECTED: + case T_PRIVATE: + case T_Q_SIGNALS: + case T_Q_SLOTS: + + // declarations + case T_ENUM: + case T_NAMESPACE: + case T_ASM: + case T_EXPORT: + case T_AT_CLASS: + case T_AT_INTERFACE: + case T_AT_PROTOCOL: + case T_AT_IMPLEMENTATION: + case T_AT_END: + return; + + default: + if (lookAtBuiltinTypeSpecifier() || lookAtClassKey() || + lookAtFunctionSpecifier() || lookAtStorageClassSpecifier()) + return; + } // switch + } } bool Parser::skipUntilStatement() diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index 3cbf45b0bdeaed8156454e7a857b6797b911d710..9fa6abb166583813881338b7c0a2de7e49e906bc 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -251,7 +251,7 @@ public: bool lookAtObjCSelector() const; bool skipUntil(int token); - bool skipUntilDeclaration(); + void skipUntilDeclaration(); bool skipUntilStatement(); bool skip(int l, int r);