Commit Graph

8640 Commits

Author SHA1 Message Date
Pavel Yaskevich
1ea3ebc805 Merge pull request #18780 from xedin/refactor-decl-req-diags-into-method
[Diagnostics] NFC: Move logic common to all requirement failures into…
2018-08-17 11:58:16 -07:00
Pavel Yaskevich
6756c57f91 [Diagnostics] NFC: Move logic common to all requirement failures into RequirementFailure
This is going to make adding same-type and superclass requirement
failures might easier, because they only have to supply custom
diagnostic messages and substituted types.
2018-08-16 18:35:24 -07:00
Jordan Rose
d6c8ca016b Constify PrintOptions in ShouldPrintChecker::shouldPrint
No functionality change.
2018-08-16 17:59:24 -07:00
Harlan
9b29e8dc91 Merge pull request #18454 from harlanhaskins/requests-ive-had-a-few
Remove SimpleRequest::breakCycle
2018-08-16 11:03:22 -07:00
Jordan Rose
1958d7aea3 [AST] Add an AccessScope::dump helper (#18756)
And factor an existing getAccessLevelString out into a
generally-available swift::getAccessLevelSpelling.
2018-08-16 10:30:30 -07:00
John McCall
1c99f31f20 Basic motions towards moving yields into AnyFunctionType.
Still not intending to do this anytime soon.
2018-08-16 02:13:54 -04:00
John McCall
5d8252b8c6 Pass around whether storage is mutable as an enum instead of a bool. 2018-08-16 02:13:54 -04:00
Harlan Haskins
5498e869c0 Use evaluator's dependency printing for cycles 2018-08-15 16:02:48 -07:00
Harlan Haskins
c31d7f808a Rebase on master and resolve conflicts 2018-08-15 11:22:09 -07:00
Harlan Haskins
5a6985f39e Remove SimpleRequest::breakCycle
This patch removes the need for Request objects to provide a default
cycle-breaking value, instead opting to return llvm::Expected so clients
must handle a cycle failure explicitly.

Currently, all clients do the 'default' behavior, but this opens the
possibility for future requests to handle failures explicitly.
2018-08-15 11:01:12 -07:00
swift-ci
be0e1643d6 Merge pull request #18720 from DougGregor/kill-type-resolver-context-generic-signature 2018-08-15 10:55:08 -07:00
Jordan Rose
6dfff66a83 Merge pull request #18617 from jrose-apple/any-requestions
Request evaluator: Cut down on the cost of AnyRequest in two ways
2018-08-15 10:09:23 -07:00
Doug Gregor
876738fabe Merge pull request #18718 from DougGregor/cleanup-type-lookup
[Name lookup] Clean up qualified and type lookup
2018-08-15 10:03:41 -07:00
Jordan Rose
a5f84ec2f6 [AST] Drop redundant ProtocolDecl::TrailingWhereClause
There's already a field for this in GenericContext, which ProtocolDecl
indirectly inherits. Protocols may have slightly different treatment
of their where-clauses, but not enough to justify a separate field.

No functionality change.
2018-08-14 23:17:57 -07:00
Doug Gregor
8a81ea45fb [Name lookup] Teach lookupQualified() to accept TypeDecls.
Rather than require clients of lookupQualified() to resolve
their type declarations to nominal type declarations (and
separately cope with modules), have lookupQualified() accept
an array of TypeDecls and handle the resolution to nominal
type declarations (where it can look directly) and module
declarations, combining the results.
2018-08-14 14:40:51 -07:00
Jordan Rose
910894a970 Merge pull request #18597 from jrose-apple/well-worn-path
Cache ConformanceAccessPaths in GSB::EquivalenceClass for big wins
2018-08-14 11:42:15 -07:00
Doug Gregor
6e2d3fe355 [AST/TypeChecker] Remove DynamicLookup flag.
We detect whether we’re performing AnyObject lookup based on 
whether we are looking into AnyObject; these two DynamicLookup
flags are unused.
2018-08-14 11:32:55 -07:00
Doug Gregor
ca343aeaa3 Merge pull request #18703 from DougGregor/get-reference-counting-cleanups
[AST] Drop resilience expansion from TypeBase::getReferenceCounting().
2018-08-14 11:04:39 -07:00
Greg Titus
8f41ee7750 Merge pull request #18324 from gregomni/opty2
[Sema] More unwrap fixits
2018-08-14 09:12:35 -07:00
Doug Gregor
b08a6f56b4 [AST] Drop resilience expansion from TypeBase::getReferenceCounting().
We’re not using this parameter, and don’t expect to do so in the future,
so remove it. Also fold away TypeBase::usesNativeReferenceCounting()
and irgen::getReferenceCountingForType(), both of which are trivial.
2018-08-14 09:10:49 -07:00
Doug Gregor
6384d080b1 Merge pull request #18539 from DougGregor/unqualified-lookup-via-decls
[Name lookup] Use decl-based name lookup more regularly
2018-08-14 05:18:59 -04:00
Slava Pestov
31a570d53c AST: Replace TypeBase::getRValueInstanceType() with getMetatypeInstanceType()
That is, don't look through InOutType anymore, and update callers to
call getInOutObjectType() as well (or not, where it was obvious to me
that InOutType could not appear).

This surfaces more remaining uses of getInOutObjectType() directly.
2018-08-13 21:13:10 -07:00
Doug Gregor
5b6b0b6ab1 [Name lookup] Turn the "Self bounds of a where clause" query into a request.
Name lookup within a protocol extension also looks into protocols and
superclasses on the right-hand side of Self constraints in the where
clause, e.g., "Self: Foo". Turn that function into a request to avoid
infinite recursion on invalid code.
2018-08-13 19:03:35 -07:00
Doug Gregor
09c46ad101 [AST] Eliminate the unused by ComputingInheritedProtocols in ProtocolDecl. 2018-08-13 19:03:35 -07:00
Doug Gregor
064652693b Remove LazyResolver::resolveExtensionForConformanceConstruction().
This is no longer used. NFC
2018-08-13 19:03:35 -07:00
Slava Pestov
5a1b0e7dbe Merge pull request #18514 from gregomni/8398
[SILGen] Forming transitive capture lists, need to unique on value not value+flags
2018-08-13 17:32:54 -07:00
gregomni
36cf24fb9e When we diagnose an unwrap, if the expression being unwrapped is a sole reference to a local let/var, and the local's type is inferred, offer fixits on the initializer as well. In this position we can also reasonably offer 'guard let'. Since we're identifying the implicitly typed initializer now, we can give a specific explanation of how IUOs get turned into optional types with the new IUO implementation.
Pass constraint system down into offering force unwrap fixits so that we can identify the type of the last member chosen for an optional chain. If there's a chain and the last member's return type isn't optional, then it's cleaner to offer to change that last '?' into a '!' to perform the force, rather than parenthesize the whole expression and force the result.
2018-08-12 12:57:20 -07:00
Slava Pestov
80a7ae100b SIL: Treat __shared and __owned just like inout when lowering function types
Even with an opaque abstraction pattern, we must explode a
parameter list containing __shared and __owned elements.

Otherwise, we produce invalid lowered SIL types.

Note that this is already an issue, because the stdlib has a
handful of declarations using __owned.
2018-08-12 01:09:45 -07:00
Slava Pestov
432924018c Sema: Remove TupleType::getVarArgsBaseType()
Or, actually, now that there's only one usage left move it to CSDiag.
Hopefully, both vararg tuple types and CSDiag are going away
eventually.
2018-08-11 22:28:36 -07:00
Slava Pestov
f2ae23a2ab AST: Remove TupleType::getElementForScalarInit()
This is a legacy holdover from when tuple types had default
arguments, and also the constraint solver's matching of function
types pre-SE-0110.

Well, move the last live usage to CSDiag, where it can die a slow
painful death over time. The other usages were not doing anything.
2018-08-11 22:26:44 -07:00
Slava Pestov
f44ff38db4 AST: Remove unused ParamDecl::getParameterFlags() 2018-08-11 03:29:16 -07:00
Slava Pestov
471f10f0bc AST: Remove tuple-forming methods on ParameterList 2018-08-11 03:29:16 -07:00
Slava Pestov
d48c8ab67a AST: Convert computeType() methods to use ParameterList::getParams()
This is mostly NFC; the output of the api-digester test changed because
the interface type of an enum element now has parentheses around the
'Self' parameter type. This is more consistent with everything else
(and in the future, all function types will have "parentheses").
2018-08-11 03:29:16 -07:00
Slava Pestov
6f0a062bb7 AST: Introduce ParameterList::getParams()
This converts a list of ParameterDecls into a list of
AnyFunctionType::Params; it will eventually replace
these methods on ParameterList:

- getType() (both overloads)
- getInterfaceType()
- getFullInterfaceType()
2018-08-11 03:29:16 -07:00
Slava Pestov
a728305345 Merge pull request #18647 from slavapestov/inout-in-parens-is-still-inout
Easy InOutType removals and bug fix
2018-08-10 20:46:32 -07:00
Robert Widmann
fe8873a5d0 Merge pull request #18641 from hamishknight/objc-subscript-cleanup
[AST] NFC: Remove ObjCSubscriptKind::None
2018-08-10 18:43:13 -07:00
Slava Pestov
5be9d60c96 Sema: Remove dead diagnostics about mis-placed InOutType
These are now diagnosed immediately as part of resolveType(), so
replace them with assertions since we should never be building such
types at all.
2018-08-10 18:42:02 -07:00
Rintaro Ishizaki
3bff834f22 Merge pull request #18625 from rintaro/rdar43057058
[CSGen] Rework SanitizeExpr
2018-08-11 08:23:09 +09:00
Hamish Knight
523992c848 [AST] NFC: Remove ObjCSubscriptKind::None
This enum case, and associated diagnostic hasn't been used since id-as-Any.
2018-08-10 23:10:52 +01: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
Jordan Rose
c56f3c6a76 Request evaluator: Use DenseMap::find_as to look up Requests
...when we don't need to store them, to avoid copying the Request into
an AnyRequest heap box.
2018-08-10 10:23:40 -07:00
Jordan Rose
0387798fbf Request evaluator: Use IntrusiveRefCntPtr instead of std::shared_ptr
We don't need the reference-counting used by AnyRequest to be atomic.
2018-08-10 10:22:26 -07:00
Rintaro Ishizaki
cfeae64712 [AST] Add reference to original expression in MakeTemporarilyEscapableExpr
This is needed to restore original call expression in SanitizeExpr.
2018-08-10 18:19:53 +09:00
Jordan Rose
5d7f07f80e Extract local helper to GenericSignature::buildConformanceAccessPath
It's a recursive helper that only captures one argument other than
'this'. Pay the cost of putting a declaration in a commonly-included
header to simplify the code.

No intended functionality change.
2018-08-09 19:43:15 -07:00
Jordan Rose
480af40f15 Move ConformanceAccessPaths to live completely on the ASTContext
John pointed out that if we're going to cache them, we might as well
go all the way and pass them around by reference.
2018-08-09 19:43:15 -07:00
Rintaro Ishizaki
254be25f4d Merge pull request #18564 from rintaro/ide-completion-contextanalysis
[CodeCompletion] Improve context type analysis
2018-08-10 10:53:44 +09:00
Jordan Rose
1543f15081 [AST] Remove stale comment from TypeAliasDecl::setUnderlyingType (#18601)
This is used on all paths now.
2018-08-09 15:45:49 -07:00
Jordan Rose
f8fd85b51b Cache ConformanceAccessPaths in GSB::EquivalenceClass for big wins
This dramatically speeds up SubstitutionMap::lookupConformance,
shaving off 1/3 of the time spent compiling the standard library.
2018-08-09 11:58:19 -07:00
Jordan Rose
0e10f89964 Preserve default argument text through serialization (#18579)
This allows us to dump it in the generated interface, though it's
still not syntax-highlighted. This is necessary for textual module
interfaces, but it's also just a longstanding request for Xcode's
"Generated Interface" / "Jump to Definition" feature.

rdar://problem/18675831
2018-08-09 11:06:22 -07:00
Huon Wilson
8c5ff31b21 Merge pull request #18588 from huonw/fixit-missing-if
[Parse] Fixit for inserting 'if' for 'else ... {' all on one line.
2018-08-09 23:04:19 +10:00