Commit Graph

4650 Commits

Author SHA1 Message Date
Doug Gregor
707e288978 Delete some unnecessary default cases we now warn about.
Swift SVN r26687
2015-03-29 05:42:28 +00:00
Joe Groff
c5dbf067ee Foundation overlay: Conform NSError and CFError to ErrorType.
Swift SVN r26684
2015-03-28 21:24:58 +00:00
Dave Abrahams
1f1cf13dc6 [stdlib] Mirror review update
Alex Migicovsky pointed out that initialization with a DictionaryLiteral
should really allow heterogeneous element types!

Swift SVN r26621
2015-03-27 02:35:51 +00:00
Joe Groff
89e0fbf7ff Runtime: Support casting into and out of ErrorType boxes.
Swift SVN r26619
2015-03-27 02:09:49 +00:00
Joe Groff
7514921a86 Runtime: Remove obsolete _stdlib_conformsToProtocol function.
'x is P' works now, and this function isn't used anywhere except by a test that exercises it. Removing this also lets us remove a swath of otherwise unused helper static functions in the runtime.

Swift SVN r26618
2015-03-27 02:08:58 +00:00
Dave Abrahams
0b0976fcc5 [stdlib] ExistentialCollection: post-review changes
Swift SVN r26598
2015-03-26 19:47:39 +00:00
Erik Eckstein
663f08557a stdlib: Use a dedicated pointer spare bit to distinguish between native and ObjC object in BrigeStorage.
This simplifies the code for is-native checking. Now it can be done by a single and-mask operation.



Swift SVN r26591
2015-03-26 14:35:10 +00:00
Erik Eckstein
7eeffa04c7 stdlib: Do the needs-type-check check in the Array subscript immediately before it is needed.
This reduces the amount of basic blocks in the function.



Swift SVN r26590
2015-03-26 14:21:52 +00:00
Erik Eckstein
5c7f0e833f stdlib: Don't do subscript checking for objc arrays.
ObjC arrays do their own checking.
This reduces the generated code for array accesses.



Swift SVN r26589
2015-03-26 14:19:52 +00:00
Joe Groff
b7f84a68d7 Runtime: Allocate Swift errors as an NSError subclass.
After some more discussion with John, we decided that subclassing is the only realistic option, at least until we eventually are able to integrate with the OS. Switch things around to allocate Swift error boxes as an ObjC subclass that contains the error value instead of trying to game it as a CFError.

Swift SVN r26562
2015-03-25 23:02:57 +00:00
Joe Groff
ff5f87f56b Runtime: Add ExistentialTypeMetadata helpers for taking values.
Add a 'mayTakeValue' function, which returns true if we're allowed to take the value from an existential container (assuming we own the existential container value). This is true for class and opaque existential containers, but not for boxed existentials, where multiple owners may share references to the boxed value. Also add a 'deinitExistentialContainer' function to do any cleanup that must happen after the value has been consumed out of an existential container. Fix up an off-by-one indirection level in the SwiftError implementations of the existing existential container methods.

Swift SVN r26561
2015-03-25 23:02:56 +00:00
Joe Groff
33ce2bc61d Spot fixes, NFC
Swift SVN r26560
2015-03-25 23:02:56 +00:00
Joe Groff
ee69e2ea0d Runtime: Return after false assertion.
Swift SVN r26559
2015-03-25 23:02:55 +00:00
Ben Langmuir
784a05faf2 [cmake] Replace a bunch of OSX checks with Darwin checks
These should all apply to any Darwin platform, and the current behaviour
was breaking cross-compilation.

Introduces a SWIFT_DARWIN_VARIANTS pattern, to be used as follows:
    if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")

Also fix one place where I checked the CMAKE_SYSTEM_NAME instead of the
host variant that I recently introduced.  I haven't attempted to find
the rest of the places we're doing this though.

Swift SVN r26554
2015-03-25 21:15:30 +00:00
Ben Langmuir
9b6ac6e089 Add swift_runtime_objc_sources on all Darwin platforms
They're not OSX-only.

Swift SVN r26540
2015-03-25 16:05:59 +00:00
Graham Batty
477b69749d Putting incorrectly removed spaces back. NFC.
Swift SVN r26538
2015-03-25 15:55:59 +00:00
Dave Abrahams
3ca8e20fda [stdlib] Mirrors: more renaming for uniformity
Swift SVN r26522
2015-03-25 04:57:17 +00:00
Dave Abrahams
34af1fbccf [stdlib] Mirrors: Implement the QuickLook stuff
Swift SVN r26521
2015-03-25 04:57:16 +00:00
Dave Abrahams
0f7c52fc00 [stdlib] reflect(x) => Mirror(reflect: x)
Swift SVN r26520
2015-03-25 04:57:15 +00:00
Dave Abrahams
21da78388e [stdlib] Mirrors: rename "Schema" to "DisplayStyle"
Swift SVN r26513
2015-03-25 02:00:34 +00:00
Dave Abrahams
2a84ade467 [stdlib] Clarify an oft-repeated doc comment
Thanks, Dmitri!

Swift SVN r26512
2015-03-25 01:54:08 +00:00
Dave Abrahams
1f76eca539 [stdlib] Mirrors: apply pre-review commentary
most of it, anyway. Thanks, Dmitri!

Swift SVN r26511
2015-03-25 01:54:05 +00:00
Jordan Rose
d6bc8971c7 If imported calls return nil for __nonnull NSString *, pretend it was "".
The string version of r26479. There's a lot of backstory and justification
there, so just read that commit message again. The one addition for String
is that global NSString constants are loaded as String as well, so that
also has to go through the bridging code even though there's no function
call involved.

Finishes rdar://problem/19734621.

Swift SVN r26510
2015-03-25 01:16:45 +00:00
Joe Groff
668928cc83 Runtime: Handle ErrorType's layout in ExistentialTypeMetadata accessors.
Teach ExistentialTypeMetadata how to project out the value pointer, type metadata, and protocol witness table from ErrorType containers. NFC yet; the dynamic casting and reflection machinery needs further work to correctly handle ErrorType boxes.

Swift SVN r26509
2015-03-25 00:56:16 +00:00
Chris Willmore
1ee6f7e67c Implement syntax changes for in-place methods.
Rename 'assignment' attribute of infix operators to 'mutating'. Add
'has_assignment' attribute, which results in an implicit declaration of
the assignment version of the same operator. Parse "func =foo"
declaration and "foo.=bar" expression. Validate some basic properties of
in-place methods.

Not yet implemented: automatic generation of wrapper for =foo() if foo()
is implemented, or vice versa; likewise for operators.

Swift SVN r26508
2015-03-25 00:22:41 +00:00
Dave Abrahams
f5fb694b49 [stdlib] build SwiftExperimental with -parse-stdlib
fixes rdar://20260634

Swift SVN r26506
2015-03-24 23:55:54 +00:00
Graham Batty
ad8454d684 Disable ExistentialCollection on linux for now.
Pending fixes to how casting works on linux.

Swift SVN r26503
2015-03-24 23:16:50 +00:00
Joe Groff
8571b4f6a9 Runtime: Check for SpecialProtocol::AnyObject instead of strcmp'ing the mangled protocol name.
Swift SVN r26500
2015-03-24 21:48:08 +00:00
David Farler
b60cf1efd4 Build iOS overlays for TVOS
SDK overlays built for iOS were guarded as iOS only. These are also
available in the tvOS SDK.

rdar://problem/20278575

Swift SVN r26499
2015-03-24 21:43:55 +00:00
Joe Groff
feb5371e27 Runtime: Use ObjC pointer value witness for ErrorType.
Swift SVN r26497
2015-03-24 19:42:08 +00:00
Dmitri Hrybenko
1258662db9 CoreAudio overlay: add APIs that were blocked by rdar://16974298
(extensions on generic types in a different module)

Swift SVN r26486
2015-03-24 07:50:51 +00:00
Jordan Rose
8247c2d357 If imported calls return nil for 'NSArray * __nonnull', pretend it was [].
...and similar for NSDictionary and NSSet.

For APIs that don't have a reason to distinguish "empty" and "absent" cases,
we encourage standardizing on "empty" and marking the result as non-optional
(or in Objective-C, __nonnull). However, there are system APIs whose
implementations currently do return nil rather than an empty collection
instance. In these cases, we recommend /changing/ the API to return the
appropriate "empty" value instead.

However, this can cause problems for backwards-deployment: while the API is
truly non-optional on system vN, a program may encounter a nil return value
if run on system vN-1. Objective-C can generally deal with this (especially
if the only thing you do is ask for the count or try to iterate over the
collection) but Swift can't. Therefore, we've decided to "play nice" and
accept nil return values for the collection types (NSArray, NSDictionary,
and NSSet) and implicitly treat them as "empty" values if they are the
result of an imported function or method.

Note that the current implementation has a hole regarding subscript getters,
since we still make an AST-level thunk for these in the Clang importer.
We can probably get rid of those these days, but I didn't want to touch
them at this point. It seems unlikely that there will be a subscript that
(a) is for a collection type, and (b) mistakenly returned nil in the past
rather than an empty collection.

There's another hole where an ObjC client calls one of these mistakenly-nil-
returning methods and then immediately hands the result off by calling a
Swift method. However, we have to draw the line somewhere.

(We're actually going to do this for strings as well; coming soon.)

rdar://problem/19734621

Swift SVN r26479
2015-03-24 03:36:45 +00:00
Dmitri Hrybenko
ab408d4dc3 Update the compiler and SDK overlay for nullability and generics in Foundation
We have an SPI between the Swift compiler and Foundation based on the
SWIFT_SDK_OVERLAY_FOUNDATION_EPOCH preprocessor macro that allows us to
request the new API.  rdar://20270080 tracks removing it.

Swift SVN r26475
2015-03-24 02:18:06 +00:00
Joe Groff
ef8cc448d0 Runtime: Instantiate existential metadata with special protocol set.
If an existential type for a special protocol (not a composition) is instantiated, carry the special protocol identifier from that protocol to the existential, allowing us to easily recognize existentials with unique runtime characteristics.

Swift SVN r26436
2015-03-23 17:06:22 +00:00
Dave Abrahams
d2b42a61ab [stdlib] ExistentialCollection: finish commenting.
Swift SVN r26435
2015-03-23 16:59:23 +00:00
Dave Abrahams
87ea087a2f [stdlib] ExistentialCollection: documentation
Swift SVN r26429
2015-03-23 07:01:14 +00:00
Dave Abrahams
93ff088535 [stdlib] AnyGenerator is a Sequence
Swift SVN r26427
2015-03-23 03:20:07 +00:00
Dave Abrahams
16ce901da1 [stdlib] Finish doc-commenting Mirror support
Swift SVN r26425
2015-03-23 02:44:25 +00:00
Dave Abrahams
f19791baca [stdlib] Mirror: commenting and naming
Swift SVN r26421
2015-03-23 00:42:36 +00:00
Dmitri Hrybenko
759b2f07e3 Add a cast that would allow us to build using old and new SDKs
Swift SVN r26398
2015-03-21 23:07:28 +00:00
Mark Lacey
3ab2e208af Devirtualize during mandatory inlining.
With this change we will devirtualize in trivial cases where mandatory
inlining has exposed opportunities due to substituting types, for
example substituting a struct type into a witness_method where we can
now easily determine exactly what method will be called.

This makes it possible to use @transparent on struct methods that are
dispatched via generic functions, resulting in the opportunity to emit
diagnostics for these methods as well as eliminate the overhead of the
indirect call.

I saw a handful of 10+% perf improvements at -Onone on our benchmarks.

In theory this should allow us to remove the overloads for ++/-- in
FixedPoint.swift.gyb without a performance penalty (and with the proper
overflow diagnostics), but unfortunately if we were to do so, we would
currently dispatch to functions that lack runtime overflow
checks (rdar://problem/20226526).

Swift SVN r26397
2015-03-21 23:05:24 +00:00
Dave Abrahams
be2d906777 [stdlib] Mirror: some commenting, one name change.
Swift SVN r26394
2015-03-21 16:46:58 +00:00
Dmitri Hrybenko
c421c51a42 StdlibUnittest: add facilities to replace NSLocale.currentLocale()
Will use this API to write tests for rdar://20171815.

Swift SVN r26391
2015-03-21 05:41:46 +00:00
Dave Abrahams
1a6d120061 [stdlib] New Mirrors: much API cleanup
Among other things, made the constructors much more explicit to avoid
potential ambiguities between labeled and unlabeled cases.

Swift SVN r26385
2015-03-21 02:35:53 +00:00
Dave Abrahams
6af025bcaa [stdlib] NewMirrors: bring back our Schema enum
Swift SVN r26365
2015-03-20 22:34:46 +00:00
Dave Abrahams
50c6e936d4 [stdlib] NewMirrors => SwiftExperimental
Swift SVN r26359
2015-03-20 18:17:55 +00:00
Dmitri Hrybenko
6278badc4f Foundation overlay: use the current locale in String(localizedStringWithFormat:)
No test since a proper test requires method swizzling and that would
take a while to write.  Tested manually.

rdar://20171815

Swift SVN r26343
2015-03-20 01:17:44 +00:00
Joe Groff
9ec27cbd62 Runtime: Stub out runtime operations for ErrorType boxes.
Swift SVN r26335
2015-03-19 23:50:06 +00:00
Dave Abrahams
dedbc72aed [stdlib] ExistentialCollection => SwiftExperimental
This sets us up to use it in the mirrors prototype.
TODO: doc comments

Swift SVN r26314
2015-03-19 20:53:25 +00:00
Nadav Rotem
fe09d76acc Remove a stale comment that is incorrent and does not match the implementation.:w
Swift SVN r26313
2015-03-19 20:14:01 +00:00