Commit Graph

6196 Commits

Author SHA1 Message Date
Jordan Rose
f1ccae6721 [ClangImporter] Don't force-load Foundation under ImportForwardDeclarations.
When we print the ObjectiveC module, we really shouldn't see extensions that
come from Foundation. Admittedly, we don't see them correctly in Foundation
either, but that's a separate issue.

There is one slightly unsafe hack here: we still import NSString as String,
by name alone, even when Foundation isn't present. This is because NSString
shows up in the ObjectiveC module, but we want people to be using String
when interacting with NSObject in real life.

Swift SVN r21857
2014-09-10 23:49:13 +00:00
Adrian Prantl
fb1fb614d2 Update for upstream LLVM API change (unique_ptr).
Swift SVN r21843
2014-09-10 17:26:38 +00:00
Joe Groff
487f9a96ca Quell warning.
Swift SVN r21831
2014-09-10 05:56:39 +00:00
Jordan Rose
7b6a0dd185 [ClangImporter] Add a mode where @class decls are imported as empty classes.
This can be used by SourceKit's interface printer to display modules with
forward declarations of classes in dependent modules, e.g. ObjectiveC
forward-declaring Foundation's NSString for use in NSObject. We can consider
doing something similar for C tag types (structs and enums).

Part of rdar://problem/18273845

Swift SVN r21828
2014-09-10 02:32:53 +00:00
Jordan Rose
d438ebc228 Sink Swift's adapter for NSZone into the ObjectiveC overlay.
While Foundation actually defines the NSZone typedef and what you can do with
it, the ObjectiveC module makes use of it in its raw form: "struct _NSZone *".
To avoid a circular dependency, sink our adapter down to the ObjectiveC
overlay.

Swift SVN r21827
2014-09-10 02:32:52 +00:00
Jordan Rose
3710933f3d [ClangImporter] Decls deprecated in OS X 11.0 are not implicitly unavailable.
Noticed by chance. Doesn't affect anything now.

Swift SVN r21826
2014-09-10 02:32:48 +00:00
Argyrios Kyrtzidis
da95aadb4b [ClangImporter] Make sure we don't crash if clang emits diagnostics because of the provided clang compiler arguments.
rdar://18068354

Swift SVN r21823
2014-09-10 01:18:32 +00:00
Joe Groff
419ba5cbea Change RawRepresentable to use failable initializers and property requirements.
Redefine the RawRepresentable protocol to use an 'init?' method instead of 'fromRaw(Raw)', and a 'raw' get-only property instead of 'toRaw()'. Update the compiler to support deriving conformances for enums and option sets with the new protocol. rdar://problem/18216832

Swift SVN r21762
2014-09-06 18:40:14 +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
Jordan Rose
1b1514673a [ClangImporter] A StructDecl should always have a RecordDecl as its Clang node.
Specifically, it should not ever have a clang::TypedefDecl as its Clang node,
even if the RecordDecl is anonymous and immediately wrapped in a typedef.
It looks like no one was ever doing this intentionally; it's just left over
from before we looked through typedefs at all. This is important because we
use the clang::RecordDecl for IRGen layout if it's present; before this patch
we would fall back to Swift layout for these structs (clearly wrong).

The one exception here is enums -- NS_OPTIONS and named C enums get imported
as structs as well. If we add any other exceptions, we should be sure they
are dealt with in IRGen as well.

The change in the printed interface output is due to the source location
for the Clang node of an NS_ENUM or NS_OPTIONS decl being inside a macro.
I didn't see a quick fix for this, so I'm going to ignore it for now.

Swift SVN r21748
2014-09-05 22:22:40 +00:00
Devin Coughlin
1b8ed882d3 Move AvailabilityAttr::PlatformKind into its own file
Swift SVN r21728
2014-09-04 23:34:19 +00:00
Doug Gregor
b6248c8342 Remove the -enable-objc-failable-initializers option.
As part of this, failable initializers get enabled by default for
swift-ide-test.


Swift SVN r21704
2014-09-04 15:31:02 +00:00
Doug Gregor
9577b59224 Clang importer: compare initializers by their parameter types, only.
When determining whether one imported initializer stomps on another,
use the parameter types rather than the full type. This prevents
differences in failability from causing ambiguities.

Swift SVN r21692
2014-09-03 23:56:02 +00:00
Doug Gregor
a46192a90f Failability initializers: fix the type of an imported initializing constructor.
Swift SVN r21691
2014-09-03 23:56:00 +00:00
Jordan Rose
47658c87eb Start mangling names of private declarations specially.
We currently mangle private declarations exactly like public declarations,
which means that private entities with the same name and same type will
have the same symbol even if defined in separate files.

This commit introduces a new mangling production, private-decl-name, which
includes a discriminator string to identify the file a decl came from.
Actually producing a unique string has not yet been implemented, nor
serialization, nor lookup using such a discriminator.

Part of rdar://problem/17632175.

Swift SVN r21598
2014-08-30 00:17:18 +00:00
Adrian Prantl
cb41e95bb7 Update for upstream LLVM unique_ptrification.
Swift SVN r21589
2014-08-29 20:10:30 +00:00
Jordan Rose
c782dc939f [ClangImporter] FSEventStreamRef is not a CF object.
Nor is ConstFSEventStreamRef.

Unfortunately, they both get bridged to COpaquePointer, so they're not
constructible from one another--they're identical.

rdar://problem/18112747

Swift SVN r21546
2014-08-28 22:14:47 +00:00
Jordan Rose
c3660d5ad6 [Serialization] Ensure that a cached bridging header is null-terminated.
I'm not quite sure how to tickle this one, but the next commit adds more
data after the cached header, at which point existing tests break. This
could have already caused problems if no padding was needed in the bitstream.

Swift SVN r21543
2014-08-28 21:36:00 +00:00
Dmitri Hrybenko
f5299e1108 Update for upstream LLVM API changes
Swift SVN r21527
2014-08-28 12:44:23 +00:00
Joe Groff
3b9fe96e16 Handle new OMF_initialize enumeration case in the Clang importer.
Swift SVN r21428
2014-08-23 00:14:59 +00:00
Jordan Rose
b3166b4de3 [ClangImporter] Exclude some more non-CF types from CoreGraphics' PDF support.
Swift SVN r21387
2014-08-21 23:07:11 +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
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
7c69056659 Remove the always-on ImportCFTypes language option.
Swift SVN r21355
2014-08-21 15:24:32 +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
a36be37c4f [ClangImporter] Check for the existence of a submodule before loading it.
This regresses a bit on the diagnostic when a submodule is missing, as well
as missing out on Clang's automatic typo correction, but it does avoid putting
the Clang CompilerInstance into an error state, which is important for the
REPL. It's also not entirely clear that Clang had the right behavior in this
case either---we'd get a module back, but if the particular submodule we
asked for didn't exist we might get its parent. We can revisit this later.

Prerequisite for <rdar://problem/17994094>.

Swift SVN r21333
2014-08-21 01:54:22 +00:00
Doug Gregor
42dc448e7e Reflect failability of an initializer in the optionality of its result type.
Don't verify this for the Optional and ImplicitlyUnwrappedOptional types.


Swift SVN r21293
2014-08-19 20:42:06 +00:00
Doug Gregor
c06e22d406 Revert r21291; it's breaking the standard library build.
Swift SVN r21292
2014-08-19 20:37:05 +00:00
Doug Gregor
e6f051fcd2 Reflect failability of an initializer in the optionality of its result type.
Swift SVN r21291
2014-08-19 20:22:25 +00:00
Doug Gregor
64bd844e0e Parse failable initializers.
Parsing, representation, (de-)serialization, printing, and dumping for
failable initializers.


Swift SVN r21290
2014-08-19 18:41:30 +00:00
Jordan Rose
a6c5547c81 [ClangImporter] When importing attributes for a class, use the @interface.
i.e. don't look for attributes on an @class somewhere.

Also do this for tag decls, whose attributes propagate forwards until there's
a definition.

<rdar://problem/17986861>

Swift SVN r21223
2014-08-15 03:26:24 +00:00
Jordan Rose
a44a16b6b3 [ClangImporter] Test for a module's presence before trying to load it.
This makes sure that the Clang CompilerInstance doesn't think that we've seen
an error just because we were checking for the existence of a module, and
therefore will not break the world when the module is absent.

This fixes an issue where loading PlaygroundLogger broke static inline
functions because PlaygroundLogger has no Objective-C module.
<rdar://problem/18007508>

It also lays groundwork for not treating a missing module as a fatal error
in REPL modes. To do that properly, however, we should figure out how to do
this for submodules as well. <rdar://problem/17994094>

Swift SVN r21187
2014-08-13 23:22:02 +00:00
Jordan Rose
8945540d8b [ClangImporter] CFPlugInRef is in fact a CF-compatible object.
Chalk it up to my faulty memory. Thanks, Alex!

Swift SVN r21186
2014-08-13 23:21:59 +00:00
Chris Lattner
3f0e430abf fix the build: clang gets more and more unique.
Swift SVN r21132
2014-08-11 15:52:39 +00:00
Jordan Rose
5d85c46220 [ClangImporter] CCCryptorRef is also not a CF type.
Swift SVN r21093
2014-08-07 17:35:08 +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
ee22004b84 [IRGen] Walk inlineable Clang functions and emit their dependencies.
This handles things like NSSwapHostLongLongToBig and MKMapRectMake that
are static inline functions that themselves call other static inline
functions.

<rdar://problem/17227237>

Swift SVN r21080
2014-08-06 23:21:17 +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
Jordan Rose
9b07f35cc0 Audit NSDictionary's subscript.
This requires a bit of special handling because we override the getter's type
in the importer, to make sure it's compatible with the setter, but other than
that we just use the information from the apinotes file.

<rdar://problem/17891179>

Swift SVN r21027
2014-08-04 23:16:53 +00:00
Doug Gregor
f52c6789db Track the minimum deployment target and use it for 'unavailable' computations.
Swift SVN r20955
2014-08-02 18:05:45 +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
Jordan Rose
b682e0cf3d [ClangImporter] Don't try to recover if an Objective-C module can't be loaded.
This is already a fatal error, so it doesn't matter how many diagnostics we
dump after that. It's better not to lie to the rest of the compiler about
whether the load succeeds.

No immediate Radar, but this fixes a crash in the test case I'm about to
commit, and possibly some other mystery "dependency missing" crashes in
XREF resolution.

Swift SVN r20919
2014-08-01 21:44:36 +00:00
Jordan Rose
4eebcb9853 Change ASTContext's LoadedModules map to be keyed by Identifiers, not strings.
No intended functionality change, but there's no reason to be performing
string lookups here.

Swift SVN r20902
2014-08-01 18:03:47 +00:00
Jordan Rose
a627411b43 [ClangImporter] Imported NS_OPTIONS structs should not conform to BooleanType.
In general, RawOptionSetType no longer inherits from BooleanType.

Swift SVN r20846
2014-07-31 19:23:08 +00:00
Jordan Rose
904264544d [ClangImporter] Preserve all of Clang's availability attribute information.
This completes <rdar://problem/17024498>, except that we don't yet do
anything with 'deprecated' or 'obsoleted'. The former is covered by
<rdar://problem/17406050>, and I filed <rdar://problem/17873422> for the
latter.

Swift SVN r20845
2014-07-31 18:58:18 +00:00
Jordan Rose
c485690a07 [ClangImporter] s/OSX/OS X/ in the deprecation error message.
Swift SVN r20842
2014-07-31 18:58:15 +00:00