BreakpointResolverScripted.h revision 360784
1251881Speter//===-- BreakpointResolverScripted.h -----------------------------*- C++ -*-===//
2251881Speter//
3251881Speter// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4251881Speter// See https://llvm.org/LICENSE.txt for license information.
5251881Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6251881Speter//
7251881Speter//===----------------------------------------------------------------------===//
8251881Speter
9251881Speter#ifndef liblldb_BreakpointResolverScripted_h_
10251881Speter#define liblldb_BreakpointResolverScripted_h_
11251881Speter
12251881Speter#include "lldb/lldb-forward.h"
13251881Speter#include "lldb/Breakpoint/BreakpointResolver.h"
14251881Speter#include "lldb/Core/ModuleSpec.h"
15251881Speter
16251881Speter
17251881Speternamespace lldb_private {
18251881Speter
19251881Speter/// \class BreakpointResolverScripted BreakpointResolverScripted.h
20251881Speter/// "lldb/Breakpoint/BreakpointResolverScripted.h" This class sets breakpoints
21251881Speter/// on a given Address.  This breakpoint only takes once, and then it won't
22251881Speter/// attempt to reset itself.
23251881Speter
24251881Speterclass BreakpointResolverScripted : public BreakpointResolver {
25251881Speterpublic:
26251881Speter  BreakpointResolverScripted(Breakpoint *bkpt,
27251881Speter                             const llvm::StringRef class_name,
28251881Speter                             lldb::SearchDepth depth,
29251881Speter                             StructuredDataImpl *args_data);
30251881Speter
31251881Speter  ~BreakpointResolverScripted() override;
32251881Speter
33251881Speter  static BreakpointResolver *
34251881Speter  CreateFromStructuredData(Breakpoint *bkpt,
35251881Speter                           const StructuredData::Dictionary &options_dict,
36251881Speter                           Status &error);
37251881Speter
38251881Speter  StructuredData::ObjectSP SerializeToStructuredData() override;
39251881Speter
40251881Speter  Searcher::CallbackReturn SearchCallback(SearchFilter &filter,
41251881Speter                                          SymbolContext &context,
42251881Speter                                          Address *addr) override;
43251881Speter
44251881Speter  lldb::SearchDepth GetDepth() override;
45251881Speter
46251881Speter  void GetDescription(Stream *s) override;
47251881Speter
48251881Speter  void Dump(Stream *s) const override;
49322442Speter
50251881Speter  /// Methods for support type inquiry through isa, cast, and dyn_cast:
51251881Speter  static inline bool classof(const BreakpointResolverScripted *) { return true; }
52251881Speter  static inline bool classof(const BreakpointResolver *V) {
53251881Speter    return V->getResolverID() == BreakpointResolver::PythonResolver;
54362181Sdim  }
55257936Speter
56251881Speter  lldb::BreakpointResolverSP CopyForBreakpoint(Breakpoint &breakpoint) override;
57251881Speter
58251881Speterprotected:
59251881Speter  void NotifyBreakpointSet() override;
60251881Speterprivate:
61251881Speter  void CreateImplementationIfNeeded();
62251881Speter  ScriptInterpreter *GetScriptInterpreter();
63251881Speter
64251881Speter  std::string m_class_name;
65251881Speter  lldb::SearchDepth m_depth;
66251881Speter  StructuredDataImpl *m_args_ptr; // We own this, but the implementation
67251881Speter                                  // has to manage the UP (since that is
68251881Speter                                  // how it gets stored in the
69251881Speter                                  // SBStructuredData).
70251881Speter  StructuredData::GenericSP m_implementation_sp;
71251881Speter
72251881Speter  DISALLOW_COPY_AND_ASSIGN(BreakpointResolverScripted);
73251881Speter};
74251881Speter
75251881Speter} // namespace lldb_private
76251881Speter
77251881Speter#endif // liblldb_BreakpointResolverScripted_h_
78251881Speter