summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/API/SBAddress.h4
-rw-r--r--lldb/include/lldb/API/SBFileSpec.h4
-rw-r--r--lldb/include/lldb/API/SBWatchpoint.h4
-rw-r--r--lldb/scripts/Python/modify-python-lldb.py51
-rw-r--r--lldb/scripts/interface/SBAddress.i9
-rw-r--r--lldb/scripts/interface/SBBreakpoint.i4
-rw-r--r--lldb/scripts/interface/SBFileSpec.i4
-rw-r--r--lldb/scripts/interface/SBModule.i4
-rw-r--r--lldb/scripts/interface/SBWatchpoint.i4
-rw-r--r--lldb/scripts/lldb.swig3
-rw-r--r--lldb/source/API/SBAddress.cpp9
-rw-r--r--lldb/source/API/SBFileSpec.cpp18
-rw-r--r--lldb/source/API/SBWatchpoint.cpp18
13 files changed, 91 insertions, 45 deletions
diff --git a/lldb/include/lldb/API/SBAddress.h b/lldb/include/lldb/API/SBAddress.h
index 2cebec22b47..2874a3602af 100644
--- a/lldb/include/lldb/API/SBAddress.h
+++ b/lldb/include/lldb/API/SBAddress.h
@@ -31,6 +31,10 @@ public:
explicit operator bool() const;
+ // operator== is a free function
+
+ bool operator!=(const SBAddress &rhs) const;
+
bool IsValid() const;
void Clear();
diff --git a/lldb/include/lldb/API/SBFileSpec.h b/lldb/include/lldb/API/SBFileSpec.h
index 7f819b2f75b..27149775901 100644
--- a/lldb/include/lldb/API/SBFileSpec.h
+++ b/lldb/include/lldb/API/SBFileSpec.h
@@ -30,6 +30,10 @@ public:
explicit operator bool() const;
+ bool operator==(const SBFileSpec &rhs) const;
+
+ bool operator!=(const SBFileSpec &rhs) const;
+
bool IsValid() const;
bool Exists() const;
diff --git a/lldb/include/lldb/API/SBWatchpoint.h b/lldb/include/lldb/API/SBWatchpoint.h
index f779030d0f6..05ff0ca7e44 100644
--- a/lldb/include/lldb/API/SBWatchpoint.h
+++ b/lldb/include/lldb/API/SBWatchpoint.h
@@ -27,6 +27,10 @@ public:
explicit operator bool() const;
+ bool operator==(const SBWatchpoint &rhs) const;
+
+ bool operator!=(const SBWatchpoint &rhs) const;
+
bool IsValid() const;
SBError GetError();
diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py
index 7a2c58ded4b..af51ae6a85d 100644
--- a/lldb/scripts/Python/modify-python-lldb.py
+++ b/lldb/scripts/Python/modify-python-lldb.py
@@ -87,10 +87,6 @@ compile_unit_iter = " def compile_unit_iter(self): return lldb_iter(self, '%s
# Eligible objects are those containers with unambiguous iteration support.
len_def = " def __len__(self): return self.%s()"
-# This supports the rich comparison methods of __eq__ and __ne__.
-eq_def = " def __eq__(self, other): return isinstance(other, %s) and %s"
-ne_def = " def __ne__(self, other): return not self.__eq__(other)"
-
# A convenience iterator for SBSymbol!
symbol_in_section_iter_def = '''
def symbol_in_section_iter(self, section):
@@ -135,17 +131,6 @@ d = {'SBBreakpoint': ('GetNumLocations', 'GetLocationAtIndex'),
'SBModule-symbol-in-section': symbol_in_section_iter_def
}
-#
-# This dictionary defines a mapping from classname to equality method name(s).
-#
-e = {'SBAddress': ['GetFileAddress', 'GetModule'],
- 'SBBreakpoint': ['GetID'],
- 'SBWatchpoint': ['GetID'],
- 'SBFileSpec': ['GetFilename', 'GetDirectory'],
- 'SBModule': ['GetFileSpec', 'GetUUIDString'],
- }
-
-
def list_to_frag(list):
"""Transform a list to equality program fragment.
@@ -198,41 +183,28 @@ new_content = NewContent()
with open(output_name, 'r') as f_in:
content = f_in.read()
-# The pattern for recognizing the SWIG Version string
-version_pattern = re.compile("^# Version:? (.*)$")
-
# The pattern for recognizing the beginning of an SB class definition.
class_pattern = re.compile("^class (SB.*)\(_object\):$")
# The pattern for recognizing the beginning of the __init__ method definition.
init_pattern = re.compile("^ def __init__\(self.*\):")
-# The pattern for recognizing the beginning of the IsValid method definition.
-isvalid_pattern = re.compile("^ def IsValid\(")
-
# These define the states of our finite state machine.
NORMAL = 1
DEFINING_ITERATOR = 2
-DEFINING_EQUALITY = 4
CLEANUP_DOCSTRING = 8
# Our FSM begins its life in the NORMAL state, and transitions to the
-# DEFINING_ITERATOR and/or DEFINING_EQUALITY state whenever it encounters the
-# beginning of certain class definitions, see dictionaries 'd' and 'e' above.
+# DEFINING_ITERATOR state whenever it encounters the beginning of certain class
+# definitions, see dictionary 'd' above.
#
-# Note that the two states DEFINING_ITERATOR and DEFINING_EQUALITY are
-# orthogonal in that our FSM can be in one, the other, or both states at the
-# same time. During such time, the FSM is eagerly searching for the __init__
+# In the DEFINING_ITERATOR state, the FSM is eagerly searching for the __init__
# method definition in order to insert the appropriate method(s) into the lldb
# module.
#
# The state CLEANUP_DOCSTRING can be entered from either the NORMAL or the
-# DEFINING_ITERATOR/EQUALITY states. While in this state, the FSM is fixing/
-# cleaning the Python docstrings generated by the swig docstring features.
-#
-# The FSM, in all possible states, also checks the current input for IsValid()
-# definition, and inserts a __nonzero__() method definition to implement truth
-# value testing and the built-in operation bool().
+# DEFINING_ITERATOR state. While in this state, the FSM is fixing/cleaning the
+# Python docstrings generated by the swig docstring features.
state = NORMAL
for line in content.splitlines():
@@ -254,22 +226,18 @@ for line in content.splitlines():
if state == NORMAL:
match = class_pattern.search(line)
# If we are at the beginning of the class definitions, prepare to
- # transition to the DEFINING_ITERATOR/DEFINING_EQUALITY state for the
- # right class names.
+ # transition to the DEFINING_ITERATOR state for the right class names.
if match:
cls = match.group(1)
if cls in d:
# Adding support for iteration for the matched SB class.
state |= DEFINING_ITERATOR
- if cls in e:
- # Adding support for eq and ne for the matched SB class.
- state |= DEFINING_EQUALITY
- if (state & DEFINING_ITERATOR) or (state & DEFINING_EQUALITY):
+ if state & DEFINING_ITERATOR:
match = init_pattern.search(line)
if match:
# We found the beginning of the __init__ method definition.
- # This is a good spot to insert the iter and/or eq-ne support.
+ # This is a good spot to insert the iter support.
#
# But note that SBTarget has three types of iterations.
if cls == "SBTarget":
@@ -280,9 +248,6 @@ for line in content.splitlines():
if (state & DEFINING_ITERATOR):
new_content.add_line(iter_def % d[cls])
new_content.add_line(len_def % d[cls][0])
- if (state & DEFINING_EQUALITY):
- new_content.add_line(eq_def % (cls, list_to_frag(e[cls])))
- new_content.add_line(ne_def)
# SBModule has extra SBSection, SBCompileUnit iterators and
# symbol_in_section_iter()!
diff --git a/lldb/scripts/interface/SBAddress.i b/lldb/scripts/interface/SBAddress.i
index dc22e4c3498..18991176105 100644
--- a/lldb/scripts/interface/SBAddress.i
+++ b/lldb/scripts/interface/SBAddress.i
@@ -64,6 +64,15 @@ public:
explicit operator bool() const;
+ // operator== is a free function, which swig does not handle, so we inject
+ // our own equality operator here
+ %pythoncode%{
+ def __eq__(self, other):
+ return not self.__ne__(other)
+ %}
+
+ bool operator!=(const SBAddress &rhs) const;
+
void
Clear ();
diff --git a/lldb/scripts/interface/SBBreakpoint.i b/lldb/scripts/interface/SBBreakpoint.i
index d0b6bb91b42..ee9cdc1a7bb 100644
--- a/lldb/scripts/interface/SBBreakpoint.i
+++ b/lldb/scripts/interface/SBBreakpoint.i
@@ -85,6 +85,10 @@ public:
~SBBreakpoint();
+ bool operator==(const lldb::SBBreakpoint &rhs);
+
+ bool operator!=(const lldb::SBBreakpoint &rhs);
+
break_id_t
GetID () const;
diff --git a/lldb/scripts/interface/SBFileSpec.i b/lldb/scripts/interface/SBFileSpec.i
index de3788ddd2d..1d15454b018 100644
--- a/lldb/scripts/interface/SBFileSpec.i
+++ b/lldb/scripts/interface/SBFileSpec.i
@@ -42,6 +42,10 @@ public:
~SBFileSpec ();
+ bool operator==(const SBFileSpec &rhs) const;
+
+ bool operator!=(const SBFileSpec &rhs) const;
+
bool
IsValid() const;
diff --git a/lldb/scripts/interface/SBModule.i b/lldb/scripts/interface/SBModule.i
index 206324e6198..622052e38d8 100644
--- a/lldb/scripts/interface/SBModule.i
+++ b/lldb/scripts/interface/SBModule.i
@@ -184,6 +184,10 @@ public:
const char *
GetUUIDString () const;
+ bool operator==(const lldb::SBModule &rhs) const;
+
+ bool operator!=(const lldb::SBModule &rhs) const;
+
lldb::SBSection
FindSection (const char *sect_name);
diff --git a/lldb/scripts/interface/SBWatchpoint.i b/lldb/scripts/interface/SBWatchpoint.i
index e6de8ef30d7..2dff8d130c6 100644
--- a/lldb/scripts/interface/SBWatchpoint.i
+++ b/lldb/scripts/interface/SBWatchpoint.i
@@ -32,6 +32,10 @@ public:
explicit operator bool() const;
+ bool operator==(const SBWatchpoint &rhs) const;
+
+ bool operator!=(const SBWatchpoint &rhs) const;
+
SBError
GetError();
diff --git a/lldb/scripts/lldb.swig b/lldb/scripts/lldb.swig
index 1b8889bbbc6..468da5b6b8e 100644
--- a/lldb/scripts/lldb.swig
+++ b/lldb/scripts/lldb.swig
@@ -95,8 +95,7 @@ def lldb_iter(obj, getsize, getelem):
# ==============================================================================
# The modify-python-lldb.py script is responsible for post-processing this SWIG-
# generated lldb.py module. It is responsible for adding support for: iteration
-# protocol: __iter__, rich comparison methods: __eq__ and __ne__, and built-in
-# function len(): __len__.
+# protocol: __iter__, and built-in function len(): __len__.
# ==============================================================================
%}
diff --git a/lldb/source/API/SBAddress.cpp b/lldb/source/API/SBAddress.cpp
index ba3deef4963..cdd59fa1feb 100644
--- a/lldb/source/API/SBAddress.cpp
+++ b/lldb/source/API/SBAddress.cpp
@@ -69,6 +69,13 @@ bool lldb::operator==(const SBAddress &lhs, const SBAddress &rhs) {
return false;
}
+bool SBAddress::operator!=(const SBAddress &rhs) const {
+ LLDB_RECORD_METHOD_CONST(bool, SBAddress, operator!=,(const SBAddress &),
+ &rhs);
+
+ return !(*this == rhs);
+}
+
bool SBAddress::IsValid() const {
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBAddress, IsValid);
return this->operator bool();
@@ -294,6 +301,8 @@ void RegisterMethods<SBAddress>(Registry &R) {
LLDB_REGISTER_CONSTRUCTOR(SBAddress, (lldb::addr_t, lldb::SBTarget &));
LLDB_REGISTER_METHOD(const lldb::SBAddress &,
SBAddress, operator=,(const lldb::SBAddress &));
+ LLDB_REGISTER_METHOD_CONST(bool,
+ SBAddress, operator!=,(const lldb::SBAddress &));
LLDB_REGISTER_METHOD_CONST(bool, SBAddress, IsValid, ());
LLDB_REGISTER_METHOD_CONST(bool, SBAddress, operator bool, ());
LLDB_REGISTER_METHOD(void, SBAddress, Clear, ());
diff --git a/lldb/source/API/SBFileSpec.cpp b/lldb/source/API/SBFileSpec.cpp
index 2db008025df..dd8ed1cc53e 100644
--- a/lldb/source/API/SBFileSpec.cpp
+++ b/lldb/source/API/SBFileSpec.cpp
@@ -62,6 +62,20 @@ const SBFileSpec &SBFileSpec::operator=(const SBFileSpec &rhs) {
return *this;
}
+bool SBFileSpec::operator==(const SBFileSpec &rhs) const {
+ LLDB_RECORD_METHOD_CONST(bool, SBFileSpec, operator==,(const SBFileSpec &rhs),
+ rhs);
+
+ return ref() == rhs.ref();
+}
+
+bool SBFileSpec::operator!=(const SBFileSpec &rhs) const {
+ LLDB_RECORD_METHOD_CONST(bool, SBFileSpec, operator!=,(const SBFileSpec &rhs),
+ rhs);
+
+ return !(*this == rhs);
+}
+
bool SBFileSpec::IsValid() const {
LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBFileSpec, IsValid);
return this->operator bool();
@@ -185,6 +199,10 @@ void RegisterMethods<SBFileSpec>(Registry &R) {
LLDB_REGISTER_CONSTRUCTOR(SBFileSpec, (const char *, bool));
LLDB_REGISTER_METHOD(const lldb::SBFileSpec &,
SBFileSpec, operator=,(const lldb::SBFileSpec &));
+ LLDB_REGISTER_METHOD_CONST(bool,
+ SBFileSpec, operator==,(const lldb::SBFileSpec &));
+ LLDB_REGISTER_METHOD_CONST(bool,
+ SBFileSpec, operator!=,(const lldb::SBFileSpec &));
LLDB_REGISTER_METHOD_CONST(bool, SBFileSpec, IsValid, ());
LLDB_REGISTER_METHOD_CONST(bool, SBFileSpec, operator bool, ());
LLDB_REGISTER_METHOD_CONST(bool, SBFileSpec, Exists, ());
diff --git a/lldb/source/API/SBWatchpoint.cpp b/lldb/source/API/SBWatchpoint.cpp
index ed25d65c779..de7ba95b1b9 100644
--- a/lldb/source/API/SBWatchpoint.cpp
+++ b/lldb/source/API/SBWatchpoint.cpp
@@ -70,6 +70,20 @@ SBWatchpoint::operator bool() const {
return bool(m_opaque_wp.lock());
}
+bool SBWatchpoint::operator==(const SBWatchpoint &rhs) const {
+ LLDB_RECORD_METHOD_CONST(
+ bool, SBWatchpoint, operator==,(const SBWatchpoint &), rhs);
+
+ return GetSP() == rhs.GetSP();
+}
+
+bool SBWatchpoint::operator!=(const SBWatchpoint &rhs) const {
+ LLDB_RECORD_METHOD_CONST(
+ bool, SBWatchpoint, operator!=,(const SBWatchpoint &), rhs);
+
+ return !(*this == rhs);
+}
+
SBError SBWatchpoint::GetError() {
LLDB_RECORD_METHOD_NO_ARGS(lldb::SBError, SBWatchpoint, GetError);
@@ -303,6 +317,10 @@ void RegisterMethods<SBWatchpoint>(Registry &R) {
LLDB_REGISTER_METHOD(lldb::watch_id_t, SBWatchpoint, GetID, ());
LLDB_REGISTER_METHOD_CONST(bool, SBWatchpoint, IsValid, ());
LLDB_REGISTER_METHOD_CONST(bool, SBWatchpoint, operator bool, ());
+ LLDB_REGISTER_METHOD_CONST(
+ bool, SBWatchpoint, operator==,(const lldb::SBWatchpoint &));
+ LLDB_REGISTER_METHOD_CONST(
+ bool, SBWatchpoint, operator!=,(const lldb::SBWatchpoint &));
LLDB_REGISTER_METHOD(lldb::SBError, SBWatchpoint, GetError, ());
LLDB_REGISTER_METHOD(int32_t, SBWatchpoint, GetHardwareIndex, ());
LLDB_REGISTER_METHOD(lldb::addr_t, SBWatchpoint, GetWatchAddress, ());
OpenPOWER on IntegriCloud