Commit Graph

1519 Commits

Author SHA1 Message Date
Pavel Yaskevich
60c20536ee [ConstraintSystem] NFC: Extract isResultBuilderMethodReference into a namespace method 2024-01-19 15:11:41 -08:00
Hamish Knight
848574080a [CS] Use correct DeclContext when solving initializations
Use the PatternBindingInitializer context if we
have one. This also uncovered a parser issue where
we would mistakenly create a
PatternBindingInitializer in top-level code after
parsing the initializers.
2024-01-17 16:02:33 +00:00
Pavel Yaskevich
c266644c09 Merge pull request #70618 from simanerush/sema-docs-fix
[Docs] Add details for `addMaterializePackExpansionConstraint`
2024-01-03 00:18:45 -08:00
Pavel Yaskevich
6afc30761e [CSBindings] Prevent determineBestBindings from selecting unresolved key path type 2024-01-01 12:47:13 -08:00
Sima Nerush
7aa3c26bec [Docs] Add details for addMaterializePackExpansionConstraint 2023-12-25 11:57:55 -08:00
Pavel Yaskevich
a288b1eb76 [CSBindings] Key path cannot be bound to typ erased type even if its existential
Extend existing check to handle type erased versions when they
are wrapped in an existential.
2023-12-19 13:36:46 -08:00
Sima Nerush
2fd5843a79 Merge pull request #70355 from simanerush/pack-iteration-fixes
[SE-0408] Pack iteration review feedback!
2023-12-16 09:50:31 -08:00
Sima Nerush
0482bd3652 [Sema] Refactor code and improve documentation pertaining to SE-0408. 2023-12-15 20:39:40 -08:00
Artem Chikin
33e09f9e87 Merge pull request #70211 from artemcm/ParallelScanFixes
[Dependency Scanning] Remove/move mutable state from parallel scanner workers
2023-12-15 11:14:16 -08:00
Doug Gregor
ae5f66ac11 Record throwing property accesses as potential throw sites 2023-12-13 16:36:14 -08:00
Doug Gregor
8ad137fb51 [Typed throws] Infer thrown error type for do..catch blocks within closures.
Start classifying all potential throw sites within a constraint
system and associate them with the nearest enclosing catch node. Then,
determine the thrown error type for a given catch node by taking the
union of the thrown errors at each potential throw site. Use this to
compute the error type thrown from the body of a `do..catch` block
within a closure.

This behavior is limited to the upcoming feature `FullTypedThrows`.
2023-12-13 14:59:23 -08:00
Artem Chikin
674dfb3bd4 [Dependency Scanning] Move generation of a named import path 'Identifier' out of the individual scanning workers up into the parent scanner. This operation mutates the scanner ASTContext by potentially adding new identifiers to it and is therefore not thread-safe. 2023-12-13 13:17:05 -08:00
Pavel Yaskevich
80e86dd6c1 Merge pull request #70212 from xedin/rdar-119036147
[CSBinding] Infer key path root bindings transitively through context…
2023-12-08 17:01:31 -08:00
Sima Nerush
b6d0afba1f Merge pull request #67594 from simanerush/simanerush/pack-iteration-impl
[SE-0408] Enable Pack Iteration
2023-12-07 17:09:48 -08:00
Pavel Yaskevich
9875fcf7e8 [CSBindings] Apply more checking to transitively inferred bindings
This makes sure that we never run into infinite recursion situations
with transitive bindings that could have been aseembled and not
properly checked.
2023-12-07 15:32:03 -08:00
Pavel Yaskevich
911ba101e7 [CSBindings] Extend early array literal favoring to cover dictionaries
Follow-up to https://github.com/apple/swift/pull/70148

Just like with arrays it's advantageous to favor dictionary
literals over disjunctions to bind the elements together and
enable inference across elements and, as a consequence,
type pruning.

Resolves: rdar://119040159
2023-12-04 15:01:27 -08:00
Holly Borla
48cb3309bd [Constraint System] Fix the shape class and context substitiutions for
opened element generic environments containing same-element requirements.
2023-12-03 21:51:41 -08:00
Sima Nerush
23485990e5 Diagnose that where clause is not supported 2023-12-03 21:51:41 -08:00
Sima Nerush
5832181077 Sema 2023-12-03 21:51:22 -08:00
Pavel Yaskevich
dde501485e [CSBinding] Prefer array literal type over a disjunction in certain cases
If array literal type is not delayed and doesn't have any type variables
associated with it, let's prefer it over a disjunction to facilitate
type propagation through its `Element` type to element expressions.

Resolves: rdar://118993030
2023-11-30 17:43:13 -08:00
Pavel Yaskevich
c5d393f04f [ConstraintSystem] NFC: Adjust comment for isKnownKeyPath to cover all currently checked types 2023-11-28 13:02:17 -08:00
Pavel Yaskevich
2e1ca0a32a [ConstraintSystem] Extend KeyPathCapability to support sendability 2023-11-28 13:02:14 -08:00
Pavel Yaskevich
bd4ee4681b Merge pull request #70007 from xedin/keypath-application-improvements
[ConstraintSystem] Modernization of key path application handling
2023-11-28 12:44:42 -08:00
Slava Pestov
f89b9817e7 Merge pull request #69950 from slavapestov/clean-up-open-existentials
Cleanups and fixes for opened existentials
2023-11-28 10:45:19 -05:00
Slava Pestov
c0f9d290fa AST: Move TypeBase::typeEraseOpenedArchetypesWithRoot() into ConstraintSystem.cpp 2023-11-27 14:05:36 -05:00
Slava Pestov
1b1963e904 Sema: Remove 'inferred result type requires explicit coercion' diagnostic 2023-11-27 14:05:36 -05:00
Alex Hoppen
b603a5e9a0 [Sema] Remove LeaveClosureBodiesUnchecked
This shouldn’t be needed anymore since we migrated code completion to be solver-based.

rdar://91403086
2023-11-23 11:41:29 -08:00
Pavel Yaskevich
d6f9f1c095 [CSFix] Add a fix to detect incorrect argument to subscript key path index 2023-11-22 20:30:00 -08:00
Pavel Yaskevich
f440dd8e37 [ConstraintSystem] Update key path subscript index type variable to use new locator element 2023-11-17 15:47:44 -08:00
Pavel Yaskevich
d542ab99f0 [ConstraintSystem] Add a new locator for key path subscript parameter 2023-11-17 13:21:42 -08:00
Pavel Yaskevich
e67dfc182b [CSSimplify] Remove obsolete key path capability inference and matching
The capability inference is now handled by the binding inference
and that makes resolved key path matching to bound type is no longer
necessary.
2023-11-08 19:54:31 -08:00
Pavel Yaskevich
0a2f1b14a7 [CSBindings] Delay key path type inference until literal capability is known
Since key path root is now transitively inferred. Key path type
inference can be delayed until key path is resolved enough to
infer its capability.

This solves multiple problems:

- Inference fully controls what key path type is bound to;
- KeyPath constraint simplification doesn't have to double-check
  the capability and attempt to re-bind key path type;
- Custom logic to resolve key path type is no longer necessary;
- Diagnostics are improved because capability and root/value type
  mismatch are diagnosed when key path is matched against the
  contextual type.
2023-11-08 19:54:31 -08:00
Pavel Yaskevich
8292c7d68f [ConstraintSystem] Add a way to check whether type variable represents a key path root type 2023-11-08 19:54:31 -08:00
Angela Laar
eb277d9ee7 Merge pull request #67498 from angela-laar/implicit-sendable-for-methods
[Sema] Implicitly add @Sendable attribute to partial methods
2023-11-07 16:46:16 -08:00
Angela Laar
c09ec72e85 [Constraint System] Always add Sendable to unapplied function applications 2023-11-07 13:37:24 -08:00
Pavel Yaskevich
5973013bf0 Merge pull request #69617 from xedin/rdar-116522161
[CSFix] Allow `invalid property wrapper type` to be diagnosed in ambi…
2023-11-03 09:02:36 -07:00
Pavel Yaskevich
cd0597186a [CSFix] Allow invalid property wrapper type to be diagnosed in ambiguous context
Adds `diagnoseForAmbiguity` to `AllowInvalidPropertyWrapperType` fix
because it could be attached to a closure parameter that has ambiguity
in the body so it has to be diagnosable in ambiguous contexts.

Resolves: rdar://116522161
2023-11-02 10:18:19 -07:00
Pavel Yaskevich
b129d92937 Merge pull request #69549 from xedin/rdar-117227549
[ConstraintSystem] Rework overload ranking based on Sendable conformances
2023-11-02 09:42:49 -07:00
Pavel Yaskevich
dff578638a [ConstraintSystem] Move SK_MissingSynthesizableConformance before SK_UnappliedFunction
This would make sure that if property is non-Sendable we'd pick
a method if it's Sendable instead.
2023-11-01 10:50:39 -07:00
Pavel Yaskevich
d74c4723dc [ConstraintSystem] De-duplicate key path constraint simplification
Move some of the checks from the constraint simplification into
`inferKeyPathLiteralCapability` and start using it for both
inference and constraint simplification.
2023-11-01 09:15:14 -07:00
Pavel Yaskevich
9bf9d549c4 [ConstraintSystem] Key path capability inference should indicate whether key path is invalid
This flag makes it easier to determine what binding to produce
from the default. In cases where some of the member references
are invalid it's better to produce a placeholder for a key
path type instead of letting the solver to attempt to fix more
contextual problems for a broken key path.
2023-11-01 09:15:14 -07:00
Pavel Yaskevich
0e1abc9f19 [CSBindings] Add special handling for key path default bindings
If there are no contextual types available but capability of
key path could be inferred, let's turn default into a real
binding.
2023-11-01 09:15:13 -07:00
Pavel Yaskevich
59b759338e [ConstraintSystem] Extract logic to determine key path literal capabilities 2023-11-01 09:14:15 -07:00
Pavel Yaskevich
a4bda00e5b [ConstraintSystem] Add a locator element to represent a fallback type 2023-11-01 09:14:15 -07:00
Pavel Yaskevich
b13c2194c5 [ConstraintSystem] Add a new score kind to denote presence of missing conformances
The types with missing conformances are allowed to appear in a
valid solution but such solutions should be ranked lower comparing
to solutions fewer or without them.
2023-10-31 13:47:14 -07:00
Pavel Yaskevich
5a66b62147 Merge pull request #69304 from xedin/rdar-117220710
[ConstraintSystem] Bring back one-way pattern solving for for-in stat…
2023-10-25 09:43:33 -07:00
Pavel Yaskevich
b405cee1df [ConstraintSystem] Bring back one-way pattern solving for for-in statements (outside closures)
Type-checker separates `where` clause from `for-in` statement's pattern/sequence
in closure contexts  which works as a natural barrier for inference, but
for-in statements in i.e. function bodies still type-check all of the for-in
statement components together, so we need to make sure that where clause
cannot be used to infer a type of the pattern before its sequence expression.

Resolves: rdar://117220710
2023-10-20 08:53:33 -07:00
swift-ci
46c67c20cf Merge remote-tracking branch 'origin/main' into rebranch 2023-10-10 02:35:18 -07:00
Hamish Knight
03b6623f72 Merge pull request #69074 from hamishknight/over-extended 2023-10-10 10:25:57 +01:00
swift-ci
c38077d919 Merge remote-tracking branch 'origin/main' into rebranch 2023-10-09 23:35:22 -07:00