liblangutil: SourceLocation: Retricts == and != operator

This commit is contained in:
Christian Parpart 2018-11-30 17:34:54 +01:00
parent 18e3d6dbca
commit 757623e381
No known key found for this signature in database
GPG Key ID: 19BC8DD20312C929
2 changed files with 5 additions and 6 deletions

View File

@ -44,9 +44,7 @@ struct SourceLocation
bool operator==(SourceLocation const& _other) const bool operator==(SourceLocation const& _other) const
{ {
return start == _other.start && end == _other.end && return source.get() == _other.source.get() && start == _other.start && end == _other.end;
((!source.get() && !_other.source.get()) ||
(source.get() && _other.source.get() && source->name() == _other.source->name()));
} }
bool operator!=(SourceLocation const& _other) const { return !operator==(_other); } bool operator!=(SourceLocation const& _other) const { return !operator==(_other); }
inline bool operator<(SourceLocation const& _other) const; inline bool operator<(SourceLocation const& _other) const;
@ -84,14 +82,14 @@ bool SourceLocation::operator<(SourceLocation const& _other) const
bool SourceLocation::contains(SourceLocation const& _other) const bool SourceLocation::contains(SourceLocation const& _other) const
{ {
if (isEmpty() || _other.isEmpty() || ((!source || !_other.source || source->name() != _other.source->name()) && (source || _other.source))) if (isEmpty() || _other.isEmpty() || source.get() != _other.source.get())
return false; return false;
return start <= _other.start && _other.end <= end; return start <= _other.start && _other.end <= end;
} }
bool SourceLocation::intersects(SourceLocation const& _other) const bool SourceLocation::intersects(SourceLocation const& _other) const
{ {
if (isEmpty() || _other.isEmpty() || ((!source || !_other.source || source->name() != _other.source->name()) && (source || _other.source))) if (isEmpty() || _other.isEmpty() || source.get() != _other.source.get())
return false; return false;
return _other.start < end && start < _other.end; return _other.start < end && start < _other.end;
} }

View File

@ -135,7 +135,8 @@ void checkAssemblyLocations(AssemblyItems const& _items, vector<SourceLocation>
BOOST_CHECK_EQUAL(_items.size(), _locations.size()); BOOST_CHECK_EQUAL(_items.size(), _locations.size());
for (size_t i = 0; i < min(_items.size(), _locations.size()); ++i) for (size_t i = 0; i < min(_items.size(), _locations.size()); ++i)
{ {
if (_items[i].location() != _locations[i]) if (_items[i].location().start != _locations[i].start ||
_items[i].location().end != _locations[i].end)
{ {
BOOST_CHECK_MESSAGE(false, "Location mismatch for item " + to_string(i) + ". Found the following locations:"); BOOST_CHECK_MESSAGE(false, "Location mismatch for item " + to_string(i) + ". Found the following locations:");
printAssemblyLocations(_items); printAssemblyLocations(_items);