@@ -4,11 +4,11 @@ package typer
4
4
import effekt .context .{ Annotations , Context , ContextOps }
5
5
import effekt .symbols .*
6
6
7
- object BoxUnboxInference extends Phase [NameResolved , NameResolved ] {
7
+ object UnboxInference extends Phase [NameResolved , NameResolved ] {
8
8
9
9
import source ._
10
10
11
- val phaseName = " box- unbox"
11
+ val phaseName = " unbox"
12
12
13
13
def run (input : NameResolved )(using Context ) = {
14
14
val transformedTree = Context .timed(phaseName, input.source.name) { rewrite(input.tree) }
@@ -52,12 +52,18 @@ object BoxUnboxInference extends Phase[NameResolved, NameResolved] {
52
52
case v : Var => v.definition match {
53
53
// TODO maybe we should synthesize a call to get here already?
54
54
case sym : (ValueSymbol | symbols.RefBinder ) => v
55
- case sym : BlockSymbol => v // Box(Maybe.None(v.span.emptyAfter), v, v.span.synthesized).inheritPosition(v)
55
+ case sym : BlockSymbol =>
56
+ C .error(pp " Computation ${sym} is used in an expression position, which requires boxing (e.g. `box ${sym}` " )
57
+ v
56
58
}
57
59
58
- case n : New => rewriteAsBlock(n) // Box(Maybe.None(n.span.emptyAfter), rewriteAsBlock(n), n.span.synthesized).inheritPosition(n)
60
+ case n : New =>
61
+ C .error(pp " Creating an instance in an expression requires boxing (e.g. `box new ${n.impl.id}[...] { ... }` " )
62
+ rewriteAsBlock(n)
59
63
60
- case b : BlockLiteral => rewriteAsBlock(b) // Box(Maybe.None(b.span.emptyAfter), rewriteAsBlock(b), b.span.synthesized).inheritPosition(b)
64
+ case b : BlockLiteral =>
65
+ C .error(pp " Function literals in expression position require boxing (e.g. `box { ( ${b.vparams.map(_.id).mkString(" , " )}) => ... ` " )
66
+ rewriteAsBlock(b)
61
67
62
68
case l : Literal => l
63
69
0 commit comments