Commit Graph

21693 Commits

Author SHA1 Message Date
Jordan Rose
3087e8d5ea Add the notion of "re-exported" modules, and use that where it makes sense.
Rather than automatically re-exporting or not re-exporting every import in
a TranslationUnit, we'll eventually want to control which imports are local
(most of them) and which imports are shared with eventual module loaders.
It's probably not worth implementing this for TranslationUnit, but
LoadedModule can certainly do something here.

Currently, a LoadedModule is even more permissive than a TranslationUnit:
all imports are re-exported. We can lock down on this once we have a
re-export syntax.

Swift SVN r6523
2013-07-23 23:10:17 +00:00
Jordan Rose
110d644297 Provide a skeleton for re-exports from serialized modules...
...and use it for shadowed modules (e.g. the Clang module "Foundation"
referenced by the Swift module "Foundation"), so that we can actually
find "NSString" when building AppKit.

Additionally, record shadowed modules as dependencies, so that they can
be loaded when the adapter module is loaded.

Swift SVN r6522
2013-07-23 23:10:13 +00:00
Jordan Rose
f12f3c29ac Reuse "LookupCache" pointer for a LoadedModule’s owner.
Minor size optimization. No functionality change.

Swift SVN r6521
2013-07-23 23:10:11 +00:00
Jordan Rose
be6c5b3707 [serialization] Preserve the implicit bit for patterns.
This is used by code completion to determine if curried
arguments are implicit, e.g. for method calls.

Swift SVN r6516
2013-07-23 23:09:56 +00:00
Dmitri Hrybenko
dcd26e8a1f Code completion: implement completion of imported Clang declarations by first
importing them

Because going through the import for every code completion request is slow,
Clang code completion results are cached in the CodeCompletionContext.  The
cache needs to be invalidated whenever a new Clang module is loaded.  In order
to implement this, ModuleLoadListener class was added.


Swift SVN r6505
2013-07-23 18:12:58 +00:00
John McCall
e7ce17ba09 Permit some micro-optimizations when querying canonical types.
Swift SVN r6503
2013-07-23 17:23:56 +00:00
Dmitri Hrybenko
03e6c36676 Code completion: correctly do name lookup into extensions
This change also exposes and fixes a bug where we would improperly filter
shadowed declarations.  removeShadowedDecls() assumed that all decls had the
same name, but when it is used from lookupVisibleDecls(), this is not true.
Thus, we group decls not only by signature, but also by name.


Swift SVN r6460
2013-07-22 18:05:43 +00:00
Doug Gregor
81b3fa2902 Use BUILTIN_TYPE to distinguish builtin types in the type checker.
Restore ProtocolType to its proper always-canonical-typedness, now
that the type checker isn't conflating "canonical" with "no
interesting conversions".


Swift SVN r6451
2013-07-22 15:39:59 +00:00
Doug Gregor
a0b1ec651a When printing an integer literal, use the text form when the type contains a type variable.
Swift SVN r6445
2013-07-22 14:47:40 +00:00
Dmitri Hrybenko
295a263004 Remove a stale comment
Swift SVN r6397
2013-07-19 23:44:10 +00:00
Dmitri Hrybenko
bc67a82be8 lookupVisibleDecls(): use correct abstractions of lookup kinds
Removes the boolean IsTypeLookup and OnlyInstanceMembers, which were totally
misleading.

This fixes some bugs in lookupVisibleDecls, which allows us to remove
workarounds in code completion, that were not correct in some corner cases.

Now we also code complete references to instance functions in static contexts,
but code completion results in this case state the type of the resulting object
incorrectly.


Swift SVN r6396
2013-07-19 23:42:54 +00:00
Dmitri Hrybenko
44b4b38ac3 Use nullptr instead of '0'
Swift SVN r6381
2013-07-19 18:06:59 +00:00
Dmitri Hrybenko
16229f80a6 Eliminate IsTypeLookup parameter in the implementation of lookupVisibleDecls()
It is not used at all.


Swift SVN r6380
2013-07-19 17:22:34 +00:00
John McCall
170868921b UnboundGenericType is now an UNCHECKED_TYPE.
Change a couple routines which can validly be used on
unchecked decls/types to not generically handle UNCHECKED_TYPE.

Swift SVN r6374
2013-07-19 03:10:15 +00:00
John McCall
d710c0f5f2 Use the type-in-context in the ExtensionDecl for a generic type.
This is a temporary hack until we properly make these carry
their own generic parameters.

This removes the last valid way to get UnboundGenericTypes in
a checked program.

Swift SVN r6373
2013-07-19 03:10:10 +00:00
Dmitri Hrybenko
1ae5699215 Code completion: don't add 'This' and typealiases to code completion results
for protocols when code completing outside the protocol's DeclContext on a
protocol's instance

'This' is obviously not allowed, but references to nested typealiases are
sometimes allowed on protocol instances, but only sometimes (filed
rdar://14489286).  Just don't display such code completion results for now.


Swift SVN r6372
2013-07-19 02:35:21 +00:00
Dmitri Hrybenko
0fc469e80a lookupVisibleDecls(): now we don't find references to generic types outside of
the containing DeclContext

Fixes a few FIXMEs in code completion where we were providing results that
refer to generic arguments outside of their scope.


Swift SVN r6370
2013-07-19 01:46:30 +00:00
Doug Gregor
c4b121a11b Integrate type checking of default arguments into the type checking of the function/constructor body.
This eliminates the odd separate pass over default arguments, as well
as the isFirstPass distinction for type checking patterns,
centralizing default argument checking. It actually regresses us
slightly (see <rdar://problem/14488311>) due to name binding happening
too early (and, therefore, in the wrong context). This will be fixed
by moving name binding into constraint generation.


Swift SVN r6368
2013-07-19 00:28:35 +00:00
Dmitri Hrybenko
e4b44a6bbb Add a 'current module' parameter to lookupVisibleDecls() so that it can do what
is documented: look up members of a type that are visible from a specific
module.  It does not matter much now, but when we have access control, it will.

Before this change, lookupVisibleDecls() tried to guess the *defining* module
of the type, and gave up if it could not.  It forced us to duplicate some
lookup logic for some types (archetypes and protocol compositions).  Also add a
test that lookup finds members of archetype's superclass, which the original
(duplicated) code did not handle.


Swift SVN r6363
2013-07-18 23:32:16 +00:00
Anna Zaks
74bc6f05b2 Add "noreturn" attribute : stage 1
- Add the attribute to AnyFunctionType::ExtInfo.
- Propagate the attributes from DeclAttributes to AnyFunctionType for
  FuncDecls in TypeCheckDecl.cpp.
- Make sure the new attribute is serialized.

The main missing pieces are checking the applicability of the type attributes
on the FuncDecl and teaching typechecker about conversions on types with
noreturn.

Swift SVN r6359
2013-07-18 22:57:22 +00:00
Anna Zaks
92e07c6a54 Use ExtInfo struct to pass around call related info in FunctionType and PolymorphicFunctionType getters.
Swift SVN r6358
2013-07-18 22:57:21 +00:00
Doug Gregor
acdff12ca0 Unique tuple types that have initializers.
Swift SVN r6355
2013-07-18 22:25:40 +00:00
Dmitri Hrybenko
d2b324cf63 Code completion: code complete after module names (for example, "swift.#^A^#")
Swift SVN r6354
2013-07-18 22:23:41 +00:00
Dmitri Hrybenko
722cc29cab Factor out DeclContext::getParentModule(). This cleans up a few places where
similar loops were duplicated.

No functionality changes.


Swift SVN r6353
2013-07-18 20:41:58 +00:00
Doug Gregor
ad1a9ac2c3 Eliminate default argument expressions from the type system.
Elements of a tuple type now know if there is a default argument, and
what kind of default argument it is (callee side, __FILE__, __LINE__,
__COLUMN__), but they don't have an actual expression. There are a
number of cleanups this enables that will follow. 

Note that the serialization support is as-yet-untested.


Swift SVN r6351
2013-07-18 18:49:32 +00:00
Dmitri Hrybenko
be7d4ae71d Code completion: fix a few crashes while code completing expressions that have
generic parameter lists


Swift SVN r6349
2013-07-18 18:37:58 +00:00
Doug Gregor
6804b23564 Teach scalar-to-tuple conversions to use the resilient entry points for default arguments.
There is a bunch of copy-and-paste here from the tuple-shuffle
code. The expected trajectory is that ScalarToTupleExpr will grow into
a general TupleConversionExpr, obviating the need for TupleShuffleExpr
entirely and eliminating the redundancy.



Swift SVN r6347
2013-07-18 17:23:33 +00:00
Argyrios Kyrtzidis
5082f375a4 Print a vararg in a pattern as written, without the array slice notation.
rdar://14447454

Swift SVN r6341
2013-07-18 01:12:52 +00:00
Manman Ren
b8262ea1d3 SIL Parser: parse string_literal and float_literal.
Swift SVN r6338
2013-07-17 22:14:01 +00:00
Dmitri Hrybenko
c22ac1dc06 lookupVisibleDecls() should operate on a canonical type so that it does not
need to unwrap the type sugar.

This was uncovered by the removal of IdentifierType and removal of
getCanonicalType() in code completion, which was working around
lookupVisibleDecls() not working for IdentifierTypes.


Swift SVN r6332
2013-07-17 18:28:52 +00:00
Argyrios Kyrtzidis
7476762dae Remove IdentifierType from the type system.
Swift SVN r6327
2013-07-17 14:57:38 +00:00
Argyrios Kyrtzidis
f616eeee8b Utilize TypeReprs for type checking.
-Refactor Parser to stop creating types
-Refactor TypeChecker to create types by resolving TypeReprs.
-Remove "validation" bit from the type system.
  We don't need to "validate" every type that gets created but there's still a validation bit in TypeLoc,
  necessary because of generic substitutions.

Swift SVN r6326
2013-07-17 14:57:35 +00:00
John McCall
5db410b29f Fix latent bugs with ReferenceStorageType fields.
Swift SVN r6323
2013-07-17 09:20:24 +00:00
Dmitri Hrybenko
fea08cb773 Code completion: add function arguments (including implicit 'this') and generic
arguments to expr-postfix code completion results


Swift SVN r6319
2013-07-17 02:33:54 +00:00
Dmitri Hrybenko
104705c187 Handle ProtocolCompositionType in lookupVisibleDecls()
This enables code completion for 'protocol<...>' types.


Swift SVN r6317
2013-07-17 01:17:35 +00:00
Dmitri Hrybenko
858ce26b2b Code complete expressions that type check to ArchetypeTypes
This required fixing a bug in lookupVisibleDecls(), which did not return any
results for ArchetypeTypes.


Swift SVN r6310
2013-07-16 23:49:25 +00:00
Jordan Rose
9156e805f5 Don't crash when looking for imports in a loaded module.
At some point this will change because of re-exported modules, but for now
just don't crash when performing unqualified lookup on a loaded module.

Also, auto-load our adapter libraries for loaded modules, not just TUs.
Include "POSIX" in this list. (We really need autolinking.)

Swift SVN r6303
2013-07-16 23:10:49 +00:00
Doug Gregor
423abc5038 Codify the default argument hack for __FILE__/__LINE__/__COLUMN__.
Teach TuplePatternElt to keep track of the kind of the default
argument: none, normal (provided by calling into the appropriate
callee generator), __FILE__, __LINE__, or __COLUMN__. For the latter
three cases, the type checker forms the appropriate argument as part
of the call. 

The actual default argument expression will only be held in the tuple
pattern element when we've parsed it; it won't be serialized or
deserialized, because only the defining module cares. This is a step
toward eliminate the initialization expression from tuple types.

The extension to TupleShuffleExpr is a hack, which will also be
replicated in ScalarToTupleExpr, until we finally rework the
representation of TupleShuffleExpr (<rdar://problem/12340004>).


Swift SVN r6299
2013-07-16 22:52:38 +00:00
Anna Zaks
98d180c3f3 Pack AnyFunctionType’s extra info inside a separate class stored inside the TypeBits.
Refactored the function calling conventions,"thin" attribute, and other extra function info bits to be stored inside the TypeBits. The isAutoClosure and IsBlock bits are also pulled up into AnyFunctionType.

This should make it easier to construct and propagate the attributes. Using ExtInfo struct to simplify the FunctionType is coming up next.

Swift SVN r6284
2013-07-16 01:50:31 +00:00
Argyrios Kyrtzidis
68ed84fe68 Allow TypeLocs as parameters to diagnostics.
Eventually TypeLocs coming from the Parser will contain only a TypeRepr and the TypeChecker will resolve and add the type.
Passing a TypeLoc to a diagnostic means "print as user written" (even before typechecking)
and if there is no TypeRepr (e.g. due to a TypeLoc coming from a module without location info) print the type.

Swift SVN r6280
2013-07-16 01:39:35 +00:00
Joe Groff
844465d9b9 Resolve and type-check OneOfElementPatterns.
If we see '.Foo' or '.Foo(...)' in a case, resolve it as a OneOfElementPattern with element to be determined at type-checking time. If we see 'A.B' or 'A.B(...)', try to resolve 'A.B' as a qualified reference to a OneOfElementDecl, and resolve the expression as a OneOfElementPattern referencing that decl if we find one. During type-checking, resolve the element decl for unresolved OneOfElementPatterns, then match the subpattern to the type of the element's associated data (or void if it has none).

A few cases don't yet work right that ought to:

- Qualified references to generic oneof cases with generic arguments elided, e.g. 'case Optional.None:'
- Qualified references to generic oneof cases through a module, e.g. 'case swift.Optional<Int>.None:'

Swift SVN r6278
2013-07-16 01:25:34 +00:00
Dmitri Hrybenko
e650f2f8fc Implement basic code completion at the beginning of the expr-postfix
We produce only names that are found by name lookup, no keywords or types yet.


Swift SVN r6276
2013-07-16 00:49:08 +00:00
Dmitri Hrybenko
db81e189b7 Followup for r6272: pass const ASTContext whenever possible
Swift SVN r6275
2013-07-15 23:50:43 +00:00
Dmitri Hrybenko
aa46064432 Pass a const ASTContext and const DeclContext whenever possible. This makes it
possible to use lookupVisibleDecls() with a const DeclContext.


Swift SVN r6274
2013-07-15 23:39:00 +00:00
Argyrios Kyrtzidis
37dc84e13c Remove VarargBaseType from TuplePatternElt and introduce a bit in TuplePattern to indicate if there is a vararg.
The semantics of varargs (only for the last element) make it more appropriate as a property of the TuplePattern.
Also free the Parser from needing to construct synthetic types (ArraySlice for type of vararg element) to
accommodate the TypeChecker and move the logic to the TypeChecker. This will be more beneficial when the parser stops
creating types in general.

Swift SVN r6271
2013-07-15 20:21:30 +00:00
Doug Gregor
cf9b8a302e Remove the notion of 'unresolved' types entirely.
Unresolved types are a holdover from the old type checker that not
longer have any purpose in the type system.


Swift SVN r6242
2013-07-13 05:27:22 +00:00
Doug Gregor
d42e385371 Remove UnstructuredUnresolvedType.
Swift SVN r6241
2013-07-13 05:10:38 +00:00
Joe Groff
3b21e6a201 Add a OneOfElementPattern AST node type.
Add a node for references to oneof cases in patterns. No user-facing functionality change yet.

Swift SVN r6239
2013-07-13 01:21:31 +00:00
Argyrios Kyrtzidis
b7817e4879 Remove VarargBaseTy field from TupleTypeElt.
Use a bit to indicate whether the element is a vararg one and infer the
VarargBase type via the element type.

Swift SVN r6220
2013-07-12 22:24:31 +00:00
Joe Groff
d956fdbd9e Update 'oneof' syntax.
Give oneof bodies syntax consistent with other NominalTypes. Give oneof elements first-class declaration syntax using the 'case' introducer, as suggested by Jordan. Oneofs can contain 'case' decls, functions, properties, and constructors, but not physical ivars. Non-oneof scopes cannot contain 'case' decls. Add some QoI to the oneof 'case' parser to also parse and complain about things that resemble switch 'case' labels inside decl contexts.

Swift SVN r6211
2013-07-12 20:42:19 +00:00