Commit Graph

759 Commits

Author SHA1 Message Date
Doug Gregor
ca3c1f7ca3 Don't import nullary factory methods as unary, ()-accepting initializers.
Nobody likes it, and it's so rare that we're better off simply leaving
these rare cases as factory methods.

Swift SVN r16550
2014-04-18 21:36:15 +00:00
Doug Gregor
c56d50a12c Introduce a named argument for imported nullary factory methods with long names.
We started tracking statistics for these in r16529, but because we've
"always" done this for initializers, it's trivial to just implement
the splitting. As with initializers, we synthesize a named argument of
type '()' to capture the part of the first selector piece that follows
the class name.


Swift SVN r16530
2014-04-18 16:41:18 +00:00
Doug Gregor
000aeff4fb Keep track of the number of nullary factory methods we skip due to a "long name".
For example, in an Objective-C class like this:

  @interface NSFoo
  +(instancetype)fooForReading;
  @end

We don't import that class method as an initializer yet.




Swift SVN r16529
2014-04-18 16:24:01 +00:00
Greg Parker
7ea84bbb52 Add -target-cpu and -target-feature options to arm64 importer. Re-enable arm64.
Swift SVN r16501
2014-04-18 06:28:05 +00:00
Argyrios Kyrtzidis
532b8415c4 [ClangImporter] Address the "try to clear your module cache to see if things start working again"
mystical workaround that hits our dogfooders.


Address this by adding '-fmodules-validate-system-headers' to the clang importer, which rebuilds the clang modules if system headers change.
By my unscientific testing I didn't see significant difference for compile time on the template Cocoa project beyond noise level, and it shouldn't
be significant on the project level because clang module importing happens on per-swift-target basis, not per-swift-file.

Swift SVN r16482
2014-04-18 00:29:51 +00:00
Doug Gregor
f56c68386e Start importing factory methods as initializers.
When an Objective-C class method follows the naming convention of a
factory method, i.e., its starting words match the ending words of the
class name, import it as a convenience initializer when it also:
  - Returns instancetype (i.e., dynamic Self in Swift parlance)
  - Has no NSError** parameters, which indicate the potential for failures

This is under a new flag (-enable-objc-factory-method-constructors)
because it is not generally functional. However, this is a step toward
<rdar://problem/16509024>.

Swift SVN r16479
2014-04-17 23:34:00 +00:00
Doug Gregor
96bc99e3c4 Revert "Add a flag -ignore-overlays to ignore overlays, and use it when building the standard library."
This reverts commit r16383.

Swift SVN r16475
2014-04-17 22:07:47 +00:00
Doug Gregor
f384cbfe63 Add a flag -ignore-overlays to ignore overlays, and use it when building the standard library.
Fixes <rdar://problem/16603168>. This was way too much engineering
effort to ban fork() and vfork().

Swift SVN r16383
2014-04-16 00:02:38 +00:00
Argyrios Kyrtzidis
f9775c3c82 [ClangImporter] When providing the display decls, make sure to include extensions
of the module that extend classes from other modules.

rdar://16608340

Swift SVN r16360
2014-04-15 05:20:38 +00:00
Doug Gregor
2dfed7538d Switch the Clang importer over to using ObjCSelector more often.
Swift SVN r16347
2014-04-15 00:35:40 +00:00
Doug Gregor
18bf604360 Distinguish betweeen simple names ("foo") and zero-argument compound names ("foo()").
This isn't actually used yet, but it's an important distinction.

Swift SVN r16326
2014-04-14 20:05:34 +00:00
Ted Kremenek
35c2b6e469 PrintAsObjC: use protocol remapping in the importer to remap to the original protocol name.
Along the way, don't print out the same module import more than once.

Fixes <rdar://problem/16602327>.

Swift SVN r16308
2014-04-14 08:27:11 +00:00
Doug Gregor
9d7f0b6211 Rework the selector-splitting heuristics.
This makes a number of changes to the selector-splitting
heuristics. Specifically:

  - Eliminate last-word splitting, and with it the notion of
    multi-words. We only split at prepositions now.
  - Introduce the notion of "linking verbs" such as "will" or
    "should"; when these show up, we refuse to split a selector, which
    helps with delegates.
  - Eliminate the special case for "get" and "set". It wasn't
    helping.
  




Swift SVN r16265
2014-04-12 20:32:16 +00:00
Argyrios Kyrtzidis
2da311cf1f [IDE] For the module interface, don't print submodule imports, unless they are submodules
of the module we are printing.

rdar://16530804

Swift SVN r16262
2014-04-12 19:20:08 +00:00
Dmitri Hrybenko
110f85bc16 Move @exported to use new attribute infrastructure
Swift SVN r16158
2014-04-10 13:35:35 +00:00
Doug Gregor
e56c2dee3f Split first selector piece after "get" or "set" if there is no preposition.
Addresses <rdar://problem/16548821>.

Swift SVN r16057
2014-04-08 16:34:45 +00:00
Jordan Rose
835bfb15a9 [ClangImporter] Add an option (off by default) to infer "implicit properties".
In Objective-C, any method with no arguments can be used with dot syntax, as
can any method that takes one argument whose name starts with "set". This
commit adds a frontend-only flag -enable-objc-implicit-properties to look for
"setter-like" methods that match up with "getter-like" methods to import them
as Swift properties. By default, such methods are just considered unrelated
methods.

Part of <rdar://problem/16215476>

Swift SVN r16025
2014-04-07 21:49:37 +00:00
Doug Gregor
0a8d792b2f Add some more multiwords.
Swift SVN r16017
2014-04-07 20:03:36 +00:00
Doug Gregor
49387beb25 Selector splitting: don't split selectors in the middle of whitelisted "multi-words".
Swift SVN r16016
2014-04-07 19:17:23 +00:00
Doug Gregor
f6a196f700 Clang importer: when preposition splitting fails, split at the last word.
Swift SVN r16015
2014-04-07 19:17:22 +00:00
Doug Gregor
4130bb15ff Add a whitelist of designated initializers and use it in the Clang importer.
Seed the whitelist with the designated initializers for NSObject,
NSDocument, and UIDocument. We'll grow this list over time.
Fixes <rdar://problem/16521299>.


Swift SVN r16013
2014-04-07 15:06:59 +00:00
Doug Gregor
7e8d5f7cfe Use a different selector encoding in the .def file that allows nullary selectors. NFC.
Swift SVN r16012
2014-04-07 14:17:43 +00:00
Doug Gregor
0364e0b977 Assert that the # of selector pieces matches the # of method arguments.
Swift SVN r15985
2014-04-05 06:54:14 +00:00
Doug Gregor
57d54cacee Clang importer: add a hardwired table mapping selectors to method names.
Regardless of the heuristic we choose when importing Objective-C
selectors into Swift method names, there will be poor cases. Allow us
to bake specific mappings into the compiler so we can address those
cases without having to modify the Objective-C headers.

Part of <rdar://problem/16341485>.


Swift SVN r15984
2014-04-05 06:52:38 +00:00
Doug Gregor
c78a3ecd48 Clang importer: cache the result of the selector -> method mapping.
Swift SVN r15983
2014-04-05 06:04:01 +00:00
Doug Gregor
6baa7eb35c PrintAsObjC: Emit objc_runtime_name attributes for Swift classes.
This makes sure that Clang uses the mangled class names for
Swift-defined classes. Should be last compiler-side piece of
<rdar://problem/15506580>.


Swift SVN r15977
2014-04-05 04:45:21 +00:00
Doug Gregor
7102f1bb0b Clang importer: add a statistic for trailing prepositions in the first selector piece.
Swift SVN r15887
2014-04-03 18:08:01 +00:00
Doug Gregor
104cfe8919 Clang importer: add some statistics related to selector splitting.
Swift SVN r15873
2014-04-03 16:10:13 +00:00
Doug Gregor
08e7797f86 [Selector splitting] Drop non-directional prepositions from the beginning of imported argument names.
Swift SVN r15865
2014-04-03 14:22:20 +00:00
Doug Gregor
87144a8afa Make splitFirstSelectorPiece() static, now that it has just one caller
Swift SVN r15854
2014-04-03 04:20:10 +00:00
Doug Gregor
708bb64c6f Migrate initializer importing over to importMethodType().
We now consistently use the method name to form the types of
Objective-C methods.


Swift SVN r15851
2014-04-03 03:32:09 +00:00
Doug Gregor
e418e93511 Start cleaning up method name importing.
Import a selector into a Swift method name, performing splitting at
that point. Use the resulting method name to determine the argument
names of the parameters, rather than trying to chop up the selector
again. There's more refactoring to do here.

This fixes a longstanding bug where the first argument of an
Objective-C method got the internal parameter name when it should
have gotten no name at all.

Swift SVN r15850
2014-04-03 00:34:40 +00:00
Doug Gregor
527b147ba7 Revert "Allow the first name of a selector-style function declaration to be separated."
This reverts r15140.

Conflicts:
	include/swift/Serialization/ModuleFormat.h
	lib/Parse/ParsePattern.cpp

Swift SVN r15846
2014-04-02 23:27:52 +00:00
Doug Gregor
12d0eeb324 Move more of the Clang importer's camelCase logic to the new utilities.
Swift SVN r15843
2014-04-02 23:06:22 +00:00
Doug Gregor
6496d69cb8 Simplify down to a single command-line option for preposition splitting.
Swift SVN r15835
2014-04-02 21:44:19 +00:00
Argyrios Kyrtzidis
23bd9a1933 [ClangImporter] Add ClangImporter::getClangModuleHash().
Swift SVN r15809
2014-04-02 17:39:10 +00:00
Doug Gregor
d6a173fead Add some utilities for working with camelCase names.
Swift SVN r15802
2014-04-02 15:18:32 +00:00
John McCall
c163b30f1e Enable importing ObjC pointers as UncheckedOptional.
There's no point in maintaining a driver option for this
because of the extent of the library changes required to
make it work.

Swift SVN r15784
2014-04-02 09:37:16 +00:00
Doug Gregor
9189145cc5 Change DeclName over to basename(arg1:arg2:...argN:).
Swift will use the basename + argument names formulation for
names. Update the DeclName interfaces, printing, and __FUNCTION__ to
use the method syntax.

We'll still need to rework the "x.foo:bar:wibble:" syntax; that will
come (significantly) later.

Swift SVN r15763
2014-04-02 00:00:03 +00:00
Dmitri Hrybenko
c2354eb365 USR generation: generate USRs for imported macros
I do feel bad about introducing ClangModuleLoader, but it is better than a
layering violation (using libClangImporter from libAST).


Swift SVN r15679
2014-03-31 15:13:00 +00:00
Dmitri Hrybenko
286b309970 Return macros in visible decl lookup
This affects code completion and module interface printing.


Swift SVN r15577
2014-03-28 11:15:12 +00:00
Dmitri Hrybenko
1d6c76c352 Module interface printing: pass through documentation comments for imported
declarations

rdar://16408910


Swift SVN r15576
2014-03-28 10:54:06 +00:00
Argyrios Kyrtzidis
d084edd951 [ClangImporter] Add ClangImporter::getClangOwningModule() for a ClangNode.
Swift SVN r15549
2014-03-27 05:01:12 +00:00
Ted Kremenek
8162660be6 Wire up basic driver support for App Extension restrictions.
The frontend/driver flag is "-application-extension'.  This
activates a language option which will be used for more restrictive
availability checking.

Operationally, this also passes...
  - "-fapplication-extension" to the clang importer
  - "-application_extension" to ld

Swift SVN r15543
2014-03-27 01:05:43 +00:00
Dmitri Hrybenko
f3faddefb4 Don't return macros in visible decl lookup, this crashes inside Clang while
doing code completion from Cocoa module


Swift SVN r15529
2014-03-26 21:49:18 +00:00
Dmitri Hrybenko
92b29ef045 Revert "Module interface printing: pass through documentation comments for
imported declarations"

rdar://16408910


Swift SVN r15527
2014-03-26 21:28:42 +00:00
Jordan Rose
c2f2e7f3c3 [ClangImporter] Handle categories on partial interfaces.
Make sure to resolve a class's signature (which includes its @objc-ness)
before seeing if we should even try to look it up in Clang.

Swift SVN r15524
2014-03-26 21:08:51 +00:00
Dmitri Hrybenko
30c6eeff16 Module interface printing: pass through documentation comments for imported
declarations

rdar://16408910


Swift SVN r15511
2014-03-26 16:16:02 +00:00
Dmitri Hrybenko
962c924ab1 Clang importer: put macros into correct module and return them in visible decl
lookup


Swift SVN r15500
2014-03-26 10:27:44 +00:00
Jordan Rose
8d35d75ce3 [ClangImporter] Resolve forward class declarations to definitions in Swift.
When we see an unresolved @class in a Clang module, we check the class name
against the classes in the Swift module with the same name.

This unfortunately necessitates putting a reference to the active type checker
into the ClangImporter, because the class in the current Swift module hasn't
been type-checked yet. This is now being used everywhere we do a lookup.

<rdar://problem/16295994>

Swift SVN r15355
2014-03-22 00:19:59 +00:00