Commit graph

866 commits

Author SHA1 Message Date
Folkert
afd11e1cb1 move target -> roc_target 2022-01-26 23:33:29 +01:00
Folkert
490bbf3812 ignore 'normal' functions when running i386 tests 2022-01-26 19:59:50 +01:00
Folkert
c663a35e16 final phase 2022-01-26 15:44:24 +01:00
Folkert
74932a4cab phase 2 2022-01-26 14:30:37 +01:00
Folkert
5580eafb68 Merge remote-tracking branch 'origin/trunk' into tea-example 2022-01-25 09:20:59 +01:00
Folkert
73bc50c952 make the surgical linker aware of custom exported closure names 2022-01-25 00:13:22 +01:00
Folkert de Vries
6dd769aa38
Merge pull request #2393 from rtfeldman/i/2343
Generate unique symbols for shadowing identifiers
2022-01-24 11:49:51 +01:00
Folkert
cbdf3f0378 tweaks 2022-01-23 21:41:54 +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
ayazhafiz
0eede1cd86 Generate unique symbols for shadowing identifiers
This code has a shadowing error:

```
b = False
f = \b -> b
f b
```

but prior to this commit, the compiler would hit an internal error
during monomorphization and not even get to report the error. The reason
was that when we entered the closure `\b -> b`, we would try to
introduce the identifier `b` to the scope, see that it shadows an
existing identifier, and not insert the identifier. But this meant that
when checking the body of `\b -> b`, we would think that we captured the
value `b` in the outer scope, but that's incorrect!

The present patch fixes the issue by generating new symbols for
shadowing identifiers, so deeper scopes pick up the correct reference.
This also means in the future we may be able to compile and execute code
with shadows, even though it will still be an error.

Closes #2343
2022-01-23 12:35:31 -05:00
ayazhafiz
632d809f2a Don't end repl inputs on lines that have incomplete function bodies 2022-01-23 12:35:31 -05:00
Folkert
6545968c34 import UserApp's provided types into the Package-Config module 2022-01-23 18:33:50 +01:00
Richard Feldman
c1c0ffb25f Use UppercaseIdent over PlatformRigids 2022-01-23 11:13:23 -05:00
Richard Feldman
6d8277ad8d
Merge pull request #2367 from rtfeldman/remove_Num.minmaxInt
Remove `Num.(min/max)Int`
2022-01-20 00:19:44 -05:00
Jan Van Bruggen
8e4b6f0cab Remove Num.(min/max)Int
Replace all uses with `Num.(min/max)I64`,
since all uses expect an `I64`.
2022-01-19 09:55:06 -07:00
Jan Van Bruggen
1e9d2d1239 Remove accidental trailing spaces 2022-01-18 22:25:46 -07:00
ayazhafiz
6ea7d63380 Make sure line offsets are generated properly for external programs
Closes #2329
2022-01-13 20:59:03 -05:00
ayazhafiz
880bae55b0 Print u8-sized integers in repl properly
Closes #2335
2022-01-10 19:41:07 -05:00
ayazhafiz
605cad1114 Reify commented-out tests 2022-01-08 15:24:17 -05:00
ayazhafiz
fd474528eb Unroll newtypes that are records 2022-01-08 15:11:27 -05:00
ayazhafiz
85efcbccdd Support functions in structures
Closes #2313
2022-01-06 23:09:47 -06:00
Joshua Warner
8092f31a29 fmt 2022-01-01 18:20:05 -08:00
Joshua Warner
5c1084c453 Introduce SourceError to represent an error + original source 2022-01-01 18:20:05 -08:00
Joshua Warner
8e0b3bbaca Fix repl_eval line attribution 2022-01-01 18:20:05 -08:00
Joshua Warner
5f7bec3ee8 Use assert_multiline_str_eq in repl_eval tests 2022-01-01 18:20:05 -08:00
Joshua Warner
82d2be0635 Introduce LineColumnRegion and force conversion 2022-01-01 18:20:05 -08:00
Joshua Warner
bd7b1e5013 Make Loc::new take Positions 2022-01-01 18:20:05 -08:00
Folkert
06be340bee add test for this issue 2021-12-31 21:48:14 +01:00
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
20b1d9acdc Replace code with stdlib functions
max/min_by_key was stabilized in Rust 1.53.0
2021-12-29 17:55:21 -06:00
ayazhafiz
13101101a7 Dereference pointers of pointers with the correct size 2021-12-29 17:55:21 -06:00
ayazhafiz
f46261c8c0 Pull out common code that extracts tag ID, data from recursive pointer 2021-12-29 17:55:21 -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
337c2901d2 Simplify some nested match expressions 2021-12-29 17:55:21 -06:00
ayazhafiz
e3798dd81f Remove some unreachable code
There's no need to hand recursive union variants for non recursive tag
unions
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
Richard Feldman
36e6adfad2 Use rustyline v9.1.1 2021-12-28 23:07:02 -05:00
Folkert de Vries
249878cbd9
Merge pull request #2281 from rtfeldman/i/2149
(llvm) Generate code for tag unions less than 64 bits in size correctly
2021-12-27 22:38:08 +01: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
ayazhafiz
966198a6e7 Coalesce inline and normal alias headers
Unifies `As` annotations and `Alias` defs to use a common struct for
defining alias header information, i.e. the name and type variables of
the alias.
2021-12-26 09:37:56 -06:00
ayazhafiz
2cd5bf8c03 Parse "as" aliases into tag/args rather than arbitrary annotations 2021-12-26 08:44:09 -06:00
Joshua Warner
8b58d5cbc7 Switch to always encoding package names / paths as strings
This will simplify parsing and make it possible to have a uniform lexer for the language. Previously unquoted package names were allowed to include '-'s, which aren't valid identifiers.

In the future, we'll distinguish local paths from packages in the package-manager by looking for a ".roc" suffix, which should only be present in local paths.
2021-12-23 20:11:14 -08:00
Joshua Warner
4d7070ce3b Always combine line,column into Position 2021-12-22 20:32:46 -08:00