From 1b57248fc8176ef30e8740a973576dc059a39479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Tue, 11 Apr 2017 19:15:44 +0200 Subject: [PATCH] Fix maximal munch parsing issue --- src/libclang/function_parser.cpp | 3 ++- src/libclang/tokenizer.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libclang/function_parser.cpp b/src/libclang/function_parser.cpp index 34749b1..de1b66e 100644 --- a/src/libclang/function_parser.cpp +++ b/src/libclang/function_parser.cpp @@ -148,7 +148,8 @@ namespace { auto iter = detail::find_closing_bracket(stream); scope += detail::to_string(stream, iter); - detail::skip(stream, ">"); + if (!detail::skip_if(stream, ">>")) + detail::skip(stream, ">"); scope += ">"; } else diff --git a/src/libclang/tokenizer.cpp b/src/libclang/tokenizer.cpp index 3225200..1cf1a20 100644 --- a/src/libclang/tokenizer.cpp +++ b/src/libclang/tokenizer.cpp @@ -292,8 +292,10 @@ detail::token_iterator detail::find_closing_bracket(detail::token_stream stream) --paren_count; } stream.bump_back(); - DEBUG_ASSERT(paren_count == 0 && stream.peek().value() == close_bracket, parse_error_handler{}, - stream.cursor(), "find_closing_bracket() internal parse error"); + // only check first parameter, token might be ">>" + DEBUG_ASSERT(paren_count == 0 && stream.peek().value()[0] == close_bracket[0], + parse_error_handler{}, stream.cursor(), + "find_closing_bracket() internal parse error"); return stream.cur(); }