124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ClangExpressionDeclMap.h --------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ClangExpressionDeclMap_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ClangExpressionDeclMap_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <signal.h> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <stdint.h> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 22f15996eea072cdaa8a092f22d3a1212b3d95f0ecGreg Clayton#include "llvm/ADT/APInt.h" 236df0840c87be29724055716db951aa6d494ddabcSean Callanan#include "llvm/ADT/DenseMap.h" 249b6898f3ec1dedbe1dfc8bd7cd1d82a5b10e1bb0Sean Callanan#include "clang/AST/Decl.h" 25b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Value.h" 28f76afff22617c3f632af58ffebe1f037ba935717Sean Callanan#include "lldb/Expression/ClangASTSource.h" 29a6223431cf44c6c1e885d2f04cc78cb4155375e5Sean Callanan#include "lldb/Expression/ClangExpressionVariable.h" 30a6686e36cd56843e594139324884585fb47b918bSean Callanan#include "lldb/Expression/Materializer.h" 31841026fc8d1cc22bd3b9e74623b413a3e6aa9d38Sean Callanan#include "lldb/Symbol/TaggedASTType.h" 328de27c761a22187ef63fb60000894be163e7285fGreg Clayton#include "lldb/Symbol/SymbolContext.h" 338de27c761a22187ef63fb60000894be163e7285fGreg Clayton#include "lldb/Target/ExecutionContext.h" 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan//---------------------------------------------------------------------- 38a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// @class ClangExpressionDeclMap ClangExpressionDeclMap.h "lldb/Expression/ClangExpressionDeclMap.h" 39a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// @brief Manages named entities that are defined in LLDB's debug information. 40a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 41a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// The Clang parser uses the ClangASTSource as an interface to request named 42a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// entities from outside an expression. The ClangASTSource reports back, listing 43a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// all possible objects corresponding to a particular name. But it in turn 44a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// relies on ClangExpressionDeclMap, which performs several important functions. 45a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 46a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// First, it records what variables and functions were looked up and what Decls 47a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// were returned for them. 48a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 49a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Second, it constructs a struct on behalf of IRForTarget, recording which 50a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// variables should be placed where and relaying this information back so that 51a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// IRForTarget can generate context-independent code. 52a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 53a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Third, it "materializes" this struct on behalf of the expression command, 54a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// finding the current values of each variable and placing them into the 55a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// struct so that it can be passed to the JITted version of the IR. 56a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// 57a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// Fourth and finally, it "dematerializes" the struct after the JITted code has 58a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan/// has executed, placing the new values back where it found the old ones. 59a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan//---------------------------------------------------------------------- 60f76afff22617c3f632af58ffebe1f037ba935717Sean Callananclass ClangExpressionDeclMap : 6173b520f4f60dca58e58e446c9504d45384ee677bSean Callanan public ClangASTSource 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 64a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 65a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Constructor 66a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 676a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// Initializes class variables. 686a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// 696a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// @param[in] keep_result_in_memory 706a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// If true, inhibits the normal deallocation of the memory for 716a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// the result persistent variable, and instead marks the variable 726a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan /// as persisting. 733b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// 743b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// @param[in] exe_ctx 753b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// The execution context to use when parsing. 76aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 7773b520f4f60dca58e58e446c9504d45384ee677bSean Callanan ClangExpressionDeclMap (bool keep_result_in_memory, 7873b520f4f60dca58e58e446c9504d45384ee677bSean Callanan ExecutionContext &exe_ctx); 79aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 80aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 81aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Destructor 82aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 83427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ~ClangExpressionDeclMap (); 84aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 85aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //------------------------------------------------------------------ 86aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Enable the state needed for parsing and IR transformation. 87a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 88a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] exe_ctx 89a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The execution context to use when finding types for variables. 90a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Also used to find a "scratch" AST context to store result types. 91166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// 923b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// @param[in] materializer 933b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// If non-NULL, the materializer to populate with information about 943b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// the variables to use 953b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan /// 96166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// @return 97166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan /// True if parsing is possible; false if it is unsafe to continue. 98a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 99166ba106f9d8c377f2fda72112c821550d2e82d1Sean Callanan bool 1003b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan WillParse (ExecutionContext &exe_ctx, 1013b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan Materializer *materializer); 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 103a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 104fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// [Used by ClangExpressionParser] For each variable that had an unknown 105fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// type at the beginning of parsing, determine its final type now. 106fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// 107fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// @return 108fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan /// True on success; false otherwise. 109fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan //------------------------------------------------------------------ 110fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan bool 111fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan ResolveUnknownTypes(); 112fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan 113fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan //------------------------------------------------------------------ 114aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Disable the state needed for parsing and IR transformation. 115a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 116427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 117427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DidParse (); 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 119a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 120a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Add a variable to the list of persistent 121a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// variables for the process. 122a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 1238c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @param[in] decl 1248c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The Clang declaration for the persistent variable, used for 1258c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// lookup during parsing. 1268c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// 127a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 128a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name of the persistent variable, usually $something. 129a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 130a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 131a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the variable, in the Clang parser's context. 132a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 133a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 134a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 135a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 136427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 137427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddPersistentVariable (const clang::NamedDecl *decl, 138427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 1396a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan TypeFromParser type, 1406a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool is_result, 1416a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool is_lvalue); 142a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 143a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 144a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Add a variable to the struct that needs to 145a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// be materialized each time the expression runs. 146a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 147a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 148a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Clang declaration for the variable. 149a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 15045690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// @param[in] name 15145690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// The name of the variable. 15245690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// 1538c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// @param[in] value 1548c12720c108cd5e7ed792596749218d8400f647eSean Callanan /// The LLVM IR value for this variable. 155a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 156a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] size 157a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The size of the variable in bytes. 158a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 159a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] alignment 160a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The required alignment of the variable in bytes. 161a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 162a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 163a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 164a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 165427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 166427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddValueToStruct (const clang::NamedDecl *decl, 167427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton const ConstString &name, 168427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton llvm::Value *value, 169427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton size_t size, 170427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t alignment); 171a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 172a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 173a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Finalize the struct, laying out the position 174a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of each object in it. 175a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 176a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 177a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 178a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 179427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 180427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DoStructLayout (); 181a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 182a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 183a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get general information about the laid-out 184a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// struct after DoStructLayout() has been called. 185a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 186a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] num_elements 187a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The number of elements in the struct. 188a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 189a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] size 190a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The size of the struct, in bytes. 191a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 192a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] alignment 193a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The alignment of the struct, in bytes. 194a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 195a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 196a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 197a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 198427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 199427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetStructInfo (uint32_t &num_elements, 200427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton size_t &size, 201427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t &alignment); 202a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 203a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 204a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get specific information about one field 205a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of the laid-out struct after DoStructLayout() has been called. 206a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 207a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] decl 208a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The parsed Decl for the field, as generated by ClangASTSource 209a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// on ClangExpressionDeclMap's behalf. In the case of the result 2108de27c761a22187ef63fb60000894be163e7285fGreg Clayton /// value, this will have the name $__lldb_result even if the 211a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// result value ends up having the name $1. This is an 212a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// implementation detail of IRForTarget. 213a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 214a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] value 215a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The IR value for the field (usually a GlobalVariable). In 216a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// the case of the result value, this will have the correct 217a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// name ($1, for instance). This is an implementation detail 218a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of IRForTarget. 219a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 220a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] offset 221a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The offset of the field from the beginning of the struct. 222a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// As long as the struct is aligned according to its required 223a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// alignment, this offset will align the field correctly. 224a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 22545690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// @param[out] name 22645690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// The name of the field as used in materialization. 22745690fe3b8b4efb101dd31085413381021a69c2fSean Callanan /// 228a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] index 229a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The index of the field about which information is requested. 230a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 231a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 232a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 233a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 234427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 235427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetStructElement (const clang::NamedDecl *&decl, 236427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton llvm::Value *&value, 237427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton off_t &offset, 238427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ConstString &name, 239427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint32_t index); 2408bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 241a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 242a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get information about a function given its 243a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Decl. 244a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 245a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 246a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The parsed Decl for the Function, as generated by ClangASTSource 247a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// on ClangExpressionDeclMap's behalf. 248a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 249a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] ptr 250a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The absolute address of the function in the target. 251a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 252a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 253a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the information could be retrieved; false otherwise. 254a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 255427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 256427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetFunctionInfo (const clang::NamedDecl *decl, 257427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint64_t &ptr); 258a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 259a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 260a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by IRForTarget] Get the address of a function given nothing 261a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// but its name. Some functions are needed but didn't get Decls made 262a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// during parsing -- specifically, sel_registerName is never called 263a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// in the generated IR but we need to call it nonetheless. 264a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 265a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] name 266a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The name of the function. 267a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 268a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] ptr 269a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The absolute address of the function in the target. 270a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 271a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 272a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True if the address could be retrieved; false otherwise. 273a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 274427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton bool 275427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetFunctionAddress (const ConstString &name, 276427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton uint64_t &ptr); 277f5857a002d1e0c5fe29b8af9f9e2fe4fac0298d8Sean Callanan 278a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 279c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// [Used by IRForTarget] Get the address of a symbol given nothing 280c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// but its name. 281c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// 282819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] target 283819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The target to find the symbol in. If not provided, 284819749647b1605f75753f625050cb240292c08b0Sean Callanan /// then the current parsing context's Target. 285819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 286d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan /// @param[in] process 287d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan /// The process to use. For Objective-C symbols, the process's 288d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan /// Objective-C language runtime may be queried if the process 289d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan /// is non-NULL. 290d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan /// 291c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// @param[in] name 292c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// The name of the symbol. 293c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// 294c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan /// @return 295cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton /// Valid load address for the symbol 296c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan //------------------------------------------------------------------ 297cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton lldb::addr_t 298819749647b1605f75753f625050cb240292c08b0Sean Callanan GetSymbolAddress (Target &target, 299d27e543e9c5f81ef1288afbc9e48de2da5976a8aSean Callanan Process *process, 30021ef5bb658e4582339bedf5befc10c13953bdac0Sean Callanan const ConstString &name, 30121ef5bb658e4582339bedf5befc10c13953bdac0Sean Callanan lldb::SymbolType symbol_type); 302819749647b1605f75753f625050cb240292c08b0Sean Callanan 303cbc07cfd435fb703d8feb69b97ca8590e6ee2fd8Greg Clayton lldb::addr_t 30421ef5bb658e4582339bedf5befc10c13953bdac0Sean Callanan GetSymbolAddress (const ConstString &name, 30521ef5bb658e4582339bedf5befc10c13953bdac0Sean Callanan lldb::SymbolType symbol_type); 306c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan 307c7674af9458fbad6f07fa73609c354abf93af2dcSean Callanan //------------------------------------------------------------------ 30847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// [Used by IRInterpreter] Get basic target information. 30947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 31047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] byte_order 31147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The byte order of the target. 31247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 31347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[out] address_byte_size 31447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The size of a pointer in bytes. 31547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 31647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 31747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// True if the information could be determined; false 31847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// otherwise. 31947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 32047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan struct TargetInfo 32147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 32247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb::ByteOrder byte_order; 32347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan size_t address_byte_size; 32447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 32547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo() : 32647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan byte_order(lldb::eByteOrderInvalid), 32747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan address_byte_size(0) 32847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 32947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan } 33047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 33147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan bool IsValid() 33247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan { 33347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan return (byte_order != lldb::eByteOrderInvalid && 33447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan address_byte_size != 0); 33547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan } 33647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan }; 33747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo GetTargetInfo(); 33847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 33947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 340a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// [Used by ClangASTSource] Find all entities matching a given name, 341a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// using a NameSearchContext to make Decls for them. 342a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 343a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 344a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext that can construct Decls for this name. 345a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 346a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 347a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// True on success; false otherwise. 348a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 349427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 350f76afff22617c3f632af58ffebe1f037ba935717Sean Callanan FindExternalVisibleDecls (NameSearchContext &context); 3519394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan 3529394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan //------------------------------------------------------------------ 3539394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// Find all entities matching a given name in a given module/namespace, 3549394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// using a NameSearchContext to make Decls for them. 3559394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3569394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @param[in] context 3579394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// The NameSearchContext that can construct Decls for this name. 3589394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3599394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @param[in] module 3609394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// If non-NULL, the module to query. 3619394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3629394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @param[in] namespace_decl 3639394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// If valid and module is non-NULL, the parent namespace. 3649394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3659394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @param[in] name 3669394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// The name as a plain C string. The NameSearchContext contains 3679394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// a DeclarationName for the name so at first the name may seem 3689394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// redundant, but ClangExpressionDeclMap operates in RTTI land so 3699394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// it can't access DeclarationName. 3709394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3719394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @param[in] current_id 3729394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// The ID for the current FindExternalVisibleDecls invocation, 3739394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// for logging purposes. 3749394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// 3759394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// @return 3769394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan /// True on success; false otherwise. 3779394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan //------------------------------------------------------------------ 3789394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan void 3799394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan FindExternalVisibleDecls (NameSearchContext &context, 3809394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan lldb::ModuleSP module, 3819394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan ClangNamespaceDecl &namespace_decl, 3829394b5aaa5aafcf95d21d27371fa0a6548790a57Sean Callanan unsigned int current_id); 383a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callananprivate: 384427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_found_entities; ///< All entities that were looked up for the parser. 385427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton ClangExpressionVariableList m_struct_members; ///< All entities that need to be placed in the struct. 3866a92553d2cc2b7a3b853fcb6da101583435c2dc0Sean Callanan bool m_keep_result_in_memory; ///< True if result persistent variables generated by this expression should stay in memory. 387aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 388aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 389aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values should not live beyond parsing 390aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 391bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton class ParserVars 392bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton { 393bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton public: 394a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan ParserVars(ClangExpressionDeclMap &decl_map) : 395dd1dcfdbad297562951169ad621f895daf32b382Sean Callanan m_exe_ctx(), 396aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_sym_ctx(), 397aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_persistent_vars(NULL), 39897c8957257a3e0b3ce6f46f8e5a28c965e30f357Daniel Dunbar m_enable_lookups(false), 3993b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan m_materializer(NULL), 40097c8957257a3e0b3ce6f46f8e5a28c965e30f357Daniel Dunbar m_decl_map(decl_map) 401aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 402aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 403aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 404427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Target * 405427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton GetTarget() 406427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton { 407dd1dcfdbad297562951169ad621f895daf32b382Sean Callanan if (m_exe_ctx.GetTargetPtr()) 408dd1dcfdbad297562951169ad621f895daf32b382Sean Callanan return m_exe_ctx.GetTargetPtr(); 409427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton else if (m_sym_ctx.target_sp) 410427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton m_sym_ctx.target_sp.get(); 411427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton return NULL; 412427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton } 413e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 414dd1dcfdbad297562951169ad621f895daf32b382Sean Callanan ExecutionContext m_exe_ctx; ///< The execution context to use when parsing. 415aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan SymbolContext m_sym_ctx; ///< The symbol context to use in finding variables and types. 416aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ClangPersistentVariables *m_persistent_vars; ///< The persistent variables for the process. 417aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_enable_lookups; ///< Set to true during parsing if we have found the first "$__lldb" name. 41847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TargetInfo m_target_info; ///< Basic information about the target. 4193b16eb9d424068446fea9cd0e0fe5e7d435f5b6eSean Callanan Materializer *m_materializer; ///< If non-NULL, the materializer to use when reporting used variables. 420bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton private: 421a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan ClangExpressionDeclMap &m_decl_map; 422bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton DISALLOW_COPY_AND_ASSIGN (ParserVars); 423aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 424aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 425102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<ParserVars> m_parser_vars; 426aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 427aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 428aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate parser-specific variables 429aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 430427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 431427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableParserVars() 432aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 433aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_parser_vars.get()) 434a7cb1fa9d7d9c71fc2a5d9946cbec8e928baa5b9Sean Callanan m_parser_vars.reset(new ParserVars(*this)); 435aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 436aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 437aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 438aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate parser-specific variables 439aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 440427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 441427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableParserVars() 442aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 443aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_parser_vars.reset(); 444aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 445aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 446aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 447aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// The following values contain layout information for the materialized 448aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// struct, but are not specific to a single materialization 449aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 450aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan struct StructVars { 451aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan StructVars() : 452aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_alignment(0), 453aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_size(0), 454aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_laid_out(false), 455aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_result_name(), 456aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_object_pointer_type(NULL, NULL) 457aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 458aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 459aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 460aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan off_t m_struct_alignment; ///< The alignment of the struct in bytes. 461aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan size_t m_struct_size; ///< The size of the struct in bytes. 462aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan bool m_struct_laid_out; ///< True if the struct has been laid out and the layout is valid (that is, no new fields have been added since). 463aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan ConstString m_result_name; ///< The name of the result variable ($1, for example) 464aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan TypeFromUser m_object_pointer_type; ///< The type of the "this" variable, if one exists 465aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan }; 466aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 467102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<StructVars> m_struct_vars; 468aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 469aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 470aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Activate struct variables 471aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 472427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 473427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton EnableStructVars() 474aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 475aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan if (!m_struct_vars.get()) 476aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(new struct StructVars); 477aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 478aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 479aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 480aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan /// Deallocate struct variables 481aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 482427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 483427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton DisableStructVars() 484aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan { 485aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan m_struct_vars.reset(); 486aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan } 487aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan 488aa301c49e8b31f01c551cffbaa74c8ba82851a79Sean Callanan //---------------------------------------------------------------------- 48931903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan /// Get this parser's ID for use in extracting parser- and JIT-specific 49031903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan /// data from persistent variables. 49131903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan //---------------------------------------------------------------------- 49231903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan uint64_t 49331903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan GetParserID() 49431903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan { 49531903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan return (uint64_t)this; 49631903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan } 49731903318116cbd66801cd2a526cc5e5873d20e4cSean Callanan 498a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 499819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Given a target, find a data symbol that has the given name. 500819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 501819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] target 502819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The target to use as the basis for the search. 503819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 504819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] name 505819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The name as a plain C string. 506819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 507819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @return 508819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Symbol found, or NULL if none was found. 509819749647b1605f75753f625050cb240292c08b0Sean Callanan //--------------------------------------------------------- 51001e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton const Symbol * 511819749647b1605f75753f625050cb240292c08b0Sean Callanan FindGlobalDataSymbol (Target &target, 512aa4a553d4b8cd37f13bd4946f504265000a7bcc4Sean Callanan const ConstString &name); 513819749647b1605f75753f625050cb240292c08b0Sean Callanan 514819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 51547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// Given a target, find a variable that matches the given name and 51647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// type. 51747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 51847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] target 51947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The target to use as a basis for finding the variable. 52047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 52194cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] module 52294cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL, the module to search. 52394cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 52447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] name 52547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The name as a plain C string. 52647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 52794cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// @param[in] namespace_decl 52894cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// If non-NULL and module is non-NULL, the parent namespace. 52994cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan /// 53047dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @param[in] type 53147dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The required type for the variable. This function may be called 53247dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// during parsing, in which case we don't know its type; hence the 53347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// default. 53447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// 53547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// @return 53647dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan /// The LLDB Variable found, or NULL if none was found. 53747dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 53847dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan lldb::VariableSP 53947dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan FindGlobalVariable (Target &target, 54094cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan lldb::ModuleSP &module, 54194cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan const ConstString &name, 54294cd0cac9117f12cf05bab3e836029f15a62024bSean Callanan ClangNamespaceDecl *namespace_decl, 54347dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan TypeFromUser *type = NULL); 54447dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan 54547dc457387b690c5e4df1c0c7dd8c4337b92e630Sean Callanan //------------------------------------------------------------------ 546a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Get the value of a variable in a given execution context and return 547a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// the associated Types if needed. 548a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 549a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 550a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The variable to evaluate. 551a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 55252f792329be5db8e38961350589e97e8f2823acdGreg Clayton /// @param[out] var_location 55352f792329be5db8e38961350589e97e8f2823acdGreg Clayton /// The variable location value to fill in 554a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 555a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] found_type 556a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was found in the user process. 557a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// This is only useful when the variable is being inspected on behalf 558a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// of the parser, hence the default. 559a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 560a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[out] parser_type 561a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The type of the found value, as it was copied into the parser's 562a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// AST context. This is only useful when the variable is being 563a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// inspected on behalf of the parser, hence the default. 564a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 565a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] decl 566a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Decl to be looked up. 567a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 568a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @return 56952f792329be5db8e38961350589e97e8f2823acdGreg Clayton /// Return true if the value was successfully filled in. 570a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 57152f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool 572dd1dcfdbad297562951169ad621f895daf32b382Sean Callanan GetVariableValue (lldb::VariableSP &var, 57352f792329be5db8e38961350589e97e8f2823acdGreg Clayton lldb_private::Value &var_location, 574427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromUser *found_type = NULL, 575427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton TypeFromParser *parser_type = NULL); 576336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 577a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 578a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 579a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Variable, and put it in the Tuple list. 580a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 581a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 582a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 583a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 584a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] var 585a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The LLDB Variable that needs a Decl. 58689e7df3ebb2591e93a92913be4d483c30df777a3Sean Callanan /// 58789e7df3ebb2591e93a92913be4d483c30df777a3Sean Callanan /// @param[in] valobj 58889e7df3ebb2591e93a92913be4d483c30df777a3Sean Callanan /// The LLDB ValueObject for that variable. 589a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 590427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 591427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 59267bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan lldb::VariableSP var, 59389e7df3ebb2591e93a92913be4d483c30df777a3Sean Callanan lldb::ValueObjectSP valobj, 59467bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 595a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 596a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 597a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 598819749647b1605f75753f625050cb240292c08b0Sean Callanan /// persistent variable, and put it in the list of found entities. 599a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 600a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 601a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 602a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 603a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] pvar 604a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The persistent variable that needs a Decl. 60567bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// 60667bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// @param[in] current_id 60767bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// The ID of the current invocation of FindExternalVisibleDecls 60867bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan /// for logging purposes. 609a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 610427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 611427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneVariable (NameSearchContext &context, 61267bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan lldb::ClangExpressionVariableSP &pvar_sp, 61367bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 614a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 615a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 616819749647b1605f75753f625050cb240292c08b0Sean Callanan /// Use the NameSearchContext to generate a Decl for the given LLDB 617819749647b1605f75753f625050cb240292c08b0Sean Callanan /// symbol (treated as a variable), and put it in the list of found 618819749647b1605f75753f625050cb240292c08b0Sean Callanan /// entities. 619819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 620819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] context 621819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The NameSearchContext to use when constructing the Decl. 622819749647b1605f75753f625050cb240292c08b0Sean Callanan /// 623819749647b1605f75753f625050cb240292c08b0Sean Callanan /// @param[in] var 624819749647b1605f75753f625050cb240292c08b0Sean Callanan /// The LLDB Variable that needs a Decl. 625819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 626819749647b1605f75753f625050cb240292c08b0Sean Callanan void 627819749647b1605f75753f625050cb240292c08b0Sean Callanan AddOneGenericVariable (NameSearchContext &context, 62801e6a58b057676d5dc434876dbb2d54871bb962eGreg Clayton const Symbol &symbol, 62967bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 630819749647b1605f75753f625050cb240292c08b0Sean Callanan 631819749647b1605f75753f625050cb240292c08b0Sean Callanan //------------------------------------------------------------------ 632a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 633a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// function. (Functions are not placed in the Tuple list.) Can 634a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// handle both fully typed functions and generic functions. 635a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 636a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 637a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 638a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 639a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] fun 640a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Function that needs to be created. If non-NULL, this is 641a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// a fully-typed function. 642a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 643a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] sym 644a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The Symbol that corresponds to a function that needs to be 645a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// created with generic type (unitptr_t foo(...)). 646a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 647427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 648427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneFunction (NameSearchContext &context, 649427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton Function *fun, 65067bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan Symbol *sym, 65167bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 652a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan 653a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 654a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 6551ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// register. 6561ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 6571ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] context 6581ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The NameSearchContext to use when constructing the Decl. 6591ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// 6601ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// @param[in] reg_info 6611ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// The information corresponding to that register. 6621ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 663427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 664427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneRegister (NameSearchContext &context, 66567bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan const RegisterInfo *reg_info, 66667bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan unsigned int current_id); 6671ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan 6681ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan //------------------------------------------------------------------ 6691ddd9fe72bd9e22f40ad28f25b3a139a9326ae98Sean Callanan /// Use the NameSearchContext to generate a Decl for the given 670a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// type. (Types are not placed in the Tuple list.) 671a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 672a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] context 673a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// The NameSearchContext to use when constructing the Decl. 674a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// 675a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan /// @param[in] type 6763c9c5eb466869ede185e879d14a47335fb43194dSean Callanan /// The type that needs to be created. 677a386e05ea6d20cdcedc80c23cf771d5030db43d6Sean Callanan //------------------------------------------------------------------ 678427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton void 679427f290ff96f3ab9f2cf3a1af7001d2c560424c7Greg Clayton AddOneType (NameSearchContext &context, 68067bbb1103c5a49b7c994750e90ae7ed130daa3aeSean Callanan TypeFromUser &type, 681dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan unsigned int current_id); 682dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan 683dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan //------------------------------------------------------------------ 684dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan /// Copy a C++ class type into the parser's AST context and add a 685dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan /// member function declaration to it for the expression. 686dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan /// 687dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan /// @param[in] type 688dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan /// The type that needs to be created. 689dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan //------------------------------------------------------------------ 690dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan 691dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan TypeFromParser 692dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan CopyClassType(TypeFromUser &type, 693dbf2fb0d760631d86ab93cc70c3bb05a4c514263Sean Callanan unsigned int current_id); 69424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 69524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 69724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangExpressionDeclMap_h_ 699