]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Expression/Expression.h
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Expression / Expression.h
1 //===-- Expression.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_Expression_h_
11 #define liblldb_Expression_h_
12
13 // C Includes
14 // C++ Includes
15 #include <map>
16 #include <string>
17 #include <vector>
18
19 // Other libraries and framework includes
20 // Project includes
21
22 #include "lldb/Expression/ExpressionTypeSystemHelper.h"
23 #include "lldb/lldb-forward.h"
24 #include "lldb/lldb-private.h"
25
26 namespace lldb_private {
27
28 class RecordingMemoryManager;
29
30 //----------------------------------------------------------------------
31 /// @class Expression Expression.h "lldb/Expression/Expression.h" Encapsulates
32 /// a single expression for use in lldb
33 ///
34 /// LLDB uses expressions for various purposes, notably to call functions
35 /// and as a backend for the expr command.  Expression encapsulates the
36 /// objects needed to parse and interpret or JIT an expression.  It uses the
37 /// expression parser appropriate to the language of the expression to produce
38 /// LLVM IR from the expression.
39 //----------------------------------------------------------------------
40 class Expression {
41 public:
42   enum ResultType { eResultTypeAny, eResultTypeId };
43
44   Expression(Target &target);
45
46   Expression(ExecutionContextScope &exe_scope);
47
48   //------------------------------------------------------------------
49   /// Destructor
50   //------------------------------------------------------------------
51   virtual ~Expression() {}
52
53   //------------------------------------------------------------------
54   /// Return the string that the parser should parse.  Must be a full
55   /// translation unit.
56   //------------------------------------------------------------------
57   virtual const char *Text() = 0;
58
59   //------------------------------------------------------------------
60   /// Return the function name that should be used for executing the
61   /// expression.  Text() should contain the definition of this function.
62   //------------------------------------------------------------------
63   virtual const char *FunctionName() = 0;
64
65   //------------------------------------------------------------------
66   /// Return the language that should be used when parsing.  To use the
67   /// default, return eLanguageTypeUnknown.
68   //------------------------------------------------------------------
69   virtual lldb::LanguageType Language() { return lldb::eLanguageTypeUnknown; }
70
71   //------------------------------------------------------------------
72   /// Return the desired result type of the function, or eResultTypeAny if
73   /// indifferent.
74   //------------------------------------------------------------------
75   virtual ResultType DesiredResultType() { return eResultTypeAny; }
76
77   //------------------------------------------------------------------
78   /// Flags
79   //------------------------------------------------------------------
80
81   //------------------------------------------------------------------
82   /// Return true if validation code should be inserted into the expression.
83   //------------------------------------------------------------------
84   virtual bool NeedsValidation() = 0;
85
86   //------------------------------------------------------------------
87   /// Return true if external variables in the expression should be resolved.
88   //------------------------------------------------------------------
89   virtual bool NeedsVariableResolution() = 0;
90
91   virtual EvaluateExpressionOptions *GetOptions() { return nullptr; };
92
93   //------------------------------------------------------------------
94   /// Return the address of the function's JIT-compiled code, or
95   /// LLDB_INVALID_ADDRESS if the function is not JIT compiled
96   //------------------------------------------------------------------
97   lldb::addr_t StartAddress() { return m_jit_start_addr; }
98
99   //------------------------------------------------------------------
100   /// Called to notify the expression that it is about to be executed.
101   //------------------------------------------------------------------
102   virtual void WillStartExecuting() {}
103
104   //------------------------------------------------------------------
105   /// Called to notify the expression that its execution has finished.
106   //------------------------------------------------------------------
107   virtual void DidFinishExecuting() {}
108
109   virtual ExpressionTypeSystemHelper *GetTypeSystemHelper() { return nullptr; }
110
111 protected:
112   lldb::TargetWP m_target_wp; /// Expression's always have to have a target...
113   lldb::ProcessWP m_jit_process_wp; /// An expression might have a process, but
114                                     /// it doesn't need to (e.g. calculator
115                                     /// mode.)
116   lldb::addr_t m_jit_start_addr; ///< The address of the JITted function within
117                                  ///the JIT allocation.  LLDB_INVALID_ADDRESS if
118                                  ///invalid.
119   lldb::addr_t m_jit_end_addr;   ///< The address of the JITted function within
120                                  ///the JIT allocation.  LLDB_INVALID_ADDRESS if
121                                  ///invalid.
122 };
123
124 } // namespace lldb_private
125
126 #endif // liblldb_Expression_h_