ClangExpressionDeclMap.h revision 8f0dc34f45576dfb719f879b6d3ea5f61de0e918
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;
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
328f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callananclass Function;
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass NameSearchContext;
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Variable;
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ClangExpressionDeclMap
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClangExpressionDeclMap(ExecutionContext *exe_ctx);
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~ClangExpressionDeclMap();
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Interface for ClangStmtVisitor
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool GetIndexForDecl (uint32_t &index,
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                          const clang::Decl *decl);
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Interface for DwarfExpression
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Value *GetValueForIndex (uint32_t index);
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Interface for ClangASTSource
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void GetDecls (NameSearchContext &context,
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   const char *name);
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    struct Tuple
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const clang::NamedDecl  *m_decl;
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        Value                   *m_value; /* owned by ClangExpressionDeclMap */
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector<Tuple> TupleVector;
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef TupleVector::iterator TupleIterator;
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    TupleVector         m_tuples;
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ExecutionContext   *m_exe_ctx;
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolContext      *m_sym_ctx; /* owned by ClangExpressionDeclMap */
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
678f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callanan    void AddOneVariable(NameSearchContext &context, Variable *var);
688f0dc34f45576dfb719f879b6d3ea5f61de0e918Sean Callanan    void AddOneFunction(NameSearchContext &context, Function *fun);
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ClangExpressionDeclMap_h_
74