1 //===-- Expression.h --------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_Expression_h_
11 #define liblldb_Expression_h_
19 // Other libraries and framework includes
22 #include "lldb/Expression/ExpressionTypeSystemHelper.h"
23 #include "lldb/lldb-forward.h"
24 #include "lldb/lldb-private.h"
26 namespace lldb_private {
28 class RecordingMemoryManager;
30 //----------------------------------------------------------------------
31 /// @class Expression Expression.h "lldb/Expression/Expression.h"
32 /// @brief Encapsulates a single expression for use in lldb
34 /// LLDB uses expressions for various purposes, notably to call functions
35 /// and as a backend for the expr command. Expression encapsulates
36 /// the objects needed to parse and interpret or JIT an expression. It
37 /// uses the expression parser appropriate to the language of the expression
38 /// to produce LLVM IR from the expression.
39 //----------------------------------------------------------------------
42 enum ResultType { eResultTypeAny, eResultTypeId };
44 Expression(Target &target);
46 Expression(ExecutionContextScope &exe_scope);
48 //------------------------------------------------------------------
50 //------------------------------------------------------------------
51 virtual ~Expression() {}
53 //------------------------------------------------------------------
54 /// Return the string that the parser should parse. Must be a full
56 //------------------------------------------------------------------
57 virtual const char *Text() = 0;
59 //------------------------------------------------------------------
60 /// Return the function name that should be used for executing the
61 /// expression. Text() should contain the definition of this
63 //------------------------------------------------------------------
64 virtual const char *FunctionName() = 0;
66 //------------------------------------------------------------------
67 /// Return the language that should be used when parsing. To use
68 /// the default, return eLanguageTypeUnknown.
69 //------------------------------------------------------------------
70 virtual lldb::LanguageType Language() { return lldb::eLanguageTypeUnknown; }
72 //------------------------------------------------------------------
73 /// Return the desired result type of the function, or
74 /// eResultTypeAny if indifferent.
75 //------------------------------------------------------------------
76 virtual ResultType DesiredResultType() { return eResultTypeAny; }
78 //------------------------------------------------------------------
80 //------------------------------------------------------------------
82 //------------------------------------------------------------------
83 /// Return true if validation code should be inserted into the
85 //------------------------------------------------------------------
86 virtual bool NeedsValidation() = 0;
88 //------------------------------------------------------------------
89 /// Return true if external variables in the expression should be
91 //------------------------------------------------------------------
92 virtual bool NeedsVariableResolution() = 0;
94 virtual EvaluateExpressionOptions *GetOptions() { return nullptr; };
96 //------------------------------------------------------------------
97 /// Return the address of the function's JIT-compiled code, or
98 /// LLDB_INVALID_ADDRESS if the function is not JIT compiled
99 //------------------------------------------------------------------
100 lldb::addr_t StartAddress() { return m_jit_start_addr; }
102 //------------------------------------------------------------------
103 /// Called to notify the expression that it is about to be executed.
104 //------------------------------------------------------------------
105 virtual void WillStartExecuting() {}
107 //------------------------------------------------------------------
108 /// Called to notify the expression that its execution has finished.
109 //------------------------------------------------------------------
110 virtual void DidFinishExecuting() {}
112 virtual ExpressionTypeSystemHelper *GetTypeSystemHelper() { return nullptr; }
115 lldb::TargetWP m_target_wp; /// Expression's always have to have a target...
116 lldb::ProcessWP m_jit_process_wp; /// An expression might have a process, but
117 /// it doesn't need to (e.g. calculator
119 lldb::addr_t m_jit_start_addr; ///< The address of the JITted function within
120 ///the JIT allocation. LLDB_INVALID_ADDRESS if
122 lldb::addr_t m_jit_end_addr; ///< The address of the JITted function within
123 ///the JIT allocation. LLDB_INVALID_ADDRESS if
127 } // namespace lldb_private
129 #endif // liblldb_Expression_h_