Ayaz Hafiz
b9f79fdd31
Able variables through different functions compile
2022-04-20 17:43:17 -04:00
Ayaz Hafiz
a07323fb40
Typecheck annotations with able variables outside ability members
2022-04-20 17:43:16 -04:00
Ayaz Hafiz
f129777115
Explicitly disallow ability definitions in nested scopes
...
Abilities can only be defined on the toplevel of a module. There is a
technical reason to this, which is that during type solving we must
introduce all abilities at the very beginning, and we need to make sure
ranks are correct. But there is a practical reason as well, which is
that nested ability definitions don't seem to be very useful.
Note that specializations can be nested, and are allowed to be. Also, we
can revisit this in the future. I just don't want experiments to break
right now because someone uses an ability in a nested scope where we
don't expect.
Closes #2878
2022-04-18 18:04:46 -04:00
Folkert
7f3ca4458a
use VecSet in IntroducedVariables
2022-04-17 20:50:41 +02:00
Folkert
dda4f46e67
use VecSet in References
2022-04-17 19:37:10 +02:00
Ayaz Hafiz
6b4294307f
Start saving ability signature on designated variable again
2022-04-14 16:22:54 -04:00
Ayaz Hafiz
0792ccbbe8
Calling ability with non-specialized type is an error
2022-04-13 11:49:33 -04:00
Ayaz Hafiz
d110fbde6c
Annotation specializes ability
2022-04-13 10:44:34 -04:00
Ayaz Hafiz
25b3aa7ca7
Typed body specializations solve
2022-04-13 10:42:46 -04:00
Ayaz Hafiz
389c46edcf
Remove unneeded var
2022-04-13 10:12:45 -04:00
Ayaz Hafiz
5e1ab8225e
Report when ability member binds >1 variable to parent
2022-04-13 10:11:24 -04:00
Ayaz Hafiz
cbbbb8c855
Remove stray dbg
s
2022-04-12 16:32:50 -04:00
Ayaz Hafiz
15a040ec87
Basic type inference and solving for abilities
...
Note that is still pretty limited. We only permit opaque types to
implement abilities, abilities cannot have type arguments, and also no
other functions may depend on abilities
2022-04-12 16:18:07 -04:00
ayazhafiz
94a5cd3559
Improve shadow errors
2022-04-07 22:38:20 -04:00
Ayaz Hafiz
73bfff699f
Handle symbols that shadow ability member definitions
...
Just add the shadowing symbol for now. We'll handle checking that a
specialization's type matches the member's type definition in a later
pass, during typechecking.
2022-04-07 17:21:17 -04:00
Ayaz Hafiz
66ec1b4a84
Basic canonicalization and error checking for abilities
2022-04-07 17:21:17 -04:00
Ayaz Hafiz
d3b848fa46
Clippy
2022-04-06 22:24:14 -04:00
Ayaz Hafiz
a3ac68a41f
Split up Defs into TypeDef and ValueDef
...
Just a refactoring PR. This is useful because during canonicalization
we always process type defs first, then value defs. With abilities this
distinction continues to grow; in that case, we have patterns associated
with types that we want to process before patterns from values.
2022-04-06 22:18:57 -04:00
Folkert
0dd2cec09a
update with new clippy lints
2022-03-31 19:34:51 +02:00
Folkert
7029717cd0
fix missing import
2022-03-21 23:46:25 +01:00
Folkert
725eb217d8
more vecs, less sets
2022-03-21 23:20:57 +01:00
Folkert
14b53c0ccf
simplify local_successors
2022-03-21 23:16:07 +01:00
Folkert
cee1a787c9
and remove everything because it has no effect
2022-03-21 23:07:27 +01:00
Folkert
1b1a7b0385
more cleaned up
2022-03-21 22:54:24 +01:00
Folkert
a170f461e0
cleanup
2022-03-21 22:44:14 +01:00
Folkert
cc9873eb6d
exploration
2022-03-21 22:41:32 +01:00
hafiz
3f07afe3b5
Merge pull request #2750 from rtfeldman/delay-instantiating-aliases-fix-limitations
...
Delay instantiating aliases fix limitations
2022-03-19 20:41:14 -04:00
Folkert
4e315797b0
expose ImMap entry
2022-03-19 00:00:56 +01:00
Folkert
9b63e6a3a9
simplify IntroducedVariables
2022-03-18 23:47:39 +01:00
Folkert
d6f0005fb3
bubble up lambda sets used by inner aliases
2022-03-18 20:04:07 +01:00
Folkert
a3b00fbf55
Merge branch 'explicit-closed-tag-record' into delay-instantiating-aliases
2022-03-17 20:34:52 +01:00
Folkert
7f63e09272
remember recursion variable when making alias recursive
2022-03-16 14:52:34 +01:00
ayazhafiz
8aaf614481
Improve error message
2022-03-15 11:18:02 -05:00
ayazhafiz
787c8ee3a5
s/occurence/occurrence/g
2022-03-14 17:50:55 -05:00
ayazhafiz
3da34fc843
Report unbound type variables in aliases, opaques
...
Closes #2726
2022-03-14 17:42:45 -05:00
Folkert
8bc31e82c3
try to keep type and value symbols separate
2022-03-13 16:50:32 +01:00
ayazhafiz
d7abc3897b
Parse abilities
2022-03-12 21:29:06 -06:00
ayazhafiz
6a71358431
Get rid of more clones when resolving recursive aliases and use fast ImMap
2022-03-11 14:59:19 -06:00
Folkert
fc5e09a9e3
use Vec instead of ImSet
2022-03-11 09:52:44 +01:00
ayazhafiz
0692caf7ba
Consolidate Accessor
data
2022-03-06 11:07:31 -05:00
Folkert
0285a1b0ea
cleanup
2022-03-05 16:41:29 +01:00
Folkert
cd203d20a3
also remove clones for Body
2022-03-05 16:12:19 +01:00
Folkert
b421df2a28
transform TypedDef to use fewer clones
2022-03-05 15:50:00 +01:00
Folkert
5e48577d29
remove clones in most cases in can/def
2022-03-05 15:32:55 +01:00
Folkert
7c83e940bd
leave a TODO
2022-03-05 13:55:30 +01:00
Folkert
d7eee71402
track lambda set variables; only use annotation variables in annotations...
2022-03-05 13:47:01 +01:00
Folkert
d5bba1a779
use vec instead of set
2022-03-02 15:01:19 +01:00
Folkert
edd2120535
reorder operations to remove clones
2022-03-02 14:57:03 +01:00
Folkert
b6fd034ddf
remove clones
2022-03-02 14:54:25 +01:00
Folkert
ef5a81f731
make reference mut
2022-03-02 14:52:48 +01:00