New C++ function name parsing logic
authorEugene Zemtsov <ezemtsov@google.com>
Mon, 3 Apr 2017 18:59:34 +0000 (18:59 +0000)
committerEugene Zemtsov <ezemtsov@google.com>
Mon, 3 Apr 2017 18:59:34 +0000 (18:59 +0000)
commit699a748893d6b96a21d235aa109a6465e8af9f83
tree2422562735e956a4df1c51cd034295850094aae5
parent0a5e55e819b2fcd33263374d44ae7ad719d46ca8
New C++ function name parsing logic

Current implementation of CPlusPlusLanguage::MethodName::Parse() doesn't
get anywhere close to covering full extent of possible function declarations.
It causes incorrect behavior in avoid-stepping and sometimes messes
printing of thread backtrace.

This change implements more methodical parsing logic based on clang
lexer and simple recursive parser.

Examples:
void std::vector<Class, std::allocator<Class>>::_M_emplace_back_aux<Class const&>(Class const&)
void (*&std::_Any_data::_M_access<void (*)()>())()

Differential Revision: https://reviews.llvm.org/D31451

llvm-svn: 299374
lldb/source/Plugins/Language/CPlusPlus/CMakeLists.txt
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.cpp [new file with mode: 0644]
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusNameParser.h [new file with mode: 0644]
lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp