From 92b76420d2d4c237c7dd19db950c3bc3082cacd2 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 22 Aug 2020 07:49:42 +0200 Subject: [PATCH] Get correct cursor parent when finding debug value from expression --- src/source_clang.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/source_clang.cpp b/src/source_clang.cpp index 22b84e8..804b9ae 100644 --- a/src/source_clang.cpp +++ b/src/source_clang.cpp @@ -628,20 +628,23 @@ void Source::ClangViewParse::show_type_tooltips(const Gdk::Rectangle &rectangle) *start == '%' || *start == '&' || *start == '|' || *start == '^' || *end == '('))) { struct VisitorData { - std::pair cursor_offsets; - clangmm::Cursor parent; + std::pair offsets; + std::string spelling; + clangmm::Cursor parent; // Output }; - VisitorData visitor_data{cursor.get_source_range().get_offsets(), {}}; + VisitorData visitor_data{cursor.get_source_range().get_offsets(), cursor.get_spelling(), {}}; auto start_cursor = cursor; for(auto parent = cursor.get_semantic_parent(); parent.get_kind() != clangmm::Cursor::Kind::TranslationUnit && parent.get_kind() != clangmm::Cursor::Kind::ClassDecl; parent = parent.get_semantic_parent()) start_cursor = parent; clang_visitChildren(start_cursor.cx_cursor, [](CXCursor cx_cursor, CXCursor cx_parent, CXClientData data_) { auto data = static_cast(data_); - auto offsets = clangmm::Cursor(cx_cursor).get_source_range().get_offsets(); - if(offsets == data->cursor_offsets) { - data->parent = clangmm::Cursor(cx_parent); - return CXChildVisit_Break; + if(clangmm::Cursor(cx_cursor).get_source_range().get_offsets() == data->offsets) { + auto parent = clangmm::Cursor(cx_parent); + if(parent.get_spelling() == data->spelling) { + data->parent = parent; + return CXChildVisit_Break; + } } return CXChildVisit_Recurse; }, &visitor_data);