Commit graph

42 commits

Author SHA1 Message Date
Ayaz Hafiz
4d48ea7c2f
Materialize extension variable polarity in error type reporting 2022-10-31 09:37:40 -05:00
Ayaz Hafiz
0da72df5e9
Add ability slice to eq obligation checker 2022-10-24 14:00:46 -05:00
Ayaz Hafiz
9c88534758
Obligation checking layers on extra abilities bound to a variable 2022-10-24 13:59:52 -05:00
Ayaz Hafiz
229548571b
Represent "able" variables with slices of abilities 2022-10-24 13:59:51 -05:00
Ayaz Hafiz
e75f3c3c79
Get rid of MemberImpl::Derived
We don't need this anymore, since derived members become Impls during
canonicalization now!
2022-10-23 20:48:07 -05:00
Ayaz Hafiz
20e4295eea
Make sure type variables bound to abilities are instantiated in aliases
Closes #4259
2022-10-14 13:56:00 -05:00
Ayaz Hafiz
6149c289fc
Update Eq symbols 2022-10-12 16:38:36 -05:00
Ayaz Hafiz
12778762b2
Make sure Box is handled as an Apply type 2022-10-12 16:37:50 -05:00
Ayaz Hafiz
b587bcf0c2
Implement obligation checking for the Eq ability
Every type can have `Eq.isEq` derived for it, as long as

- it does not transitively contain a function
- it does not transitively contain a floating point value
- it does not transitively contain an opaque type that does not support
  `Eq`
2022-10-12 16:37:49 -05:00
Ayaz Hafiz
e9efc95425
Obligation checking for the Hash ability
This implements type-level checks that types can and cannot implement
the `Hash` ability.

Part of #4195
2022-10-04 10:51:14 -05:00
Ayaz Hafiz
a1d8f8392a
Include RigidOptional as optional field 2022-08-23 10:39:51 -05:00
Ayaz Hafiz
e77e53f37b
Enable optional record field underivable error 2022-08-23 10:39:51 -05:00
Ayaz Hafiz
55fe1df995
Add more context to derivability errors when they happen 2022-08-23 10:39:50 -05:00
Ayaz Hafiz
d2b9cc056f
Record with optionally-typed fields cannot be derived for decoding 2022-08-23 10:38:30 -05:00
Ayaz Hafiz
6255332cee
Promote flex vars to flex-able in obligation checking 2022-08-22 17:05:56 -05:00
Ayaz Hafiz
60ed17155c
Check in gen test for record decoding! 2022-08-15 11:11:36 -05:00
Ayaz Hafiz
b62c9d1faa
Support specialization of ability members that don't decay to functions 2022-08-03 10:16:22 -05:00
Ayaz Hafiz
fb5ab7d7ca
More aggressive inlining 2022-08-02 14:31:17 -05:00
Ayaz Hafiz
19e93962cb
Check for builtin opaque types that always have a derived impl 2022-08-02 14:31:17 -05:00
Ayaz Hafiz
4bbc6b74fc
Add derivability obligation checking for Decode 2022-08-02 14:31:16 -05:00
Ayaz Hafiz
a7bc8cf4f2
Switch obligation checking to use a visitor
My hope is this will make obligation checking for other abilities easier
to add when we do so
2022-08-02 14:30:10 -05:00
Ayaz Hafiz
b8328c2b5b
Remove stray dbgs 2022-08-01 09:09:37 -05:00
Ayaz Hafiz
2adde2351f
Add subs to member_parent_and_signature_var 2022-08-01 09:05:16 -05:00
Ayaz Hafiz
b72c8705e5
Add an AbilityResolver trait for abilities stores and views 2022-08-01 08:09:24 -05:00
Ayaz Hafiz
c0e976f544
Wrap unification subs in Env 2022-07-28 08:57:33 -04:00
Ayaz Hafiz
0989b2cb82
Move solve problems to their own crate 2022-07-28 08:57:32 -04:00
Ayaz Hafiz
ae4916ceb7
Remove unused variables 2022-07-28 08:57:14 -04:00
Ayaz Hafiz
753d12e912
Eagerly resolve obligations during solving
Replaces the previously-used `DeferredObligations` structure used for
accumulating and then acting over ability obligations during module
solving in favor of just the `ObligationCache`. The `ObligationCache`
stays alive for the entirety of a module solving and provides a
convenient mechanism for answering obligation queries with a backed
cache.
2022-07-28 08:57:13 -04:00
Ayaz Hafiz
bb14b649a2
Don't re-report obligations that we know were seen elsewhere 2022-07-26 20:46:35 -04:00
Ayaz Hafiz
6b9c1cb690
Check whether opaque implements ability using store 2022-07-26 20:46:35 -04:00
Ayaz Hafiz
3fbf4e228b
Remove dominated derives from obligation checking 2022-07-26 20:46:34 -04:00
Ayaz Hafiz
04ee74542d
Rename IncompleteAbility 2022-07-26 20:46:34 -04:00
Ayaz Hafiz
968bd468a8
Use proper members in checking derive keys 2022-07-26 20:46:33 -04:00
Ayaz Hafiz
f2cf7405df
Revert "Use abilities ImplKey in solve"
This reverts commit b7cb0003134f1b0c657d7173db6965b4247500aa.
2022-07-26 20:46:33 -04:00
Ayaz Hafiz
254d684dfa
Use abilities ImplKey in solve 2022-07-26 20:46:33 -04:00
Ayaz Hafiz
28c1a4cb95
Use ImplKey in abilities store public API 2022-07-26 20:46:33 -04:00
Ayaz Hafiz
e2454f497f
Store declared implementations, both custom and derived, in abilities store 2022-07-25 09:09:01 -04:00
Ayaz Hafiz
6035e45f25
Store derivable ability members statically 2022-07-25 09:09:00 -04:00
Ayaz Hafiz
2e20441157
Num * can't be derived for encoding, but concrete numbers can be 2022-07-15 10:39:09 -04:00
Ayaz Hafiz
7b23077265
Treat numbers as ad-hoc types for the purpose of checking ability obligations 2022-07-15 10:39:09 -04:00
Ayaz Hafiz
088b443e05
Refactor lambda set compaction so it's better split up 2022-07-13 08:47:35 -04:00
Anton-4
eee85fa45d
moved all crates into seperate folder + related path fixes 2022-07-01 17:37:43 +02:00
Renamed from compiler/solve/src/ability.rs (Browse further)