Commit Graph

3995 Commits

Author SHA1 Message Date
Xi Ge
77b7180f1a Rename CodeCompletionTypeChecking.h to IDETypeChecking.h since it's used by more clients now. NFC 2016-02-04 11:09:21 -08:00
Jordan Rose
c2f3ec17db [AST] Assert that TypeRefinementContexts are properly nested.
Devin mentioned this was a valid and assumed property of the type
refinement context hierarchy, so we may as well take precautions
against breaking it.
2016-02-03 18:38:21 -08:00
Xi Ge
6837c17c17 [SourceKit][CursorInfo] Replace archetypes in cursor info results to actual types. rdar://24494225 2016-02-03 17:14:13 -08:00
Jordan Rose
5e0f4b704d [AST] Introduce AvailabilityContext to wrap VersionRange.
This is the beginning of the extension of the availability model
introduced in Swift 2.0 to support two interesting things: inlineable
code and binary frameworks not tied to an OS. The former is critical
to having a stable standard library that isn't shipped with a client app.

(For more information on both of these, see docs/LibraryEvolution.rst.)

The existing availability model enforces that API is not used unless
the developer has already guaranteed its existence. We want to reuse
this logic for these new purposes. Additionally, certain queries about
the AST are dependent on this type of information as well, e.g. "can I
assume this enum will not grow any additional cases?" If the enum comes
from the module being compiled, the answer is usually "yes", but not if
the code asking the question may be inlined into another binary!

(This latter purpose is currently served by ResilienceExpansion down at
the SIL level; my goal is to replace ResilienceExpansion with
AvailabilityContext. It's a bit heavier but would also allow additional
optimization in the future.)

This commit does not change any logic; it only wraps existing uses of
VersionRange in AvailabilityContext if they're not strictly referring to
the OS version.
2016-02-02 17:41:29 -08:00
Doug Gregor
a1b1a3e066 [AST Printer] Print the "renamed" option to @available. 2016-02-02 15:46:10 -08:00
Xi Ge
ae60159816 [ModulePrint] Add the initial implementation for printing synthesized extensions.
For a concrete type, members from its conforming protocols' extensions can be hard
to manually surface. In this commit, when printing Swift modules, we start to replicate these
extensions and synthesize them as if they are the concrete type's native extensions.

Credit to Doug for suggesting this practice.
2016-02-02 14:53:21 -08:00
Chris Lattner
35bce55e62 When diagnosing some problems with associated types, mark the decl invalid. When forming a type reference to an invalid type decl, have validateType return ErrorType instead of an apparently valid type. This silences some bogus downstream errors in code that references the decl.
This exposes some wierdness with while_parsing_as_left_angle_bracket where
one case the note is being is when resolveType returns a failure.  However,
resolveType can produce a failure without emitting a diagnostic, and this
can lead to us generating a note unattached to an error.  Just remove this
case.
2016-02-02 14:01:43 -08:00
Xi Ge
7833a47e08 Merge pull request #1152 from ahoppen/SR-627
[CodeCompletion] Fix SR-627 Code Completion does not resolve generics…
2016-02-02 10:34:15 -08:00
Doug Gregor
6b0febf401 Merge pull request #1009 from gregomni/sr-547
[SR-547][Sema] Invalidate more parts of protocols involved in recursive definitions
2016-02-02 09:13:04 -08:00
Alex Hoppen
722193a5f9 [CodeCompletion] Fix SR-627 Code Completion does not resolve generics that have been assigned a concrete type 2016-02-02 12:34:35 +01:00
Slava Pestov
b0b9fda09f AST: Start hollowing out GenericParamList, NFC
After the SIL parser refactoring, a bunch of code here is now dead.
2016-02-01 20:49:14 -08:00
Slava Pestov
0ecaa72b9d AST: Add ArchetypeBuilder::mapTypeOutOfContext(), NFC
This is the inverse of mapTypeIntoContext(). There were three
implementations of similar algorithms elsewhere, in Sema,
SIL type lowering, and some code in GenericParamList that is
only used by the SIL parser.

This new function will replace the first two, and the final one
will be refactored away.
2016-02-01 20:49:13 -08:00
Slava Pestov
e220b0ac55 AST: Add SubstFlags::AllowLoweredTypes
This will let us combine the Sema and SIL logic for mapping
contextual types to interface types. Recursing into SILFunctionType
in this case is fine, since going from a contextual type to an
interface type should never change conventions.
2016-02-01 20:49:12 -08:00
Chris Lattner
9bacb09708 Fix 24969-swift-vardecl-emitlettovarnoteifsimple.swift
A use can happen in an initializer declcontext, which has no containing method body.
2016-01-29 14:40:11 -08:00
Doug Gregor
9a0241bb3b SE-0022: Address Jordan's review comments about #selector. 2016-01-28 12:09:57 -08:00
Doug Gregor
1a830fa541 SE-0022: Deprecate string-literal-as-selector in favor of #selector.
Introduce Fix-Its to aid migration from selectors spelled as string
literals ("foo:bar:", which is deprecated), as well as from
construction of Selector instances from string literals
(Selector("foo:bar"), which is still acceptable but not recommended),
to the #selector syntax. Jump through some hoops to disambiguate
method references if there are overloads:

    fixits.swift:51:7: warning: use of string literal for Objective-C
         selectors is deprecated; use '#selector' instead
      _ = "overloadedWithInt:" as Selector
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          #selector(Bar.overloaded(_:) as (Bar) -> (Int) -> ())

In the cases where we cannot provide a Fix-It to a #selector
expression, we wrap the string literal in a Selector(...) construction
to suppress the deprecation warning. These are also easily searchable
in the code base.

This also means we're doing more validation of the string literals
that go into Selector, i.e., that they are well-formed selectors and
that we know about some method that is @objc and has that
selector. We'll warn if either is untrue.
2016-01-28 10:58:27 -08:00
Slava Pestov
27da265abb Refactor some random usages of contextual types, NFC 2016-01-27 23:22:33 -08:00
Denis Vnukov
4f92a08987 Adding a location of the var/let/inout to ParamDecl 2016-01-27 13:43:42 -08:00
Denis Vnukov
8f33a03d8b Visiting type repr part of the enum element declaration 2016-01-27 13:43:41 -08:00
Denis Vnukov
621e1173ce Preserving source range of PBD entry's original initialization.
After typechecking removes the initializer from the var there was no way to
restore information about the original source range of the declaration.
2016-01-27 13:43:40 -08:00
Denis Vnukov
9dd8bede8a Fixed source range for ParamDecl with implicit type location 2016-01-27 13:43:38 -08:00
Xi Ge
d6f8ad0008 Add a method to RequirementRepr that breaks the deserialized written string into detail. NFC 2016-01-27 13:23:20 -08:00
Doug Gregor
dccf3155f1 SE-0022: Implement parsing, AST, and semantic analysis for #selector. 2016-01-26 21:12:04 -08:00
Chris Lattner
8654282bee fix 28239-swift-declcontext-lookupqualified.swift, module lookup can be done
without access control now by diagnostics.
2016-01-25 22:08:43 -08:00
Doug Gregor
8336419844 Include completion source location information compound DeclNames.
When one spells a compound declaration name in the source (e.g.,
insertSubview(_:aboveSubview:), keep track of the locations of the
base name, parentheses, and argument labels.
2016-01-25 14:13:13 -08:00
Slava Pestov
7fad03d822 Sema: Use accessors on members of resilient value types from within @_transparent functions
These can get inlined into other resilience domains, so we
cannot directly reference storage.
2016-01-24 22:51:48 -08:00
Chris Lattner
72dd6f05c1 Merge pull request #1070 from JaSpa/dump-ostream
[ASTDumper] Dump the trailing newline on the given stream
2016-01-24 09:38:05 -08:00
Slava Pestov
ec06e814b7 SIL: Start plumbing ResilienceExpansion through SIL type lowering
Also do some general cleanup, pushing the ResilienceExpansion
query up from IRGen to the AST.
2016-01-23 23:39:30 -08:00
Janek Spaderna
3abfaff23d Dump the trailing newline on the given stream 2016-01-23 23:05:52 +01:00
Mark Lacey
8b5298eb7b Fix release build warnings about uninitialized variables. 2016-01-23 10:56:35 -08:00
practicalswift
8efa5f587e [gardening] Remove "-*- C++ -*-" tag from .cpp files
Emacs assumes .h files are C files by default which is why the
tag "-*- C++ -*-" is needed.

.cpp files do not have this problem.
2016-01-23 12:09:32 +01:00
practicalswift
33312eac6b [gardening] Remove unreachable/unused/redundant code
* Make parameter naming in forward declaration match definition
* Remove unused argument to function persistAsync(…)
* Remove unused enum ShouldHalt
* Remove unused enum class IsProtocol
* Remove unused function dumpTypeSubstitutionMap()
* Remove unused function template getFirstPairElt(…)
* Remove unused method addConstantWordInWords(…)
* Remove unused method asExistentialTI()
* Remove unused method currentTrackedState()
* Remove unused method getNumBodyParameters()
* Remove unused method getSuccIndex()
* Remove unused method getTypeOfDeclReference(…)
* Remove unused method hasStructWithAtMostOneNonTrivialField(…)
* Remove unused method initForDirectValues()
* Remove unused method nextIfNot(…)
* Remove unused method overwriteLoweredValue(…)
* Remove unused method removeColumn(…)
* Remove unused methods HasSingleDecl() and GetFirstDecl()
* Remove unused methods overwriteLoweredExplosion(…) and setLoweredSingleValue(…)
* Remove unused methods requireRetainablePointerValue(…), getMethodSelfInstanceType(…) and isSelfArchetype(…)
* Remove unused methods setAsEmptyDirect(), setAsSingleDirectUnmanagedFragileValue(…), setAsIndirectAddress(…) and getDirectValues()
* Remove unused struct CachedMemberInfo
* Remove unused struct CallEdit
* Remove unused struct ErrorImportInfo
* Remove unused synonym ConformancePair
* Remove unused variable SemaInfo
* Remove unused variable localDeclNameNode
* Remove unused variables kindToken and kindLoc
2016-01-22 09:43:24 +01:00
Chris Lattner
8954f3c14d Rename the two Verifier.cpp files to ASTVerifier.cpp and SIL/SILVerifier.cpp
This makes open quickly and lldb file/line breakpoints happier. NFC.
2016-01-21 19:45:30 -08:00
practicalswift
6d0eee9b8c Remove unused variables. 2016-01-21 10:33:17 +01:00
Doug Gregor
fd3f03f3be Remove UnresolvedConstructorExpr.
UnresolvedConstructorExpr is not providing any value here; it's
essentially just UnresolvedDotExpr where the name refers to an
initializer, so use that instead. NFC
2016-01-20 17:09:02 -08:00
Doug Gregor
c9c1d1390c [SE-0021] Allow naming of specific initializers via "self.init(foo:bar:)". 2016-01-20 17:09:02 -08:00
Doug Gregor
5f07f6b12f Remove all vestiges of UnresolvedSelectorExpr. NFC 2016-01-20 17:09:01 -08:00
Doug Gregor
312a7f0aea [Clang importer] Strip the "NS" prefix from entities in Foundation.
As part of the improved import of Objective-C APIs into Swift, strip
the "NS" prefix from entities defined in the Foundation
framework. Addresses rdar://problem/24050011, which is part of
SE-0005. Naturally, this is hidden behind -enable-omit-needless-words.
2016-01-20 15:02:54 -08:00
Max Moiseev
9a018bd77d Merge remote-tracking branch 'origin/master' into swift-3-api-guidelines 2016-01-20 14:38:22 -08:00
Chris Lattner
37e8bceecf Merge pull request #1028 from mteper/patch-2
[AST] Enclose value of writtenType attribute in quotes
2016-01-20 14:36:52 -08:00
Doug Gregor
72aabcb6f3 Revert "[Clang importer] Strip the "NS" prefix from entities in Foundation"
This reverts commit e51e969b35. This is
a temporary revert to aid in merging to the swift-3-api-guidelines branch.
2016-01-20 13:26:05 -08:00
Michael Teper
f46ba311b5 [AST] Enclose value of writtenType attribute in quotes
Prior to this change, writtentType value was not enclosed in single quotes and could contain spaces (e.g. `writtenType='[[String : String]]'`). With this change, the value is enclosed in quotes matching the rendering of the `type` attribute.
2016-01-20 11:42:06 -08:00
Chris Lattner
8a77e15da1 improve ast dumping of capture lists. 2016-01-20 09:07:29 -08:00
Doug Gregor
7d70b704e4 Merge commit '5e11e3f7287427d386636a169c4065c0373931a8' into swift-3-api-guidelines 2016-01-19 23:18:20 -08:00
Chris Lattner
302e8cd12f Add a TypeExpr::getInstanceType() helper method, NFC. 2016-01-19 22:52:26 -08:00
Chris Lattner
dc333cfef8 Merge pull request #1015 from mteper/patch-1
[AST] Resolved name quotation inconsistency
2016-01-19 20:16:05 -08:00
Slava Pestov
f57b26ba95 AST: Fix uninitialized ModuleDecl::DSOHandle
This is a regression from the following patch:

81267ce1db
2016-01-19 17:32:55 -08:00
Michael Teper
54915054af [AST] Formatting consistency in conditional compilation output
Before:
```
(#if_stmt
  (#if:
    (stuff)     #else
    (stuff))
```

After:
```
(#if_stmt
  (#if:
    (stuff))
  (#else:
    (stuff)))
```

Notable differences:
 - #if block is closed
 - #else block is treated same as #if block, starts on new line, token terminated with `:`
 - #else block is closed
2016-01-19 15:34:46 -08:00
Michael Teper
bc1104da41 Resolved name quotation inconsistency
Prior to this change, the AST would look something like this, note `id='incoming` missing the closing quote.

```swift
(type_named id='incoming
    (type_ident
        (component id='UIImage' bind=type)))
```

In reviewing conventions used throughout this class, it appears that this identifier should not need to be quoted at all, so I removed the leading quote. If I am wrong in my understanding, then perhaps the trailing quote should be introduced.
2016-01-19 14:06:58 -08:00
Chris Lattner
5a4464fbca Fix <rdar://19935319> QoI: poor diagnostic initializing a variable with a non-class func
It is a common point of confusion that property initializers cannot access self, so
produce a tailored diagnostic for it.

Also, when building implicit TypeExprs for the self type, properly mark them implicit.
2016-01-18 22:37:22 -08:00