]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Expression/IRInterpreter.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Expression / IRInterpreter.h
1 //===-- IRInterpreter.h -----------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_IRInterpreter_h_
11 #define liblldb_IRInterpreter_h_
12
13 #include "lldb/lldb-public.h"
14 #include "lldb/Core/ConstString.h"
15 #include "lldb/Core/Stream.h"
16 #include "lldb/Symbol/TaggedASTType.h"
17 #include "llvm/ADT/ArrayRef.h"
18 #include "llvm/Pass.h"
19
20 namespace llvm {
21     class Function;
22     class Module;
23 }
24
25 namespace lldb_private {
26
27 class ClangExpressionDeclMap;
28 class IRMemoryMap;
29     
30 }
31
32 //----------------------------------------------------------------------
33 /// @class IRInterpreter IRInterpreter.h "lldb/Expression/IRInterpreter.h"
34 /// @brief Attempt to interpret the function's code if it does not require
35 ///        running the target.
36 ///
37 /// In some cases, the IR for an expression can be evaluated entirely
38 /// in the debugger, manipulating variables but not executing any code
39 /// in the target.  The IRInterpreter attempts to do this.
40 //----------------------------------------------------------------------
41 class IRInterpreter
42 {
43 public:
44     static bool
45     CanInterpret (llvm::Module &module,
46                   llvm::Function &function,
47                   lldb_private::Error &error);
48     
49     static bool
50     Interpret (llvm::Module &module,
51                llvm::Function &function,
52                llvm::ArrayRef<lldb::addr_t> args,
53                lldb_private::IRMemoryMap &memory_map,
54                lldb_private::Error &error,
55                lldb::addr_t stack_frame_bottom,
56                lldb::addr_t stack_frame_top);
57     
58 private:   
59     static bool
60     supportsFunction (llvm::Function &llvm_function,
61                       lldb_private::Error &err);
62 };
63
64 #endif