aboutsummaryrefslogtreecommitdiffstats
path: root/ApiExtractor
diff options
context:
space:
mode:
Diffstat (limited to 'ApiExtractor')
-rw-r--r--ApiExtractor/parser/lexer.cpp13
-rw-r--r--ApiExtractor/parser/parser.cpp9
-rw-r--r--ApiExtractor/parser/parser.h1
-rw-r--r--ApiExtractor/parser/tokens.cpp1
-rw-r--r--ApiExtractor/parser/tokens.h1
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,