summaryrefslogtreecommitdiff
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2020-11-03 14:25:46 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2020-11-09 10:56:17 +0000
commit882dd60aad7e7718f9cc067baab3ca725f061e10 (patch)
tree75f7df977516d8d11b2ad945d6a17d459dde56c0 /src/libs/3rdparty/cplusplus/Parser.cpp
parent53115259baa522d0d2d8f05aaa058693b1de62a8 (diff)
downloadqt-creator-882dd60aad7e7718f9cc067baab3ca725f061e10.tar.gz
C++: Extend alias declaration support in built-in parser
The type-id in an alias declaration can also define a new type. Change-Id: I65dc397d2526c56334676c6ab522564f6748d594 Task-number: QTCREATORBUG-24875 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 3c509be00c..1550c8b31d 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -1527,10 +1527,23 @@ bool Parser::parseDeclSpecifierSeq(SpecifierListAST *&decl_specifier_seq,
} else if (! onlySimpleTypeSpecifiers && ! has_type_specifier &&
(LA() == T_TYPENAME || LA() == T_ENUM || lookAtClassKey())) {
// typename-specifier, elaborated-type-specifier
- int startOfElaboratedTypeSpecifier = cursor();
+ int startOfTypeSpecifier = cursor();
if (! parseElaboratedTypeSpecifier(*decl_specifier_seq_ptr)) {
- error(startOfElaboratedTypeSpecifier, "expected an elaborated type specifier");
- break;
+ rewind(startOfTypeSpecifier);
+ if (LA() == T_ENUM) {
+ if (!parseEnumSpecifier(*decl_specifier_seq_ptr)) {
+ error(startOfTypeSpecifier, "expected an enum specifier");
+ break;
+ }
+ } else if (lookAtClassKey()) {
+ if (!parseClassSpecifier(*decl_specifier_seq_ptr)) {
+ error(startOfTypeSpecifier, "expected a class specifier");
+ break;
+ }
+ } else {
+ error(startOfTypeSpecifier, "expected an elaborated type specifier");
+ break;
+ }
}
decl_specifier_seq_ptr = &(*decl_specifier_seq_ptr)->next;
has_type_specifier = true;