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
65