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/lldb-forward.h"
23 #include "lldb/lldb-private.h"
24 #include "lldb/Expression/ExpressionTypeSystemHelper.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 //----------------------------------------------------------------------
48 Expression (Target &target);
50 Expression (ExecutionContextScope &exe_scope);
52 //------------------------------------------------------------------
54 //------------------------------------------------------------------
55 virtual ~Expression ()
59 //------------------------------------------------------------------
60 /// Return the string that the parser should parse. Must be a full
62 //------------------------------------------------------------------
66 //------------------------------------------------------------------
67 /// Return the function name that should be used for executing the
68 /// expression. Text() should contain the definition of this
70 //------------------------------------------------------------------
74 //------------------------------------------------------------------
75 /// Return the language that should be used when parsing. To use
76 /// the default, return eLanguageTypeUnknown.
77 //------------------------------------------------------------------
78 virtual lldb::LanguageType
81 return lldb::eLanguageTypeUnknown;
84 //------------------------------------------------------------------
85 /// Return the desired result type of the function, or
86 /// eResultTypeAny if indifferent.
87 //------------------------------------------------------------------
91 return eResultTypeAny;
94 //------------------------------------------------------------------
96 //------------------------------------------------------------------
98 //------------------------------------------------------------------
99 /// Return true if validation code should be inserted into the
101 //------------------------------------------------------------------
103 NeedsValidation () = 0;
105 //------------------------------------------------------------------
106 /// Return true if external variables in the expression should be
108 //------------------------------------------------------------------
110 NeedsVariableResolution () = 0;
112 virtual EvaluateExpressionOptions *GetOptions() { return nullptr; };
114 //------------------------------------------------------------------
115 /// Return the address of the function's JIT-compiled code, or
116 /// LLDB_INVALID_ADDRESS if the function is not JIT compiled
117 //------------------------------------------------------------------
121 return m_jit_start_addr;
124 virtual ExpressionTypeSystemHelper *
125 GetTypeSystemHelper ()
132 lldb::TargetWP m_target_wp; /// Expression's always have to have a target...
133 lldb::ProcessWP m_jit_process_wp; /// An expression might have a process, but it doesn't need to (e.g. calculator mode.)
134 lldb::addr_t m_jit_start_addr; ///< The address of the JITted function within the JIT allocation. LLDB_INVALID_ADDRESS if invalid.
135 lldb::addr_t m_jit_end_addr; ///< The address of the JITted function within the JIT allocation. LLDB_INVALID_ADDRESS if invalid.
139 } // namespace lldb_private
141 #endif // liblldb_Expression_h_