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