1642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===-- LanguageRuntime.h ---------------------------------------------------*- C++ -*-===//
2642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
3642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//                     The LLVM Compiler Infrastructure
4642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
5642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// This file is distributed under the University of Illinois Open Source
6642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// License. See LICENSE.TXT for details.
7642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
8642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===----------------------------------------------------------------------===//
9642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
10642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#ifndef liblldb_LanguageRuntime_h_
11642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#define liblldb_LanguageRuntime_h_
12642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
13642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C Includes
14642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C++ Includes
15642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Other libraries and framework includes
16642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Project includes
17b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-public.h"
18c105362e1fd33664939811569dc4a540959e7db7Jim Ingham#include "lldb/Breakpoint/BreakpointResolver.h"
193df164e694d4e03905f8725c46b68b8dcc104debJim Ingham#include "lldb/Breakpoint/BreakpointResolverName.h"
20642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Core/PluginInterface.h"
21642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/lldb-private.h"
22324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Core/ValueObject.h"
23324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham#include "lldb/Core/Value.h"
24b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham#include "lldb/Target/ExecutionContextScope.h"
25642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
26642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamnamespace lldb_private {
27642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
28642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamclass LanguageRuntime :
29642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    public PluginInterface
30642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham{
31642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghampublic:
32642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    virtual
33642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    ~LanguageRuntime();
34642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
35642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    static LanguageRuntime*
36642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    FindPlugin (Process *process, lldb::LanguageType language);
37642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
38642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    virtual lldb::LanguageType
39642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    GetLanguageType () const = 0;
40642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
41b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    virtual bool
420de37195f17fefb536157b3296a18999116b8125Jim Ingham    GetObjectDescription (Stream &str, ValueObject &object) = 0;
43b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham
44324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham    virtual bool
45324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham    GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope) = 0;
46324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham
471a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata    // this call should return true if it could set the name and/or the type
48e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    virtual bool
4910de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham    GetDynamicTypeAndAddress (ValueObject &in_value,
5010de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                              lldb::DynamicValueType use_dynamic,
5110de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                              TypeAndOrName &class_type_or_name,
5210de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                              Address &address) = 0;
53b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham
54e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    // This should be a fast test to determine whether it is likely that this value would
55e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    // have a dynamic type.
56e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    virtual bool
57e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham    CouldHaveDynamicValue (ValueObject &in_value) = 0;
58e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham
5929756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    virtual void
6029756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    SetExceptionBreakpoints ()
6129756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    {
6229756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    }
6329756d452be39535ded2cff50d9db4df46fe6400Sean Callanan
6429756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    virtual void
6529756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    ClearExceptionBreakpoints ()
6629756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    {
6729756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    }
6829756d452be39535ded2cff50d9db4df46fe6400Sean Callanan
6929756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    virtual bool
7029756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason)
7129756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    {
7229756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        return false;
7329756d452be39535ded2cff50d9db4df46fe6400Sean Callanan    }
74c105362e1fd33664939811569dc4a540959e7db7Jim Ingham
753df164e694d4e03905f8725c46b68b8dcc104debJim Ingham    static lldb::BreakpointSP
763df164e694d4e03905f8725c46b68b8dcc104debJim Ingham    CreateExceptionBreakpoint (Target &target,
773df164e694d4e03905f8725c46b68b8dcc104debJim Ingham                               lldb::LanguageType language,
783df164e694d4e03905f8725c46b68b8dcc104debJim Ingham                               bool catch_bp,
793df164e694d4e03905f8725c46b68b8dcc104debJim Ingham                               bool throw_bp,
803df164e694d4e03905f8725c46b68b8dcc104debJim Ingham                               bool is_internal = false);
814722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham
824722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham    static lldb::LanguageType
834722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham    GetLanguageTypeFromString (const char *string);
844722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham
854722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham    static const char *
864722b10307668368bf0f12fa6b8691e4f4cb5488Jim Ingham    GetNameForLanguageType (lldb::LanguageType language);
87c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan
88c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan    Process *
89c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan    GetProcess()
90c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan    {
91c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan        return m_process;
92c718b9652bb1a7aea5d133123fcc8bc87277002cSean Callanan    }
9319784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton
943df164e694d4e03905f8725c46b68b8dcc104debJim Ingham    virtual lldb::BreakpointResolverSP
953df164e694d4e03905f8725c46b68b8dcc104debJim Ingham    CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp) = 0;
963df164e694d4e03905f8725c46b68b8dcc104debJim Ingham
97d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton    virtual lldb::SearchFilterSP
98d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton    CreateExceptionSearchFilter ();
99d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton
10019784bd12a0beae5b7930d51dcd9ded53cb08470Greg Claytonprotected:
10119784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton    //------------------------------------------------------------------
10219784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton    // Classes that inherit from LanguageRuntime can see and modify these
10319784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton    //------------------------------------------------------------------
10419784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton
105642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    LanguageRuntime(Process *process);
106b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham    Process *m_process;
107642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamprivate:
108642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    DISALLOW_COPY_AND_ASSIGN (LanguageRuntime);
109642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham};
110642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
111642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham} // namespace lldb_private
112642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
113642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#endif  // liblldb_LanguageRuntime_h_
114