Commit graph

28 commits

Author SHA1 Message Date
Folkert
426aa13e13
fix merge error 2022-03-31 21:09:55 +02:00
Folkert
2c8d58329c
formatting 2022-03-31 19:42:43 +02:00
Folkert
f9f3a255a9
Merge remote-tracking branch 'origin/trunk' into list-str-capacity 2022-03-31 19:19:36 +02:00
Folkert
108f2142ba
clippy 2022-03-30 19:23:51 +02:00
Folkert
49f624a27a
use store_roc_value when inserting into dict 2022-03-30 19:15:39 +02:00
Folkert
85bf881b3b
make Dict.keys and Dict.values use list helpers for returning 2022-03-30 19:14:52 +02:00
Folkert
18ba6316fb
clippy 2022-03-26 12:43:17 +01:00
Folkert
2c1879e3da
use store_roc_value when inserting into dict 2022-03-26 12:41:46 +01:00
Folkert
9528f63d87
make Dict.keys and Dict.values use list helpers for returning 2022-03-26 12:36:14 +01:00
Brian Carroll
456d8ff9cb Merge branch 'trunk' of github.com:rtfeldman/roc into list-str-capacity 2022-03-11 19:28:13 +00:00
ayazhafiz
a90bba3d1d Make sure casting to unsigned types performs zero-extension
Closes #2696
2022-03-10 17:39:37 -06:00
Folkert
07063a8e18
Merge remote-tracking branch 'origin/trunk' into list-str-capacity 2022-03-09 14:36:34 +01:00
ayazhafiz
e52d427ac8 Hash record field name order in generated layouts
Closes #2535

See the referenced issue for longer discussion - here's the synopsis.
Consider this program

```
app "test" provides [ nums ] to "./platform"

alpha = { a: 1, b: 2 }

nums : List U8
nums =
    [
        alpha.a,
        alpha.b,
    ]
```

Here's its IR:

```
procedure : `#UserApp.alpha` {I64, U8}
procedure = `#UserApp.alpha` ():
    let `#UserApp.5` : Builtin(Int(I64)) = 1i64;
    let `#UserApp.6` : Builtin(Int(U8)) = 2i64;
    let `#UserApp.4` : Struct([Builtin(Int(I64)), Builtin(Int(U8))]) = Struct {`#UserApp.5`, `#UserApp.6`};
    ret `#UserApp.4`;

procedure : `#UserApp.nums` List U8
procedure = `#UserApp.nums` ():
    let `#UserApp.7` : Struct([Builtin(Int(I64)), Builtin(Int(U8))]) = CallByName `#UserApp.alpha`;
    let `#UserApp.1` : Builtin(Int(U8)) = StructAtIndex 1 `#UserApp.7`;
    let `#UserApp.3` : Struct([Builtin(Int(I64)), Builtin(Int(U8))]) = CallByName `#UserApp.alpha`;
    let `#UserApp.2` : Builtin(Int(U8)) = StructAtIndex 1 `#UserApp.3`;
    let `#UserApp.0` : Builtin(List(Builtin(Int(U8)))) = Array [`#UserApp.1`, `#UserApp.2`];
    ret `#UserApp.0`;
```

What's happening is that we need to specialize `alpha` twice - once for the
type of a narrowed to a U8, another time for the type of b narrowed to a U8.

We do the specialization for alpha.b first - record fields are sorted by
layout, so we generate a record of type {i64, u8}. But then we go to
specialize alpha.a, but this has the same layout - {i64, u8} - so we reuse
the existing one! So (at least for records), we need to include record field
order associated with the sorted layout fields, so that we don't reuse
monomorphizations like this incorrectly!
2022-02-21 14:10:45 -05:00
Folkert
3e413764e2
make llvm gen tests work 2022-02-20 14:25:26 +01:00
Folkert
c663a35e16 final phase 2022-01-26 15:44:24 +01:00
Folkert
74932a4cab phase 2 2022-01-26 14:30:37 +01:00
Folkert
d1bf07fdcd be a bit less string in debug assert 2021-12-28 00:10:26 +01:00
Folkert
79d5c82dfb cleanup 2021-11-27 16:36:43 +01:00
Folkert
a1fd34feef remove empty layout types (list,str,dict,set) 2021-11-27 14:05:16 +01:00
Folkert
eeb3c26e16 decref for dict/set 2021-09-10 22:31:39 +02:00
Folkert
344f30747d make Dict.len actually return a usize 2021-08-29 23:05:58 +02:00
Folkert
b9cd254b9a allow 4byte alignment in dict values 2021-08-25 22:07:16 +02:00
Folkert
05d2b8150f make dict functions work on 32bit platforms 2021-08-25 20:49:07 +02:00
Folkert
ceb5cc66fa use IdentStr 2021-08-03 21:14:36 +02:00
Folkert
e0648d348d new formatting 2021-07-30 17:13:50 +02:00
Folkert
899cbeabd7 fix extra ampersands 2021-07-29 17:32:08 +02:00
rvcas
3452037d44 chore: dict remove unused vars 2021-07-02 18:36:30 -04:00
Richard Feldman
57676057fa Rename gen to gen_llvm
This way, we have gen_dev and gen_llvm representing the two
different compiler backends.
2021-06-06 07:56:47 -04:00
Renamed from compiler/gen/src/llvm/build_dict.rs (Browse further)