Commit graph

129 commits

Author SHA1 Message Date
Brendan Hansknecht
e5a0af5699
make DbgFormatter an unexposed implementation detail 2023-12-03 12:41:04 -08:00
Ayaz Hafiz
a53da2bc24
Make sure late specializations of opaques inherit Inspect as needed
A "late specialization" of a type is an ability specialization that
is not visible or needed until after type-specialization; i.e. during
monomorphization.

The `Inspect.toInspector` ability is special-cased for opaques that do
not claim or explicitly implement `Inspect`. In such cases, they are
treated as structural types, and given the immediate specialization of
`Inpect.inspectOpaque`.

However, prior to this commit, that special-casing would only be applied
during early specialiation (i.e. specializations visible during
generalized type inference). This commit applies the special case to
late specialization as well - the specialization decision for an opaque
type is always the specialization of the opaque type in the late case,
but now, when we go to look up the ambient lambda set of the
specialization, if it does not exist and corresponds to
`Inspect.toInspector`, we fall back to the immediate.

One concern I have here is that in a case like

```
Op := {}

x =
    dbg (@Op {})
```

the specialization of `Inspect.toInspector` for `Op` should be known
early. Indeed, the program

```
Op := {}

x =
    Inspect.toInspector (@Op {}) |> Inspect.apply (Inspect.init {}) |> Inspect.toDbgStr
```

Compiles fine without this change. This makes me suspect there is an
issue with the implementation of `dbg`'s desugaring. If possible, this
should be addressed sooner rather than later.

Closes #6127
2023-11-30 22:25:08 -06:00
Brendan Hansknecht
01032c3b11
remove empty list test case for inspect 2023-11-28 16:40:43 -08:00
Brendan Hansknecht
4b911524ac
update gen_abilities tests to include edge case 2023-11-28 16:40:43 -08:00
Brendan Hansknecht
2e486953be
put inspect tests in their own module 2023-11-28 16:40:40 -08:00
Brendan Hansknecht
b8e644a1e3
add DbgFormatter to inspect 2023-11-28 16:40:40 -08:00
Richard Feldman
768b55b8c5
Add some Inspect.inspect tests, fix a bug 2023-11-28 16:40:40 -08:00
Isaac Van Doren
139d3c6f89
make dropFirst and dropLast drop n elements 2023-10-29 13:23:33 -05:00
Anton-4
5f878aee93
clippy 2023-09-26 15:08:30 +02:00
Richard Feldman
2da41be29f
Merge remote-tracking branch 'origin/main' into abilities-syntax 2023-08-10 20:36:01 -04:00
Ayaz Hafiz
858fbba4e1
Use larger debug stack for abilities tests 2023-06-16 11:08:10 -05:00
Ayaz Hafiz
cc2599b473
Use larger stack for abilities test 2023-06-16 10:30:39 -05:00
Bryce Miller
0132df9b5a
merge main 2023-06-10 15:04:25 -04:00
Luke Boswell
8583c4cae4
update new test 2023-06-09 13:09:28 +10:00
Luke Boswell
15b7b62c4f
merge remote/main, fix merge conflicts, update mono 2023-06-08 19:41:53 +10:00
Bryce Miller
e463ccf4a6
merge main 2023-06-07 20:36:54 -04:00
Ayaz Hafiz
7df3d191d5
Update ability tests 2023-06-06 16:05:13 -05:00
Ayaz Hafiz
1b9b6d89e4
Add test for specializing newtype records uniquely
Closes #5252
2023-06-06 16:04:42 -05:00
Bryce Miller
cb08225bf0
| -> where 2023-06-05 20:19:00 -04:00
Luke Boswell
c1ff49be6c
change just Json module name 2023-06-04 17:37:01 +10:00
Bryce Miller
ffa622e065
Merge branch 'main' into abilities-syntax
Signed-off-by: Bryce Miller <sandprickle@users.noreply.github.com>
2023-05-29 13:42:36 +02:00
Ayaz Hafiz
5c43c0c91b
Gen test for hash Dec 2023-05-26 11:38:30 -05:00
Bryce Miller
91e37293a2
abilities syntax has -> implements 2023-05-24 21:29:38 -04:00
David Smith
7f1a242a7c
Disable some tests in debug failing with stack overflow 2023-05-17 16:33:59 -04:00
Luke Boswell
6d29b69f9b
fix tests for string escapes 2023-05-15 16:59:01 +10:00
Luke Boswell
4f22b0747f
mono and update Json.fromUtf8 and Json.toUtf8 to Json.json 2023-04-21 10:57:48 +10:00
Ayaz Hafiz
f458da0cbc
Implement Hash for Bool 2023-03-28 15:04:45 -05:00
Ayaz
61dd5cc8c7
Merge pull request #5179 from roc-lang/i5143-tuple-abilities
Implement ability obligation checking and derivation for tuples
2023-03-25 15:51:39 -05:00
Ayaz Hafiz
e6094df69b
Fast-path for determining ability member impls for builtin opaques 2023-03-22 17:08:41 -05:00
Ayaz Hafiz
1b087df287
Add gen tests for decoding tuples 2023-03-22 16:56:22 -05:00
Ayaz Hafiz
c7bd430026
Gen tests for derived tuple encoding 2023-03-22 11:40:55 -05:00
Ayaz Hafiz
72c9b76f23
Gen Eq test for tuple 2023-03-22 10:55:15 -05:00
Ayaz Hafiz
143f39d273
Gen tests for derivation of tuple hash 2023-03-22 10:53:14 -05:00
Ayaz Hafiz
240c1f35d6
Ranged number abilities are derived and compiled correctly
Closes #5089
2023-03-22 09:42:06 -05:00
Ayaz Hafiz
7a4fed932d
Add gen tests for concerete unspecialized set conservation 2023-02-20 18:59:48 -06:00
Ayaz Hafiz
9a4e4f25c2
Add regression tests for #4772
Closes #4772
2023-01-18 18:11:57 -06:00
Brian Carroll
90449f45f3
test_gen: get some tests working with roc_wasm_interp 2022-12-10 00:52:23 +00:00
Ayaz Hafiz
e36618b9e9
Support custom abilities for opaques with immaterial lambda sets
If a specialization of an ability member has a lambda set that is not
reflected in the unspecialized lambda sets of the member's prototype
signature, then the specialization lambda set is deemed to be immaterial
to the specialization lambda set mapping, and we don't need to associate
it with a particular region from the prototype signature.

This can happen when an opaque contains functions that are some specific
than the generalized prototype signature; for example, when we are
defining a custom impl for an opaque with functions.

Addresses a bug found in 8c3158c3e0
2022-11-21 18:03:56 -06:00
Ayaz Hafiz
152400dea3
Add gen test for multiple ability bounds 2022-10-24 14:00:45 -05:00
Ayaz Hafiz
1d885c4ab2
Support deriving Decode for opaques 2022-10-23 20:48:06 -05:00
Ayaz Hafiz
c4f9aa6fe6
Add deriving toEncoder for opaques 2022-10-23 20:47:42 -05:00
Ayaz Hafiz
83813afeaf
Derive Eq for opaques 2022-10-23 20:46:56 -05:00
Ayaz Hafiz
40e05d5a00
Add support for deriving Hash for opaques 2022-10-23 20:46:56 -05:00
Ayaz Hafiz
f826ff1a71
Remove addI* variants from Hash
These are trivially fulfilled by converting a signed int to its unsigned
repr and hashing that.
2022-10-19 14:24:21 -05:00
Ayaz Hafiz
a256947a9f
Move Eq to Bool 2022-10-12 16:37:51 -05:00
Ayaz Hafiz
3674f6861e
Compile derived structural equality 2022-10-12 16:37:49 -05:00
Ayaz Hafiz
8310230f78
Add gen test for custom Eq 2022-10-12 16:37:49 -05:00
Ayaz Hafiz
cb96a64259
Implement hashing tag discriminants in derivers, rather than using low-level
This makes it so we can decide the discriminant in the front-end. With
this, we can also now revert the `LowLevel::TagDiscriminant`
introductions.
2022-10-05 12:58:04 -05:00
Ayaz Hafiz
a308ebb38c
Optimize derived hash implementation for newtypes
When we have a newtype tag union, there is no reason to hash its
discriminant.
2022-10-05 12:19:35 -05:00
Ayaz Hafiz
2517695ce4
Fix deriving of hash ability for recursive tag unions 2022-10-05 12:01:02 -05:00