Skip to content

Commit 4805007

Browse files
committed
create boxed environment for all ref trees
1 parent 7ae54f1 commit 4805007

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

compiler/src/dotty/tools/dotc/cc/CheckCaptures.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,9 +516,9 @@ class CheckCaptures extends Recheck, SymTransformer:
516516
case _ =>
517517
false
518518

519-
private def isIdent: Boolean = tree match
520-
case Ident(_) => true
521-
case _ => false
519+
private def isRefTree: Boolean = tree match
520+
case _: RefTree => true
521+
case _ => false
522522

523523
/** If expected type `pt` is boxed, don't propagate free variables.
524524
* Otherwise, if the result type is boxed, simulate an unboxing by
@@ -527,7 +527,8 @@ class CheckCaptures extends Recheck, SymTransformer:
527527
override def recheck(tree: Tree, pt: Type = WildcardType)(using Context): Type =
528528
if tree.isTerm && pt.isBoxedCapturing then
529529
val saved = curEnv
530-
if tree.isIdent || tree.isFunctionLiteral then
530+
if tree.isRefTree || tree.isFunctionLiteral then
531+
curEnv = Env(curEnv.owner, CaptureSet.Var(), isBoxed = true, curEnv)
531532
curEnv = Env(curEnv.owner, nestedInOwner = false, CaptureSet.Var(), isBoxed = true, curEnv)
532533
try super.recheck(tree, pt)
533534
finally curEnv = saved

0 commit comments

Comments
 (0)