@@ -463,6 +463,9 @@ bool Parser::parseDeclaration(DeclarationAST *&node)
463463 case Token_Q_ENUMS:
464464 return parseQ_ENUMS (node);
465465
466+ case Token_Q_ENUM:
467+ return parseQ_ENUM (node);
468+
466469 case Token_template:
467470 case Token_export:
468471 return parseTemplateDeclaration (node);
@@ -1981,6 +1984,10 @@ bool Parser::parseMemberSpecification(DeclarationAST *&node)
19811984 {
19821985 return true ;
19831986 }
1987+ else if (parseQ_ENUM (node))
1988+ {
1989+ return true ;
1990+ }
19841991
19851992 token_stream.rewind ((int ) start);
19861993
@@ -4384,13 +4391,39 @@ bool Parser::parseQ_ENUMS(DeclarationAST *&node)
43844391 token_stream.nextToken ();
43854392 token_stream.nextToken ();
43864393
4394+ int firstToken = token_stream.cursor ();
4395+ while (token_stream.lookAhead () != ' )' ) {
4396+ token_stream.nextToken ();
4397+ }
4398+ QEnumsAST *ast = CreateNode<QEnumsAST>(_M_pool);
4399+ UPDATE_POS (ast, firstToken, token_stream.cursor ());
4400+ ast->isQEnum = false ;
4401+ node = ast;
4402+
4403+ token_stream.nextToken ();
4404+
4405+ return true ;
4406+ }
4407+
4408+ bool Parser::parseQ_ENUM (DeclarationAST *&node)
4409+ {
4410+ if (token_stream.lookAhead () != Token_Q_ENUM)
4411+ return false ;
4412+
4413+ if (token_stream.lookAhead (1 ) != ' (' )
4414+ return false ;
4415+
4416+ token_stream.nextToken ();
4417+ token_stream.nextToken ();
4418+
43874419 int firstToken = token_stream.cursor ();
43884420 while (token_stream.lookAhead () != ' )' ) {
43894421 token_stream.nextToken ();
43904422 }
43914423 QEnumsAST *ast = CreateNode<QEnumsAST>(_M_pool);
43924424 UPDATE_POS (ast, firstToken, token_stream.cursor ());
43934425 node = ast;
4426+ ast->isQEnum = true ;
43944427
43954428 token_stream.nextToken ();
43964429
0 commit comments