Commit Graph

514 Commits

Author SHA1 Message Date
Jordan Rose
2f41598846 [test] Always update modules when checking PrintAsObjC output.
Previously if someone changed one of the mock SDK headers, it might not get
picked up by the PrintAsObjC tests because it treats those headers as
system headers. Swift doesn't have this problem because it always uses the
-fmodules-validate-system-headers option, but we should pass it explicitly
to Clang here for those not using clean builds / clean module caches.

Swift SVN r22982
2014-10-28 02:46:19 +00:00
Dmitri Hrybenko
e9f06eee68 Comment parsing: implement basic parsing of inline markup
This change adds infrastructure to represent inline markup in the AST,
implements parsing of some of the inline markup (*emphasis*, **strong
emphasis**, `interpreted text`, ``inline literal``), and XML generation
for these constructs for SourceKit clients to consume.

The parsing itself is incomplete for constructs not mentioned above.
Most notably, we don't parse hyperlinks, and we don't parse the
double-colon that changes the next paragraph into a literal block.

Swift SVN r22752
2014-10-15 13:50:48 +00:00
Jordan Rose
25c4b23f12 [test] Fix PrintAsObjC tests for less tolerant Clangs.
Fixup for r22010.

Swift SVN r22023
2014-09-17 15:54:18 +00:00
Jordan Rose
c734630dc3 [PrintAsObjC] Generate headers as warning-free as possible.
...and use #pragma clang diagnostic when otherwise unavoidable.

As part of this change, start testing generated headers under
-Weverything -Werror, with targeted exceptions.

rdar://problem/18332948

Swift SVN r22010
2014-09-17 06:10:26 +00:00
Jordan Rose
085a5d33e5 [test] Use the module cache path for %clang as well.
Swift SVN r21807
2014-09-09 16:06:22 +00:00
Jordan Rose
b3dc2280a2 [PrintAsObjC] Only print inner classes if they are explicitly marked @objc.
This reduces the chances of conflict among inner class names. It's too easy
for a class to be implicitly marked @objc in Swift.

To make this work, correctly preserve the implicitness of @objc through
serialization. (We were probably intending to do this all along, since we
were serializing the flag but not doing anything with it at the other end.)

Swift SVN r21678
2014-09-03 18:19:00 +00:00
Jordan Rose
1c7b8f2972 [PrintAsObjC] Don't print nested classes as nested in Objective-C.
There are still problems with nested classes:
- They're much more likely to have colliding compile-time names
  (since the outer class's name is dropped).
- They're only picked up if the outer class is also @objc.

But at least now we won't generate invalid Objective-C. Unless the inner
classes have the same name.

rdar://problem/18187877

Swift SVN r21677
2014-09-03 18:18:59 +00:00
Jordan Rose
a927d65548 [test] Make test in previous commit a bit more interesting.
In this case we import a submodule and never need the base module.

Swift SVN r21556
2014-08-29 00:45:58 +00:00
Jordan Rose
c35312815a [PrintAsObjC] @import required explicit submodules.
...but prefer the base module for implicit submodules.

rdar://problem/18097120

Swift SVN r21555
2014-08-29 00:39:24 +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
Jordan Rose
2f988f48d1 [PrintAsObjC] Don't use OBJC_DESIGNATED_INITIALIZER for protocol initializers.
<rdar://problem/17793674>

Swift SVN r20903
2014-08-01 18:06:33 +00:00
Jordan Rose
0331b7298c [PrintAsObjC] Don't print extensions of CF types.
Although Swift thinks of these as Objective-C classes, Objective-C itself
does not.

<rdar://problem/17867708>

Swift SVN r20867
2014-08-01 00:26:58 +00:00
Fariborz Jahanian
f93cee960c Reapply patch for rdar://17023083 which I reverted
earlier because clang patch for waninrg goupr name is in.
Also run %check-in-clang on the translated output.



Swift SVN r20786
2014-07-30 23:12:46 +00:00
Fariborz Jahanian
f6dc791df1 Revert patch in r20767
Swift SVN r20770
2014-07-30 20:36:24 +00:00
Fariborz Jahanian
81b2f47268 Patch to silence warnings about mismatched property
ownership attributes by bracketting
header with specific group warning pragma clang.
This patch also requires patch for rdar://17845264
which is currently in TOT. This is //rdar://17023083


Swift SVN r20767
2014-07-30 20:15:10 +00:00
Jordan Rose
66890d5d5f [PrintAsObjC] Mark 'internal(set)' properties as 'readonly' for frameworks.
"...because the generated header for a framework is part of the framework's
public Objective-C interface, only declarations marked public appear in the
generated header for a Swift framework."

Just missed a case here when we decided to do things this way.

<rdar://problem/17796727>

Swift SVN r20653
2014-07-28 22:49:41 +00:00
Doug Gregor
1cc28d4f80 An initializer requirement can only be satisfied by a required class initializer in a non-final class.
This is part of eliminating the notion of non-inheritable
conformances. Fixes <rdar://problem/17408284>.

Swift SVN r20430
2014-07-23 22:16:38 +00:00
Dave Abrahams
1438d617cd [stdlib] Rename ConstUnsafePointer=>UnsafePointer
Swift SVN r20318
2014-07-22 17:10:54 +00:00
Dave Abrahams
21669b3aee [stdlib] Add "Mutable" to [Autoreleasing]UnsafePointer
UnsafePointer becomes UnsafeMutablePointer
AutoreleasingUnsafePointer becomes AutoreleasingUnsafeMutablePointer

Swift SVN r20316
2014-07-22 16:56:23 +00:00
Jordan Rose
a419138a7a [PrintAsObjC] Print 'struct Foo' or 'enum Foo' instead of 'Foo' when necessary.
To do this, we keep track of decls with superfluous typedefs (rather than
just the typedefs), and check for that. Tag decls without typedefs are
printed with the tag.

<rdar://problem/17569385>

Swift SVN r20221
2014-07-20 17:26:20 +00:00
Jordan Rose
52f7cd48b0 [PrintAsObjC] Print ownership qualifiers on properties.
weak => 'weak', unless the type is a CF type. I'm not sure weak references to
        CF types work anyway, but until we have that cleared up this works.

unowned => 'assign'. In Objective-C, use of 'assign' for object properties is
           largely deprecated in favor of 'unsafe_unretained', but unowned
           properties behave more like a 'safe_unretained'. Since they don't
           auto-update like 'weak', though, this should hint to clients to
           be careful about lifetimes.

unowned(unsafe) => 'unsafe_unretained'

As before, Arrays, Dictionaries, and Strings are considered 'copy' properties;
blocks are now considered 'copy' properties as well.

All other types get their (implied)  default: 'strong' for objects, 'assign'
for primitives.

<rdar://problem/17346846>

Swift SVN r20112
2014-07-17 20:59:53 +00:00
Joe Groff
c4fbf674da PrintAsObjC: Handle CFunctionPointer.
Swift SVN r20048
2014-07-16 22:13:27 +00:00
Doug Gregor
b29192fe54 Diagnose non-optional @IBOutlets <rdar://problem/17654693>.
A while back we decided to require @IBOutlets to be optional (via ! or
?); we got as far as ripping out the implicit !'ification of
@IBOutlets, but never added the diagnostic. Diagnose this restriction
with Fix-Its.

Swift SVN r19981
2014-07-15 19:52:01 +00:00
Doug Gregor
a5c079af59 Replace the class_protocol attribute with a "class" requirement.
This only tackles the protocol case (<rdar://problem/17510790>); it
does not yet generalize to an arbitrary "class" requirement on either
existentials or generics.

Swift SVN r19896
2014-07-13 06:57:48 +00:00
Jordan Rose
f35e50e017 [PrintAsObjC] Include IBOutlet/IBAction/IBOutletCollection in the header.
Also, fix a bug where value properties weren't getting marked as "copy"
if wrapped in IUOs, and replace some identifier-based comparisons with
pointer comparisons against ASTContext-cached decls.

<rdar://problem/17007235>

Swift SVN r19874
2014-07-12 01:52:01 +00:00
Jordan Rose
b24e19b4f0 [PrintAsObjC] Handle unparenthesized closure input types.
<rdar://problem/17358809>

Swift SVN r19837
2014-07-10 23:57:26 +00:00
Chris Lattner
5b49d59c57 Remove the @ from @final and @lazy, the last major piece of
rdar://17168115.

Also, reinstate the ARM driver change and testcase that I removed
in my last patch.


Swift SVN r19790
2014-07-10 06:23:27 +00:00
Chris Lattner
fe95f81397 introduce a new 'DeclModifier' flag on attributes, which mark that the
attribute is a "modifier" of a decl, not an "attribute" and thus shouldn't
be spelt with an @ sign.  Teach the parser to parse "@foo" but reject it with
a nice diagnostic and a fixit if "foo" is a decl modifier.

Move 'dynamic' over to this (since it simplifies some code), and switch the
@optional and @required attributes to be declmodifiers (eliminating their @'s).



Swift SVN r19787
2014-07-10 05:49:10 +00:00
Jordan Rose
c90cd11aff [PrintAsObjC] Only include internal decls if we have a bridging header.
The upshot of this is that internal decls in an app target will be in the
generated header but internal decls in a framework target will not. This
is important since the generated header is part of a framework's public
interface. Users always have the option to add members via category to an
internal framework type they need to use from Objective-C, or to write the
@interface themselves if the entire type is missing. Only internal protocols
are left out by this.

The presence of the bridging header isn't a /perfect/ way to decide this,
but it's close enough. In an app target without a bridging header, it's
unlikely that there will be ObjC sources depending on the generated header.

Swift SVN r19763
2014-07-09 23:58:57 +00:00
Jordan Rose
3e994a24cf [PrintAsObjC] Don't print private protocols in the generated header.
Swift SVN r19735
2014-07-09 19:01:34 +00:00
Jordan Rose
9e970f313e [PrintAsObjC] Handle dictionary sugar syntax.
<rdar://problem/17594798>

Swift SVN r19734
2014-07-09 18:44:47 +00:00
Jordan Rose
cf53b747d0 Don't infer @objc on private members.
You can still mark them @objc explicitly (or @IBOutlet, or anything else that
would require ObjC interop).

Also, don't print private decls in the generated header, whether @objc or not.
not.

Swift SVN r19733
2014-07-09 18:44:46 +00:00
Doug Gregor
3f4a07ffde Remove accidental commit: we don't need to annotate this as @objc
Swift SVN r19709
2014-07-08 23:02:46 +00:00
Doug Gregor
9e2b68c4f9 Introduce CGFloat as a distinct struct type.
CGFloat is 32-bit on 32-bit architectures and 64-bit on 64-bit
architectures for historical reasons. Rather than having it alias
either Float (32-bit) or Double (64-bit), introduce a distinct struct
type for CGFloat. CGFloat provides a complete set of comparisons and
arithmetic operators (including tgmath functions), initializers allows
explicit conversion between it an Int, UInt, Float, and Double, as
well as conforming to all of the protocols that Float/Double do.

This formulation of CGFloat makes use of CGFloat
architecture-independent, although it still requires a number of casts.
Fixes <rdar://problem/17224725>

Swift SVN r19689
2014-07-08 19:00:18 +00:00
Dmitri Hrybenko
99d35cb3b2 ReST parsing: fix a bug in parsing field list items that don't have a blank
line in between

Finishes rdar://17220608


Swift SVN r19565
2014-07-04 15:28:10 +00:00
Jordan Rose
1b7a384252 Fix a multitude of issues with extensions exposed to Objective-C (r19116).
- Category names weren't unique.
- We were using an attribute to detect if something was a Swift category,
  but attributes can't be used on categories.
- The test that this was all working was failing in a way that wasn't caught.

To solve these problems:

- We're using a macro to generate category names based on __LINE__ in addition
  to the current module.
- The importer uses the macro to detect that the category comes from Swift
  (no attribute needed).
- The test now has a deliberate error for -verify to catch.

<rdar://problem/17342287&17538553>

Swift SVN r19479
2014-07-02 20:35:25 +00:00
Jordan Rose
e9f6fba434 Update tests for memberwise accessibility.
Swift SVN r19354
2014-06-30 18:50:51 +00:00
Chris Lattner
f241c66cd7 implement <rdar://problem/17473876> @IBOutlet attribute shouldn't make properties implicitly optional or weak
Now the @IBOutlet attribute has no implicit effect on the type or storage of a property.  It still performs
validity checks of course.


Swift SVN r19344
2014-06-30 15:54:24 +00:00
Joe Groff
17d27e6529 PrintAsObjC: Print ConstUnsafePointer as a const pointer.
Swift SVN r19266
2014-06-26 22:37:25 +00:00
Doug Gregor
e064416c8f Update the rest of the testsuite for the array syntax change.
Swift SVN r19223
2014-06-26 05:39:25 +00:00
Jordan Rose
7fc8ecd919 [PrintAsObjC] Mark String, Array, and Dictionary properties as 'copy'.
<rdar://problem/17012159>

Swift SVN r19118
2014-06-24 01:23:03 +00:00
Jordan Rose
c6226159c5 Allow class properties to be @objc, and expose them as class methods.
<rdar://problem/17164696>

Swift SVN r19117
2014-06-24 01:23:02 +00:00
Jordan Rose
347f330d15 Don't import the ObjC representation of Swift extensions in frameworks.
Because extensions don't have any identity we can check against, we can't
tell when we see an Objective-C category if it came from a Swift extension.
Change PrintAsObjC to mark all such categories with SWIFT_EXTENSION, and
just skip them unilaterally when importing Objective-C code.

Also, actually give Swift extensions a name when writing them as Objective-C
categories. Previously, they were nameless categories ("class extensions"),
but methods in a class extension are supposed to be implemented in the class's
main @implementation, so people were getting unexpected warnings about missing
implementations.

<rdar://problem/17342287>

Swift SVN r19116
2014-06-24 01:23:00 +00:00
Chris Lattner
228389490f stop marking implicit decls as @objc if they lack the objc attribute. This
prevents synthesized stuff from being reflected back to the runtime, and prevents
PrintAsObjC from reflecting it into the generated ObjC header.

This fixes:
<rdar://problem/17165953> Swift: @lazy property reflects back into Objective-C with two properties, one for underlying storage

which caused us to print a decl for a lazy property's storage, which is useless
but also syntactically incorrect, causing clang to fail to parse the header.



Swift SVN r19054
2014-06-20 22:29:09 +00:00
Jordan Rose
03eacc2931 [PrintAsObjC] Forward-declare things for the generated header when possible...
...and just outright import the bridging header if that's what's needed.

This means we'll use @class and @protocol whenever we're just using a class
or protocol in a type, but still import the enclosing module when we need
the definition. We'll also fall back to the module (or bridging header) if
we need something /else/ from C: a struct, a typedef, whatever.

<rdar://problem/17183425>

Swift SVN r18795
2014-06-11 00:01:58 +00:00
Jordan Rose
6afb4df544 [PrintAsObjC] Handle properties with weak/unowned storage.
We don't do this quite as well as we could (we don't list the storage
type in the @property), but previously we just failed on these types.

<rdar://problem/16992990>

Swift SVN r18528
2014-05-21 22:38:04 +00:00
Joe Groff
e8f71c12a2 Rename ObjCMutablePointer to AutoreleasingUnsafePointer.
This relates its interface and behavior to that of UnsafePointer, and draws an analogy to '__autoreleasing *' in ARC.

Swift SVN r18236
2014-05-17 04:44:44 +00:00
Doug Gregor
ad18ed81fb Start importing NSArray* as (AnyObject[])! by default <rdar://problem/16535097>.
Swift SVN r18157
2014-05-16 01:10:13 +00:00
Jordan Rose
d4a493e871 [PrintAsObjC] Don't include the ObjC header module in the generated header.
Importing a header with -import-objc-header causes the Clang importer to
provide an extra module to represent the header's content, and this was
showing up as "@import __ObjC;" in the /generated/ header for the target.
We should just not print anything there and let users import what's
necessary.

<rdar://problem/16917113>

Swift SVN r18081
2014-05-14 21:42:31 +00:00
Jordan Rose
74bc750c43 [PrintAsObjC] Use #import for the underlying module (instead of @import).
When generating a header for the Swift half of a mixed-source framework,
we can't import the framework using @import, because that means a submodule
is trying to import a parent module before the module is done being built.
This currently isn't supported in Clang, though it only recently became an
error instead of being ignored.

Instead, we now assume that the framework will have an umbrella header with
the same name as the framework module, which is the same assumption Xcode
makes when you don't provide your own module map. I'm not too concerned about
people trying to build mixed-source frameworks who /don't/ have umbrella
headers.

This doesn't affect app targets at all, which use -import-objc-header instead
of a standalone underlying module.

<rdar://problem/16879704>

Swift SVN r17984
2014-05-13 00:38:49 +00:00