Commit Graph

3245 Commits

Author SHA1 Message Date
Dave Abrahams
807410b99e [stdlib] Make String("...") non-failable in Swift 4 2017-05-24 16:11:34 -07:00
Philippe Hausler
c40ba96328 [Foundation] Correct data subscript indexing to be offset from the base index (#9816) 2017-05-24 09:43:56 -07:00
Max Moiseev
5590872b35 [stdlib] Moving the Array.filter to _ArrayProtocol
Resolves ambiguity in the following expression

  _ = Array(0..<10).lazy.flatMap { .some($0) }.filter { _ in false }

Fixes: <rdar://problem/32316948>
2017-05-23 17:32:23 -07:00
swift-ci
1c390bc578 Merge pull request #9846 from apple/remove-redundant-slicing 2017-05-23 00:52:56 -07:00
Ted Kremenek
dbe77601f3 Merge pull request #9791 from itaiferber/swift-archival-serialization-updates
Enhancements to Codable API
2017-05-22 23:53:49 -07:00
Dave Abrahams
0016379d82 Merge branch 'master' into remove-redundant-slicing 2017-05-22 20:48:23 -07:00
Pavel Yaskevich
794b8d08fa Merge pull request #9812 from xedin/rdar31977679
[QoI] Improve diagnostics for subscript with invalid index arguments
2017-05-22 18:15:03 -07:00
Dave Abrahams
b677e1d6e4 [stdlib] Remove now-redundant slicing operations 2017-05-22 16:34:05 -07:00
Itai Ferber
26d0d5defe Synthesize *IfPresent calls for Optional values
Optional properties now get synthesized encodeIfPresent(...) and
decodeIfPresent(...) calls (to avoid encoding needless information, and
to be more accepting on input).
2017-05-22 12:17:21 -07:00
Roman Levenstein
057982c367 Fix the test by removing a system-dependent check
The removed check was dependent on the malloc implementation of the target operating system, because it asks for a real size of the allocated memory block. Usually, there is only a minor over-allocation due to the way how most malloc implementations work. But this is not guaranteed to hold for any malloc implementation.

rdar://problem/32315336
2017-05-22 00:33:17 -07:00
Pavel Yaskevich
89c104b709 [QoI] Improve diagnostics for subscript with invalid index arguments
In `FailureDiagnosis::visitSubscriptExpr` if there is only a single
candidate available, verify that the problem is actually related
to the contextual mismatch by type-checking whole subscript without
contextual info, if that returns a type - it's contextual, otherwise
diagnose as incorrect argument type problem.

Resolves: rdar://problem/31977679
2017-05-21 21:56:43 -07:00
Tony Parker
cf364ec58c Merge pull request #9795 from kballard/indexset_empty_iteration
Fix iterating empty IndexSets
2017-05-21 12:29:35 -07:00
Mishal Shah
bed71a1d09 Disable stdlib/ManagedBuffer.swift for Linux <rdar://problem/32315336> 2017-05-20 22:09:17 -07:00
Kevin Ballard
76fe9ea214 [SDK] Fix IndexSet.startIndex for empty sets that used to have values
We can't rely on `_range(at:)` producing valid results for sets that
have no ranges.

Fixes SR-4947.
2017-05-19 15:18:04 -07:00
swift-ci
32b4e56ca5 Merge pull request #7183 from apple/rdar-25398370 2017-05-18 18:29:02 -07:00
Dave Abrahams
fd30b72ee1 [stdlib] Fix a race
Lock-free programming is almost always a bug.
Fixes <rdar://25398370> Data Race in StringBuffer.append (found by TSan)
2017-05-18 16:29:59 -07:00
Max Moiseev
32027c888b [stdlib] More tests for RangeReplaceable.filter and Arrays 2017-05-18 16:17:48 -07:00
Max Moiseev
fd2ac31c6e [stdlib] Adding RangeReplaceable.filter returning Self
This overload allows `String.filter` to return a `String`, and not
`[Character]`.

In the other hand, introduction of this overload makes `[123].filter`
somewhat ambiguous in a sence, that the compiler will now prefer an
implementatin from a more concrete protocol, which is less efficient for
arrays, therefore extra work is needed to make sure Array types fallback
to the `Sequence.filter`.

Implements: <rdar://problem/32209927>
2017-05-18 12:24:13 -07:00
Itai Ferber
012ea9373b Add Codable conformance to common Foundation types
Add conformances + unit tests for

* CGFloat
* AffineTransform
* Calendar
* CharacterSet
* DateComponents
* DateInterval
* Decimal
* IndexPath
* IndexSet
* Locale
* Measurement
* NSRange
* PersonNameComponents
* TimeZone
* URL
* UUID

along with some unit tests for each.
2017-05-18 07:56:03 -07:00
Michael Ilseman
948ba4d4e3 Merge pull request #9684 from milseman/tls_ftw
[stdlib] Unicode 9 and Thread Local Storage (again)
2017-05-17 18:32:25 -07:00
Maxim Moiseev
130231456b Merge pull request #9714 from moiseev/int-perf
[stdlib] Speeding up typechecking for complex expressions with integers
2017-05-17 17:33:47 -07:00
Max Moiseev
78768d88cf Adding test for complex expressions with ints 2017-05-17 15:56:17 -07:00
Maxim Moiseev
8876655f6b [stdlib] Reverting the String.init?(_: String) behavior (#9659) 2017-05-17 13:56:15 -07:00
Michael Ilseman
75c476b984 Revert "Add Codable conformance to common Foundation types"
This reverts commit dee889f4d0.
2017-05-17 11:56:31 -07:00
Michael Ilseman
a3a6a8a0a1 [stdlib] Disable Unicode 9 test on Linux, depends on ICU version 2017-05-16 20:30:03 -07:00
Michael Ilseman
698b120c70 [stdlib] Add Unicode 9 grapheme break tests for flags, emoji, etc. 2017-05-16 20:30:02 -07:00
Michael Ilseman
973b5aed54 [stdlib] Introduce Thread Local Storage
Introduces a _ThreadLocalStorage struct to hold thread-local, but
global resources. Set it up to host a UBreakIterator and a cache key
for resetting text.

UBreakIterators are extremely expensive to create on the fly, so we
store one for each thread. UBreakIterators are also expensive to bind
to new text, so we cache the text it's currently bound to in order to
help avoid it.

The struct can be expanded with more functionality in the future, but
the standard library should only ever use a single key, and thus
everything should go on this struct. The _ThreadLocalStorage struct is
not meant to be copyable, creatable (by anyone else except the
once-per-thread initialize routine), and should accessed through the
pointers it provides.

Future immediate directions could include cashing multiple
UBreakIterators (e.g. avoid a text reset for mutual character
iteration patterns, etc).

Test added in test/stdlib/ThreadLocalStorage.swift.
2017-05-16 20:29:21 -07:00
Itai Ferber
d1d8129fb7 Disable failing DateInterval unit test 2017-05-16 19:44:34 -07:00
swift-ci
d0549ac42c Merge pull request #9632 from itaiferber/foundation-codable-conformances 2017-05-16 17:33:20 -07:00
Itai Ferber
dee889f4d0 Add Codable conformance to common Foundation types
Add conformances + unit tests for
* CGFloat
* AffineTransform
* Calendar
* CharacterSet
* DateComponents
* DateInterval
* Decimal
* IndexPath
* IndexSet
* Locale
* Measurement
* NSRange
* PersonNameComponents
* TimeZone
* URL
* UUID

along with some unit tests for each.
2017-05-16 16:57:46 -07:00
Dave Abrahams
ef5d37c4fa [stdlib] Character.unicodeScalars 2017-05-16 14:29:55 -07:00
Joe Groff
faa6bc72f0 Sema: Reject unimplemented key path components during resolveKeyPathExpr.
This is a bit more robust and user-friendly than hoping more brittle recovery in SILGen or IRGen for unsupported components kicks in. rdar://problem/32200714
2017-05-15 16:10:59 -07:00
Joe Groff
69a7ef6e2d Revert "SILGen: Tweak key path computed property lowering to produce a consistent runtime-callable ABI."
This reverts commit 4522cd09aa. This was a failed approach I shouldn't have committed. Fixes rdar://problem/32201589.
2017-05-15 16:10:55 -07:00
Max Moiseev
0a466e3ca0 Revert "[stdlib] Implementing copy constructors for integer types"
This reverts commit 3f0d1e61aa.

The copy constructors don't really solve any problems, but produce extra
work for the overload resolution.
2017-05-13 12:27:43 -07:00
Max Moiseev
12f8b390c1 [stdlib] Mark String.init?(_: String) obsoleted in Swift 4
It is still possible to get the same behavior by providing an explicit
type context, or in a generic code, but otherwise, `String("")!` will
not compile.
2017-05-13 11:45:26 -07:00
Dave Abrahams
4dee6ead5c [stdlib] Provisional c[...] syntax while we await language features 2017-05-12 22:14:17 -07:00
Max Moiseev
4dcc15b210 [stdlib] Adding a test case to catch missing failable initializer 2017-05-12 20:47:34 -07:00
Max Moiseev
3f0d1e61aa [stdlib] Implementing copy constructors for integer types 2017-05-12 17:37:04 -07:00
Dave Abrahams
2cb11675cf Merge pull request #9531 from apple/core-team-resolution-2017-05-10.1
Implementing resolutions of core team meeting 2017-05-10
2017-05-12 13:15:08 -07:00
swift-ci
2441b778f5 Merge pull request #9530 from itaiferber/foundation-codingpath-fixes 2017-05-12 10:25:31 -07:00
Matt Rajca
c6ac96ba78 Foundation Overlay: AffineTransform.rotate(byRadians:) is wrong (#9481)
Currently, AffineTransform.rotate(byRadians:) simply assigns the sines and cosines to
the transformation matrix, throwing away information about the current scale, rotation, etc.

This patch performs a proper rotation by concatenating the rotation matrix.
2017-05-12 09:27:31 -07:00
Itai Ferber
3a9d888972 Fix JSON+plist codingPaths for nested values
codingPath more often than not actually needs to be copied, not just
referenced. This makes a big difference for nested containers and
subobjects, which were getting the wrong codingPath values when asking
for them.

This also adds unit tests for JSONEncoder and PropertyListEncoder to
confirm expected behavior.
2017-05-11 17:02:46 -07:00
Dave Abrahams
ddf7ad517f UnicodeScalar => Unicode.Scalar 2017-05-11 15:23:25 -07:00
Joe Groff
9830f394c1 SILGen/IRGen/KeyPaths: Components for ObjC properties need to be identified by selector.
A property imported from Objective-C, or marked in Swift with the `dynamic` keyword, doesn't have a vtable slot, so can't be identified that way. Use the ObjC selector as the unique identifier to ascribe equality to such components. Fixes rdar://problem/31768669. (While we're here, throw some more execution tests and a changelog note in.)
2017-05-11 14:28:19 -07:00
Maxim Moiseev
e868ca7035 [stdlib] Better BinaryInteger.signum and tests 2017-05-11 14:02:59 -07:00
Michael Ilseman
f0abff5539 Revert "Merge pull request #9265 from milseman/tls_ftw"
This reverts commit 26f7659efe, reversing
changes made to 7b927e55e8.
2017-05-11 10:39:58 -07:00
Philippe Hausler
9fa3cec738 [Foundation] IndexPath should not cause numeric overflow in addition to calculate hash values (#9476) 2017-05-11 09:00:25 -07:00
Maxim Moiseev
31f7dfe475 [stdlib] Backward compatibility fix for a flatMap on [String] (#9466)
* [stdlib] Backward compatibility fix for a flatMap on [String]

Since String started to conform to Collection, the flatMap with a
sequence returning closure is now a better match that the one that
relies on the optional promotion in this code:

[""].flatMap { $0 }

which results in the default type of this expression changing from
[String] to [Character].

Restoring the old behavior in Swift 3 mode by adding a very explicit
overload.

Fixes: <rdar://problem/32024978>

* [stdlib] Fixing another compatibility issue with [String].flatMap
2017-05-11 04:05:54 -07:00
Michael Ilseman
26f7659efe Merge pull request #9265 from milseman/tls_ftw
[stdlib] Unicode 9 and Thread Local Storage
2017-05-10 20:29:49 -07:00
Max Moiseev
109c213358 [stdlib] Prioritizing non-failing String.init_:String) 2017-05-10 15:58:00 -07:00