Commit Graph

166 Commits

Author SHA1 Message Date
Max Moiseev
7fe6916bf6 Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-03-07 12:10:47 -08:00
Doug Gregor
e16d6898ef [PrintAsObjC] Sentence-case the enum case name when appending it to the enum name.
Otherwise, we cram a conventionally UpperCamelCase thing with a
newly-conventinally-lowerCamelCased thing together and destroy the
word boundaries. Fixes rdar://problem/24947695.
2016-03-04 15:42:22 -08:00
Max Moiseev
cf4bafe9e3 Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-03-03 13:22:03 -08:00
Kevin Ballard
00ccc9ddc3 [PrintAsObjC] Print argument names for function/block types
Including the argument names helps code completion in Xcode.

Fixes SR-365.

Also fixes an issue where a property of a block/function type whose name
is a clang keyword would produce an invalid declaration, e.g.

    var `struct`: (Int -> Int)?

was printing as

    @property (nonatomic, copy, getter=struct, setter=setStruct:) NSInteger (^ _Nullable struct)(NSInteger)_;
2016-03-02 21:02:32 -08:00
Max Moiseev
bb3eaaf308 Merging in latest master 2016-02-24 15:10:25 -08:00
Doug Gregor
6fe6266c99 [ObjC Interop] Map Swift @objc properties named isFoo to ObjC Cocoa conventions
The Objective-C Cocoa convention eschew "is" on property names, but
use it on the getter, while the Swift API guidelines state that
Boolean properties should read as assertions (e.g., "isEmpty" rather
than "empty"). Map Swift properties named "isFoo" to Objective-C by
removing the "is" from the resulting Objective-C property name (so it
will be named "foo") and from the setter (which will have the
Objective-C selector "setFoo:") while retaining the "is" for the
getter selector ("isFoo").

Fixes rdar://problem/17090661.
2016-02-23 20:49:20 -08:00
Max Moiseev
3a3984877a Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-02-15 15:43:34 -08:00
Kevin Ballard
4da629f1be [PrintAsObjC] Use @objc name for enums in enum references
Also make sure the `FooDomain` constant for `ErrorType` enums uses the
correct name.

Fixes SR-693: Custom named @objc enum still exposes original Swift name
in Objective-C
2016-02-09 13:10:47 -08:00
Max Moiseev
61c837209b Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-02-04 16:13:39 -08:00
practicalswift
6d0eee9b8c Remove unused variables. 2016-01-21 10:33:17 +01:00
Doug Gregor
7d70b704e4 Merge commit '5e11e3f7287427d386636a169c4065c0373931a8' into swift-3-api-guidelines 2016-01-19 23:18:20 -08:00
Doug Gregor
c4a6902589 Abstract the set of known Foundation entities into a .def-driven enum. NFC
Specifically, we don't want to hard-code the Swift names of these
Objective-C entities, because the importer renaming will affect them.
2016-01-17 23:40:14 -08:00
Max Moiseev
08e1e4a043 Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-01-11 16:51:11 -08:00
Jordan Rose
6ef18cd0e1 Merge pull request #797 from kballard/enum-constant-objc
Implement support for @objc(name) on enum cases. Changelog update coming next.
2016-01-06 14:57:32 -08:00
Kevin Ballard
f473851148 [PrintObjC] Support @objc(name) on enum cases 2016-01-06 14:46:06 -08:00
Max Moiseev
f51e708a8f Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-01-04 12:25:25 -08:00
practicalswift
1339b5403b Consistent use of header comment format.
Correct format:
//===--- Name of file - Description ----------------------------*- Lang -*-===//
2016-01-04 13:26:31 +01:00
Chris Lattner
6afe77d597 Eliminate the Parameter type completely - now ParameterList is just
an overblown array of ParamDecl*'s that also keeps track of parenlocs
and has helper methods.
2016-01-03 14:45:38 -08:00
Chris Lattner
a30ae2bf55 Merge pull request #836 from zachpanz88/new-year
Update copyright date
2015-12-31 19:36:14 -08:00
Chris Lattner
7daaa22d93 Completely reimplement/redesign the AST representation of parameters.
Parameters (to methods, initializers, accessors, subscripts, etc) have always been represented
as Pattern's (of a particular sort), stemming from an early design direction that was abandoned.
Being built on top of patterns leads to patterns being overly complicated (e.g. tuple patterns
have to have varargs and default parameters) and make working on parameter lists complicated
and error prone.  This might have been ok in 2015, but there is no way we can live like this in
2016.

Instead of using Patterns, carve out a new ParameterList and Parameter type to represent all the
parameter specific stuff.  This simplifies many things and allows a lot of simplifications.
Unfortunately, I wasn't able to do this very incrementally, so this is a huge patch.  The good
news is that it erases a ton of code, and the technical debt that went with it.  Ignoring test
suite changes, we have:
   77 files changed, 2359 insertions(+), 3221 deletions(-)

This patch also makes a bunch of wierd things dead, but I'll sweep those out in follow-on
patches.

Fixes <rdar://problem/22846558> No code completions in Foo( when Foo has error type
Fixes <rdar://problem/24026538> Slight regression in generated header, which I filed to go with 3a23d75.

Fixes an overloading bug involving default arguments and curried functions (see the diff to
Constraints/diagnostics.swift, which we now correctly accept).

Fixes cases where problems with parameters would get emitted multiple times, e.g. in the
test/Parse/subscripting.swift testcase.

The source range for ParamDecl now includes its type, which permutes some of the IDE / SourceModel tests
(for the better, I think).

Eliminates the bogus "type annotation missing in pattern" error message when a type isn't
specified for a parameter (see test/decl/func/functions.swift).

This now consistently parenthesizes argument lists in function types, which leads to many diffs in the
SILGen tests among others.

This does break the "sibling indentation" test in SourceKit/CodeFormat/indent-sibling.swift, and
I haven't been able to figure it out.  Given that this is experimental functionality anyway,
I'm just XFAILing the test for now.  i'll look at it separately from this mongo diff.
2015-12-31 19:24:46 -08:00
Zach Panzarino
e3a4147ac9 Update copyright date 2015-12-31 23:28:40 +00:00
Kevin Ballard
2de24e167f [PrintObjC] Add SWIFT_ENUM_NAMED for enums with custom ObjC names 2015-12-23 15:52:16 -08:00
Dmitri Gribenko
feacbc4433 Rename ErrorType to ErrorProtocol 2015-12-09 17:12:19 -08:00
Maxim Moiseev
7372e9e045 COpaquePointer => OpaquePointer 2015-12-07 16:52:45 -08:00
Kevin Ballard
66369468aa Use new-style _Nullable keywords in obj-c header
Use the keywords `_Nullable`, `_Nonnull`, and `_Null_unspecified`
instead of the older compatibility forms `__nullable`, `__nonnull`, and
`__null_unspecified`.

Part of rdar://problem/23614638
2015-12-05 19:54:27 -08:00
Jordan Rose
fc2cdeeb31 [PrintAsObjC] Only define Swift-provided typedefs once.
Avoids a C99 warning.

Rest of rdar://problem/22702104

Swift SVN r32232
2015-09-25 17:53:48 +00:00
Jordan Rose
239b84395a [PrintAsObjC] Use 'struct _NSZone' rather than redeclaring the typedef.
Part of rdar://problem/22702104

Swift SVN r32231
2015-09-25 17:53:46 +00:00
Jordan Rose
cddd26477e [PrintAsObjC] Enum domain string constants are __nonnull.
(And they are '__nonnull' rather than '_Nonnull' for two reasons:
it's a very cheap concession to preserve compatibility with Xcode 6.3,
and the existing code works this way.)

rdar://problem/22805286

Swift SVN r32228
2015-09-25 17:53:37 +00:00
Jordan Rose
2b229aa9c7 [PrintAsObjC] Fix infinite loop on typedefs of CFTypeRef.
Swift SVN r31427
2015-08-24 17:48:29 +00:00
Jordan Rose
f2ad7be511 [PrintAsObjC] Add PrettyStackTraces. NFC.
Swift SVN r31314
2015-08-18 22:05:28 +00:00
Jordan Rose
fa2211d834 [PrintAsObjC] Print 'strong' on properties with class type.
...so that our headers can be imported into MRR code.

rdar://problem/17214904

Swift SVN r31230
2015-08-13 22:14:57 +00:00
Jordan Rose
bca4b12f60 [PrintAsObjC] Handle blocks whose parameters come from a typealias.
...instead of crashing.

rdar://problem/21974146

Swift SVN r30753
2015-07-29 04:06:17 +00:00
Jordan Rose
177588d1a8 Only allow collections to contain @objc types in @objc methods and properties.
We allow any array of bridgeable types to be converted to NSArray (and
similar for Dictionary and Set), but to be part of an API is a little
stricter. Previously, '[MySwiftObject]' as a parameter would get exposed
to Objective-C as 'NSArray *', but that's not type-safe at all---and in
corner cases, crashd in the ObjC printer. Now we just don't allow that.

On the plus side, '[Int]' is now exposed as 'NSArray<NSNumber *> *',
which is a fair amount better than just 'NSArray *'.

rdar://problem/19787270

Swift SVN r30719
2015-07-28 18:46:07 +00:00
Jordan Rose
fdc927e8d7 [PrintAsObjC] Add missing SWIFT_COMPILE_NAME for classes renamed with @objc.
This could prevent mixed-source frameworks from being properly imported
into Swift.

rdar://problem/21930630

Swift SVN r30541
2015-07-23 17:28:20 +00:00
Jordan Rose
df93e366f1 [PrintAsObjC] Make sure to use a class's custom name when extended or subclassed.
Otherwise, we end up with an invalid generated header.

rdar://problem/21929752

Swift SVN r30474
2015-07-21 23:56:35 +00:00
Jordan Rose
5f4ad8722f Unmanaged<T> is ObjC-compatible if T is an Objective-C-compatible object type.
rdar://problem/16832080

Swift SVN r30079
2015-07-10 19:05:21 +00:00
Jordan Rose
0b5428fcd3 Import DarwinBoolean as Bool in fully-bridgeable contexts.
These are contexts where we have enough information to bridge /back/
properly; that is, where we can distinguish CBool, ObjCBool, and
DarwinBoolean. In cases where we can't, we keep the three separate;
only CBool is really the same type as Bool.

This also affects current import behavior for ObjCBool, which was previously
incorrectly conflated with CBool in certain cases.

More rdar://problem/19013551

Swift SVN r30051
2015-07-10 01:11:30 +00:00
Jordan Rose
e1ffbbbcf5 Import MacTypes.Boolean as a dedicated DarwinBoolean type.
Like ObjCBool is a legitimate boolean type rather than a typealias for Int8,
DarwinBoolean is better than a typealias for UInt8. It's a BooleanType
(meaning you can use it directly in if/while/?:) and BooleanLiteralConvertible
(meaning you can use 'true' and 'false').

The next commit goes even further, so that you only have to deal with
DarwinBoolean when ABI is important. At all other times it should be
bridged with Bool, just like ObjCBool.

rdar://problem/19013551

Swift SVN r30050
2015-07-10 01:11:25 +00:00
Slava Pestov
f21b67ffe9 Rip out usages of CFunctionPointer in the frontend, NFC
Swift SVN r29991
2015-07-08 20:24:06 +00:00
John McCall
d190ee0767 Honor the swift_error attribute during import.
Add a new convention to describe what happens with
nonzero_result on a type that isn't imported as Bool.
This isn't really a safe convention to implement, but
calls are fine.

Implements <rdar://21715350>.

Swift SVN r29953
2015-07-08 00:57:27 +00:00
Jordan Rose
b4d6a47899 [PrintAsObjC] Use @objc for compile-time names of classes and protocols.
This is half of rdar://problem/17469485. The other half will be
recognizing in the importer that the Objective-C declaration references
a Swift type; see next commit.

Swift SVN r29743
2015-06-26 18:28:48 +00:00
Jordan Rose
f05670bdaa [PrintAsObjC] Avoid using C/C++ keywords in methods and properties.
This very simply avoids printing properties and method arguments whose
names match /any/ keyword recognized by Clang, in any language mode.
That's a bit overkill, but it's easiest to implement. If someone /does/
name their property or argument using a keyword, a single underscore is
appended. That's suboptimal for properties, but better than the "header
fails to parse" alternative.

If you've named your /type/ something that conflicts with C, you deserve
what you get. Mark the thing @nonobjc. (We could actually check this in
Sema, but it's rare enough that I'm going to punt on doing that for now.)

rdar://problem/21060399

Swift SVN r29473
2015-06-18 03:53:07 +00:00
Dmitri Hrybenko
15b0520f4a Remove support for Clang without Objective-C generics
Swift SVN r29074
2015-05-27 20:47:11 +00:00
Jordan Rose
1b8741dc7d Remove references to C{Const,Mutable}VoidPointer and CString.
These types have long since been removed. No functionality change.

Swift SVN r28945
2015-05-23 01:56:15 +00:00
Doug Gregor
b8ad66eb18 PrintAsObjC: Print property getter/setter names when they differ from the defaults.
We were printing getter/setter names when the property came from
Objective-C initially, which is incorrect: we should print them when
the names differ from what Objective-C would compute by default. This
finishes rdar://problem/19408726, which was mostly in place a while
ago.

Swift SVN r28783
2015-05-19 20:38:48 +00:00
Doug Gregor
a6fa12aa79 PrintAsObjC: use getObjCPropertyName() consistently for property name
This is NFC, because we were already properly using
getObjCPropertyName() for the general case. Only the
imported-from-an-NSUInteger property case remained, which will
currently have getName() == getObjCPropertyName(). But, be consistent
to be more future-proof, if renaming of @properties should come.

Swift SVN r28782
2015-05-19 20:38:45 +00:00
Doug Gregor
dd08b8c5ed PrintAsObjC: Stop avoiding using parameterized Foundation collections.
The macro hackery here was staging while we waited for Foundation's
parameterized collections to percolate through the system, then I
forgot about it. Eliminate the hackery so the Objective-C view of
Swift APIs actually produces specialized types such as
NSArray<NSString *> *.

Be a bit more careful when printing parameterized Foundation
collections, to ensure that we only print the type arguments if
they're guaranteed to be printed as object types.

Fixes rdar://problem/20984336.

Swift SVN r28677
2015-05-17 04:35:20 +00:00
Doug Gregor
1bd917e83c Revert "PrintAsObjC: Stop avoiding using parameterized Foundation collections."
This reverts r28650; I've run out of time to fix it tonight.

Swift SVN r28663
2015-05-16 05:54:33 +00:00
Jordan Rose
5eaea5d278 [PrintAsObjC] Expose the domain for @objc enums conforming to ErrorType.
We just use a static string constant for now, which isn't at all resilient.
But it works! Credit to JoeG for coming up with this solution.

Part of rdar://problem/20577517

Swift SVN r28662
2015-05-16 05:35:21 +00:00
Doug Gregor
149ccd1cbe PrintAsObjC: Stop avoiding using parameterized Foundation collections.
The macro hackery here was staging while we waited for Foundation's
parameterized collections to percolate through the system, then I
forgot about it. Eliminate the hackery so the Objective-C view of
Swift APIs actually produces specialized types such as
NSArray<NSString *> *.

Fixes rdar://problem/20984336.

Swift SVN r28650
2015-05-15 23:46:49 +00:00