1254721Semaste//===-- ItaniumABILanguageRuntime.h ----------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_ItaniumABILanguageRuntime_h_
11254721Semaste#define liblldb_ItaniumABILanguageRuntime_h_
12254721Semaste
13254721Semaste// C Includes
14254721Semaste// C++ Includes
15254721Semaste// Other libraries and framework includes
16254721Semaste// Project includes
17254721Semaste#include "lldb/lldb-private.h"
18254721Semaste#include "lldb/Breakpoint/BreakpointResolver.h"
19254721Semaste#include "lldb/Target/LanguageRuntime.h"
20254721Semaste#include "lldb/Target/CPPLanguageRuntime.h"
21254721Semaste#include "lldb/Core/Value.h"
22254721Semaste
23254721Semastenamespace lldb_private {
24254721Semaste
25254721Semaste    class ItaniumABILanguageRuntime :
26254721Semaste    public lldb_private::CPPLanguageRuntime
27254721Semaste    {
28254721Semaste    public:
29254721Semaste        ~ItaniumABILanguageRuntime() { }
30254721Semaste
31254721Semaste        virtual bool
32254721Semaste        IsVTableName (const char *name);
33254721Semaste
34254721Semaste        virtual bool
35254721Semaste        GetDynamicTypeAndAddress (ValueObject &in_value,
36254721Semaste                                  lldb::DynamicValueType use_dynamic,
37254721Semaste                                  TypeAndOrName &class_type_or_name,
38254721Semaste                                  Address &address);
39254721Semaste
40254721Semaste        virtual bool
41254721Semaste        CouldHaveDynamicValue (ValueObject &in_value);
42254721Semaste
43254721Semaste        //------------------------------------------------------------------
44254721Semaste        // Static Functions
45254721Semaste        //------------------------------------------------------------------
46254721Semaste        static void
47254721Semaste        Initialize();
48254721Semaste
49254721Semaste        static void
50254721Semaste        Terminate();
51254721Semaste
52254721Semaste        static lldb_private::LanguageRuntime *
53254721Semaste        CreateInstance (Process *process, lldb::LanguageType language);
54254721Semaste
55254721Semaste        static lldb_private::ConstString
56254721Semaste        GetPluginNameStatic();
57254721Semaste
58254721Semaste        //------------------------------------------------------------------
59254721Semaste        // PluginInterface protocol
60254721Semaste        //------------------------------------------------------------------
61254721Semaste        virtual lldb_private::ConstString
62254721Semaste        GetPluginName();
63254721Semaste
64254721Semaste        virtual uint32_t
65254721Semaste        GetPluginVersion();
66254721Semaste
67254721Semaste        virtual void
68254721Semaste        SetExceptionBreakpoints ();
69254721Semaste
70254721Semaste        virtual void
71254721Semaste        ClearExceptionBreakpoints ();
72254721Semaste
73254721Semaste        virtual bool
74263367Semaste        ExceptionBreakpointsAreSet ();
75263367Semaste
76263367Semaste        virtual bool
77254721Semaste        ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason);
78254721Semaste
79254721Semaste        virtual lldb::BreakpointResolverSP
80254721Semaste        CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp);
81254721Semaste
82254721Semaste        virtual lldb::SearchFilterSP
83254721Semaste        CreateExceptionSearchFilter ();
84254721Semaste
85254721Semaste    protected:
86254721Semaste
87254721Semaste        lldb::BreakpointResolverSP
88254721Semaste        CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp, bool for_expressions);
89254721Semaste
90254721Semaste        lldb::BreakpointSP
91254721Semaste        CreateExceptionBreakpoint(bool catch_bp,
92254721Semaste                                  bool throw_bp,
93254721Semaste                                  bool for_expressions,
94254721Semaste                                  bool is_internal);
95254721Semaste
96254721Semaste    private:
97254721Semaste        ItaniumABILanguageRuntime(Process *process) : lldb_private::CPPLanguageRuntime(process) { } // Call CreateInstance instead.
98254721Semaste
99254721Semaste        lldb::BreakpointSP                              m_cxx_exception_bp_sp;
100254721Semaste    };
101254721Semaste
102254721Semaste} // namespace lldb_private
103254721Semaste
104254721Semaste#endif  // liblldb_ItaniumABILanguageRuntime_h_
105