Commit Graph

2951 Commits

Author SHA1 Message Date
John McCall
88ee76df5b Imported modules only import the stdlib if it exists.
Any configuration where the stdlib doesn't exist is an atypical one,
but being more permissive here lets us successfully import many kinds
of declarations even without a stdlib.  That in turn makes it possible
to write IRGen tests that need foreign types and exercise a specific
target without restricting the test to only run when building that
target.
2018-09-11 18:07:32 -04:00
Doug Gregor
ac37747c78 [Type checker] Break isObjC/getObjCSelector cycle.
When we're marking a declaration as @objc and recording it in the
class and source-file lookup tables (for @objc collision detection),
don't cause a cycle by querying `getObjCSelector()`. This is somewhat
of a hack: a better long-term approach would be to move the recording
much later, and request'ify the name computation. That'll be follow-up
work.
2018-09-10 17:30:17 -07:00
Harlan
eb75ad80dc [AST] Remove stored TypeLoc from TypedPattern (#19175)
* [AST] Remove stored TypeLoc from TypedPattern

TypedPattern was only using this TypeLoc as a means to a TypeRepr, which
caused it to store the pattern type twice (through the superclass and through
the TypeLoc itself.)

This also fixes a bug where deserializing a TypedPattern doesn't store
the type correctly and generally cleans up TypedPattern initialization.

Resolves rdar://44144435

* Address review comments
2018-09-07 21:14:04 -07:00
Jordan Rose
37ec248823 Add ModuleDecl::ReverseFullNameIterator
Package up the logic that generates a full Clang module name, so that
(a) we don't have to deal with clang::Module in quite as many places
in the /Swift/ compiler, and (b) we can avoid the cost of a temporary
string in a few places.

The main places where this is /not/ adopted is where we don't just
want to know the parent module name, but actually the module itself.
This is mostly indexing-related queries, which use the very similar
ModuleEntity class also defined in Module.h. I didn't quite see an
obvious way to unify these, but that might be where we want to go.

No functionality change.
2018-09-06 19:53:59 -07:00
John McCall
b3120907d5 Merge pull request #15691 from rjmccall/max-alignment-16
Cap the alignment of all types in Swift at 16
2018-08-28 21:14:23 -04:00
John McCall
c1f99b5fdb Cap type alignment in Swift at 16.
rdar://31411216
2018-08-28 16:13:50 -04:00
Ben Cohen
6567438027 Squash release build warnings (#18986) 2018-08-28 09:56:17 -07:00
Slava Pestov
d9bd0d96cf ClangImporter: Refactor usage of SubscriptDecl::getIndicesInterfaceType() 2018-08-27 21:15:38 -07:00
Slava Pestov
95c035fe3f Merge pull request #18985 from slavapestov/lazy-self-param
Consolidate code for creating 'self' parameter and only create it when needed
2018-08-25 12:23:32 -07:00
Slava Pestov
c360c82850 AST: Automatically create the 'self' parameter when needed
Parsed declarations would create an untyped 'self' parameter;
synthesized, imported and deserialized declarations would get a
typed one.

In reality the type, if any, depends completely on the properties
of the function in question, so we can just lazily create the
'self' parameter when needed.

If the function already has a type, we give it a type right there;
otherwise, we check if a 'self' was already created when we
compute a function's type and set the type of 'self' then.
2018-08-25 10:44:55 -07:00
Robert Widmann
014fd952ef [NFC] Silence a bunch of Wunused-variable diagnostics 2018-08-24 15:16:40 -07:00
Slava Pestov
4553916348 Merge pull request #18815 from slavapestov/sil-lowering-function-type
Refactor SIL type lowering to not use FunctionType::getOld()
2018-08-20 17:04:38 -04:00
Jordan Rose
21b6cdd301 [ClangImporter] A method can't interfere with an existing property (#18749)
That is, if we encounter a property declaration, and a no-argument
method is visible, it's only a problem if there's not already a
property there. (Arguably this means that it's either not a problem at
all, or that we shouldn't be mirroring protocol methods onto classes
if there's a conflicting property, but this change doesn't attempt to
answer that.)

https://bugs.swift.org/browse/SR-8490
2018-08-20 08:37:29 -07:00
Slava Pestov
a762dd6c0f ClangImporter: Fix some comments to match recent refactoring 2018-08-18 01:54:17 -04:00
Slava Pestov
527ff375dc AST: Rename old form of {Generic,}FunctionType::get() to getOld()
This makes it easier to grep for and eventually remove the
remaining usages.

It also allows you to write FunctionType::get({}, ...) to call the
ArrayRef overload empty parameter list, instead of picking the Type
overload and calling it with an empty Type() value.

While I"m at it, in a few places instead of renaming just clean up
usages where it was completely mechanical to do so.
2018-08-17 19:28:17 -04:00
Jordan Rose
537954fb93 [AST] Rename several DeclContext methods to be clearer and shorter (#18798)
- getAsDeclOrDeclExtensionContext -> getAsDecl

This is basically the same as a dyn_cast, so it should use a 'getAs'
name like TypeBase does.

- getAsNominalTypeOrNominalTypeExtensionContext -> getSelfNominalTypeDecl
- getAsClassOrClassExtensionContext -> getSelfClassDecl
- getAsEnumOrEnumExtensionContext -> getSelfEnumDecl
- getAsStructOrStructExtensionContext -> getSelfStructDecl
- getAsProtocolOrProtocolExtensionContext -> getSelfProtocolDecl
- getAsTypeOrTypeExtensionContext -> getSelfTypeDecl (private)

These do /not/ return some form of 'this'; instead, they get the
extended types when 'this' is an extension. They started off life with
'is' names, which makes sense, but changed to this at some point.  The
names I went with match up with getSelfInterfaceType and
getSelfTypeInContext, even though strictly speaking they're closer to
what getDeclaredInterfaceType does. But it didn't seem right to claim
that an extension "declares" the ClassDecl here.

- getAsProtocolExtensionContext -> getExtendedProtocolDecl

Like the above, this didn't return the ExtensionDecl; it returned its
extended type.

This entire commit is a mechanical change: find-and-replace, followed
by manual reformatted but no code changes.
2018-08-17 14:05:24 -07:00
Doug Gregor
0a26e333bb Switch two simple callers over to decl-based lookupQualified. 2018-08-14 02:39:24 -07:00
Slava Pestov
319970df23 ClangImporter: Remove redundant mapTypeInto/OutOfContext() calls
It looks like as of 42246cae8a the importer
deals exclusively with interface types, and recent refactoring eliminated
the requirement to store contextual types into VarDecls and ParamDecls,
so we can remove this last little bit of mapping here.
2018-08-11 03:29:16 -07:00
Slava Pestov
f997ff4f68 ClangImporter: Convert function/method/accessor import to use ParameterList::getParams()
Note that these functions used to return a FunctionType; now, they
return the result type instead:

- importFunctionType()
- importMethodType()
- importAccessorMethodType()

The parameters were already being returned in the form of a ParameterList
of ParamDecls.

This actually has the effect of making the code simpler, because callers
would always take them apart and build new function types anyway.
2018-08-11 03:29:16 -07:00
Slava Pestov
088b7bdc33 Remove unnecessary include of ModuleFormat.h 2018-08-10 18:24:23 -07:00
Slava Pestov
4b258e86e6 AST: Stop setting contextual types on ParamDecls
VarDecl::getType() lazily maps the interface type into context if needed.
2018-08-10 13:33:12 -07:00
Doug Gregor
8f36061f25 Merge pull request #18530 from DougGregor/protocol-decl-based-resolution
[Name lookup] Use decl-based name lookup for protocol-related queries
2018-08-06 20:44:59 -07:00
Doug Gregor
7d3dd4983d [AST] Eliminate two simple uses of (NominalType|Extension)Decl::getInheritedType().
Simple checks for the presence of a protocol in the “inherited” list should only
require a scan through that list + name lookup; use those facilities instead of
recursing through the type checker.
2018-08-06 16:59:40 -07:00
swift-ci
71f0248b0a Merge remote-tracking branch 'origin/master' into master-next 2018-08-06 11:07:55 -07:00
Doug Gregor
bd5f5d80e4 [AST] Add ExtensionDecl::getExtendedNominal().
Introduce ExtensionDecl::getExtendedNominal() to provide the nominal
type declaration that the extension declaration extends. Move most
of the existing callers of the callers to getExtendedType() over to
getExtendedNominal(), because they don’t need the full type information.

ExtensionDecl::getExtendedNominal() is itself not very interesting yet,
because it depends on getExtendedType().
2018-08-03 11:26:48 -07:00
swift-ci
fe2b1bbd3a Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 19:29:10 -07:00
swift-ci
ae0b5a0d8f Merge pull request #18328 from CodaFi/virtual-insanity 2018-07-31 19:21:40 -07:00
Robert Widmann
61203921f5 Diagnose clobbering clang's VFS with our own
There are three modes of concern here:

1) User provides -vfsoverlay but not -Xcc -ivfsoverlay

Recommended behavior.

2) User provides -Xcc -ivfsoverlay but not -vfsoverlay

Legacy behavior.  Clang will handle setup for the VFS.

3) User provides both -vfsoverlay and -Xcc -ivfsoverlay

Unsupported.  We will ignore the clang VFS overlays and substitute our
own.  We will also pop a warning about this.
2018-07-31 15:11:52 -07:00
swift-ci
5830e237ff Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 13:29:50 -07:00
Doug Gregor
9eb9898321 Merge pull request #18364 from DougGregor/name-lookup-requests
[Name lookup] Introduce requests for several name lookup operations.
2018-07-31 13:23:38 -07:00
Robert Widmann
0e58b7fd14 Plumbing for a Virtual File System
Adds the -vfsoverlay frontend option that enables the user to pass
VFS overlay YAML files to Swift. These files define a (potentially
many-layered) virtual mapping on which we predicate a VFS.

Switch all input-based memory buffer reads in the Frontend to the new
FileSystem-based approach.
2018-07-31 13:16:14 -07:00
swift-ci
cae543166c Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 11:29:51 -07:00
Doug Gregor
792d934e3e [Clang importer] Avoid recursion through isObjC more directly.
Also address some review comments related to the name lookup requests.
2018-07-31 10:20:15 -07:00
Doug Gregor
d07fa5ab69 Switch many callers of ClassDecl::getSuperclass() to ClassDecl::getSuperclassDecl().
ClassDecl::getSuperclass() produces a complete interface type describing the
superclass of a class, including any generic arguments (for a generic type).
Most callers only need the referenced ClassDecl, which is (now) cheaper
to compute: switch those callers over to ClassDecl::getSuperclassDecl().

Fixes an existing test for SR-5993.
2018-07-31 10:14:44 -07:00
Doug Gregor
2860557a77 [Name lookup] Use the declaration-based lookupQualified() where it’s easy.
Switch a number of callers of the Type-based lookupQualified() over to
the newer (and preferred) declaration-based lookupQualified(). These are
the easy ones; NFC.
2018-07-31 10:14:44 -07:00
Slava Pestov
2bd217e58a AST: Change AbstractStorageDecl::getValueInterfaceType() to strip off reference storage qualifiers
Also, remove AbstractStorageDecl::getStorageInterfaceType(), which was
almost identical.
2018-07-31 00:38:09 -07:00
swift-ci
f7b8996498 Merge remote-tracking branch 'origin/master' into master-next 2018-07-30 20:59:23 -07:00
Slava Pestov
294f54399f ClangImporter: Only set overrides on class members
Fixes <rdar://problem/42635132>.
2018-07-30 17:27:37 -07:00
Slava Pestov
90c215cec9 ClangImporter: Set the 'is dynamic' bit explicitly on synthesized declarations 2018-07-30 15:47:34 -07:00
swift-ci
cba2d0bdfd Merge remote-tracking branch 'origin/master' into master-next 2018-07-29 20:48:56 -07:00
Mark Lacey
1c42ee2e07 [ClangImporter] Replace getInput() with getParams(). 2018-07-29 16:25:24 -07:00
swift-ci
9711455ad8 Merge remote-tracking branch 'origin/master' into master-next 2018-07-26 14:49:10 -07:00
Jordan Rose
ca5eacf016 Merge pull request #18203 from jrose-apple/strung-out
Consistently get extensions from FileTypes.h.
2018-07-26 14:30:52 -07:00
swift-ci
7414f8e8f5 Merge remote-tracking branch 'origin/master' into master-next 2018-07-26 11:09:23 -07:00
Jordan Rose
690d427b84 [ClangImporter] Check for API-note-provided attributes by source loc (#16704)
...rather than by whether they're implicit. We're planning to make
them explicit (prompted by a change in upstream Clang that no longer
prints implicit attributes).

rdar://problem/40346997 (Swift side)
2018-07-26 11:02:21 -07:00
Jordan Rose
97b152d71e Consistently get extensions from swift/Basic/FileTypes.h (part 2)
Remove the last few literal extension strings from Strings.h in favor
of the file_types APIs, and use those APIs in a few more places.
2018-07-25 22:23:01 -07:00
Bob Wilson
ffa88c3d28 Merge remote-tracking branch 'origin/master' into master-next 2018-07-23 14:38:55 -07:00
Bob Wilson
ad8cd14233 Merge pull request #18127 from bob-wilson/fix-indentation
NFC: Fix indentation around the newly renamed LLVM_DEBUG macro.
2018-07-23 14:23:19 -07:00
swift-ci
d40f3d3ced Merge remote-tracking branch 'origin/master' into master-next 2018-07-23 13:49:26 -07:00
Jordan Rose
75052e8a0c [ClangImporter] Update for changes in module map searching in r337430 (#18062)
Patch by Bruno Lopes

rdar://problem/42128087
2018-07-23 10:45:14 -07:00