Skip to content

Commit 7a36a3e

Browse files
committed
New tests
1 parent fcd29f6 commit 7a36a3e

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
trait A
2+
trait B
3+
4+
def test =
5+
val f = (a: A^) =>
6+
val b: B^ = ???
7+
b
8+
9+
val f1: A^ => B^ = (a: A^) => // error -- can we make this work as for f2?
10+
val b: B^ = ???
11+
b
12+
13+
val f2: (x: A^) => B^ = (a: A^) =>
14+
val b: B^ = ???
15+
b // ok
16+
17+
val g = (a: A^) =>
18+
println("")
19+
(??? : B^)
20+
21+
val test = g
22+
23+
val g1: A^ => B^ = (a: A^) => // error -- can we make this work as for g2?
24+
println("")
25+
(??? : B^)
26+
27+
val g2: (x: A^) => B^ = (a: A^) =>
28+
println("")
29+
(??? : B^) // ok
30+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
trait Buffer[A]:
2+
3+
def apply(i: Int): A = ???
4+
5+
def flatMapInPlace(f: A => IterableOnce[A]^): this.type = {
6+
val g = f
7+
val s = 10
8+
// capture checking: we need the copy since we box/unbox on g* on the next line
9+
// TODO: This looks fishy, need to investigate
10+
// Alternative would be to mark `f` as @use. It's not inferred
11+
// since `^ appears in a function result, not under a box.
12+
val newElems = new Array[(IterableOnce[A]^{f})](s)
13+
var i = 0
14+
while i < s do
15+
val x = g(this(i))
16+
newElems(i) = x
17+
i += 1
18+
this
19+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Cap extends caps.ExclusiveCapability
2+
3+
class A
4+
5+
def T =
6+
def test(x: A^): A^{x} = ???
7+
8+
def foo(): A^ = ???
9+
10+
val a: A^ = ???
11+
12+
val x = test(foo())
13+
val _: A^ = x
14+
15+
val y = test(a) :: Nil
16+
val _: List[A^{a}] = y
17+
18+
def z =
19+
val b = test(a)
20+
Nil.::(b)
21+
val _: List[A^{a}] = z
22+
23+
24+

0 commit comments

Comments
 (0)