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
20namespace llvm {
21    class Function;
22    class Module;
23}
24
25namespace lldb_private {
26
27class ClangExpressionDeclMap;
28class 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//----------------------------------------------------------------------
41class IRInterpreter
42{
43public:
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
58private:
59    static bool
60    supportsFunction (llvm::Function &llvm_function,
61                      lldb_private::Error &err);
62};
63
64#endif
65