Commit Graph

4650 Commits

Author SHA1 Message Date
Dmitri Hrybenko
42b9d14632 Foundation overlay: remove empty file
Swift SVN r27111
2015-04-08 00:28:44 +00:00
Roman Levenstein
3effd6fcf7 Introduce two new compiler-known library functions for performing bridging casts when conformances are known statically.
We define two new library functions _knownForceBridgeFromObjectiveC/_knownConditionallyBridgeFromObjectiveC, similar to _forceBridgeFromObjectiveC/_conditionallyBridgeFromObjectiveC. The main difference is that they require their arguments to conform to _BridgedToObjectiveC and _BridgedToObjectiveC. _ObjectiveCType accordingly. With this change, it is now possible to invoke the _BridgedToObjectiveC._forceBridgeFromObjectiveC witness directly, without going via the inefficient swift_bridgeNonVerbatimFromObjectiveC.

So now, for a cast O -> S, if it can be statically proven that an ObjC type O is bridgeable to a Swift type S implementing the _BridgedToObjectiveC protocol (i.e. O is the class (or its subclass) defined by the S._ObjectiveCType alias), we can generate a code to invoke the newly defined library function _knownForceBridgeFromObjectiveC/_knownConditionallyBridgeFromObjectiveC instead of _forceBridgeFromObjectiveC/_conditionallyBridgeFromObjectiveC.

After inlining, this will end-up invoking  S._forceBridgeFromObjectiveC directly instead of invoking a more general, but less effective swift_bridgeNonVerbatimFromObjectiveC, which always performs conformance checks at runtime, even if conformances are known statically. As a result, no conformance checks are performed at run-time if conformances are known statically.

The client code making use of these new APIs and the tests are coming in the subsequent commits.

The naming of the two new helper library functions was discussed with Dmitri.

This is part of the bridging casts optimization effort. And it is specifically useful for e.g. rdar://19081345.

Swift SVN r27100
2015-04-07 22:53:55 +00:00
Dave Abrahams
0464c3d957 [stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]
Retire the old components now that the new ones have passed API review.

<rdar://20406937> covers the migration fallout of this change.

Swift SVN r27092
2015-04-07 20:32:31 +00:00
Dave Abrahams
858b1223a6 [stdlib] Workaround for <rdar://20409234>
Doug will revert this any second now when he checks in his fix

Swift SVN r27091
2015-04-07 20:32:30 +00:00
Dave Abrahams
ac3f047496 [stdlib] Renaming fallout from Mirror API review
toString(x)      => String(x)
toDebugString(x) => String(reflecting: x)
Printable        => CustomStringConvertible
DebugPrintable   => CustomDebugStringConvertible

Also updated comments to clarify these protocols

Swift SVN r27090
2015-04-07 20:32:26 +00:00
Michael Gottesman
2c143aee96 Revert "[stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]"
This reverts commit r27081. It broke the build.

Swift SVN r27086
2015-04-07 17:21:03 +00:00
Doug Gregor
6fe861474c Revert "[stdlib] Workaround for <rdar://20409234>"
This reverts r27080; the workaround is no longer necessary.

Swift SVN r27085
2015-04-07 16:40:18 +00:00
Dave Abrahams
367b2e40f0 [stdlib] Mirror -> public/core
The new mirror design passed our API review and blocking bugs have been
fixed/worked-around, so integrating it into the core standard library.

Swift SVN r27082
2015-04-07 15:33:49 +00:00
Dave Abrahams
a80b1a4caa [stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]
Retire the old components now that the new ones have passed API review.

<rdar://20406937> covers the migration fallout of this change.

Swift SVN r27081
2015-04-07 15:20:40 +00:00
Dave Abrahams
ed5156e3ee [stdlib] Workaround for <rdar://20409234>
Doug will revert this any second now when he checks in his fix

Swift SVN r27080
2015-04-07 15:12:12 +00:00
Dave Abrahams
4ba169ae16 [stdlib] ExistentialCollection -> public/core
It passed our API review so integrating it into the core standard
library.

Swift SVN r27079
2015-04-07 15:12:10 +00:00
Dmitri Hrybenko
ed99e14f54 SDK overlay: create an overlay for SceneKit
rdar://20384803
rdar://20384835

Swift SVN r27069
2015-04-07 06:41:55 +00:00
Dmitri Hrybenko
1b9ca12c5b stdlib: remove old declarations that were marked unavailable
rdar://20169533

Swift SVN r27020
2015-04-05 09:15:49 +00:00
Dmitri Hrybenko
ff2dd6320a stdlib: fix coding style
When colon specifies is-a relationship between types, we put spaces on
both sides of the colon.

Swift SVN r27016
2015-04-05 05:54:55 +00:00
Joe Groff
0f3c1eeb22 RaceTest: Remove workaround for rdar://problem/20418117.
I just fixed this.

Swift SVN r27006
2015-04-05 03:38:27 +00:00
Joe Groff
fe3d75eec8 Update for feedback from Dmitri.
Simplify the observation evaluation in the ErrorType race test by using evaluateObservationsAllEqual, and run the test for real. Apparently round-trip NSString and NSDictionary bridging doesn't produce a stable object, so use valueForKey as a hack to sidestep bridging so we can verify that the identities of the bridged domain and code aren't racy.

Swift SVN r27003
2015-04-05 03:07:42 +00:00
Joe Groff
41f73d43ae Runtime: Try to make lazy ErrorType-to-NSError bridging thread-safe.
Atomically initialize and load the NSError bridging fields within an ErrorType box so that we do the right thing when two threads concurrently coerce the box to NSError.

Swift SVN r26996
2015-04-05 00:17:34 +00:00
Joe Groff
66ae68bcc3 Sema: Allow ErrorType-conforming types to be explicitly coerced 'as NSError'.
Swift SVN r26993
2015-04-04 22:38:04 +00:00
Erik Eckstein
78a3572fa4 Rename NoDTC to NoTypeCheck. NFC.
Swift SVN r26973
2015-04-04 08:24:59 +00:00
Joe Groff
b2cb75ad30 Runtime: Add a 'swift_becomeNSError' entry point to coerce an ErrorType box to an NSError instance.
If the NSError part of the box hasn't been initialized yet, fill it in with the domain and code of the contained value. This will allow us to efficiently turn ErrorType values into NSErrors, either for bridging or for coercion purposes.

Swift SVN r26958
2015-04-03 22:16:52 +00:00
Joe Pamer
980bd819a2 Propagate 'throws' information into function type metadata.
Swift SVN r26956
2015-04-03 21:45:33 +00:00
Nadav Rotem
7ebd9f1adc Mark methods in protocol extension as final.
Swift SVN r26948
2015-04-03 19:29:20 +00:00
Ben Langmuir
0c120e5914 Reapply r26926 after fixing SourceKit test
r26926 was reverted in r26930 because of a SourceKit failure, that was
fixed in r26945.

Swift SVN r26946
2015-04-03 19:04:50 +00:00
Erik Eckstein
4c4b9abd99 stdlib: avoid masking out the array buffer spare bits if we know that they are zero.
Swift SVN r26938
2015-04-03 14:14:56 +00:00
Erik Eckstein
2f971c22cb re-apply r26871: stdlib: Do the Array fast-path check with a single array property call.
Changes compared to the original version:
I fixed the 2 bugs and added a test for the so far undetected missing range check bug.
To keep the SIL simple (4 basic blocks for arr[x]) I extracted the slow path for getElement into a
non-inlinable function.
On the other hand I inlined _typeCheck into the slow-path function.
This speeds up NSArray accesses because now only a single objectAtIndex is required for both
type checking and element retrieving.

Update on performance: DeltaBlue is now only 12% better (and not 25%). I suspect this is because
now Arnold's tail duplication cannot detect the ObjC call in the slow path.



Swift SVN r26935
2015-04-03 06:48:25 +00:00
Greg Parker
f9ca55df0f Revert r26926 which broke a SourceKit test.
Swift SVN r26930
2015-04-03 03:54:12 +00:00
Dave Abrahams
17de46f1c9 [stdlib] ExistentialCollection: perf de-regression
The performance regression that occurred when ++ and -- were added as
requirements to the Index protocols was due to the fact that it caused a
dubious hack of mine to be bypassed: when treated as indices, integer
types are incremented and decremented without overflow checking.  While
technically justifiable (see the r20576 commit message), this makes the
standard library extremely fragile and makes successor() and
predecessor() mathematically unsafe. We really should see what the
optimizer team can do to make that hack unnecessary.

In the meantime, instead of dispatching through ++ and --, use a
special, defaulted _[successor|predecessor]InPlace() method to give
indices their own, customizable in-place inc/dec-rement path.

Swift SVN r26926
2015-04-03 02:39:40 +00:00
Dave Abrahams
35652f2d8d [stdlib] Mirror: Nix ObjectiveCObject DisplayStyle
Enrico has agreed that it's no longer needed.

Swift SVN r26920
2015-04-03 00:22:16 +00:00
Dave Abrahams
2ccf038237 [stdlib] Mirror comment: add missing example
Swift SVN r26919
2015-04-03 00:16:41 +00:00
Dave Abrahams
44bd9c0c46 [stdlib] Mirror: Tweaks in response to API review
* Use "reflecting:" rather than "reflect:" as an argument label.  It
  reads more sensibly.

* Unify toString()/toDebugString() with other reflection APIs by converting
  them into String initalizers, and by renaming Printable/DebugPrintable to
  CustomStringConvertible and CustomDebugStringConvertible.

* Drop "make" prefix from "makeCustomMirror" and
  "makeCustomPlaygroundQuickLook".  It is not, as we had thought,
  mandated by Cocoa naming guidelines.

Swift SVN r26918
2015-04-02 23:52:11 +00:00
Michael Gottesman
0255a5b948 Revert "[stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]"
This reverts commit r26904. Fixing the build.

Swift SVN r26912
2015-04-02 22:55:30 +00:00
Michael Gottesman
d53bff777b Revert "[stdlib] ExistentialCollection -> public/core"
This reverts commit r26888. Trying to fix the build.

Swift SVN r26911
2015-04-02 22:55:29 +00:00
Dave Abrahams
0b40374d10 [stdlib] [Generator|Sequence]Of => Any[Generator|Sequence]
Retire the old components now that the new ones have passed API review.

<rdar://20406937> covers the migration fallout of this change.

Swift SVN r26904
2015-04-02 21:55:22 +00:00
Chris Willmore
690daa539a Back out changes for in-place methods/operators from Xcode 7.
This reverts commits r26508, r26545, and r26576.

Swift SVN r26900
2015-04-02 21:14:28 +00:00
Chris Lattner
79ed57f9f2 standardize naming of tuples and tuple patterns on "elements".
Previously some parts of the compiler referred to them as "fields",
and most referred to them as "elements".  Use the more generic 'elements'
nomenclature because that's what we refer to other things in the compiler
(e.g. the elements of a bracestmt).

At the same time, make the API better by providing "getElement" consistently
and using it, instead of getElements()[i].

NFC.



Swift SVN r26894
2015-04-02 20:23:49 +00:00
Dave Abrahams
910c895346 [stdlib] ExistentialCollection -> public/core
It passed our API review so integrating it into the core standard
library.

Swift SVN r26888
2015-04-02 20:17:53 +00:00
Dave Abrahams
e0a0113333 [stdlib] ExistentialCollection: rename a parameter
Any name of the form 'nextXXX' is apt to be interpreted as "the next
XXX," which isn't appropriate here.

Swift SVN r26887
2015-04-02 20:04:17 +00:00
Dave Abrahams
e93a3e30db [stdlib] ExistentialCollection: fix up comments
Swift SVN r26886
2015-04-02 20:04:16 +00:00
Dave Abrahams
44bddea674 [stdlib] Protocol-dispatch ++ and -- for indices
...and take advantage of this capability to optimize AnyXXXIndex.

Swift SVN r26876
2015-04-02 17:21:45 +00:00
Ted Kremenek
69a12dfcb8 Revert "stdlib: Do the Array fast-path check with a single array property call."
This was causing test '1_stdlib/ArrayTraps.swift.gyb' to fail.

Swift SVN r26872
2015-04-02 14:47:19 +00:00
Erik Eckstein
834645a901 stdlib: Do the Array fast-path check with a single array property call.
Now that we can check isNative and NoDTC (no deffered type check needed) with a single bit-mask operation,
it makes sense to have a single array property call for it.
I replaced the the semantics call array.props.needsElementTypeCheck with array.props.isNativeNoDTC,
which is the combination of isNative && !needsElementTypeCheck. I kept array.props.isNative, which is not used for now,
but might be useful in the future, e.g. for array operations which don't care about type checks.

The optimized SIL for a class array access arr[i] now contains the minimum of 4 basic blocks.
PerfTests show +25% for DeltaBlue and some improvemements for -Onone.



Swift SVN r26871
2015-04-02 14:10:54 +00:00
Joe Groff
72643fd774 Runtime: Implement dynamic cast bridging from NSError to bridged error enums.
This allows ErrorTypes referencing Cocoa NSErrors to be pattern-matched against our bridged enums, at least dynamically. (The compiler still doesn't understand these bridging conversions yet.)

Swift SVN r26839
2015-04-02 00:19:30 +00:00
Joe Groff
fd27530199 Foundation overlay: Groundwork for pattern-matching Swift error enums to Cocoa NSError domains.
Provide an _ObjectiveCBridgeableErrorType protocol, which requires a failable initializer that attempts to map an NSError to a value of the error type. To start things off, gyb up an _NSCocoaError enum (underscored because we need to bikeshed a naming scheme) that corresponds to the standard NSCocoaErrorDomain codes.

Swift SVN r26820
2015-04-01 19:57:33 +00:00
Greg Parker
5e8f6116e4 Fix +[SwiftObject description] and +[SwiftObject debugDescription].
rdar://20380089


Swift SVN r26810
2015-04-01 11:04:46 +00:00
Greg Parker
1d7a09d8b4 Implement +[SwiftObject instancesRespondToSelector:].
rdar://20307260


Swift SVN r26808
2015-04-01 09:48:42 +00:00
Greg Parker
3b4ba55cd9 Always return a valid zone from [SwiftObject zone].
Swift SVN r26807
2015-04-01 09:13:10 +00:00
Dmitri Hrybenko
4edc305438 stdlib: change CVarArgType._encode() method into a '_cVarArgEncoding'
property per API review proposal that passed review

For a given type, obtaining its C vararg encoding is O(1) for any
instance.

Swift SVN r26794
2015-04-01 02:55:24 +00:00
Dmitri Hrybenko
cf912bcaae stdlib: underscore the only requirement of CVarArgType
Defining conformances to CVarArgType outside of the standard library is
not supported.

Swift SVN r26793
2015-04-01 02:16:15 +00:00
Joe Groff
233f8cfc4f Runtime: Fix accidental fallthrough in swift_getErrorValue from NSError case to normal case.
Swift SVN r26713
2015-03-30 04:52:56 +00:00
Joe Groff
5f676656a0 Runtime: Fill in the hooks to be able to use an NSError as an ErrorType.
Swift SVN r26702
2015-03-29 15:44:35 +00:00