Commit graph

81 commits

Author SHA1 Message Date
ayazhafiz
134a7bf787 Update wasm implementation 2022-04-07 21:10:22 -04:00
Brian Carroll
9116770a00 wasm: Adjust List.map code gen for capacity 2022-04-07 09:29:42 +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
Richard Feldman
08466380df
Merge pull request #2798 from rtfeldman/wasm-fix-dec-isfinite
Wasm: fix Num.isFinite for Dec
2022-04-04 20:58:46 -04:00
Brian Carroll
0910831f59 wasm: fix Num.isFinite for Dec
When I wrote this code I thought it was the base10 floating point format,
but in fact it's fixed-point.
2022-04-05 00:02:31 +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
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
Brian Carroll
24e6cd80e7 wasm: fix argument order for shiftRightBy & disable tests with 8-bit values 2022-03-22 22:28:18 +00: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
20f6330f72 wasm: Fix Str.isEmpty for capacity 2022-03-10 06:59:15 +00:00
Folkert
92f2927046
initial implementation 2022-03-08 19:09:42 +01:00
Folkert
3510bad1d5
add scaffolding 2022-03-07 20:55:40 +01:00
Brendan Hansknecht
2e70bb8458 remove list set low level 2022-02-27 15:07:09 -08:00
Brendan Hansknecht
dddf8ff785 switch from pair to record and change name to ListReplaceUnsafe 2022-02-24 20:41:26 -08:00
Brendan Hansknecht
ba2e8cd32b Add base piping for list.Replace 2022-02-24 17:58:56 -08: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
ayazhafiz
13067f2908 Implement Num.toNNNChecked
Closes #2411
2022-02-19 16:20:21 -05: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
88b779c3ff Wasm: Create CodeGenNumber 2022-01-17 09:33:06 +00:00
Brian Carroll
05a6a9c7ce Wasm: update comments on lowlevels 2022-01-17 09:33:06 +00:00
ayazhafiz
2c41c43aea Implement saturated add/subtract 2022-01-10 22:37:08 -05:00
rvcas
d2f95bde63 chore(StrToNum): layout is always a Struct, we don't need the Union case 2022-01-03 18:15:46 -05:00
Brian Carroll
aec8d1bf3d Merge branch 'trunk' of github.com:rtfeldman/roc into str_to_num 2022-01-02 12:31:59 +00:00
Brian Carroll
83d6c82e0b Wasm: avoid two memory loads for ListLen, at the cost of +1 instruction byte 2021-12-30 15:40:55 +00:00
Brian Carroll
f90d9a74bd Do not inline builtin wrapper for Str.toNum 2021-12-29 21:08:16 +00:00
rvcas
0d187fb53c feat(wasm): use mono layout to figure out the correct intrinsic 2021-12-28 21:38:43 -05:00
rvcas
cd42f034b5 feat(wasm): start StrToNum 2021-12-27 19:08:21 -05:00
Folkert de Vries
18187bc43f
Merge pull request #2245 from rtfeldman/wasm-tag-eq
Wasm tag equality
2021-12-21 16:24:14 +01:00
rvcas
c6eaf3abd3 feat(wasm): enable more Str LowLevels 2021-12-20 17:47:39 -05:00
Brian Carroll
c510226c15 Reorganise Wasm lowlevels to get pointer equality working correctly 2021-12-19 21:20:06 +00:00
Brian Carroll
e847c924dd Lowlevels: replace RefCountGetPtr with the more general GetPtrAsInt. 2021-12-19 08:29:17 +00:00
Brian Carroll
a1d883600c Equality operator for records 2021-12-18 17:25:00 +00:00
rvcas
b9bd75d643 Merge branch 'trunk' into wasm_arrays 2021-12-17 11:54:23 -05:00
rvcas
787900d291 fix(wasm): ListLen does not need to match ret_layout 2021-12-17 11:38:09 -05:00
rvcas
40da207859 feat(wasm): LowLevel::ListLen 2021-12-16 21:50:12 -05:00
Brian Carroll
86d8e2789e Implement Wasm string equality 2021-12-16 16:56:56 +00:00
Brian Carroll
3adaacc66e Add some comments 2021-12-16 16:56:53 +00:00
Brian Carroll
cd91be678f Setup for specializing equality checks 2021-12-16 16:52:47 +00:00
Brian Carroll
cca4acf728 Remove f128 equality implementation 2021-12-13 22:23:20 +00:00
Brian Carroll
594fe9124d Wasm support for 128-bit number literals, isFinite, ==, and != 2021-12-13 09:05:07 +00:00
Richard Feldman
1ce648ac27
Merge pull request #2116 from rtfeldman/str_to_num
Str.toNum
2021-12-09 09:48:38 -05:00
Brian Carroll
1dda8859c4 Update gen_wasm's error handling to remove Result and use macros consistently 2021-12-09 00:11:44 +00:00
Brian Carroll
72fa6217fb Refactor wasm lowlevels to make it easier to add more 128-bit ops 2021-12-01 15:09:23 +00:00