Folkert
a37a895016
optimize tag name cache
2022-03-06 14:11:33 +01:00
Folkert
7ad55d67e2
Make type_to_variable manually tail-recursive
...
by using a work stack and reserving variables. fun stuff
2022-03-06 13:15:50 +01:00
Folkert
4806dc378f
add comment and assert back
2022-03-05 23:49:21 +01:00
Folkert
0351b9fce7
improvements to adjust_rank
2022-03-05 23:45:07 +01:00
Folkert
97d9027271
improve pool_to_rank_table
2022-03-05 23:44:57 +01:00
Folkert
c7c9a90d65
restructure how def_types are stored in Constraints
2022-03-05 21:47:49 +01:00
hafiz
cad02d878c
Merge pull request #2645 from rtfeldman/solve-fully-tail-recursive
...
make solve fully tail recursive
2022-03-05 14:35:39 -05:00
Folkert
1b66247303
renaming
2022-03-05 19:30:15 +01:00
Folkert
fc4212310f
Merge remote-tracking branch 'origin/trunk' into solve-fully-tail-recursive
2022-03-05 18:34:09 +01:00
Folkert
80956061dd
fix formatting bug in type pretty-print
2022-03-05 15:03:59 +01:00
Folkert
6370a80c62
make sure lambda sets within aliases are in IntroducedVariables
2022-03-05 14:29:34 +01:00
Folkert
d158702e1a
Merge remote-tracking branch 'origin/trunk' into take-scratchpad-bug
2022-03-05 02:15:46 +01:00
Folkert
8c321c1aa4
fix a bug with taking a scratchpad arena
2022-03-05 02:12:10 +01:00
Folkert
a79f6c6cdd
restructure and add comments
2022-03-05 01:29:21 +01:00
Folkert
c7d8ae6c79
make complex case tail-recursive
2022-03-05 01:02:27 +01:00
Folkert
3a1add6ce8
add LocalDefVarsVec::from_def_types
2022-03-05 00:53:27 +01:00
Folkert
41df04184e
make the simple case tail-recursive
2022-03-05 00:26:03 +01:00
Folkert
4ca9ea0b89
refactor After
2022-03-04 23:57:41 +01:00
Folkert
38d3d3169a
drop final suffixes
2022-03-02 21:30:38 +01:00
Folkert
546afc9661
drop soa suffix
2022-03-02 21:21:37 +01:00
Folkert
0eb98a4c59
move over constraint
2022-03-02 21:19:58 +01:00
Folkert
c52029c2d1
the debugging begins
2022-03-02 20:30:42 +01:00
Folkert
fe48bdf5b1
make solve that uses new constraint
2022-03-02 19:43:03 +01:00
Folkert
19d7f7ce09
make vars-by-symbol a vector
2022-03-01 21:51:25 +01:00
Folkert
8b457a56c5
reduce cloning of Env
2022-03-01 00:08:56 +01:00
Folkert
d3bbf6d504
struct of arrays!
2022-03-01 00:00:50 +01:00
Folkert
1ef9546391
use Vec instead of MutMap
2022-02-28 23:54:35 +01:00
Folkert
9d82f795b7
make it abstract
2022-02-28 23:43:58 +01:00
Folkert
751ae125a5
remove aliases from solve Env
2022-02-28 23:41:07 +01:00
Folkert
c18befeccf
short-circuit aliases
2022-02-28 23:37:33 +01:00
ayazhafiz
01da425851
Simplify solve worklist substantially
2022-02-27 16:41:31 -05:00
ayazhafiz
56d4dc3480
Transition solve
to use a worklist rather than always recursing
...
This should unblock some of @folkertdev's work on transitioning builtins
to pure Roc code. It's not perfect yet (we still make some recursions),
but it's a step, and it should avoid recursing on `Let`
`ret_constraint`s, which caused stack overflows when they became really
long before.
2022-02-27 15:51:19 -05:00
ayazhafiz
07b1829732
Improve error reporting for patterns not matching opaques
2022-02-27 00:11:11 -05:00
ayazhafiz
059c324268
Error reporting for type mismatches involving opaques
2022-02-27 00:10:12 -05:00
ayazhafiz
b6d7229525
Infer + checking tests for opaques
2022-02-27 00:10:12 -05:00
hafiz
ca9ecbea52
Merge pull request #2533 from rtfeldman/abilities!
...
[WIP] Spike for abilities and friends
2022-02-21 23:18:40 -05:00
ayazhafiz
90de82e295
Validation of opaques during canonicalization
2022-02-21 18:25:19 -05:00
ayazhafiz
6b53692aac
Canonicalize opaque types
2022-02-20 13:47:01 -05:00
ayazhafiz
d90915a8cd
Implement Num.to* builtins
...
Just wrap over Num.intCast
2022-02-19 11:28:41 -05:00
ayazhafiz
909fae5b6c
Generalize recursion variables properly
...
Closes #2379
Closes #2481
2022-02-18 00:07:38 -05:00
Folkert
04adbe75ca
fix test compilation
2022-02-14 21:09:51 +01:00
ayazhafiz
8c0e39211d
Instantiate recursive aliases to their smallest closures
...
Now, when we have two aliases like
```
T a : [ A, B (U a) ]
U a : [ C, D (T a) ]
```
during the first pass, we simply canonicalize them but add neither to
the scope. This means that `T` will not be instantiated in the
definition of `U`. Only in the second pass, during correction, do we
instantiate both aliases **independently**:
```
T a : [ A, B [ C, D (T a) ] ]
U a : [ C, D [ A, B (U a) ] ]
```
and now we can mark each recursive, individually:
```
T a : [ A, B [ C, D <rec1> ] ] as <rec1>
U a : [ C, D [ A, B <rec2> ] ] as <rec2>
```
This means that the surface types shown to users might be a bit larger,
but it has the benefit that everything needed to understand a layout of
a type in later passes is stored on the type directly, and we don't need
to keep alias mappings.
Since we sort by connected components, this should be complete.
Closes #2458
2022-02-11 08:43:33 -05:00
ayazhafiz
0d241f3c3c
Only expand ErrorType::Range
's type range when range unification fails
2022-02-06 15:04:13 -05:00
ayazhafiz
680bf8e0b7
Treat rigids as flex vars when checking number range types
2022-02-06 15:04:12 -05:00
ayazhafiz
c5d918e68c
Include floats in bounds for unspecified numbers
2022-02-06 15:04:12 -05:00
ayazhafiz
8dc92ccd97
Second pass
2022-02-06 15:04:12 -05:00
ayazhafiz
5e0d90ac53
First pass
2022-02-06 15:04:12 -05:00
ayazhafiz
df8113ce32
Typecheck numeric suffixes in patterns
2022-02-01 23:35:14 -05:00
ayazhafiz
e03592930f
Typecheck numeric literals with suffixes in expressions
...
Part of #2350
2022-02-01 22:49:50 -05:00
ayazhafiz
d10eb0f9a3
Fix Apply
usage
2022-01-31 23:00:37 -05:00