Commit graph

66 commits

Author SHA1 Message Date
ayazhafiz
983a9f7e17 Position correct basic block before calling error catcher
While building the main function for tests, we may need to generate
additional blocks while marshalling arugments to the error catcher into
the expected calling convention. This pushes the last block in the main
function down, so that the "entry" block may not be last BB in the
function. Instead, look up the last insertion block before generating
the catcher, and then add a call to the catcher at the end of this last
block.

Closes #2300
2021-12-30 20:55:43 -06:00
ayazhafiz
d966d8921f Support nullable wrapped tag union layouts in REPL 2021-12-29 17:55:21 -06:00
ayazhafiz
cdcc31f199 Support nullable unwrapped tag layouts in REPL 2021-12-29 17:55:21 -06:00
ayazhafiz
9c147c8b70 Support non-nullable unwrapped unions in repl 2021-12-29 17:55:21 -06:00
ayazhafiz
b7c9713232 Support nested non-recursive unions in REPL eval 2021-12-29 17:55:21 -06:00
ayazhafiz
2c25bac695 Support rendering general "regular" recursive tag unions in REPL 2021-12-29 17:55:21 -06:00
ayazhafiz
a9ae8aea22 Retrieve recursive tag union IDs when tag is stored next to data 2021-12-29 17:55:21 -06:00
ayazhafiz
71bd77e3b2 Handle flat variants of recursive tag unions in repl 2021-12-29 17:55:21 -06:00
ayazhafiz
3fcc59fb8e Improve repl output of nested newtypes 2021-12-29 17:55:21 -06:00
ayazhafiz
9938f7c832 Support multiline inputs from non-tty stdins 2021-12-29 17:55:19 -06:00
ayazhafiz
5e5eb6dca8 (llvm) Generate code for tag unions less than 64 bits in size correctly
Previously, we assumed that a union layout always lived on >= 1 64-bit
boundary when generating an LLVM type for it. For small tags unions,
like `[ Ok i8, Err ]` this need not be the case; indeed, a tag union
like that is actually only 2 bits - 1 bit for the "i8" data, and one bit
of the tag kind.

This led to a discrepancy between what the layout IR and generated LLVM
code would assume about the size of tag unions. In the case above, the
layout IR would assume the tag data is 2 bits wide, and the tag id is 1
bit into the data. But the LLVM code would generate a type that was 65
bits wide, the first 64 bits being for the "i8" data and the last 1 bit
being for the tag kind.

Usually, just running the LLVM-emitted code would not present a problem.
But it does present a problem when we use the layout IR to inspect the
result of LLVM-run code, in particular when we try to look up the tag
ID, as the repl does. This patch fixes that issue.

Note that this bug did not present itself in `test_gen` previously
because the data that most tests check against is stored in the front of
the representation.

Closes #2149
2021-12-26 11:45:02 -06:00
Folkert
acb26002c8 fix repl 2021-11-10 23:36:16 +01:00
Folkert
4152519bfb formatting & catch zig overflow error 2021-10-17 18:03:40 +02:00
Chelsea Troy
03295d4369 So far, add type for divCeil to the language 2021-10-17 09:29:11 -05:00
Folkert
ed52615d4c fix Foo Bar 2021-10-13 14:34:59 +02:00
Chelsea Troy
475326c005 cargo fmt 2021-10-11 20:48:19 -05:00
Chelsea Troy
051b511d87 Remove parentheses from unapplied tags 2021-10-11 20:42:07 -05:00
Folkert
34a25408c3 fix issue 2021-09-24 14:27:38 +02: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
Anton-4
d1948d99d0 Merge branch 'trunk' of github.com:rtfeldman/roc into benchmarks 2021-06-02 10:56:30 +02:00
Folkert
08a3b43649 remove inaccurate comments 2021-05-31 23:18:39 +02:00
Anton-4
8d0d1a0758 put cli helpers in cli_utils crate, added bench_utils.rs for sharing functions between benchmarks, added iai benchmarks 2021-05-18 18:48:59 +02:00
Anton-4
9a50ba37ce criterion benchmarks for examples/benchmarks, moved cli helpers 2021-05-17 17:15:10 +02:00
Richard Feldman
f1ddf775cb Use a constant for RocCallResult tag size 2021-04-11 09:44:59 -04:00
Folkert
ae17399741 fix issue 2021-04-11 15:29:51 +02:00
Folkert
a4d7e809d2 allow list of empty record in repl 2021-01-22 20:31:29 +01:00
Sébastien Besnier
fdc2b6ad86 add bitwise xor 2021-01-14 16:12:46 +01:00
rvcas
565cf21e1e fix(tests): need to adjust tests after changing builtin function types 2021-01-05 09:18:24 -05:00
rvcas
a123bfa3ee fix: tests compile and repl_eval 2021-01-04 09:46:10 -05:00
Richard Feldman
7a53003313
Merge pull request #826 from rtfeldman/bughunt
Throw on overflow in Num.neg/Num.abs & fix mono bug
2020-12-26 23:41:11 -05:00
Folkert
a760a41e1f repl: show error for partial application 2020-12-26 22:13:05 +01:00
Folkert
12c7b5435a generate more runtime errors 2020-12-26 21:30:25 +01:00
Folkert
3d1824c658 add test 2020-12-26 21:20:50 +01:00
Folkert
125146aac7 Merge remote-tracking branch 'origin/trunk' into bughunt 2020-12-26 00:51:22 +01:00
Folkert
917ec9c44c make List.first/List.last work 2020-12-24 01:00:37 +01:00
Celso Bonutti Filho
e118b9a1ed test: adds repl tests for Num checked operations 2020-12-23 13:44:02 -03:00
Celso Bonutti Filho
c98d554328 test: adds tests for mulCheck and mulWrap 2020-12-23 13:43:34 -03:00
Celso Bonutti Filho
313bc2ab86 adds tests for Num.subWrap and sub overflow 2020-12-22 22:18:00 -03:00
Celso Bonutti Filho
51a302957f adds List.last 2020-12-21 19:44:24 -03:00
Celso Bonutti Filho
0a24f3b4b4 adds Num.bitwiseAnd 2020-12-20 19:55:10 -03:00
rvcas
4987721154 feat(Num): rename Num.Int to Num.I64 2020-12-07 19:17:20 -05:00
Folkert
68c54b5327 display Result in the repl 2020-12-01 15:21:53 +01:00
rvcas
f7bd803509 feat(Num): rename Float to F64 2020-11-24 10:25:21 -05:00
rvcas
1c8bb74268 feat(List): add sum builtin 2020-11-15 11:08:27 -05:00
Folkert
aecf931305 tag in record 2020-11-11 18:19:28 +01:00
Folkert
51cd6cb925 implement byte enum in repl 2020-11-11 16:16:55 +01:00
Folkert
a94fcdb768 fix single tag multiple arguments case 2020-11-11 15:54:20 +01:00
lrosa007
2bbc2ebe6c use a loop on variables 2020-11-11 09:03:04 -05:00
lrosa007
147646b83e some formatting and ptr adjustment 2020-11-11 08:24:46 -05:00
Folkert
41c5101799 more tests 2020-11-09 14:28:31 +01:00