Commit Graph

6928 Commits

Author SHA1 Message Date
Brendan Hansknecht
7c6c9b52a9 Merge remote-tracking branch 'origin/trunk' into list-replace 2022-02-25 07:35:00 -08:00
Tom Dohrmann
954064fa1e make more types more explicit 2022-02-25 13:58:07 +01:00
Tom Dohrmann
868316abb8 make types more explicit 2022-02-25 13:02:11 +01:00
Brendan Hansknecht
116b585cdc add more tests 2022-02-24 22:59:47 -08:00
Brendan Hansknecht
badad1c1ad get basic tests passing 2022-02-24 22:50:28 -08:00
Brendan Hansknecht
889b189191 fix list passing 2022-02-24 22:46:50 -08:00
Brendan Hansknecht
edfbd6242f fix ListReplace generate if types 2022-02-24 22:38:32 -08:00
Brendan Hansknecht
aff962809b call ListReplace and generate struct afterwards 2022-02-24 22:33:36 -08:00
Brendan Hansknecht
dc59ba97c2 change listReplace zig builtin to use RocList 2022-02-24 22:02:23 -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
27b47713aa Add some comments and TODOs 2022-02-24 20:40:45 -08:00
Brendan Hansknecht
ba2e8cd32b Add base piping for list.Replace 2022-02-24 17:58:56 -08:00
Brendan Hansknecht
ec411b7a62 Also build host for size when using --opt-size 2022-02-24 16:21:12 -08:00
Brendan Hansknecht
69b4e78ac7 Add --opt-size and compiling smaller binaries 2022-02-24 15:39:50 -08:00
Brendan Hansknecht
c327681ebc Wasmer: use cranelift for non-x86_64 since singlepass is not supported 2022-02-24 10:31:21 -08:00
Richard Feldman
7179f87536
Merge pull request #2569 from rtfeldman/simplify-pattern-constraint-generation
Simplify pattern constraint generation
2022-02-24 07:28:17 -05:00
ayazhafiz
f8c7349193 Simplify pattern constraint generation
At the time we introduced presence constraints for tag unions, I added a
"destruct_position" variable so that we didn't change the typechecking
semantics for everything all at once, and because I wasn't totally sure
what I was doing was correct. But now we're more confident in this
approach, and every pattern is by definition a destructuring, so there
is no need for this flag.

Also should fix some potential bugs we didn't notice before with presence
constraints in closure variables, though I can't find a good test to
reproduce this, since closure variables are hidden from the user.
2022-02-24 01:08:18 -05:00
Tom Dohrmann
0169a6c579
Merge pull request #2561 from rtfeldman/remove-capacity-from-roc_std
reimplement `RocList` and `RocStr`
2022-02-24 05:42:10 +01:00
Folkert de Vries
3066aef1b7
Merge pull request #2550 from rtfeldman/improve-link-lib64
[Enhancement] Improve library lookup in native linker
2022-02-23 23:25:33 +01:00
Tom Dohrmann
788c8a6af2 reimplement RocList and RocStr 2022-02-23 16:02:13 +01:00
Brian Carroll
b327418a6a Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-specializations 2022-02-22 23:48:30 +00:00
Brian Carroll
ce6d5b1727 mono: Fix recursive union arg layout for calls to helper functions 2022-02-22 23:42:48 +00:00
Anton-4
8fee48c3fa
windows zig path validation workaround
std::fs::canonicalize adds a special windows prefix ?, zig erroneously (ziglang/zig#1509) does not allow ? in windows paths, dunce correctly removes this ? prefix
2022-02-22 16:17:21 +01:00
hafiz
2ff50333ff
Merge pull request #2556 from rtfeldman/2533-review
#2533 review
2022-02-22 00:21:01 -05:00
Richard Feldman
91169a47f5
Merge pull request #2553 from rtfeldman/roc-link-flags
Read ROC_LINK_FLAGS env var to inject more link flags
2022-02-22 00:07:32 -05:00
ayazhafiz
e420ebd023 Add TODOs for opaque type comments that will need to be changed later 2022-02-21 23:21:39 -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
Richard Feldman
7dc92fe6f4
clippy 2022-02-21 22:15:24 -05:00
Richard Feldman
afa8d228ef
cargo fmt 2022-02-21 20:35:29 -05:00
Brian J. Cardiff
b27eee7f6b Read ROC_LINK_FLAGS env var to inject more link flags
Flags should not contain whitespaces since the value is split on them
Update compiler/build/src/link.rs

Co-authored-by: Richard Feldman <oss@rtfeldman.com>
2022-02-21 21:29:58 -03:00
ayazhafiz
075c5b3eee Typo 2022-02-21 18:36:28 -05:00
ayazhafiz
90de82e295 Validation of opaques during canonicalization 2022-02-21 18:25:19 -05:00
Brian Carroll
3952a7cc7c test_gen: Add comments to some extremely subtle test code 2022-02-21 22:52:50 +00:00
Brian Carroll
89b8926d27 gen_wasm: fix bug choosing the right proc specialization (#2549) 2022-02-21 22:52:45 +00:00
Emi Simpson
b5b26eabc9
Amend ff0c994: 🐛 Search the /lib/<arch> directory 2022-02-21 17:18:11 -05:00
Emi Simpson
97b99e7cfb
Amend ff0c994: 🐛 Re-add support for Rust < 0.58 2022-02-21 15:34:55 -05:00
ayazhafiz
2151e715dd Fix rebased compile error 2022-02-21 14:12:49 -05:00
ayazhafiz
dd2b3097e1 Disable WASM test for now 2022-02-21 14:10:46 -05:00
ayazhafiz
395e0a33e0 Make sure unit structs are always units 2022-02-21 14:10:46 -05:00
ayazhafiz
148dbb4efe Unnecessary reference 2022-02-21 14:10:46 -05:00
ayazhafiz
475be2363c Add a gen test for #2535 2022-02-21 14:10:46 -05:00
ayazhafiz
dfc384aa1f Make mono test output prettier 2022-02-21 14:10:45 -05: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
Brendan Hansknecht
74daec84df
Merge pull request #2472 from rtfeldman/add_Int.toInt_builtins
Add `{Int *}.to{Int *}` builtins
2022-02-21 18:03:14 +00:00
ayazhafiz
e22c9d8168 Fix a typo 2022-02-21 10:29:24 -05:00
Emi Simpson
ff0c994668
Improve library lookup in native linker
🐛 Fix bug where /usr/lib isn't checked if /usr/lib/{arch} exists
 Better error messages on missing libraries
 Check /usr/lib64 for libraries
2022-02-21 10:18:23 -05:00
Brian Carroll
e8571de1ae
Merge pull request #2517 from rtfeldman/repl-www
Web REPL initial version
2022-02-21 13:58:23 +00:00
ayazhafiz
543ca97a1c Remove spaces around var in record update
Closes #2534
2022-02-20 20:17:29 -05:00
ayazhafiz
6b53692aac Canonicalize opaque types 2022-02-20 13:47:01 -05:00
Brian Carroll
603c98d1d9 wasm tests: use wasmer .unwrap_i32 2022-02-20 09:05:08 +00:00