Commit graph

698 commits

Author SHA1 Message Date
Folkert
166c949c3b
clippy 2022-04-09 12:24:12 +02:00
Folkert
1d0f9e9192
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc 2022-04-08 15:47:11 +02:00
Folkert
0dd2cec09a
update with new clippy lints 2022-03-31 19:34:51 +02:00
Folkert
4e1197165b
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc-delayed-alias 2022-03-18 21:25:52 +01:00
Folkert
a3b00fbf55
Merge branch 'explicit-closed-tag-record' into delay-instantiating-aliases 2022-03-17 20:34:52 +01:00
Folkert
7d8409f6a6
write Aliases implementation 2022-03-15 22:02:04 +01:00
ayazhafiz
73396c0607 aliases->references in partial procs 2022-03-15 11:05:59 -05:00
ayazhafiz
93804bb04c Unnecessary let binding 2022-03-14 17:44:07 -05:00
ayazhafiz
17029cff7e Link aliased lambdas to the partial procs of the original symbol
This ensures that we use the correct specialized variable at the call
site of a function. In #2725 what happened was that a generalized
function was aliased, causing it to undergo generalization again. Then,
we lost the variable used to specialize at the call site. Instead, just
link to the partial proc being aliased directly.

There is an added benefit here, which is that we can avoid the
possibly-quadratic replacement of symbols in the generated statement.

Closes #2725
2022-03-14 16:42:53 -05:00
Folkert
6543c9bbc6
Merge remote-tracking branch 'origin/trunk' into box-all-the-things 2022-03-09 00:00:15 +01:00
Folkert
831a90e310
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc 2022-03-08 22:36:06 +01:00
Folkert
92f2927046
initial implementation 2022-03-08 19:09:42 +01:00
Derek Gustafson
c65e3d2bae
Fix how dec is formatted in mono ir. 2022-03-07 16:17:59 -05:00
Derek Gustafson
ba6b225761
Hide RocDec implemntation details. 2022-03-07 15:34:02 -05:00
Folkert
b3b3b8790c
add new Expr variants 2022-03-07 21:13:48 +01:00
ayazhafiz
cc8c945762 Remove stray dbg 2022-03-06 11:16:03 -05:00
ayazhafiz
0692caf7ba Consolidate Accessor data 2022-03-06 11:07:31 -05:00
ayazhafiz
3bff99b0a2 Register accessor closures when they are bound
Previously we only registered record accessor closures in anonymous
contexts, where we assume they must already be specialized based on the
surrounding contexts. This is not true in general since one might bind
an accessor to a name.

Closes #2567
2022-03-06 10:53:12 -05:00
Folkert
ba70909519
fix more tests 2022-02-28 22:23:11 +01:00
Folkert
db6b5bfd38
get Num to fully work again 2022-02-28 19:40:18 +01:00
Folkert
bd31503855
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc 2022-02-28 18:55:20 +01:00
ayazhafiz
27a50a3e6b exhaustive_wrap -> exhaustive 2022-02-27 20:30:13 -05:00
ayazhafiz
b9a29bdb16 Make exhaustive checking its own crate
Prepares for moving exhaustiveness checking to the closer typechecking
phase. Doing this one step at a time so that git preserves the rename.
2022-02-27 20:28:25 -05:00
Brian Carroll
dcf3c052af
Merge pull request #2594 from rtfeldman/wasm-repl-fixes
Wasm REPL bug fixes
2022-02-27 18:40:47 +00:00
ayazhafiz
a7825c34f5 fixup! Exhaustiveness checking opaque patterns 2022-02-27 00:13:27 -05:00
ayazhafiz
4e27cdd21d Compile opaque patterns all the way, and add repl test 2022-02-27 00:11:10 -05:00
ayazhafiz
68d28349ed Exhaustiveness checking opaque patterns 2022-02-27 00:10:12 -05:00
ayazhafiz
9d87c605fe Couple of opaque repl tests 2022-02-27 00:10:12 -05:00
ayazhafiz
059c324268 Error reporting for type mismatches involving opaques 2022-02-27 00:10:12 -05:00
Richard Feldman
d3acf34415
Merge pull request #1591 from rtfeldman/single-quote-literal
Single Quote literal
2022-02-26 23:27:46 -05:00
Folkert
c0d3543d5a
make Str + Result work 2022-02-26 17:52:24 +01:00
Brian Carroll
9544b3ba6c repl_wasm: update static assertions for struct sizes 2022-02-26 13:11:17 +00:00
Brendan Hansknecht
cd0d89fdc9 Merge remote-tracking branch 'origin/trunk' into single-quote-literal 2022-02-25 07:39:58 -08:00
Richard Feldman
a49b66e379
Merge branch 'trunk' into gui-example 2022-02-25 08:22:36 -05:00
Brendan Hansknecht
69b4e78ac7 Add --opt-size and compiling smaller binaries 2022-02-24 15:39:50 -08:00
Brendan Hansknecht
f7c0e2ef19 Merge remote-tracking branch 'origin/trunk' into single-quote-literal 2022-02-24 10:13:39 -08:00
Richard Feldman
655373dbe7
Merge remote-tracking branch 'origin/trunk' into gui-example 2022-02-23 21:25:01 -05:00
Folkert
d1d7cfef44
reimplement Result 2022-02-23 17:52:13 +01:00
hafiz
ca9ecbea52
Merge pull request #2533 from rtfeldman/abilities!
[WIP] Spike for abilities and friends
2022-02-21 23:18:40 -05:00
ayazhafiz
90de82e295 Validation of opaques during canonicalization 2022-02-21 18:25:19 -05:00
ayazhafiz
395e0a33e0 Make sure unit structs are always units 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
ayazhafiz
6b53692aac Canonicalize opaque types 2022-02-20 13:47:01 -05:00
Folkert
637360fad5
clippy 2022-02-19 16:50:42 +01:00
Brian Carroll
c61a18a200 Use custom macros for static assertions 2022-02-09 17:16:43 +00:00
Brian Carroll
d8b76b317b repl: replace [u8; 8] with u64 in static assertions 2022-02-09 16:34:11 +00:00
Brian Carroll
8e370a32b6 repl: update some static_asserts for 32-bit compiler build 2022-02-09 16:34:11 +00:00
ayazhafiz
40196185a0 Specialize zero-argument thunks with the correct variable
Previously we would pass the annotation down as the
type-to-be-monomorphized for, but that would just mean the annotation
would unify with itself. We instead want to use the variable the thunk
is being used as to be the one unified with the thunk's annotation.

Closes #2445
Closes #2446
2022-02-06 20:58:13 -05:00
ayazhafiz
680bf8e0b7 Treat rigids as flex vars when checking number range types 2022-02-06 15:04:12 -05:00