diff options
Diffstat (limited to 'ApiExtractor')
-rw-r--r-- | ApiExtractor/parser/lexer.cpp | 13 | ||||
-rw-r--r-- | ApiExtractor/parser/parser.cpp | 9 | ||||
-rw-r--r-- | ApiExtractor/parser/parser.h | 1 | ||||
-rw-r--r-- | ApiExtractor/parser/tokens.cpp | 1 | ||||
-rw-r--r-- | ApiExtractor/parser/tokens.h | 1 |
5 files changed, 25 insertions, 0 deletions
diff --git a/ApiExtractor/parser/lexer.cpp b/ApiExtractor/parser/lexer.cpp index 0d1269e29..eff54b7f7 100644 --- a/ApiExtractor/parser/lexer.cpp +++ b/ApiExtractor/parser/lexer.cpp @@ -1387,6 +1387,19 @@ void Lexer::scanKeyword8() } break; + case 'n': + if (*(cursor + 1) == 'o' && + *(cursor + 2) == 'e' && + *(cursor + 3) == 'x' && + *(cursor + 4) == 'c' && + *(cursor + 5) == 'e' && + *(cursor + 6) == 'p' && + *(cursor + 7) == 't') { + token_stream[(int) index++].kind = Token_noexcept; + return; + } + break; + case 'o': if (*(cursor + 1) == 'p' && *(cursor + 2) == 'e' && diff --git a/ApiExtractor/parser/parser.cpp b/ApiExtractor/parser/parser.cpp index c56369c31..c49785fb4 100644 --- a/ApiExtractor/parser/parser.cpp +++ b/ApiExtractor/parser/parser.cpp @@ -1124,6 +1124,7 @@ bool Parser::parseDeclarator(DeclaratorAST *&node) token_stream.nextToken(); // skip ')' parseCvQualify(ast->fun_cv); + parseNoExcept(); parseExceptionSpecification(ast->exception_spec); if (token_stream.lookAhead() == Token___attribute__) @@ -1863,6 +1864,14 @@ bool Parser::parseElaboratedTypeSpecifier(TypeSpecifierAST *&node) return false; } +bool Parser::parseNoExcept() +{ + // right now we only accept 'noexcept' with no conditional + CHECK(Token_noexcept); + + return true; +} + bool Parser::parseExceptionSpecification(ExceptionSpecificationAST *&node) { std::size_t start = token_stream.cursor(); diff --git a/ApiExtractor/parser/parser.h b/ApiExtractor/parser/parser.h index 8f31c1389..af3c221c8 100644 --- a/ApiExtractor/parser/parser.h +++ b/ApiExtractor/parser/parser.h @@ -119,6 +119,7 @@ public: bool parseNewExpression(ExpressionAST *&node); bool parseNewInitializer(NewInitializerAST *&node); bool parseNewTypeId(NewTypeIdAST *&node); + bool parseNoExcept(); bool parseOperator(OperatorAST *&node); bool parseOperatorFunctionId(OperatorFunctionIdAST *&node); bool parseParameterDeclaration(ParameterDeclarationAST *&node); diff --git a/ApiExtractor/parser/tokens.cpp b/ApiExtractor/parser/tokens.cpp index e3008dea9..34737d100 100644 --- a/ApiExtractor/parser/tokens.cpp +++ b/ApiExtractor/parser/tokens.cpp @@ -86,6 +86,7 @@ static char const * const _S_token_names[] = { "mutable", "namespace", "new", + "noexcept", "not", "not_eq", "number_literal", diff --git a/ApiExtractor/parser/tokens.h b/ApiExtractor/parser/tokens.h index dbe612da0..20c17a76f 100644 --- a/ApiExtractor/parser/tokens.h +++ b/ApiExtractor/parser/tokens.h @@ -87,6 +87,7 @@ enum TOKEN_KIND { Token_mutable, Token_namespace, Token_new, + Token_noexcept, Token_not, Token_not_eq, Token_number_literal, |