Commit Graph

102 Commits

Author SHA1 Message Date
Dmitri Hrybenko
11fea869c1 Change 'switch' not to fall through between empty cases and always require at
least one statement per case

rdar://16301313


Swift SVN r15266
2014-03-20 11:44:59 +00:00
Dmitri Hrybenko
ef33f159e5 Code completion: implement completion for inherited initializers
<rdar://problem/16205994> Code completion: add tests for inherited initializers


Swift SVN r15114
2014-03-16 21:10:09 +00:00
Chris Lattner
7bbd9b05a5 Rename DynamicLookup -> AnyObject in a few more comments. This leaves
the DynamicLookupExpr expression and the DeclVisibilityKind::DynamicLookup
enum.  These seem right to me, more descriptive than renaming them AnyObject.
With this, I consider 13327098 to be done.



Swift SVN r14654
2014-03-04 22:17:38 +00:00
Chris Lattner
d758e0dfe3 Eliminate more "DynamicLookup" in favor of "AnyObject", this is the
bulk of finishing rdar://13327098.


Swift SVN r14653
2014-03-04 22:15:46 +00:00
Dmitri Hrybenko
0c4c291d20 Fix code completion in variable initializers that are not at the top level
Code completion used to suggest non-static members in member var initializer,
and incorrectly reported the reason why the declarations are visible from the
initializer.


Swift SVN r14457
2014-02-27 11:13:25 +00:00
Joe Pamer
988a5877f2 Some updates:
- Respond to Doug's code review feedback
   - Stop hacking around with scopes and use "emplace" to work around RAII in the inactive config case
   - Limit use of StringRef on the front-end, in favor of std::string
   - Use ArrayRef rather than SmallVector within IfConfigDecl
   - Reorder new property declarations on BraceStmt to prevent unnecessary alignment issues
- Update ParseBraceItems to better capture top-level declarations, rather than using token lookahead

Swift SVN r14306
2014-02-24 18:16:49 +00:00
Joe Pamer
f83f94d9d8 Support build and target configurations
These changes add support for build and target configurations in the compiler.
Build and target configurations, combined with the use of #if/#else/#endif allow
for conditional compilation within declaration and statement contexts.

Build configurations can be passed into the compiler via the new '-D' flag, or
set within the LangOptions class. Target configurations are implicit, and
currently only "os" and "arch" are supported.

Swift SVN r14305
2014-02-24 18:16:48 +00:00
Chris Lattner
b35858f131 Simplify more cases to use getSemanticsProvidingPattern.
Change Pattern::getBoundName to look through VarPatterns,
which means that the presence of var/let in an argument list no longer 
change the mangling of the function.



Swift SVN r11780
2013-12-31 22:25:43 +00:00
Dmitri Hrybenko
f9eacede74 Lookup visible decls: eliminate duplicate associated types that come from
different implemented protocols


Swift SVN r11534
2013-12-21 01:02:32 +00:00
Dmitri Hrybenko
94fac9f76a Lookup visible decls: collect associated types recursively
Swift SVN r11532
2013-12-21 00:31:31 +00:00
Dmitri Hrybenko
f106ad4685 Lookup visible decls: return associated types from protocols that the type
conforms to

This is not the final design that Doug and I discussed, but this is a strict
improvement over what we had previously (we did not report them at all).


Swift SVN r11530
2013-12-21 00:09:24 +00:00
Joe Groff
017440165e Fix the weird capitalization of MetaTypeType.
Swift SVN r11475
2013-12-19 18:43:08 +00:00
Jordan Rose
2881fd73c0 Convert a group of std::sets to DenseSets on principle.
Also, don't call count() and then insert(); just check the result of insert().

No functionality change.

Swift SVN r10838
2013-12-05 01:51:17 +00:00
Jordan Rose
f5eae17dd2 Move VectorDeclConsumer to swift/AST/NameLookup.h.
This started out life as a helper class, but it's been used in multiple places.
Better to just have a single copy.

No functionality change.

Swift SVN r10835
2013-12-05 01:51:12 +00:00
Jordan Rose
8b8cc8ee62 Turn SerializedModule into SerializedASTFile.
Part of the FileUnit restructuring. A serialized module is now represented as
a TranslationUnit containing a single SerializedASTFile.

As part of this change, the FileUnit interface has been made virtual, rather
than switching on the Kind in every accessor. We think the operations
performed on files are sufficiently high-level that this shouldn't affect us.

A nice side effect of all this is that we now properly model the visibility
of modules imported into source files. Previously, we would always consider
the top-level imports of all files within a target, whether re-exported or
not.

We may still end up wanting to distinguish properties of a complete Swift
module file from a partial AST file, but we can do that within
SerializedModuleLoader.

Swift SVN r10832
2013-12-05 01:51:09 +00:00
Dmitri Hrybenko
4d44c7e9df Visible decl lookup: clarify logic for functions, no functionality change
Swift SVN r10488
2013-11-15 02:02:42 +00:00
Dmitri Hrybenko
47951efcb9 Implement code completion support for static variables
Swift SVN r10487
2013-11-15 01:32:20 +00:00
Dmitri Hrybenko
022136ec2e Code completion: now frontend rejects accessing types through expressions
(rdar://14489286), adjust code completion results


Swift SVN r10398
2013-11-13 00:44:07 +00:00
Jordan Rose
ec4234bdbc Perform unqualified lookup using the current SourceFile as context.
And, properly treat imports as per-file: when looking up decls through the
TU module, don't pick up every other source file's imports.

This implements our resolution rules:
1. Check the current source file.
2. Check the current module.
3. Check imported modules.

Currently, "import Foo" is treated as a file-private import and
"@reexported import Foo" is treated as a public /and/ module-wide import.
This further suggests that access control is the right tool for re-export
control:

(private) import Foo // current file only
package import Foo   // whole module
public import Foo    // whole world

Swift SVN r9682
2013-10-25 22:21:12 +00:00
Jordan Rose
2aeba96d53 Use SourceFile in a few more places.
- Local name lookup
- AST verification
- Delayed parsing
- Type checker, for the file kind
- Context of synthesized REPL decls

Swift SVN r9648
2013-10-24 18:59:26 +00:00
Jordan Rose
ec23db6962 Push the TU's lookup cache down to SourceFile.
Also move print() and dump() from TranslationUnit to SourceFile.

Swift SVN r9645
2013-10-24 18:59:18 +00:00
Dmitri Hrybenko
8d8b60f973 Code completion: implement result caching per-imported module across muptiple
ASTContexts

This introduces swift::ide::CodeCompletionCache, which is a persistent code
completion result cache.

Right now REPL happens to use it (try importing Cocoa and doing code
completion), and the difference is noticeable.  But completion in REPL is
still slow, because Cocoa goes through the AST Verifier on every completion
(for unknown reasons).

This commit does not implement cache invalidation yet, and it does not use
libcache to evict cache entries under memory pressure.

This commit also introduces two regressions:
- We get fewer Cocoa results that expected.  Module::isModuleVisible in Clang
does not incorrectly reports that that ObjectiveC.NSObject submodule is not
visible from Cocoa.

- We are not implementing the decl hiding rules correctly.  We used to rely on
visible decl lookup to do it for us, but now we have a different data structure
we have real decls from the current module and we have a text-only cache, so we
are forced to reimplement this part of name lookup in code completion.


Swift SVN r9633
2013-10-24 02:13:34 +00:00
Dmitri Hrybenko
b0b500907d Lookup visible decls / code completion: correctly filter out non-NominalDecls
when looking for visible members


Swift SVN r9562
2013-10-21 22:19:01 +00:00
Dmitri Hrybenko
ae03a13d54 Code completion: complete tuple memebrs
Swift SVN r9483
2013-10-18 17:49:34 +00:00
Dmitri Hrybenko
a3bf2b477f Code completion: basic completion for qualified references to enum elements
Swift SVN r9453
2013-10-17 18:35:40 +00:00
Dmitri Hrybenko
b8089daf34 Remove a FIXME
Swift SVN r9223
2013-10-11 21:43:39 +00:00
Dmitri Hrybenko
d615072639 Lookup visible decls / code completion: don't show overridden decls (show only
the overriding decl)


Swift SVN r9219
2013-10-11 20:58:42 +00:00
Dmitri Hrybenko
6a19042f57 Lookup visible decls / code completion: don't show constructors from superclass
Swift SVN r9178
2013-10-10 22:24:08 +00:00
Dmitri Hrybenko
9135f61c5a Lookup visible decls: don't allocate two vectors when we only need one
Swift SVN r9173
2013-10-10 21:31:05 +00:00
Dmitri Hrybenko
98b30d4847 Lookup visible decls: refactor the way it propagates lookup state
We will have more state bits soon.


Swift SVN r9163
2013-10-10 19:46:18 +00:00
Adrian Prantl
4389759d11 Silence warning.
Swift SVN r9100
2013-10-09 22:30:54 +00:00
Jordan Rose
597640a5d2 Introduce "SourceFile" within a TranslationUnit.
Right now this is just an extra layer of indirection for the decls,
operators, and imports in a TU, but it's the first step towards compiling
multiple source files at once without pretending they're all in a single
file. This is important for the "implicit visibility" feature, where
declarations from other source files in the same module are accessible
from the file currently being compiled.

Swift SVN r9072
2013-10-09 18:38:15 +00:00
Doug Gregor
a012f60633 Make protocol methods generic over <Self>.
Pull the implicit 'Self' associated type out of the protocol and into
an implicitly-declared generic parameter list for the protocol. This
makes all of the methods of a protocol polymorphic, e.g., given

  protocol P {
    typealias Assoc
    func getAssoc() -> Assoc
  }

the type of P.getAssoc is:

  <Self : P> (self : @inout P) -> () -> Self.Assoc

This directly expresses the notion that protocol methods are
polymorphic, even though 'Self' is always implicitly bound. It can be
used to simplify IRgen and some parts of the type checker, as well as
laying more of the groundwork for default definitions within
protocols as well as sundry other improvements to the generics
system.

There are a number of moving parts that needed to be updated in tandem
for this. In no particular order:
  - Protocols always get an implicit generic parameter list, with a
  single generic parameter 'Self' that conforms to the protocol itself.
  - The 'Self' archetype type now knows which protocol it is
  associated with (since we can no longer point it at the Self
  associated type declaration).
  - Protocol methods now get interface types (i.e., canonicalizable
  dependent function types).
  - The "all archetypes" list for a polymorphic function type does not
  include the Self archetype nor its nested types, because they are
  handled implicitly. This avoids the need to rework IRGen's handling
  of archetypes for now.
  - When (de-)serializing a XREF for a function type that has an
  interface type, use the canonicalized interface type, which can be
  meaningfully compared during deserialization (unlike the
  PolymorphicFunctionType we'd otherwise be dealing with).
  - Added a SIL-specific type attribute @sil_self, which extracts the
  'Self' archetype of a protocol, because we can no longer refer to
  the associated type "P.Self". 




Swift SVN r9066
2013-10-09 17:27:58 +00:00
Dmitri Hrybenko
6895c34741 Code completion: report "semantic context" for every code completion result
Semantic context describes the origin of the declaration and serves the same
purpose as opaque numeric "priority" in Clang -- to determine the most likely
completion.

This is the initial implementation.  There are a few opportunities to bump the
priority of a certain decl by giving it SemanticContextKind::ExprSpecific
context that are not implemented yet.


Swift SVN r9052
2013-10-09 02:08:05 +00:00
Dmitri Hrybenko
f07d0c17f0 Lookup visible decls: remove no-op code
Swift SVN r9051
2013-10-09 01:46:46 +00:00
Dmitri Hrybenko
b66ce0d352 Lookup visible decls: rename a function to reflect reality
Swift SVN r9019
2013-10-08 01:58:24 +00:00
Dmitri Hrybenko
fb836ccedd cast<> never fails, no need for 'if'
Swift SVN r8990
2013-10-07 21:13:28 +00:00
Dmitri Hrybenko
fcb3dbe0e6 Lookup visible decls / code completion for DynamicLookup: don't report
declarations with the same signature multiple times


Swift SVN r8864
2013-10-03 00:17:13 +00:00
Dmitri Hrybenko
6f4cb05603 Code completion: basic support for completing memebrs of DynamicLookup (id)
Only tested with functions (instance/class functions) declared in swift
classes.  Need more testcases.


Swift SVN r8800
2013-10-01 02:14:25 +00:00
Dmitri Hrybenko
ca57debb65 Lookup visible decls: rename doMemberLookup() -> lookupVisibleMemberDeclsImpl()
It was just an implementation detail of lookupVisibleMemberDecls(), so make
this intention clear in the name.


Swift SVN r8790
2013-09-30 20:00:37 +00:00
Dmitri Hrybenko
33d77d7184 Lookup visible decls: rearrange code to remove forward declarations
Also, update comments.


Swift SVN r8786
2013-09-30 19:00:52 +00:00
Dmitri Hrybenko
93c1ac3727 Visible decl lookup: simplify code
Swift SVN r8785
2013-09-30 18:18:40 +00:00
Dmitri Hrybenko
bdc3da4f0c Visible decl lookup: update comments (we don't have a specific name to look up)
Swift SVN r8784
2013-09-30 18:11:47 +00:00
Joe Groff
92cce69e15 AST: Give NominalTypePattern a better AST-level representation.
Instead of relying on the subpattern being a well-formed TuplePattern, let's track our own subelements so we can associate them to properties and validate them ourselves.

Swift SVN r8771
2013-09-30 01:03:18 +00:00
Jordan Rose
15bfc8db2b Don't type-check imported decls unless referenced in the source file.
Instead, pass a LazyResolver down through name lookup, and type-check
things on demand. Most of the churn here is simply passing that extra
LazyResolver parameter through.

This doesn't actually work yet; the later commits will fix this.

Swift SVN r8643
2013-09-25 20:08:14 +00:00
Jordan Rose
6e1ed42c07 s/swift::lookupVisibleDecls/swift::lookupVisibleMemberDecls/g
There were two overloads of lookupVisibleDecls: one that performed
unqualified lookup from a particular decl context, the other performing
qualified lookup into a given type from a particular decl context.
They don't really behave the same, so let's give them different names.

Swift SVN r8641
2013-09-25 20:08:09 +00:00
Joe Groff
e109124186 Replace 'union' keyword with 'enum'.
This only touches the compiler and tests. Doc updates to follow.

Swift SVN r8478
2013-09-20 01:33:14 +00:00
Dmitri Hrybenko
3fbfded756 Code completion / lookup visible decs: find 'self' in constructors and destructors
Swift SVN r8417
2013-09-18 20:48:55 +00:00
Dmitri Hrybenko
43859ceb56 Code completion / lookup visible names: find body parameters in functions with selector-style signatures
Swift SVN r8380
2013-09-18 01:00:01 +00:00
Dmitri Hrybenko
f1f189f4e0 Rename PipeClosureExpr -> ClosureExpr
Swift SVN r8321
2013-09-17 01:37:36 +00:00