Commit Graph

6196 Commits

Author SHA1 Message Date
Jordan Rose
5257550f13 [ClangImporter] Don't mark generated 'unavailable' attributes as implicit.
Nearly all of them come from some annotation written explicitly in the
Objective-C header, and all of them should be shown in the generated
interface for an imported module.

Part of <rdar://problem/17024498>

Swift SVN r20841
2014-07-31 18:58:14 +00:00
Doug Gregor
ba040d9f21 Maintain the DeclContext of a NormalProtocolConformance as the type declaration or extension.
Previously, we only retained the module in which a normal protocol
conformance occurred, which meant we either had to go searching for
the appropriate extension (yuck) or do without that information. This
is part of the separating-extension-archetypes work.

Swift SVN r20793
2014-07-31 01:00:30 +00:00
Doug Gregor
a0bc9274db Change parsing and representation of extensions to accommodate generic parameters.
The eventual goal for extensions of generic types is to require them
to specify their generic parameters, e.g.,

  extension Array<T> { ... }

rather than today's

  extension Array { ... }

Start parsing (optional) generic parameters here, and update the
representation of ExtensionDecl to accomodate this new grammar
production. Aside from the parser changes, there's no intended
functionality change here.

Swift SVN r20682
2014-07-29 19:17:00 +00:00
Doug Gregor
ac332429d9 Give extensions generic parameters and signatures within the AST.
This adds generic parameters and generic signatures to extension
declarations. The actual generic parameters just mirror what is
available on the extended type; however, it is filled in via extension
validation, which is handled lazily.

This is a NFC step toward decoupling the archetypes of extensions from
the archetypes of the extended types <rdar://problem/16974298>.

Swift SVN r20675
2014-07-29 16:20:56 +00:00
Jordan Rose
06d370067a [ClangImporter] Use adapter modules for imports in a bridging header.
The signature of the function was all set up for this, but it didn't actually
do anything with the flag.

<rdar://problem/17783624>

Swift SVN r20665
2014-07-29 01:34:02 +00:00
Jordan Rose
798814e1d9 [ClangImporter] Import typedefs of other CF types as typealiases.
...rather than distinct classes. This is a bit more complicated than just
making a second typealias because we still want to strip off the "Ref".

<rdar://problem/17686069>

Swift SVN r20652
2014-07-28 22:43:29 +00:00
Jordan Rose
ee176e7269 [ClangImporter] Give NS_OPTIONS structs a static 'allZeros' property.
This will allow RawOptionSet to conform to BitwiseOperations.

<rdar://problem/17815538>

Swift SVN r20600
2014-07-27 00:47:41 +00:00
Jordan Rose
5c1e9d7d36 [Accessibility] Store setter accessibility explicitly.
Previously, we were just storing setter accessibility via the accessibility
level on the setter function. However, some Stored properties never actually
have a setter synthesized, which led to the compiler dropping the setter
accessibility at serialization time. Rather than try to hack up something
clever, just store the setter accessibility explicitly in every
AbstractStorageDecl. (We still only serialize it for VarDecls, because
settable SubscriptDecls always have setter functions.)

<rdar://problem/17816530>

Swift SVN r20598
2014-07-26 22:43:54 +00:00
Jordan Rose
aae4a3d731 [ClangImporter] Pass through diagnostic locations for imports.
If importing a Clang module fails, we should report that at the location of
the import statement. This doesn't do that fully because it isn't transitive
(if Swift module Foo imports Swift module Bar, which fails to import Clang
module Baz, we don't get an error in user source), but it's a step forward
for the simple cases.

Swift SVN r20575
2014-07-25 23:01:51 +00:00
Jordan Rose
d8077fc540 [ClangImporter] Print notes for macro expansions and include locations.
(for errors in the bridging header or in modules)

<rdar://problem/17573187>

Swift SVN r20573
2014-07-25 23:01:47 +00:00
Jordan Rose
0b933acfda [ClangImporter] Use #line when reporting module build errors.
...or at least the same machinery as #line. We add a (referential) mirror
of the Clang buffer to Swift's source manager, then remap that particular
line to whatever Clang currently thinks is the presumed location for that
line. (This means we respect Clang line directives too.)

This also modifies Swift's source manager to be more forgiving about adding
the same virtual file range twice; it will tell you when you try to do it.

<rdar://problem/16596800>

Swift SVN r20572
2014-07-25 23:01:45 +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
ff92b5f007 Remove -[no]implicit-objc-with.
Toggling this option causes funny things to happen, and there's no
point in keeping it.

Swift SVN r20565
2014-07-25 22:13:46 +00:00
Doug Gregor
5b3a3bdbaa An imported initializer is required if it is used to conform to a protocol requirement.
This replaces my egregious -initWithCoder:-specific hack with a more
reasonable general solution.

Replace my initWithCoder: hack with a proper

Swift SVN r20562
2014-07-25 21:01:36 +00:00
Chris Lattner
6d0934d33d Introduce a new 'renamed' modifier on unavailable attributes. This allows Xcode
to emit fixit's when we rename something, e.g.:

t.swift:6:9: error: 'float' has been renamed to Float
var y : float
        ^~~~~
        Float

Adopt this in the stdlib.



Swift SVN r20549
2014-07-25 18:00:37 +00:00
Doug Gregor
24be396fd7 Cope with null witnesses
Swift SVN r20520
2014-07-24 21:48:53 +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
Doug Gregor
0ad6ad65c8 API notes: add a "Required" field for Objective-C methods.
This allows us to express required initializers in the API notes. Use
it to smooth over NSString differences in the various SDKs even more.

Swift SVN r20511
2014-07-24 20:14:48 +00:00
Jordan Rose
e92c81dbe3 [ClangImporter] Treat shims.h as a system header in NDEBUG builds.
If a warning does sneak in here some day, it'll be visible to us but not to
end users.

<rdar://problem/16292896>

Swift SVN r20458
2014-07-24 02:36:24 +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
Doug Gregor
070ee7713a Treat imported initializers from Objective-C protocols as 'required'.
Initializers for non-final classes will soon need to be 'required' to
conform to an initializer requirement in a protocol, so start
marking imported initializers from Objective-C protocols as
'required'. This is part of <rdar://problem/17408284> and
<rdar://problem/17415607>.

Swift SVN r20428
2014-07-23 22:16:35 +00:00
Anna Zaks
dfa97a11eb API Notes: yaml-to-binary: fix nullability mapping inconsistencies.
We choose not to model "OptionalTypeAdjustment(1, OTK_Optional)" in yaml, so update the known methods to use what we can model.

Introduce the absence of nullability info and use it to set NullabilityAudited and NumAdjustedNullable. (Maybe, after the .def file is gone and we have more testing, we could change the KnownObjCMethod API to better reflect the yaml format..)

Swift SVN r20367
2014-07-23 02:54:23 +00:00
Jordan Rose
a0d3d31cc1 [ClangImporter] Make the 'value' field of plain C enums public again.
If an enum has a name but isn't declared with NS_ENUM or NS_OPTIONS, we
don't know how it's intended to be used, so we import it as a struct with
each enumerator as a value. The raw value of the enum used to be accessible
as the 'value' field, but that was mistakenly marked Private in the Great
Access Control Update.

We could consider making plain enums RawRepresentable (and just convert
to and from their raw type without checking anything), but that's something
to do later.

<rdar://problem/17753237>

Swift SVN r20355
2014-07-23 00:25:55 +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
Dmitri Hrybenko
d14f17beef Change 'getLogicValue()' into a property 'boolValue'; change
'getArrayBoundValue()' into a property 'arrayBoundValue'.

rdar://17156123


Swift SVN r20304
2014-07-22 12:08:10 +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
Jordan Rose
58befc46e2 [ClangImporter] Handle submodule imports.
Specifically, handle them by also importing the top-level module. This is
unfortunate, but at least lets people /access/ things in explicit submodules,
even if it doesn't let them limit their import to a specific submodule.

    (swift) import OpenGL.GL3
    (swift) glGetString
    // r0 : (GLenum) -> ConstUnsafePointer<GLubyte> = (Function)
    (swift) OpenGL.glGetString
    // r1 : (GLenum) -> ConstUnsafePointer<GLubyte> = (Function)

One unfortunate side effect of having a single Clang ASTContext is that if
one Swift module imports a Clang submodule, every Swift module can now see
it. That means /mixing/ incompatible submodules, such as OpenGL.GL and
OpenGL.GL3, still won't work. Filed <rdar://problem/17756745> for that.

<rdar://problem/13140302>

Swift SVN r20288
2014-07-22 01:31:17 +00:00
Doug Gregor
ec32bc044d API notes: separate classes from protocols in the binary representation.
Swift SVN r20277
2014-07-21 20:23:55 +00:00
Doug Gregor
2faeb84e0c Rename ObjCClassInfo to ObjCContextInfo, to also cover protocols.
Swift SVN r20262
2014-07-21 17:30:16 +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
Chris Lattner
48687380b7 now that DeclAttributes is a single word, there is no reason to deal with
it indirectly through another pointer from Decl, just embed DeclAttributes
directly into Decl and get rid of the "getMutableAttrs" nonsense.



Swift SVN r20216
2014-07-20 04:09:42 +00:00
Doug Gregor
076d310132 Remove -import-tighter-objc-types option; we're turning it on by default.
Swift SVN r20191
2014-07-18 23:25:38 +00:00
Doug Gregor
422fc4b00a API notes: factor 'unavailable' into a common base for methods/classes/properties.
Now that we have this, move the ban on NSInvocation into
KnownObjCMethods.def so that it's enforced via API notes.

Swift SVN r20190
2014-07-18 23:25:37 +00:00
Doug Gregor
fb9beed4cd Clang importer: clean up handling of Objective-C property API notes.
What we had was specific to optionality and had a different flow than
for methods; simplify the approach to match methods.

Swift SVN r20172
2014-07-18 18:48:10 +00:00
Doug Gregor
0095221dc5 API notes: simplify our handling of method merging.
Make the "merging class-wide information into method information"
operation part of ObjCMethodInfo. It doesn't belong in the Clang
importer.

Swift SVN r20171
2014-07-18 18:48:09 +00:00
Doug Gregor
d1cfab0943 Remove redundant FactoryAsInitKind definition. NFC
Swift SVN r20170
2014-07-18 18:48:05 +00:00
Jordan Rose
904d1b21c6 [ClangImporter] Drop the "current import" tracking for bridging headers.
Now that bridging headers from ASTs are always present and bridging headers
from the command line are checked in advance, we no longer need to worry
about the Clang instance failing to find the bridging header. That's good,
because this wasn't implemented correctly anyway: if a bridging header
imported a module, we could get an error.

Swift SVN r20129
2014-07-18 00:22:55 +00:00
Jordan Rose
fce31decdc Serialize bridging headers into the merged module file.
We do this so that the swiftmodule file contains all info necessary to
reconstruct the AST for debugging purposes. If the swiftmodule file is copied
into a dSYM bundle, it can (in theory) be used to debug a built app months
later. The header is processed with -frewrite-includes so that it includes
any non-modular content; the user will not have to recreate their project
structure and header maps to reload the AST.

There is some extra complexity here: a target with a bridging header
(such as a unit test target) may depend on another target with a bridging
header (such as an app target). This is a rare case, but one we'd like to
still keep working. However, if both bridging headers import some common.h,
we have a problem, because -frewrite-includes will lose the once-ness
of #import. Therefore, we /also/ store the path, size, and mtime of a
bridging header in the swiftmodule, and prefer to use a regular parse from
the original file if it can be located and hasn't been changed.

<rdar://problem/17688408>

Swift SVN r20128
2014-07-18 00:22:53 +00:00
Doug Gregor
bedb5f116a Move KnownObjCMethods.def into swift-ide-test; that's the only place using it.
Swift SVN r20121
2014-07-17 23:26:55 +00:00
Doug Gregor
dab7ece3bf API notes: which the Clang importer over to API notes completely.
The Clang importer no longer depends on built-in knowledge from
KnownObjCMethods.def.

Swift SVN r20120
2014-07-17 23:16:42 +00:00
Doug Gregor
533a94a5a0 Use API notes for Objective-C class/protocol nullability defaults.
Swift SVN r20113
2014-07-17 21:08:06 +00:00
Doug Gregor
b2220fc503 API notes: use API notes for property nullability information.
Swift SVN r20100
2014-07-17 17:00:19 +00:00
Doug Gregor
08db87ca35 Clang importer: load API notes whenever we load a Clang module.
We're not using this for anything, yet, so there aren't any checked-in
tests. Also note that I'm using ".apinotesc" for the binary form of
API notes.

Swift SVN r20096
2014-07-17 16:11:39 +00:00
Ben Langmuir
6b00df103b Revert "s/clangRewrite/clangRewriteCore"
Apple clang has this change, so we need to keep up to fix the
Jenkins builds.

This reverts commit r20069

Swift SVN r20094
2014-07-17 16:08:32 +00:00
Doug Gregor
702ed73987 Side car: split "known Objective-C methods" by module.
Update the swift-ide-test harness to look at the data for specific
modules, rather than as one large model.


Swift SVN r20073
2014-07-17 05:11:33 +00:00
Doug Gregor
61df8d7f1f s/clangRewrite/clangRewriteCore
Swift SVN r20069
2014-07-17 04:37:36 +00:00
Greg Parker
f86a5bfe1d Follow clang renaming of libclangRewriteCore.a to libclangRewrite.a.
Swift SVN r20066
2014-07-17 01:18:41 +00:00
Doug Gregor
84c5af60b2 Side car reader: wire up identifier table and Objective-C class table.
Verify this by round-tripping the class information in KnownObjCMethods.def.


Swift SVN r20054
2014-07-16 22:42:53 +00:00
Chris Lattner
2825b9f5f8 move @transparent and @requires_stored_property_inits to the new attribute model.
All that is left is unowned(unsafe) & weak.



Swift SVN r20012
2014-07-16 06:14:19 +00:00