diff options
| author | Sean Callanan <scallanan@apple.com> | 2011-10-29 19:50:43 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2011-10-29 19:50:43 +0000 |
| commit | fb3e4306af642cf408db21d76370daed41c096fd (patch) | |
| tree | 3d12c5d96d0354e301948c8414bda285aef1324c | |
| parent | 932de2bc86d0b8e4f924f8eba12040d2dc4745e5 (diff) | |
| download | bcm5719-llvm-fb3e4306af642cf408db21d76370daed41c096fd.tar.gz bcm5719-llvm-fb3e4306af642cf408db21d76370daed41c096fd.zip | |
Cloned FindExternalVisibleDecls from
ClangExpressionDeclMap to ClangASTSource, and
moved all general type and namespace lookups
into ClangASTSource. Now ClangASTSource is ready
to complete types given nothing more than a target
and an AST context.
llvm-svn: 143292
| -rw-r--r-- | lldb/include/lldb/Expression/ClangASTSource.h | 50 | ||||
| -rw-r--r-- | lldb/include/lldb/Expression/ClangExpressionDeclMap.h | 91 | ||||
| -rw-r--r-- | lldb/source/Expression/ClangASTSource.cpp | 226 | ||||
| -rw-r--r-- | lldb/source/Expression/ClangExpressionDeclMap.cpp | 182 |
4 files changed, 328 insertions, 221 deletions
diff --git a/lldb/include/lldb/Expression/ClangASTSource.h b/lldb/include/lldb/Expression/ClangASTSource.h index 847fab35b19..acf55b6fdb9 100644 --- a/lldb/include/lldb/Expression/ClangASTSource.h +++ b/lldb/include/lldb/Expression/ClangASTSource.h @@ -195,7 +195,7 @@ public: bool GetImportInProgress () { return m_import_in_progress; } void SetLookupsEnabled (bool lookups_enabled) { m_lookups_enabled = lookups_enabled; } - bool GetLookupsEnabled () { return m_lookups_enabled; } + bool GetLookupsEnabled () { return m_lookups_enabled; } //---------------------------------------------------------------------- /// @class ClangASTSourceProxy ClangASTSource.h "lldb/Expression/ClangASTSource.h" @@ -253,6 +253,54 @@ public: } protected: + //------------------------------------------------------------------ + /// Find all entities matching a given name in a given module, + /// using a NameSearchContext to make Decls for them. + /// + /// @param[in] context + /// The NameSearchContext that can construct Decls for this name. + /// + /// @param[in] module + /// If non-NULL, the module to query. + /// + /// @param[in] namespace_decl + /// If valid and module is non-NULL, the parent namespace. + /// + /// @param[in] current_id + /// The ID for the current FindExternalVisibleDecls invocation, + /// for logging purposes. + /// + /// @return + /// True on success; false otherwise. + //------------------------------------------------------------------ + void + FindExternalVisibleDecls (NameSearchContext &context, + lldb::ModuleSP module, + ClangNamespaceDecl &namespace_decl, + unsigned int current_id); + + //------------------------------------------------------------------ + /// A wrapper for ClangASTContext::CopyType that sets a flag that + /// indicates that we should not respond to queries during import. + /// + /// @param[in] dest_context + /// The target AST context, typically the parser's AST context. + /// + /// @param[in] source_context + /// The source AST context, typically the AST context of whatever + /// symbol file the type was found in. + /// + /// @param[in] clang_type + /// The source type. + /// + /// @return + /// The imported type. + //------------------------------------------------------------------ + void * + GuardedCopyType (clang::ASTContext *dest_context, + clang::ASTContext *source_context, + void *clang_type); + friend struct NameSearchContext; bool m_import_in_progress; diff --git a/lldb/include/lldb/Expression/ClangExpressionDeclMap.h b/lldb/include/lldb/Expression/ClangExpressionDeclMap.h index 7ce9851c1e4..d2147a2459d 100644 --- a/lldb/include/lldb/Expression/ClangExpressionDeclMap.h +++ b/lldb/include/lldb/Expression/ClangExpressionDeclMap.h @@ -621,6 +621,38 @@ public: //------------------------------------------------------------------ void FindExternalVisibleDecls (NameSearchContext &context); + + //------------------------------------------------------------------ + /// Find all entities matching a given name in a given module/namespace, + /// using a NameSearchContext to make Decls for them. + /// + /// @param[in] context + /// The NameSearchContext that can construct Decls for this name. + /// + /// @param[in] module + /// If non-NULL, the module to query. + /// + /// @param[in] namespace_decl + /// If valid and module is non-NULL, the parent namespace. + /// + /// @param[in] name + /// The name as a plain C string. The NameSearchContext contains + /// a DeclarationName for the name so at first the name may seem + /// redundant, but ClangExpressionDeclMap operates in RTTI land so + /// it can't access DeclarationName. + /// + /// @param[in] current_id + /// The ID for the current FindExternalVisibleDecls invocation, + /// for logging purposes. + /// + /// @return + /// True on success; false otherwise. + //------------------------------------------------------------------ + void + FindExternalVisibleDecls (NameSearchContext &context, + lldb::ModuleSP module, + ClangNamespaceDecl &namespace_decl, + unsigned int current_id); private: ClangExpressionVariableList m_found_entities; ///< All entities that were looked up for the parser. ClangExpressionVariableList m_struct_members; ///< All entities that need to be placed in the struct. @@ -637,8 +669,7 @@ private: m_exe_ctx(NULL), m_sym_ctx(), m_persistent_vars(NULL), - m_enable_lookups(false), - m_ignore_lookups(false) + m_enable_lookups(false) { } @@ -656,7 +687,6 @@ private: SymbolContext m_sym_ctx; ///< The symbol context to use in finding variables and types. ClangPersistentVariables *m_persistent_vars; ///< The persistent variables for the process. bool m_enable_lookups; ///< Set to true during parsing if we have found the first "$__lldb" name. - bool m_ignore_lookups; ///< True during an import when we should be ignoring type lookups. std::auto_ptr<ClangASTImporter> m_ast_importer; ///< The importer used to import types on the parser's behalf. TargetInfo m_target_info; ///< Basic information about the target. private: @@ -765,39 +795,6 @@ private: } //------------------------------------------------------------------ - /// [Used by ClangASTSource] Find all entities matching a given name, - /// using a NameSearchContext to make Decls for them. - /// - /// @param[in] context - /// The NameSearchContext that can construct Decls for this name. - /// - /// @param[in] module - /// If non-NULL, the module to query. - /// - /// @param[in] namespace_decl - /// If valid and module is non-NULL, the parent namespace. - /// - /// @param[in] name - /// The name as a plain C string. The NameSearchContext contains - /// a DeclarationName for the name so at first the name may seem - /// redundant, but ClangExpressionDeclMap operates in RTTI land so - /// it can't access DeclarationName. - /// - /// @param[in] current_id - /// The ID for the current FindExternalVisibleDecls invocation, - /// for logging purposes. - /// - /// @return - /// True on success; false otherwise. - //------------------------------------------------------------------ - void - FindExternalVisibleDecls (NameSearchContext &context, - lldb::ModuleSP module, - ClangNamespaceDecl &namespace_decl, - const ConstString &name, - unsigned int current_id); - - //------------------------------------------------------------------ /// Given a stack frame, find a variable that matches the given name and /// type. We need this for expression re-use; we may not always get the /// same lldb::Variable back, and we want the expression to work wherever @@ -1167,28 +1164,6 @@ private: const RegisterInfo ®_info, lldb::addr_t addr, Error &err); - - //------------------------------------------------------------------ - /// A wrapper for ClangASTContext::CopyType that sets a flag that - /// indicates that we should not respond to queries during import. - /// - /// @param[in] dest_context - /// The target AST context, typically the parser's AST context. - /// - /// @param[in] source_context - /// The source AST context, typically the AST context of whatever - /// symbol file the type was found in. - /// - /// @param[in] clang_type - /// The source type. - /// - /// @return - /// The imported type. - //------------------------------------------------------------------ - void * - GuardedCopyType (clang::ASTContext *dest_context, - clang::ASTContext *source_context, - void *clang_type); }; } // namespace lldb_private diff --git a/lldb/source/Expression/ClangASTSource.cpp b/lldb/source/Expression/ClangASTSource.cpp index 1f9bf6b2936..5252eecf879 100644 --- a/lldb/source/Expression/ClangASTSource.cpp +++ b/lldb/source/Expression/ClangASTSource.cpp @@ -122,11 +122,6 @@ ClangASTSource::FindExternalVisibleDeclsByName } void -ClangASTSource::FindExternalVisibleDecls (NameSearchContext &context) -{ -} - -void ClangASTSource::CompleteType (TagDecl *tag_decl) { lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); @@ -257,6 +252,211 @@ ClangASTSource::FindExternalLexicalDecls (const DeclContext *decl_context, return ELR_AlreadyLoaded; } +void +ClangASTSource::FindExternalVisibleDecls (NameSearchContext &context) +{ + assert (m_ast_context); + + const ConstString name(context.m_decl_name.getAsString().c_str()); + + lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); + + static unsigned int invocation_id = 0; + unsigned int current_id = invocation_id++; + + if (log) + { + if (!context.m_decl_context) + log->Printf("ClangASTSource::FindExternalVisibleDecls[%u] for '%s' in a NULL DeclContext", current_id, name.GetCString()); + else if (const NamedDecl *context_named_decl = dyn_cast<NamedDecl>(context.m_decl_context)) + log->Printf("ClangASTSource::FindExternalVisibleDecls[%u] for '%s' in '%s'", current_id, name.GetCString(), context_named_decl->getNameAsString().c_str()); + else + log->Printf("ClangASTSource::FindExternalVisibleDecls[%u] for '%s' in a '%s'", current_id, name.GetCString(), context.m_decl_context->getDeclKindName()); + } + + context.m_namespace_map.reset(new ClangASTImporter::NamespaceMap); + + if (const NamespaceDecl *namespace_context = dyn_cast<NamespaceDecl>(context.m_decl_context)) + { + ClangASTImporter::NamespaceMapSP namespace_map = m_ast_importer->GetNamespaceMap(namespace_context); + + if (log && log->GetVerbose()) + log->Printf(" CAS::FEVD[%u] Inspecting namespace map %p (%d entries)", + current_id, + namespace_map.get(), + (int)namespace_map->size()); + + if (!namespace_map) + return; + + for (ClangASTImporter::NamespaceMap::iterator i = namespace_map->begin(), e = namespace_map->end(); + i != e; + ++i) + { + if (log) + log->Printf(" CAS::FEVD[%u] Searching namespace %s in module %s", + current_id, + i->second.GetNamespaceDecl()->getNameAsString().c_str(), + i->first->GetFileSpec().GetFilename().GetCString()); + + FindExternalVisibleDecls(context, + i->first, + i->second, + current_id); + } + } + else if (!isa<TranslationUnitDecl>(context.m_decl_context)) + { + // we shouldn't be getting FindExternalVisibleDecls calls for these + return; + } + else + { + ClangNamespaceDecl namespace_decl; + + if (log) + log->Printf(" CAS::FEVD[%u] Searching the root namespace", current_id); + + FindExternalVisibleDecls(context, + lldb::ModuleSP(), + namespace_decl, + current_id); + } + + if (!context.m_namespace_map->empty()) + { + if (log && log->GetVerbose()) + log->Printf(" CAS::FEVD[%u] Registering namespace map %p (%d entries)", + current_id, + context.m_namespace_map.get(), + (int)context.m_namespace_map->size()); + + NamespaceDecl *clang_namespace_decl = AddNamespace(context, context.m_namespace_map); + + if (clang_namespace_decl) + clang_namespace_decl->setHasExternalVisibleStorage(); + } +} + +void +ClangASTSource::FindExternalVisibleDecls (NameSearchContext &context, + lldb::ModuleSP module_sp, + ClangNamespaceDecl &namespace_decl, + unsigned int current_id) +{ + assert (m_ast_context); + + lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); + + SymbolContextList sc_list; + + const ConstString name(context.m_decl_name.getAsString().c_str()); + + const char *name_unique_cstr = name.GetCString(); + + if (name_unique_cstr == NULL) + return; + + // The ClangASTSource is not responsible for finding $-names. + if (name_unique_cstr[0] == '$') + return; + + if (module_sp && namespace_decl) + { + ClangNamespaceDecl found_namespace_decl; + + SymbolVendor *symbol_vendor = module_sp->GetSymbolVendor(); + + if (symbol_vendor) + { + SymbolContext null_sc; + + found_namespace_decl = symbol_vendor->FindNamespace(null_sc, name, &namespace_decl); + + if (found_namespace_decl) + { + context.m_namespace_map->push_back(std::pair<lldb::ModuleSP, ClangNamespaceDecl>(module_sp, found_namespace_decl)); + + if (log) + log->Printf(" CAS::FEVD[%u] Found namespace %s in module %s", + current_id, + name.GetCString(), + module_sp->GetFileSpec().GetFilename().GetCString()); + } + } + } + else + { + ModuleList &images = m_target->GetImages(); + + for (uint32_t i = 0, e = images.GetSize(); + i != e; + ++i) + { + lldb::ModuleSP image = images.GetModuleAtIndex(i); + + if (!image) + continue; + + ClangNamespaceDecl found_namespace_decl; + + SymbolVendor *symbol_vendor = image->GetSymbolVendor(); + + if (!symbol_vendor) + continue; + + SymbolContext null_sc; + + found_namespace_decl = symbol_vendor->FindNamespace(null_sc, name, &namespace_decl); + + if (found_namespace_decl) + { + context.m_namespace_map->push_back(std::pair<lldb::ModuleSP, ClangNamespaceDecl>(image, found_namespace_decl)); + + if (log) + log->Printf(" CAS::FEVD[%u] Found namespace %s in module %s", + current_id, + name.GetCString(), + image->GetFileSpec().GetFilename().GetCString()); + } + } + } + + static ConstString id_name("id"); + + do + { + TypeList types; + SymbolContext null_sc; + + if (module_sp && namespace_decl) + module_sp->FindTypes(null_sc, name, &namespace_decl, true, 1, types); + else if(name != id_name) + m_target->GetImages().FindTypes (null_sc, name, true, 1, types); + else + break; + + if (types.GetSize()) + { + lldb::TypeSP type_sp = types.GetTypeAtIndex(0); + + if (log) + { + const char *name_string = type_sp->GetName().GetCString(); + + log->Printf(" CAS::FEVD[%u] Matching type found for \"%s\": %s", + current_id, + name.GetCString(), + (name_string ? name_string : "<anonymous>")); + } + + void *copied_type = GuardedCopyType(m_ast_context, type_sp->GetClangAST(), type_sp->GetClangFullType()); + + context.AddTypeDecl(copied_type); + } + } while(0); +} + void ClangASTSource::CompleteNamespaceMap (ClangASTImporter::NamespaceMapSP &namespace_map, const ConstString &name, @@ -371,6 +571,22 @@ ClangASTSource::AddNamespace (NameSearchContext &context, ClangASTImporter::Name return dyn_cast<NamespaceDecl>(copied_decl); } +void * +ClangASTSource::GuardedCopyType (ASTContext *dest_context, + ASTContext *source_context, + void *clang_type) +{ + SetImportInProgress(true); + + QualType ret_qual_type = m_ast_importer->CopyType (source_context, QualType::getFromOpaquePtr(clang_type)); + + void *ret = ret_qual_type.getAsOpaquePtr(); + + SetImportInProgress(false); + + return ret; +} + clang::NamedDecl * NameSearchContext::AddVarDecl(void *type) { diff --git a/lldb/source/Expression/ClangExpressionDeclMap.cpp b/lldb/source/Expression/ClangExpressionDeclMap.cpp index 5c332be5d90..62354179ae5 100644 --- a/lldb/source/Expression/ClangExpressionDeclMap.cpp +++ b/lldb/source/Expression/ClangExpressionDeclMap.cpp @@ -2140,7 +2140,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context) lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); - if (m_parser_vars->m_ignore_lookups) + if (GetImportInProgress()) { if (log && log->GetVerbose()) log->Printf("Ignoring a query during an import"); @@ -2153,21 +2153,19 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context) if (log) { if (!context.m_decl_context) - log->Printf("FindExternalVisibleDecls[%u] for '%s' in a NULL DeclContext", current_id, name.GetCString()); + log->Printf("ClangExpressionDeclMap::FindExternalVisibleDecls[%u] for '%s' in a NULL DeclContext", current_id, name.GetCString()); else if (const NamedDecl *context_named_decl = dyn_cast<NamedDecl>(context.m_decl_context)) - log->Printf("FindExternalVisibleDecls[%u] for '%s' in '%s'", current_id, name.GetCString(), context_named_decl->getNameAsString().c_str()); + log->Printf("ClangExpressionDeclMap::FindExternalVisibleDecls[%u] for '%s' in '%s'", current_id, name.GetCString(), context_named_decl->getNameAsString().c_str()); else - log->Printf("FindExternalVisibleDecls[%u] for '%s' in a '%s'", current_id, name.GetCString(), context.m_decl_context->getDeclKindName()); + log->Printf("ClangExpressionDeclMap::FindExternalVisibleDecls[%u] for '%s' in a '%s'", current_id, name.GetCString(), context.m_decl_context->getDeclKindName()); } - - context.m_namespace_map.reset(new ClangASTImporter::NamespaceMap); - + if (const NamespaceDecl *namespace_context = dyn_cast<NamespaceDecl>(context.m_decl_context)) { ClangASTImporter::NamespaceMapSP namespace_map = m_ast_importer->GetNamespaceMap(namespace_context); if (log && log->GetVerbose()) - log->Printf(" FEVD[%u] Inspecting namespace map %p (%d entries)", + log->Printf(" CEDM::FEVD[%u] Inspecting namespace map %p (%d entries)", current_id, namespace_map.get(), (int)namespace_map->size()); @@ -2180,7 +2178,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context) ++i) { if (log) - log->Printf(" FEVD[%u] Searching namespace %s in module %s", + log->Printf(" CEDM::FEVD[%u] Searching namespace %s in module %s", current_id, i->second.GetNamespaceDecl()->getNameAsString().c_str(), i->first->GetFileSpec().GetFilename().GetCString()); @@ -2188,7 +2186,6 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context) FindExternalVisibleDecls(context, i->first, i->second, - name, current_id); } } @@ -2202,50 +2199,37 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context) ClangNamespaceDecl namespace_decl; if (log) - log->Printf(" FEVD[%u] Searching the root namespace", current_id); + log->Printf(" CEDM::FEVD[%u] Searching the root namespace", current_id); FindExternalVisibleDecls(context, lldb::ModuleSP(), namespace_decl, - name, current_id); } - if (!context.m_namespace_map->empty()) - { - if (log && log->GetVerbose()) - log->Printf(" FEVD[%u] Registering namespace map %p (%d entries)", - current_id, - context.m_namespace_map.get(), - (int)context.m_namespace_map->size()); - - NamespaceDecl *clang_namespace_decl = AddNamespace(context, context.m_namespace_map); - - if (clang_namespace_decl) - clang_namespace_decl->setHasExternalVisibleStorage(); - } + if (!context.m_found.variable) + ClangASTSource::FindExternalVisibleDecls(context); } void ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, lldb::ModuleSP module_sp, ClangNamespaceDecl &namespace_decl, - const ConstString &name, unsigned int current_id) { - assert (m_struct_vars.get()); - assert (m_parser_vars.get()); assert (m_ast_context); lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS)); - + SymbolContextList sc_list; + const ConstString name(context.m_decl_name.getAsString().c_str()); + const char *name_unique_cstr = name.GetCString(); if (name_unique_cstr == NULL) return; - + // Only look for functions by name out in our symbols if the function // doesn't start with our phony prefix of '$' Target *target = m_parser_vars->m_exe_ctx->GetTargetPtr(); @@ -2280,7 +2264,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, if (log && log->GetVerbose()) { - log->Printf (" FEVD[%u] Type for \"this\" is: ", current_id); + log->Printf (" CEDM::FEVD[%u] Type for \"this\" is: ", current_id); StreamString strm; this_type->Dump(&strm, true); log->PutCString (strm.GetData()); @@ -2308,7 +2292,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, if (log) { ASTDumper ast_dumper(pointer_target_qual_type); - log->Printf(" FEVD[%u] Adding type for $__lldb_class: %s", current_id, ast_dumper.GetCString()); + log->Printf(" CEDM::FEVD[%u] Adding type for $__lldb_class: %s", current_id, ast_dumper.GetCString()); } AddOneType(context, class_user_type, current_id, true); @@ -2402,7 +2386,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, break; if (log) - log->Printf(" FEVD[%u] Found persistent type %s", current_id, name.GetCString()); + log->Printf(" CEDM::FEVD[%u] Found persistent type %s", current_id, name.GetCString()); context.AddNamedDecl(parser_ptype_type_decl); } while (0); @@ -2420,11 +2404,11 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, if (m_parser_vars->m_exe_ctx->GetRegisterContext()) { const RegisterInfo *reg_info(m_parser_vars->m_exe_ctx->GetRegisterContext()->GetRegisterInfoByName(reg_name)); - + if (reg_info) { if (log) - log->Printf(" FEVD[%u] Found register %s", current_id, reg_info->name); + log->Printf(" CEDM::FEVD[%u] Found register %s", current_id, reg_info->name); AddOneRegister(context, reg_info, current_id); } @@ -2549,103 +2533,7 @@ ClangExpressionDeclMap::FindExternalVisibleDecls (NameSearchContext &context, } } } - - if (module_sp && namespace_decl) - { - ClangNamespaceDecl found_namespace_decl; - - SymbolVendor *symbol_vendor = module_sp->GetSymbolVendor(); - - if (symbol_vendor) - { - SymbolContext null_sc; - - found_namespace_decl = symbol_vendor->FindNamespace(null_sc, name, &namespace_decl); - - if (found_namespace_decl) - { - context.m_namespace_map->push_back(std::pair<ModuleSP, ClangNamespaceDecl>(module_sp, found_namespace_decl)); - - if (log) - log->Printf(" FEVD[%u] Found namespace %s in module %s", - current_id, - name.GetCString(), - module_sp->GetFileSpec().GetFilename().GetCString()); - } - } - } - else - { - ModuleList &images = m_parser_vars->m_sym_ctx.target_sp->GetImages(); - - for (uint32_t i = 0, e = images.GetSize(); - i != e; - ++i) - { - ModuleSP image = images.GetModuleAtIndex(i); - - if (!image) - continue; - - ClangNamespaceDecl found_namespace_decl; - - SymbolVendor *symbol_vendor = image->GetSymbolVendor(); - - if (!symbol_vendor) - continue; - - SymbolContext null_sc; - - found_namespace_decl = symbol_vendor->FindNamespace(null_sc, name, &namespace_decl); - - if (found_namespace_decl) - { - context.m_namespace_map->push_back(std::pair<ModuleSP, ClangNamespaceDecl>(image, found_namespace_decl)); - - if (log) - log->Printf(" FEVD[%u] Found namespace %s in module %s", - current_id, - name.GetCString(), - image->GetFileSpec().GetFilename().GetCString()); - } - } - } } - - static ConstString id_name("id"); - - do - { - TypeList types; - SymbolContext null_sc; - - if (module_sp && namespace_decl) - module_sp->FindTypes(null_sc, name, &namespace_decl, true, 1, types); - else if(name != id_name) - target->GetImages().FindTypes (null_sc, name, true, 1, types); - else - break; - - if (types.GetSize()) - { - TypeSP type_sp = types.GetTypeAtIndex(0); - - if (log) - { - const char *name_string = type_sp->GetName().GetCString(); - - log->Printf(" FEVD[%u] Matching type found for \"%s\": %s", - current_id, - name.GetCString(), - (name_string ? name_string : "<anonymous>")); - } - - TypeFromUser user_type(type_sp->GetClangFullType(), - type_sp->GetClangAST()); - - AddOneType(context, user_type, current_id, false); - } - } while(0); } Value * @@ -2812,7 +2700,7 @@ ClangExpressionDeclMap::AddOneVariable (NameSearchContext &context, VariableSP v if (log) { ASTDumper ast_dumper(var_decl); - log->Printf(" FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString()); + log->Printf(" CEDM::FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString()); } } @@ -2841,7 +2729,7 @@ ClangExpressionDeclMap::AddOneVariable(NameSearchContext &context, if (log) { ASTDumper ast_dumper(var_decl); - log->Printf(" FEVD[%u] Added pvar %s, returned %s", current_id, pvar_sp->GetName().GetCString(), ast_dumper.GetCString()); + log->Printf(" CEDM::FEVD[%u] Added pvar %s, returned %s", current_id, pvar_sp->GetName().GetCString(), ast_dumper.GetCString()); } } @@ -2899,7 +2787,7 @@ ClangExpressionDeclMap::AddOneGenericVariable(NameSearchContext &context, { ASTDumper ast_dumper(var_decl); - log->Printf(" FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString()); + log->Printf(" CEDM::FEVD[%u] Found variable %s, returned %s", current_id, decl_name.c_str(), ast_dumper.GetCString()); } } @@ -2994,7 +2882,7 @@ ClangExpressionDeclMap::AddOneRegister (NameSearchContext &context, if (log && log->GetVerbose()) { ASTDumper ast_dumper(var_decl); - log->Printf(" FEVD[%d] Added register %s, returned %s", current_id, context.m_decl_name.getAsString().c_str(), ast_dumper.GetCString()); + log->Printf(" CEDM::FEVD[%d] Added register %s, returned %s", current_id, context.m_decl_name.getAsString().c_str(), ast_dumper.GetCString()); } } @@ -3092,7 +2980,7 @@ ClangExpressionDeclMap::AddOneFunction (NameSearchContext &context, { ASTDumper ast_dumper(fun_decl); - log->Printf(" FEVD[%u] Found %s function %s, returned %s", + log->Printf(" CEDM::FEVD[%u] Found %s function %s, returned %s", current_id, (fun ? "specific" : "generic"), decl_name.c_str(), @@ -3110,9 +2998,7 @@ ClangExpressionDeclMap::AddOneType(NameSearchContext &context, ASTContext *user_ast_context = ut.GetASTContext(); void *copied_type = GuardedCopyType(parser_ast_context, user_ast_context, ut.GetOpaqueQualType()); - - TypeFromParser parser_type(copied_type, parser_ast_context); - + if (add_method && ClangASTContext::IsAggregateType(copied_type)) { void *args[1]; @@ -3144,21 +3030,3 @@ ClangExpressionDeclMap::AddOneType(NameSearchContext &context, context.AddTypeDecl(copied_type); } - -void * -ClangExpressionDeclMap::GuardedCopyType (ASTContext *dest_context, - ASTContext *source_context, - void *clang_type) -{ - assert (m_parser_vars.get()); - - m_parser_vars->m_ignore_lookups = true; - - QualType ret_qual_type = m_ast_importer->CopyType (source_context, QualType::getFromOpaquePtr(clang_type)); - - void *ret = ret_qual_type.getAsOpaquePtr(); - - m_parser_vars->m_ignore_lookups = false; - - return ret; -} |

