ClangExpressionDeclMap.h revision 336a0002b94c7f23573ec613c4d4ac89a67fd299
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 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Value.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace clang { 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class DeclarationName; 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner class DeclContext; 28810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan class QualType; 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 318bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanannamespace llvm { 328bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan class Value; 338bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan} 348bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callananclass Error; 388f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callananclass Function; 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NameSearchContext; 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Variable; 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ClangExpressionDeclMap 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangExpressionDeclMap(ExecutionContext *exe_ctx); 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~ClangExpressionDeclMap(); 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Interface for ClangStmtVisitor 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool GetIndexForDecl (uint32_t &index, 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const clang::Decl *decl); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 528bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan // Interface for IRForTarget 538bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan bool AddValueToStruct (llvm::Value *value, 548bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan const clang::NamedDecl *decl, 55810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan std::string &name, 56810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan void *type, 578bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan size_t size, 588bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t alignment); 598bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan bool DoStructLayout (); 608bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan bool GetStructInfo (uint32_t &num_elements, 618bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan size_t &size, 628bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t &alignment); 638bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan bool GetStructElement (const clang::NamedDecl *&decl, 648bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan llvm::Value *&value, 658bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t &offset, 668bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan uint32_t index); 678bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Interface for DwarfExpression 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value *GetValueForIndex (uint32_t index); 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 71810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan // Interface for CommandObjectExpression 72810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan lldb::addr_t Materialize(ExecutionContext *exe_ctx, 73810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan Error &error); 74810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Interface for ClangASTSource 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void GetDecls (NameSearchContext &context, 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char *name); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner struct Tuple 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const clang::NamedDecl *m_decl; 83810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan clang::ASTContext *m_ast_context; 84810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan void *m_orig_type; 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Value *m_value; /* owned by ClangExpressionDeclMap */ 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 888bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan struct StructMember 898bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan { 90810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan const clang::NamedDecl *m_decl; 91810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan llvm::Value *m_value; 92810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan std::string m_name; 93810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan void *m_type; 948bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t m_offset; 958bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan size_t m_size; 968bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t m_alignment; 978bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan }; 988bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef std::vector<Tuple> TupleVector; 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef TupleVector::iterator TupleIterator; 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1028bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan typedef std::vector<StructMember> StructMemberVector; 1038bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan typedef StructMemberVector::iterator StructMemberIterator; 1048bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TupleVector m_tuples; 1068bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan StructMemberVector m_members; 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ExecutionContext *m_exe_ctx; 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContext *m_sym_ctx; /* owned by ClangExpressionDeclMap */ 1098bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan off_t m_struct_alignment; 1108bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan size_t m_struct_size; 1118bce665569ea08dd43d9ff21e23f14ebbc191d12Sean Callanan bool m_struct_laid_out; 112810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan lldb::addr_t m_materialized_location; 113810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 114336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan Variable *FindVariableInScope(const SymbolContext &sym_ctx, 115336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan const char *name, 116336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan void *type = NULL, 117336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan clang::ASTContext *ast_context = NULL); 118336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 119336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan Value *GetVariableValue(ExecutionContext &exe_ctx, 120336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan Variable *var, 121336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan clang::ASTContext *target_ast_context = NULL, 122336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan void **opaque_type = NULL, 123336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan clang::ASTContext **found_ast_context = NULL); 124336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan 1258f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callanan void AddOneVariable(NameSearchContext &context, Variable *var); 1268f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callanan void AddOneFunction(NameSearchContext &context, Function *fun); 127810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan 128810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan bool MaterializeOneVariable(ExecutionContext &exe_ctx, 129810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan const SymbolContext &sym_ctx, 130810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan const char *name, 131810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan void *type, 132810f22d18ca8f9d31f49d79bb4b51a9f2fd96deaSean Callanan clang::ASTContext *ast_context, 133336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan lldb::addr_t addr, 134336a0002b94c7f23573ec613c4d4ac89a67fd299Sean Callanan Error &err); 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangExpressionDeclMap_h_ 140