Coverage Report

Created: 2022-01-15 10:30

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/NameSearchContext.h
Line
Count
Source
1
//===-- NameSearchContext.h -------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_NAME_SEARCH_CONTEXT_H
10
#define LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_NAME_SEARCH_CONTEXT_H
11
12
#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"
13
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
14
#include "lldb/Symbol/CompilerType.h"
15
#include "llvm/ADT/SmallSet.h"
16
17
namespace lldb_private {
18
19
/// \class NameSearchContext ClangASTSource.h
20
/// "lldb/Expression/ClangASTSource.h" Container for all objects relevant to a
21
/// single name lookup
22
///
23
/// LLDB needs to create Decls for entities it finds.  This class communicates
24
/// what name is being searched for and provides helper functions to construct
25
/// Decls given appropriate type information.
26
struct NameSearchContext {
27
  /// The type system of the AST from which the lookup originated.
28
  TypeSystemClang &m_clang_ts;
29
  /// The list of declarations already constructed.
30
  llvm::SmallVectorImpl<clang::NamedDecl *> &m_decls;
31
  /// The mapping of all namespaces found for this request back to their
32
  /// modules.
33
  ClangASTImporter::NamespaceMapSP m_namespace_map;
34
  /// The name being looked for.
35
  const clang::DeclarationName m_decl_name;
36
  /// The DeclContext to put declarations into.
37
  const clang::DeclContext *m_decl_context;
38
  /// All the types of functions that have been reported, so we don't
39
  /// report conflicts.
40
  llvm::SmallSet<CompilerType, 5> m_function_types;
41
42
  bool m_found_variable = false;
43
  bool m_found_function_with_type_info = false;
44
  bool m_found_function = false;
45
  bool m_found_local_vars_nsp = false;
46
  bool m_found_type = false;
47
48
  /// Constructor
49
  ///
50
  /// Initializes class variables.
51
  ///
52
  /// \param[in] clang_ts
53
  ///     The TypeSystemClang from which the request originates.
54
  ///
55
  /// \param[in] decls
56
  ///     A reference to a list into which new Decls will be placed.  This
57
  ///     list is typically empty when the function is called.
58
  ///
59
  /// \param[in] name
60
  ///     The name being searched for (always an Identifier).
61
  ///
62
  /// \param[in] dc
63
  ///     The DeclContext to register Decls in.
64
  NameSearchContext(TypeSystemClang &clang_ts,
65
                    llvm::SmallVectorImpl<clang::NamedDecl *> &decls,
66
                    clang::DeclarationName name, const clang::DeclContext *dc)
67
      : m_clang_ts(clang_ts), m_decls(decls),
68
        m_namespace_map(std::make_shared<ClangASTImporter::NamespaceMap>()),
69
64.8k
        m_decl_name(name), m_decl_context(dc) {
70
64.8k
    ;
71
64.8k
  }
72
73
  /// Create a VarDecl with the name being searched for and the provided type
74
  /// and register it in the right places.
75
  ///
76
  /// \param[in] type
77
  ///     The opaque QualType for the VarDecl being registered.
78
  clang::NamedDecl *AddVarDecl(const CompilerType &type);
79
80
  /// Create a FunDecl with the name being searched for and the provided type
81
  /// and register it in the right places.
82
  ///
83
  /// \param[in] type
84
  ///     The opaque QualType for the FunDecl being registered.
85
  ///
86
  /// \param[in] extern_c
87
  ///     If true, build an extern "C" linkage specification for this.
88
  clang::NamedDecl *AddFunDecl(const CompilerType &type, bool extern_c = false);
89
90
  /// Create a FunDecl with the name being searched for and generic type (i.e.
91
  /// intptr_t NAME_GOES_HERE(...)) and register it in the right places.
92
  clang::NamedDecl *AddGenericFunDecl();
93
94
  /// Create a TypeDecl with the name being searched for and the provided type
95
  /// and register it in the right places.
96
  ///
97
  /// \param[in] compiler_type
98
  ///     The opaque QualType for the TypeDecl being registered.
99
  clang::NamedDecl *AddTypeDecl(const CompilerType &compiler_type);
100
101
  /// Add Decls from the provided DeclContextLookupResult to the list of
102
  /// results.
103
  ///
104
  /// \param[in] result
105
  ///     The DeclContextLookupResult, usually returned as the result
106
  ///     of querying a DeclContext.
107
  void AddLookupResult(clang::DeclContextLookupResult result);
108
109
  /// Add a NamedDecl to the list of results.
110
  ///
111
  /// \param[in] decl
112
  ///     The NamedDecl, usually returned as the result
113
  ///     of querying a DeclContext.
114
  void AddNamedDecl(clang::NamedDecl *decl);
115
116
private:
117
584
  clang::ASTContext &GetASTContext() const {
118
584
    return m_clang_ts.getASTContext();
119
584
  }
120
};
121
122
} // namespace lldb_private
123
124
#endif // LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_NAME_SEARCH_CONTEXT_H