Folkert
43adf0635e
freshen annotations
2023-07-24 21:24:33 +02:00
Ayaz
6225b80e01
Merge pull request #5668 from roc-lang/checkmate
...
Add "checkmate", a tool for the solver
2023-07-19 12:38:20 -05:00
Richard Feldman
aafefb12b2
Fix lambda set numbering issue
2023-07-17 14:09:17 -04:00
Ayaz Hafiz
d7a30966c1
Add explicit casts
...
For some reason these can no longer be inferred.
2023-07-17 09:50:37 -05:00
Ayaz
b36ad76cdd
Merge pull request #5576 from roc-lang/spike-erasure
...
Implement function erasure
2023-07-17 03:27:29 -05:00
Folkert
48fa4f7a8e
When possible, prefer NonNullableUnwrapped over NullableWrapped
...
e.g. in the scenario of `[ A Str, B, C, D ]`, rather than having one tag be nullable, we want
to store the tag id in the pointer. This generally saves 8 bytes for
every allocation, and prevents an allocations for all tags except A.
2023-07-16 20:06:46 +02:00
Ayaz Hafiz
00730be6fb
Fix doc comments
2023-07-12 17:16:12 -05:00
Ayaz Hafiz
937e042c8f
Fixed erased with nullable unwrapped union
2023-07-12 16:01:44 -05:00
Ayaz Hafiz
5e9a06e537
Boxed helpers
2023-07-12 15:55:25 -05:00
Ayaz Hafiz
a8d821bf87
Remove all box references
2023-07-12 15:50:00 -05:00
Ayaz Hafiz
8d9c6d09b9
Load as a stack pointer
2023-07-12 14:46:11 -05:00
Ayaz Hafiz
fde75d5432
Correct calling branches
2023-07-12 14:45:03 -05:00
Ayaz Hafiz
fcb907b0c9
Don't pass empty captures
2023-07-12 14:45:02 -05:00
Ayaz Hafiz
13c45151a4
Mono IR checker: check wanted function pointer layout
2023-07-12 14:45:01 -05:00
Ayaz Hafiz
13d1232f7d
Erased functions do not take a func spec
2023-07-12 14:44:17 -05:00
Ayaz Hafiz
cd64134b0a
Allow direct packing, unpacking of erased types
2023-07-12 14:43:25 -05:00
Ayaz Hafiz
1d1db83cc7
Add needed file
2023-07-12 14:43:24 -05:00
Ayaz Hafiz
dc56a0ffef
First pass update erasure IR
2023-07-12 14:43:24 -05:00
Ayaz Hafiz
7ea85e44d2
Add Layout::Erased
2023-07-12 14:43:24 -05:00
Ayaz Hafiz
283b9d53d6
Add Expr::ErasedLoad
2023-07-12 14:42:46 -05:00
Ayaz Hafiz
2c838aa5c2
Add mono Expr::ErasedMake
2023-07-12 14:40:16 -05:00
Ayaz Hafiz
3e3d3cc7f3
Type fixes
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
b2d3b52bd5
First compile of erased lambdas
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
cf74f849e1
Unpack erased captures
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
fbad6bcb90
First pass at specialized erased
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
2cb2e37fd7
Specialize erased
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
d17d8c72ad
Exercise building erased function
2023-07-12 14:21:28 -05:00
Ayaz Hafiz
a1eb641bb6
how to build an erased fn
2023-07-12 14:21:27 -05:00
Ayaz Hafiz
cf30f02e01
Expr::FunctionPointer
2023-07-12 14:21:27 -05:00
Ayaz Hafiz
55fa8098d3
add a todo impl
2023-07-12 14:17:58 -05:00
Ayaz Hafiz
63db2c0eea
Add erased layout
2023-07-12 14:17:57 -05:00
Ayaz Hafiz
510a421748
Call erased functions
2023-07-12 14:14:25 -05:00
Ayaz Hafiz
a6bb3ab03c
Get started on calling erased functions
2023-07-12 14:14:25 -05:00
Ayaz Hafiz
6312d75ee0
Add FunctionPointer layout
2023-07-12 13:59:50 -05:00
Ayaz Hafiz
a9e3f967a8
First pass at erased function layouts
2023-07-12 13:57:19 -05:00
Ayaz Hafiz
6e5a308557
Content variant ErasedLambda
2023-07-12 13:57:17 -05:00
Ayaz Hafiz
c459757062
Thread simple model of "ErasedLambdas" through proc layouts
...
But none of these paths are yet exercised.
2023-07-12 13:53:52 -05:00
Folkert
a50f013fce
cleanup after review
2023-07-12 17:55:21 +02:00
Folkert
da9482b7fa
inline pattern match
2023-07-10 21:17:58 +02:00
Folkert
8c666edbec
use explicit stack to prevent stack overflow in drop specialization
2023-07-10 21:14:30 +02:00
Folkert
2d616d1fe9
manual clippy fixes
2023-07-10 18:27:10 +02:00
Folkert
ef39bad7c6
auto clippy fixes
2023-07-10 18:27:08 +02:00
Anton-4
72c85efc83
switch to rust 1.67
2023-07-10 18:25:52 +02:00
Folkert
bb97c384bb
preserve semantics in the glue generation
2023-07-09 15:47:28 +02:00
Folkert
6d2d65bb1e
remove Boxed layout
2023-07-09 15:47:28 +02:00
Folkert
d64930c17f
remove box and unbox expressions
2023-07-09 15:47:28 +02:00
Folkert
a9813aeae7
use a NonNullableUnwrapped union for Box
2023-07-09 15:47:27 +02:00
Ayaz
f2e013a4e0
Merge pull request #5628 from roc-lang/i5617
...
Do not drop uninhabited captures from lambda sets
2023-07-01 13:15:14 -05:00
Folkert
3b18494ddd
use Ptr instead of Boxed in the code-gen-help
2023-06-30 15:57:33 +02:00
Ayaz Hafiz
a5e1558a6e
Do not drop uninhabited captures from lambda sets
...
Previously, we would drop uninhabited captures from lambda sets' runtime
representations, which meant sets like
```
[L1 {a: Str}, L2 {a: []}]
```
had runtime representation
```
{Str}
```
rather than
```
Union({Str}, {[]})
```
if we drop unreachable lambdas from the representation, then the
reachable lambdas are somewhat more efficient to compile (as there are
less material tag options), but the compiler complexity increases
because we must represent voided capture sets in the lambda set.
Even if a lambda has voided captures, we must specialize it, because
failing to do so opens us up to losing relevant specializations needed
later on. See 2f7020aa31
for a
previous occurence of that.
As such, simply keep voided layouts in place during lambda set
compilation. The optimizer should elide them anyway.
2023-06-29 17:32:50 -05:00