Commit graph

265 commits

Author SHA1 Message Date
Brian Carroll
7b96e953ba wasm: Get List.map2 working 2022-04-11 14:36:31 +01:00
Brian Carroll
5cce24bc8f wasm: improve debug logging 2022-04-11 14:36:31 +01:00
Brian Carroll
2b74e55240 Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-higher-order-calls 2022-04-07 09:03:34 +01:00
Brian Carroll
a07cac6682 PR tweaks 2022-04-05 00:02:05 +01:00
Brian Carroll
a63e55e023 wasm: fix stack order in higher-order wrapper 2022-04-05 00:02:05 +01:00
Brian Carroll
b1f15799e3 wasm: Ensure TableSection matches ElementSection 2022-04-05 00:02:05 +01:00
Brian Carroll
8620cdf75c wasm: function pointers for higher order calls 2022-04-05 00:02:05 +01:00
Brian Carroll
5db3ae0227 wasm: code gen for higher order wrapper function 2022-04-05 00:02:05 +01:00
Brian Carroll
51789f38c2 wasm: generate RC inc for higher order builtins 2022-04-05 00:02:05 +01:00
Brian Carroll
05459455ec wasm: ProcLayout for higher order wrapper fns 2022-04-05 00:02:05 +01:00
Brian Carroll
83cae16a60 wasm: Generate code for List.map call (incomplete) 2022-04-05 00:02:05 +01:00
Brian Carroll
ff9bbfab63 wasm: generate code for ZigCC wrapper function 2022-04-05 00:01:11 +01:00
Brian Carroll
973d6dc41f wasm: Create ProcLookupData structure to help with callconv wrapper 2022-04-05 00:01:11 +01:00
Brian Carroll
448140d223 wasm: refactor to prepare for HigherOrder calls 2022-04-05 00:01:11 +01:00
Folkert
c73c01aa34
Merge remote-tracking branch 'origin/trunk' into list-str-capacity 2022-03-30 14:07:17 +02:00
Folkert de Vries
5e9e7f3ad5
Merge pull request #2760 from rtfeldman/wasm-reset-reuse
Wasm reset & reuse
2022-03-21 23:02:28 +01:00
Brian Carroll
1f82310832 wasm: Add support for Expr::Reuse 2022-03-20 23:01:54 +00:00
Brian Carroll
5de539b9fa mono: Generate IR for refcount reset procedures 2022-03-20 22:48:23 +00:00
Brian Carroll
9b6b81a438 WIP 2022-03-20 11:17:34 +00:00
Brian Carroll
c9efeed17e wasm: add support for Expr::Reset 2022-03-19 09:37:45 +00:00
Brian Carroll
bb62571e3a wasm: reorder some code 2022-03-19 09:27:17 +00:00
Folkert
6134e57921
Merge remote-tracking branch 'origin/trunk' into list-str-capacity 2022-03-18 18:13:55 +01:00
Brian Carroll
136b42cbeb formatting 2022-03-18 15:17:45 +00:00
Brian Carroll
21ee531e8c wasm: Add Roc procedure names to Names section for debug 2022-03-18 14:46:53 +00:00
Brian Carroll
1afada4075 wasm: fix panic on empty Struct expression 2022-03-12 09:30:27 +00:00
Brendan Hansknecht
bc492fa22b run cargo fmt 2022-03-11 19:29:34 -08:00
Brian Carroll
456d8ff9cb Merge branch 'trunk' of github.com:rtfeldman/roc into list-str-capacity 2022-03-11 19:28:13 +00:00
Brian Carroll
0c6fef0ba3 wasm: Generate Str literals with capacity 2022-03-09 21:18:30 +00:00
Folkert
574f14522d
placeholders in the wasm code 2022-03-09 00:04:23 +01:00
Brian Carroll
70804e9bec Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-runtime-error 2022-03-08 08:58:15 +00:00
Brian Carroll
9ae26c5aac wasm: use __data_end to account for all constant data including zero (bss) data 2022-03-08 08:56:34 +00:00
Derek Gustafson
ba6b225761
Hide RocDec implemntation details. 2022-03-07 15:34:02 -05:00
Brian Carroll
7958158d89 wasm: comments & renaming 2022-02-27 23:42:05 +00:00
Brian Carroll
7ccc5ec768 Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-runtime-error 2022-02-27 22:57:23 +00:00
Brian Carroll
89b8926d27 gen_wasm: fix bug choosing the right proc specialization (#2549) 2022-02-21 22:52:45 +00: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
Brian Carroll
8c5fe2ae22 wasm: implement Stmt::RuntimeError 2022-02-10 10:13:54 +00:00
Brian Carroll
4b585cc6c6 wasm: More explicit todo! statements 2022-02-09 17:23:36 +00:00
Folkert
c663a35e16 final phase 2022-01-26 15:44:24 +01:00
Mats Sigge
71f359fbdc Move macros from roc_reporting to new roc_error_macros module
The `internal_error!` and `user_error!´ macros can't be used everywhere
when they live in `roc_reporting` due to circular dependencies.
2022-01-23 18:40:04 +01:00
Brian Carroll
f354b4842b Wasm: Move Eq/NotEq into LowLevelCall 2022-01-17 09:35:08 +00:00
Brian Carroll
f635dd8776 Wasm: Refactor lowlevels to get more flexibility without increasing boilerplate. 2022-01-17 09:33:06 +00:00
Brian Carroll
5e68f298df Wasm: Reorganise Stmt and Expr methods 2022-01-15 15:53:41 +00:00
Brian Carroll
6bdc27a49e Wasm: Use Vec instead of MutSet for called preloads 2022-01-15 15:35:42 +00:00
Brian Carroll
8c4fd93b07 Wasm: Remove old debug code that's never used. We have the HTML debugger now. 2022-01-15 13:27:34 +00:00
Brian Carroll
8d5a1cb661 Wasm: Replace _ todo with RuntimeError todo 2022-01-15 13:27:34 +00:00
Brian Carroll
c38134bdc0 Wasm: remove legacy unused ret_layout 2022-01-15 13:27:34 +00:00
Brian Carroll
bafb6e54d0 Wasm: Change panic for literals todo -> internal_error 2022-01-15 13:27:34 +00:00
Brian Carroll
91a0b21e70 Wasm: Get rid of some Backend compatibility code 2022-01-15 13:27:34 +00:00
Brian Carroll
c7da7ca689 Wasm: Parse the Name section, export init_refcount_test, and don't DCE exports 2022-01-14 18:20:52 +00:00