Commit graph

366 commits

Author SHA1 Message Date
Folkert
587c89e003
use empty array for empty DefTypes sequence 2022-03-05 21:51:20 +01:00
Folkert
6392e42166
prevent frequent expectation cloning 2022-03-05 21:32:22 +01:00
Folkert
ce393974bf
prevent frequent expectation cloning 2022-03-05 21:29:17 +01:00
Folkert
adf4ad22a5
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc 2022-03-05 20:55:15 +01:00
Folkert
53962a4799
mark infer variables as flex 2022-03-05 17:27:33 +01:00
Folkert
48b0bbe874
cleanup 2022-03-05 14:55:45 +01:00
Folkert
97b0e3df9b
more efficient approach for finding new rigids 2022-03-05 14:50:23 +01:00
Folkert
9302f2ca5e
partially revert to working state 2022-03-05 13:18:35 +01:00
ayazhafiz
e0aa246c5e Merge remote-tracking branch 'origin/trunk' into instantiate-rigids-speedup-again 2022-03-04 21:55:16 -05:00
Folkert
39c4b878e5
remove comment 2022-03-04 23:27:05 +01:00
Folkert
db06c10b5f
be smarter 2022-03-04 23:02:10 +01:00
Folkert
38d3d3169a
drop final suffixes 2022-03-02 21:30:38 +01:00
Folkert
828483393a
move expr/pattern constraint gen 2022-03-02 21:25:13 +01:00
Folkert
0eb98a4c59
move over constraint 2022-03-02 21:19:58 +01:00
Folkert
8d2e0a738c
exploiting exactsizeiterator 2022-03-02 21:08:14 +01:00
Folkert
c52029c2d1
the debugging begins 2022-03-02 20:30:42 +01:00
Folkert
73bd647a7d
constrain module stuff 2022-03-02 19:56:30 +01:00
Folkert
36c2b78c30
fix copy paste mistake 2022-03-02 19:08:42 +01:00
Folkert
a4889fd571
we are compiling 2022-03-02 18:48:34 +01:00
Folkert
01a7fe77d4
even more wip 2022-03-02 17:32:50 +01:00
Folkert
b8fd6992a2
More wip 2022-03-02 15:29:45 +01:00
Folkert
ec099bbdec
WIP 2022-03-02 14:46:30 +01:00
Folkert
bd31503855
Merge remote-tracking branch 'origin/trunk' into builtins-in-roc 2022-02-28 18:55:20 +01:00
Folkert
db1669154e
WIP 2022-02-27 21:53:56 +01:00
ayazhafiz
07b1829732 Improve error reporting for patterns not matching opaques 2022-02-27 00:11:11 -05:00
ayazhafiz
059c324268 Error reporting for type mismatches involving opaques 2022-02-27 00:10:12 -05:00
ayazhafiz
b6d7229525 Infer + checking tests for opaques 2022-02-27 00:10:12 -05:00
ayazhafiz
86aa0df661 Add constraint generation for opaque types 2022-02-27 00:10:11 -05:00
Folkert
c0d3543d5a
make Str + Result work 2022-02-26 17:52:24 +01:00
Brendan Hansknecht
f7c0e2ef19 Merge remote-tracking branch 'origin/trunk' into single-quote-literal 2022-02-24 10:13:39 -08: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
Folkert
d1d7cfef44
reimplement Result 2022-02-23 17:52:13 +01:00
ayazhafiz
90de82e295 Validation of opaques during canonicalization 2022-02-21 18:25:19 -05:00
ayazhafiz
6b53692aac Canonicalize opaque types 2022-02-20 13:47:01 -05:00
ayazhafiz
c5d918e68c Include floats in bounds for unspecified numbers 2022-02-06 15:04:12 -05:00
ayazhafiz
3fffca48bb Bye bye dead code! 2022-02-06 15:04:12 -05:00
ayazhafiz
c80c842a93 Clippy 2022-02-06 15:04:12 -05:00
ayazhafiz
8dc92ccd97 Second pass 2022-02-06 15:04:12 -05:00
ayazhafiz
5e0d90ac53 First pass 2022-02-06 15:04:12 -05:00
ayazhafiz
e7dcc2daa5 Move NumWidth to roc_can 2022-02-02 00:23:43 -05:00
ayazhafiz
ae5766fdf5 Folkert's suggestions 2022-02-01 23:42:28 -05:00
ayazhafiz
df8113ce32 Typecheck numeric suffixes in patterns 2022-02-01 23:35:14 -05:00
ayazhafiz
a6f7579c07 Parse and expand numeric bounds in canonicalization pass 2022-02-01 22:50:46 -05:00
ayazhafiz
9f72b2710f Run linter 2022-02-01 22:49:52 -05:00
ayazhafiz
e03592930f Typecheck numeric literals with suffixes in expressions
Part of #2350
2022-02-01 22:49:50 -05:00
ayazhafiz
320827167f Parse number literal width suffixes
Supports [u,i][8,16,32,64,128] and [nat,dec]

Part of #2350
2022-02-01 22:48:48 -05:00
ayazhafiz
4e942b3e5d Make nested datatypes into errors
I was hoping to add nested datatypes into the language, but it turns out
doing so is quite tricky and not all that useful with Roc's current
compilation model. Basically every implementation strategy I could think
of ended up requiring a uniform representation for the data layout
(or some ugly workaround). Furhermore it increased the complexity of the
checker/mono IR generator a little bit - basically, we must always pass
around the alias definitions of nested datatypes and instantiate them
at usage sites, rather than being able to unroll aliases as we currently
do during canonicalization.

So, especially because we don't support polymorphic recursion anyway, I
think it may be better to simply disallow any kind of nested datatypes
in the language. In any case, Stephanie Weirich [seems to think nested
datatypes are not needed](https://www.cis.upenn.edu/~plclub/blog/2020-12-04-nested-datatypes/).

Closes #2293
2022-01-31 22:58:01 -05: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
8e7ca57458 Close tag unions that are in the left hand side of an assignment 2021-12-30 19:51:14 -06:00
ayazhafiz
fda6c70835 Mark patterns in lambda argument position as having a presence constraint
Closes #2299
2021-12-30 18:21:28 -06:00