Commit Graph

514 Commits

Author SHA1 Message Date
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
59176785fa [ClangImporter] Typedefs of CFTypeRef should not be imported as AnyObject.
...or rather, typealiases of AnyObject. They should be typealiases of
CFTypeRef. (The problem is that everywhere else CFFooRef becomes a typealias
for CFFoo, but we don't do the same with 'CFType'.)

Fixes a PrintAsObjC problem where we'd try to mark such typealiases as
'strong' if they show up in the generated ObjC header.

rdar://problem/22827172

Swift SVN r32230
2015-09-25 17:53:45 +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
6c9a4032aa [PrintAsObjC] A nested array of Swift closures is not @objc-compatible.
rdar://problem/22293877

Swift SVN r31308
2015-08-18 21:14:40 +00:00
Jordan Rose
5430b8063a [test] There are no more non-generic Objective-Cs.
Swift SVN r31231
2015-08-13 22:15:00 +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
Doug Gregor
284d8e52cf Introduce an option to omit needless words when importing from Clang.
The -enable-omit-needless-words option attempts to omit needless words
from method names imported from Clang. Broadly speaking, a word is
needless if it merely restates the type of the corresponding parameter,
using reverse camel-case matching of the type name to the
function/parameter name. The word "With" is also considered needless
if whether follows it is needless, e.g.,

  func copyWithZone(zone: NSZone)

gets reduced to

  func copy(zone: NSZone)

because "Zone" merely restates type information and the remaining,
trailing "With" is also needless.

There are some special type naming rules for builtin Objective-C types,
e.g.,

  id -> "Object"
  SEL -> "Selector"
  Block pointer types -> "Block"

as well as some very-Cocoa-specific matching rules, e.g., the type
"IndexSet" matches the name "Indexes" or "Indices".

Expect a lot of churn with these heuristics; this is part of
rdar://problem/22232287.

Swift SVN r31178
2015-08-12 18:21:45 +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
e6a3b0c3df [PrintAsObjC] Add a test for bridging Array<NSRange>.
This is a pretty advanced bridging that nonetheless completely works.

Swift SVN r30748
2015-07-29 01:04:20 +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
Ben Langmuir
25032661f5 Add -isysroot path for PrintAsObjC/swift_name.m
Otherwise we're picking up a different SDK than the one the swift
command used.  Or worse, the host doesn't have /usr/include and the test
just fails.

Swift SVN r30575
2015-07-24 16:00:50 +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
Slava Pestov
b63d07f33f Review feedback for r30494 from Jordan Rose
Swift SVN r30501
2015-07-22 20:24:59 +00:00
Slava Pestov
871d71a555 Sema: Differentiate between 'class is @objc' and 'class has implicitly @objc members'
Generic subclasses of @objc classes are thus no longer @objc, but still
have implicitly @objc members.

Explicit @objc on generic classes or classes that inherit from @objc
classes is now forbidden with a diagnostic. Users need to know that
while they can override Objective-C methods and properties in such
a class, they cannot refer to the class by name from Objective-C code,
since it will not appear in the bridging header.

Fixes <rdar://problem/21342574>.

Swift SVN r30494
2015-07-22 06:34: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
20bfc1eaa2 [Serialization] If the output swiftmodule hasn't changed, don't touch the previous one.
Compiler output at least up to serialization should be deterministic at this point,
at least when not taking SIL into account. This /should/ mean that changing a
function body should not affect the final built swiftmodule, which means downstream
targets don't need to be rebuilt. Leaving the previous swiftmodule output in place
signals that.

A while back I put in a push to get all the non-determinism out of type checking,
importing, and serialization itself; it looks like we've finally made it. Let's keep
it that way!

rdar://problem/20539158 and others

Swift SVN r29923
2015-07-06 23:26:01 +00:00
David Farler
dd44dad017 Add 'throws' keyword to doc comments
Adding the following to a doc comment:

- throws: ...

Will create a description about what/when the function will throw.
This should be a peer to "- returns:" and "- parameter:" and not appear
inline in the description.

rdar://problem/21621679

Swift SVN r29831
2015-07-01 02:03:25 +00:00
Jordan Rose
8106a11dac Disallow @objc on non-ObjC-rooted classes.
These classes don't show up well in generated headers (rdar://problem/20855568),
can't actually be allocated from Objective-C (rdar://problem/17184317), and
make the story of "what is exposed to Objective-C" more complicated. Better
to just disallow them.

All classes are still "id-compatible" in that they can be converted to
AnyObject and passed to Objective-C, they secretly implement NSObjectProtocol
(via our SwiftObject root class), and their members can still be individually
exposed to Objective-C.

The frontend flag -disable-objc-attr-requires-foundation-module will disable
this requirement as well, which is still necessary for both the standard
library and a variety of tests I didn't feel like transforming.

Swift SVN r29760
2015-06-27 16:27:56 +00:00
Jordan Rose
67e1ba9fee [test] Merge objc-generics-sdk back into clang-importer-sdk.
Long live ObjC generics.

Swift SVN r29747
2015-06-26 22:19:25 +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
c8c5c643bd [ClangImporter] Also strip "WithError" like we do "AndReturnError".
A few APIs in our frameworks use "WithError" instead, even though it's not
the recommended pattern.

rdar://problem/21212613

Swift SVN r29577
2015-06-23 20:39:53 +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
Greg Parker
0386c7fe60 [test] Fix some watchOS test failures.
Swift SVN r29315
2015-06-05 05:47:16 +00:00
David Farler
57ea78e4c0 Don't print decorators in code completion briefs
Clang doesn't do it for C-family languages and Doxygen doesn't
understand these decorators anyway.

rdar://problem/20982156

Swift SVN r29216
2015-06-02 01:36:55 +00:00
Dmitri Hrybenko
349ba326a1 Mark two tests as requiring ObjC interop
Swift SVN r29090
2015-05-28 00:21:54 +00:00
Dmitri Hrybenko
15b0520f4a Remove support for Clang without Objective-C generics
Swift SVN r29074
2015-05-27 20:47:11 +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
def3b0deb8 Append "AndReturnError" rather than "WithError" to initial error parameters.
Swift SVN r28754
2015-05-19 05:53:32 +00:00
Dmitri Hrybenko
b4aea08bd5 Fix the test in the configuration with a separate SDK build
Swift SVN r28702
2015-05-18 08:07:34 +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
Doug Gregor
75617df37d PrintAsObjC: Stop printing SWIFT_NULLABILITY(keyword).
Everyone's Clang should support nullability qualifiers now.

Swift SVN r28649
2015-05-15 23:46:46 +00:00
Ted Kremenek
f97f7b66b0 Fix up test case.
Swift SVN r28460
2015-05-12 06:36:26 +00:00
Ted Kremenek
42cccf07b2 Make CFunctionPointer, GeneratorOf, SequenceOf unavailable.
Implements rdar://problem/20477688

Swift SVN r28459
2015-05-12 06:28:02 +00:00
Joe Groff
cef754de45 Update ClangImporter to map SIMD types to their C-like Swift counterparts.
Swift SVN r28386
2015-05-09 23:03:39 +00:00
Joe Groff
95d1cf5e6d Revert "ClangImporter etc.: Remap C vector types to nested BaseType.VectorN types."
Reverts r28087. We're going back to the C++ interface for SIMD, and the changes in this patch are needless complication for that design.

Swift SVN r28384
2015-05-09 23:03:33 +00:00
Dmitri Hrybenko
f46f16ae82 stdlib: implement new print() API
rdar://20775683

Swift SVN r28309
2015-05-08 01:37:59 +00:00
Doug Gregor
6e114e3cfe Reinstate r26814: Allow 'var' parameters in @objc methods.
'var' parameters affect the definition of the method itself, not its
signature. Fixes rdar://problem/20543054.

Swift SVN r28167
2015-05-05 16:34:09 +00:00
Slava Pestov
58f0b46335 Implement @nonobjc attribute
The following declaration kinds can be marked with this attribute:
- method
- property
- property accessor
- subscript
- constructor

Use cases include resolving circularity for bridging methods in an @objc
class, and allowing overloading methods and constructors in an @objc class
by signature by marking some of them @nonobjc.

It is an error to override an @objc method with a @nonobjc method. The
converse, where we override a @nonobjc method with a @objc method, is
explicitly supported.

It is also an error to put a @nonobjc attribute on a method which is
inferred as @objc due to being part of an @objc protocol conformance.

Fixes <rdar://problem/16763754>.

Swift SVN r28126
2015-05-04 19:26:23 +00:00
Joe Groff
d0473756ec ClangImporter etc.: Remap C vector types to nested BaseType.VectorN types.
The design we landed on for SIMD is to define the vector types as nested types of their element, e.g. Float.Vector4, Int32.Vector2, etc. Update the Clang importer and other mapping facilities to match.

Swift SVN r28087
2015-05-02 15:04:43 +00:00
Joe Groff
fbd76737a4 Clang Importer: Rename the special vector type module to "simd".
We want this to act as an overlay/replacement for the C "simd" module.

Swift SVN r28047
2015-05-01 20:11:01 +00:00
Jordan Rose
95856c05fb If the generated header doesn't change, don't touch the original file.
Mixed-source targets generally include the generated <Product>-Swift.h
header in many Objective-C (.m) source files. Any change to a Swift file
results in the header being touched, which means all the .m files get
recompiled.

This change makes Swift write the generated header to a temporary file
first, then use the previous commit's moveFileIfDifferent to put it in
its final destination.

rdar://problem/20553459

Swift SVN r28042
2015-05-01 17:40:31 +00:00
Doug Gregor
5de47e93dd Remove uses of getProtocols() from serialization.
NFC except for having to work around the brokenness of
-enable-source-import in more places.

Swift SVN r27979
2015-04-30 16:13:45 +00:00
Doug Gregor
514ef30943 (De-)serialization for foreign error conventions.
Printing a module as Objective-C turns out to be a fantastic way to
verify the (de-)serialization of foreign error conventions, so
collapse the parsing-driving Objective-C printing test of throwing
methods into the general test for methods.

Swift SVN r27880
2015-04-28 20:59:32 +00:00
Doug Gregor
7dafdf873c Revert "(De-)serialization for foreign error conventions."
This reverts r27870. It's causing inexplicable SourceKit failures.

Swift SVN r27875
2015-04-28 17:50:59 +00:00
Doug Gregor
a487a9e345 (De-)serialization for foreign error conventions.
Printing a module as Objective-C turns out to be a fantastic way to
verify the (de-)serialization of foreign error conventions, so
collapse the parsing-driving Objective-C printing test of throwing
methods into the general test for methods.

Swift SVN r27870
2015-04-28 16:00:47 +00:00