Commit Graph

14 Commits

Author SHA1 Message Date
Pavel Yaskevich
8dc2251a7e [CSBindings] NFC: Add a unit test for closure result inference
Make sure that `Void` doesn't get attempted twice if it was
inferred directly or transitively.
2021-06-17 14:11:59 -07:00
Pavel Yaskevich
51ff12d06e [ConstraintLocator] Augment ContextualType element to carry its purpose
Having purpose attached to the contextual type element makes it much
easier to diagnose contextual mismatches without involving constraint
system state.
2021-04-26 09:51:21 -07:00
Pavel Yaskevich
d310f37ffc [CSBindings] Infer transitive protocols only for unresolved member base
Nothing besides static member refs on protocols feature is currently
using transitive protocols, so instead of trying to infer them on every
step let's do that only for base type of a dot-syntax reference when
there are no other bindings for it.
2021-03-30 13:39:24 -07:00
Pavel Yaskevich
56c96c6b50 [CSBindings] Use all equivalence chain members while interring transitive protocols
Currently inference logic only checked direct equivalence class members
associated with a "work-in-progress" type variable, but each member can
have local equivalences as well that need to be accounted for.

Resolves: rdar://75978086
2021-03-30 13:39:12 -07:00
Pavel Yaskevich
fbc11f410a [ConstraintSystem] Implement incremental binding computation 2021-02-24 10:37:20 -08:00
Pavel Yaskevich
df7af0078f [CSBindings] Separate inference storage from final product usable by the solver
`PotentialBindings` lost most of its responsibilities,
and are no longer comparable. Their main purpose now
is binding and metadata tracking (introduction/retraction).

New `BindingSet` type is something that represents a set
of bindings at the current step of the solver.
2021-02-24 10:37:20 -08:00
Pavel Yaskevich
5b55ea1312 [CSGen] Use new UnresolvedMemberChainBase constraint 2021-02-23 11:33:10 -08:00
Pavel Yaskevich
72888ca29b [ConstraintSystem] NFC: Extract PotentialBindings and auxiliary struct from ConstraintSystem
This opens up a posibility of using `PotentialBindings`
in `ConstraintGraphNode` and other places in `ConstraintGraph`.
2021-01-15 15:03:54 -08:00
Pavel Yaskevich
03b6b41774 [CSBindings] NFC: Don't pass constraint system as an argument to infer* methods
`PotentialBindings` already reference the constraint system they
belong to, so there is no need to pass it as an argument to inference
methods.
2021-01-12 00:53:46 -08:00
Pavel Yaskevich
1ed2f62e88 [unittests/Sema] NFC: Add tests for literal requirement inference/coverage
Test that literal requirements are:

- inferred correctly (both direct and transitive);
- covered by direct/transtiive bindings.
2021-01-05 11:52:48 -08:00
Pavel Yaskevich
25fff2c4f2 [unittests/Sema] NFC: Adjust binding inference test to reflect binding set changes 2021-01-05 08:56:59 -08:00
Pavel Yaskevich
9598f19848 [unittest/Sema] Cover transitive protocol inference with unit tests 2020-10-15 16:27:36 -07:00
Pavel Yaskevich
a243831122 [unittest/Sema] Add a test-case for a single hop protocol requirement inference
In situations like:

`$T0 <convertible> $T1`
`$T1 <conforms to> P`

`$T0` should know about `P` as a transitive protocol requirement.
2020-10-15 16:27:35 -07:00
Pavel Yaskevich
dc7c9c2bfa [unittests/Sema] Add a simple integer literal type inference test 2020-10-12 18:57:20 -07:00