Commit Graph

554 Commits

Author SHA1 Message Date
Chris Willmore
36d0f187ec Sema, SILGen, ClangImporter: Add special support for Set<T>
Add the following functionality to the Swift compiler:

* covariant subtyping of Set
* upcasting, downcasting of Set
* automatic bridging between Set and NSSet, including
    * NSSet params/return values in ObjC are imported as Set<NSObject>
    * Set params/return values in Swift are visible to ObjC as NSSet

<rdar://problem/18853078> Implement Set<T> up and downcasting

Swift SVN r23751
2014-12-06 02:52:33 +00:00
Doug Gregor
5524c0a393 Honor the Clang nonnull and returns_nonnull attributes in the importer.
Non-null attributes can indicate non-optionality of pointers. While
these non-null attributes are generally less useful than the
nullability type specifiers, they are occasionally used in the
wild. Addresses rdar://problem/18428099.

Swift SVN r23733
2014-12-05 06:58:54 +00:00
Joe Groff
e6d97e8de7 Clang importer: Add a zeroing default initializer to imported structs.
If an imported C struct has no __nonnull pointer fields, then we can give a default initializer that zeroes all of its fields. This becomes a requirement when working with partially-imported types like NSDecimal. NSDecimal has bitfields Swift can't see yet, so it's impossible to DI, but the Foundation functions that work with NSDecimal all emit their result by out parameter, and without access to its fields it is impossible to initialize an NSDecimal for use with one of these functions. Implement the initializer using a builtin that gets lowered by IRGen; this is also made necessary by the fact that Swift has only a partial view of the struct, so we can't form a complete zero initializer until we have the definitive type layout from Clang.

Swift SVN r23727
2014-12-05 05:31:22 +00:00
Chris Willmore
6d428b8d52 ClangImporter: Import macros of the form '#define FOO CFSTR("bar")'.
rdar://problem/18668528

Swift SVN r23544
2014-11-22 02:33:27 +00:00
Doug Gregor
7b77294cac Improve testing of nullability type specifier importing.
Swift SVN r23457
2014-11-20 00:06:14 +00:00
Doug Gregor
9d9336db97 Importer nullability type specifiers __nonnull/__nullable/__null_unspecified as optional types.
Implements rdar://problem/19005653.

Swift SVN r23416
2014-11-18 23:23:21 +00:00
Jordan Rose
eb3689051e [ClangImporter] Ban useless macro CF_USE_OSBYTEORDER_H.
rdar://problem/18966078

Swift SVN r23395
2014-11-18 01:55:30 +00:00
John McCall
653775077d Dispatch.h -> dispatch.h
We have a module map referring to it as dispatch.h, and
this capitalization matches the system, so let's go with it.

Fixes running test/ClangModules/blocks_parse.swift on
case-sensitive file systems.  Apparently I'm the only
person building on a case-sensitive file system.

Swift SVN r23380
2014-11-17 21:02:17 +00:00
Chris Willmore
f723b05672 Don't remove 'with' from ObjC method arg name if resulting name is keyword.
Also, remove calls to isSwiftReservedName in
ClangImporter::Implementation::importName(), since 'true' and 'false'
are now keywords and rdar://problem/13187570 is no longer a problem.

rdar://problem/18797808

Swift SVN r23244
2014-11-11 19:34:53 +00:00
Chris Willmore
ae5ed11eaa Don't include zero-byte fields in args to struct constructor.
rdar://problem/18510461

Swift SVN r23015
2014-10-30 03:47:45 +00:00
Jordan Rose
657070a637 [ClangImporter] Recognize OBJC_ENUM/OPTIONS along with CF_ENUM/OPTIONS.
rdar://problem/18506964

Swift SVN r22885
2014-10-23 03:28:28 +00:00
Devin Coughlin
f765fc8e29 [Sema] Add tests for version-based availability checking of ObjC imported APIs.
Swift SVN r22706
2014-10-13 18:22:00 +00:00
Anna Zaks
9e5003e668 API Notes: Mark dispatch_retain and dispatch_release as unavailable.
Swift SVN r22091
2014-09-18 18:51:52 +00:00
Anna Zaks
c61280cf35 API Notes: Mark several APIs as unavailable.
- Make NSZone functions unavailable radar://16688847
 - Distributed Objects subsystem should not be imported into Swift radar://16689104
 - NSCalendarDate is available in Swift, but deprecated radar://16689207
 - Do not import NSMethodSignature class and related methods radar://16689329
 - NSInvocationOperation should be unavailble in Swift radar://17921785

Swift SVN r22090
2014-09-18 18:51:51 +00:00
Anna Zaks
7be3363210 Reapply Swift Overlay: Make most common security return codes work with OSStatus
This reverts commit 043dbaafa20f3a1bbb1c71cd748a651ad57ba7b4.

Swift SVN r21794
2014-09-09 01:47:03 +00:00
Anna Zaks
ecf471bbff Revert "Swift Overlay: Make most common security return codes work with OSStatus"
This is causing buildbot breakage while building the Security library.

Swift SVN r21761
2014-09-06 05:30:23 +00:00
Anna Zaks
d51c1736f0 Swift Overlay: Make most common security return codes work with OSStatus
Swift SVN r21759
2014-09-06 00:46:21 +00:00
Anna Zaks
c3c8576ecc Add special handling of accessibility APIs.
This is a hack that allows us to support accessibility APIs in Swift.
It addresses radar://17509751.

A class might conform to both NSAccessibility (containing accessibility
properties) and individual accessibility protocols (containing
accessibility methods with the same names as the properties). This should
not compile (but currently happens to compile). To avoid the problem down
the road, we import setters and getters instead of the accessibility
properties from NSAccessibility.

Swift SVN r21757
2014-09-06 00:46:17 +00:00
Joe Groff
d7c98dcff4 Add an @NSApplicationMain attribute.
This behaves like @UIApplicationMain, except for AppKit. Attach it to your NSApplicationDelegate, and an artificial "main" will be generated that invokes NSApplicationMain() for you. Implements rdar://problem/16904667.

Swift SVN r21697
2014-09-04 05:52:26 +00:00
Doug Gregor
17716524c5 Handle CF <-> Objective-C toll-free-bridged conversions in the type checker.
Introduce an attribute that describes when a given CF type is
toll-free-bridged to an Objective-C class, and which class that
is. Use that information in the type checker to provide the CF <->
Objective-C toll-free-bridged conversions directly, rather than using
the user-defined conversion machinery.

Swift SVN r21376
2014-08-21 21:36:05 +00:00
Doug Gregor
28866251b0 Clang importer SDK: separate out CoreFoundation.h so we can build it up.
Swift SVN r21375
2014-08-21 21:36:02 +00:00
Doug Gregor
fe8213eec3 Cope with leading acronyms when turning factory methods into initializers.
This allows us to properly import, e.g., +[NSURL URLWithString] as the
initializer init(string:). Fixes <rdar://problem/16906469>.

Swift SVN r21366
2014-08-21 17:41:25 +00:00
Doug Gregor
d603db43f2 Make factory methods unavailable when there is already a corresponding initializer.
Depending on visitation order, we would occasionally leave the factory
method available if we had completely imported the initializer
first. Fixes <rdar://problem/17261609>.

Swift SVN r21361
2014-08-21 16:45:17 +00:00
Doug Gregor
5709a86f2f Start importing Objective-C initializers and factory methods using failable initializers.
In this mode, use nullability information on the result type of the
initializer or factory method to determine failability of the
initializer. This is behind the flag
-enable-objc-failable-initializers until we have the SILGen support in
place.



Swift SVN r21341
2014-08-21 04:50:20 +00:00
Jordan Rose
8176e99f5a [ClangImporter] Special-case some known non-CF types whose names end in "Ref".
Without this, we try to bring these in as CF types, and then ARC tries to
manage them, and the program crashes.

<rdar://problem/17211521>

Swift SVN r21081
2014-08-07 01:18:26 +00:00
Jordan Rose
3caaac5b9a [ClangImporter] QoI: Import 'const void *' as 'UnsafePointer<Void>'.
...instead of 'UnsafePointer<()>'.

Swift SVN r21033
2014-08-05 01:55:01 +00:00
Anna Zaks
c17fd1a586 API Notes: Add availability info to global variables and global functions.
Swift SVN r21029
2014-08-04 23:49:14 +00:00
Anna Zaks
782ecab50a API Notes: Teach Clang Importer about nullability of globals and functions
Swift SVN r20941
2014-08-02 01:55:18 +00:00
Jordan Rose
fe8e659667 [ClangImporter] Hack: import selected constants from Security as CFStrings.
This is a step towards making the framework easier to use in Swift; in the
actual headers, these are typed as "CFTypeRef" or "const CFTypeRef", which
is not considered Hashable (and thus cannot be put in a dictionary).
Unfortunately, CFStringRef is also not hashable, so we're not there yet,
but at least this allows a freer conversion to NSString.

Part of <rdar://problem/17162475>

Swift SVN r20931
2014-08-02 00:03:40 +00:00
Jordan Rose
2b73716dd2 [ClangImporter] When a submodule is imported, so is the top-level module.
Background: if a Clang module /only/ imports submodules from another module,
we would lose all re-exports from that other module, because we're treating
all decls as part of the top-level module. This actually shows up with UIKit
and QuartzCore due to some weirdness in how the QuartzCore module is set up
(see <rdar://problem/17888079>), resulting in 'CALayer' not being visible
with just 'import UIKit'.

Workaround (this patch): treat Clang imports just like Swift imports: if the
submodule is referenced, so is the top-level module. This isn't great, but
it's not really any more awful than the rest of our Clang modules story.

<rdar://problem/17607060>

Swift SVN r20920
2014-08-01 21:44:41 +00:00
Anna Zaks
a8cb45a269 API Notes: add UIView + a couple of corrections to UIKit audit.
The corrections are:
 - Change the UIFont's API from '?' to '!'. These APIs are almost never get checked.
 - Change the "options" array parameter to being optional.

Swift SVN r20723
2014-07-29 23:47:11 +00:00
Jordan Rose
d0433fde33 [test] Update for Clang r214119 "Change __INTx_TYPE__ to be always signed."
This change should work fine with older Clang revisions as well.

Swift SVN r20662
2014-07-29 00:38:24 +00:00
Anna Zaks
071291003b APINotes: Use the property's notes to set the accessor's types.
Fixes the crashes due to the property and its setter and getter being out of sync.

Swift SVN r20570
2014-07-25 22:49:36 +00:00
Doug Gregor
ec6016040e Clang importer: try harder to mark initializers from protocols as required.
There is an egregious hack here that special-cases -initWithCoder:. We
need to completely revisit how we handle 'required' checking.

Swift SVN r20516
2014-07-24 21:29:05 +00:00
Jordan Rose
00b6a5cb08 Import Objective-C properties marked weak/copy as weak/@NSCopying.
...and 'assign' and 'unsafe_unretained' as 'unowned(unsafe)', if the
property is a class type.

This isn't important for the compiler, but it is documentation for users
when they look at the generated interface for an Objective-C module.

Note that this actually produces a decl users can't yet write:

  unowned(unsafe) var foo: UIView!

That's <rdar://problem/17277899> unowned pointers can't be optional.

<rdar://problem/17245555>

Swift SVN r20433
2014-07-23 22:29:01 +00:00
Jordan Rose
ce1e02c6c0 [ClangImporter] Remove hack for non-property 'description' and 'hash'.
...and 'debugDescription'. All SDKs now have the updated NSObject.h.

<rdar://problem/17719783>

Swift SVN r20291
2014-07-22 02:38:58 +00:00
Doug Gregor
97f894dd4a In the importer SDK, move NCWidgetController into the NotificationCenter module.
We’re about to require that API notes show up in the right place.

Swift SVN r20119
2014-07-17 23:16:41 +00:00
Anna Zaks
eab2792cd8 Disallow [NSArray makeObjectsPerformSelector:]
Addresses radar://17559678

Swift SVN r19958
2014-07-14 22:42:37 +00:00
Jordan Rose
c99b417a59 [ClangImporter] Handle underscore-punctuated enum names (used by CoreMedia).
<rdar://problem/17594425>

Swift SVN r19732
2014-07-09 18:44:43 +00:00
Anna Zaks
c1537fdcdd Reject explicit uses of CFRetain/CFRelease/CFAutorelease
Ban use of CFRetain, CFRelease, CFAutorelease used for manual memory management as well as a bunch of other similar APIs, such as CGColorRelease.
Addresses radar://16892185

Swift SVN r19552
2014-07-04 02:29:05 +00:00
Anna Zaks
8cb6d45efb Only remap NSUInteger to Int in system frameworks
Makes NSUInteger come in as Uint from user declarations (and as Int from system modules).
Addresses radar://17473606

Swift SVN r19536
2014-07-03 21:46:47 +00:00
Joe Groff
ce9802c5a5 ClangImporter: Allow unions and structs with bitfields to be imported.
We still don't import the fields of unions or bitfields, but we want to at least be able to represent the types so that APIs using the types can be used from Swift. IRGen should be able to produce the correct layout for these types even if all of their fields don't get reflected into Swift.

Swift SVN r19529
2014-07-03 21:15:29 +00:00
Ted Kremenek
5ecbad667a Instead of defining __swift__, rely on the 'annotate' attribute to define custom unavailability in Swift (v1).
Swift SVN r19482
2014-07-02 20:59:14 +00:00
Ted Kremenek
148756e39a Predefine macro "__swift__" when importing Clang modules.
Implements <rdar://problem/17502039>.

Swift SVN r19327
2014-06-30 05:44:08 +00:00
Ted Kremenek
9c3fc9e6b4 Add iOS availability to test input.
Swift SVN r19222
2014-06-26 05:36:31 +00:00
Ted Kremenek
0ec94df58e Add test for App Extension API restrictions.
Swift SVN r19204
2014-06-26 00:50:54 +00:00
Ted Kremenek
a3b704ec42 Mark all imported APIs deprecated in iOS 7 (or earlier) or OS 10.9 (or earlier) as unavailable.
This patch takes care that synthesized initializers are created
when overriding unavailable initializers (thanks Doug).

Swift SVN r19202
2014-06-26 00:50:46 +00:00
Joe Groff
c9f24d1f2e ClangImporter: Keep importing pointers to unimportable types as COpaquePointer in -enable-pointer-conversions mode.
Don't crash.

Swift SVN r19182
2014-06-25 21:35:21 +00:00
Jordan Rose
ce4dcb7a5f [ClangImporter] Import C function types as CFunctionPointer<T>.
...where T is the equivalent Swift function type. This gives us proper type
safety (ish) for C function pointers while still not treating them the same
as Swift closures.

If the function type is not one we can represent in Swift, we fall back to
COpaquePointer. CFunctionPointer<T> and COpaquePointer can be explicitly
constructed from one another, but do not freely convert.

<rdar://problem/17215978>

Swift SVN r19154
2014-06-25 00:33:06 +00:00
Anna Zaks
a7fefdb561 Known ObjC types sidecar: add ability to annotate properties.
Add a simple option that allows to pass along information about properties.

Swift SVN r19110
2014-06-23 23:53:37 +00:00