Commit Graph

14 Commits

Author SHA1 Message Date
Jordan Rose
361ab62454 Make all CF types Equatable and Hashable. (#4394)
Like NSObject, CFType has primitive operations CFEqual and CFHash,
so Swift should allow those types to show up in Hashable positions
(like dictionaries). The most general way to do this was to
introduce a new protocol, _CFObject, and then have the importer
automatically make all CF types conform to it.

This did require one additional change: the == implementation that
calls through to CFEqual is in a new CoreFoundation overlay, but the
conformance is in the underlying Clang module. Therefore, operator
lookup for conformances has been changed to look in the overlay for
an imported declaration (if there is one).

https://bugs.swift.org/browse/SR-2388
2016-08-19 13:21:24 -07:00
Dmitri Gribenko
f1ec334fe5 stdlib: make AnyHashable(SwiftValue) unbox the value
Previously AnyHashable would consider SwiftValue to be a subclass of
NSObject (which it is in practice) and return false when trying to
compare an AnyHashable of a SwiftValue box to an AnyHashable of the
unboxed value.
2016-08-09 01:38:53 -07:00
Dmitri Gribenko
b162f60070 runtime: make _SwiftNativeNSError use the Hashable conformance, if available
If the Swift error wrapped in a _SwiftNativeNSError box conforms to
Hashable, the box now uses the Swift's conformance to Hashable.

Part of rdar://problem/27574348.
2016-08-09 00:49:20 -07:00
Dmitri Gribenko
bfadfe37e4 stdlib: add (XFAIL'ed) tests for errors and NSErrors in AnyHashable 2016-08-09 00:49:20 -07:00
Dmitri Gribenko
3db584dc45 stdlib: AnyHashable: add a fixme 2016-08-09 00:49:20 -07:00
Dmitri Gribenko
091bd19610 stdlib: add tests for AnyHashable.base, and make test names uniform 2016-08-09 00:49:20 -07:00
Robert Widmann
e1ae0391e8 Fixup validation tests 2016-07-30 03:50:16 -07:00
Robert Widmann
7ad2620f5b Keep cleaning up 2016-07-28 18:50:22 -07:00
Dmitri Gribenko
f4944f4a30 stdlib: AnyHashable tests: add a FIXME 2016-07-28 01:49:50 -07:00
Dmitri Gribenko
f4127dc85e stdlib: AnyHashable tests: more descriptive test names 2016-07-28 01:49:49 -07:00
Dmitri Gribenko
5921846ae7 stdlib: AnyHashable: tests for Swift errors and enums 2016-07-28 01:49:49 -07:00
Dmitri Gribenko
2d2c76f6ec stdlib: AnyHashable tests: finish tests for CF types 2016-07-28 01:35:58 -07:00
Dmitri Gribenko
438712ca03 stdlib: AnyHashable tests: remove variables used once 2016-07-28 01:35:58 -07:00
Dmitri Gribenko
53c424409d stdlib: add AnyHashable
Implements SE-0131 "Add AnyHashable to the standard library".
2016-07-26 03:10:52 -07:00