diff options
-rw-r--r-- | src/dotty/tools/dotc/core/Contexts.scala | 7 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Typer.scala | 2 |
3 files changed, 8 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala index 2477fd4a4..f048c27aa 100644 --- a/src/dotty/tools/dotc/core/Contexts.scala +++ b/src/dotty/tools/dotc/core/Contexts.scala @@ -601,7 +601,12 @@ object Contexts { implicit val ctx: Context = initctx } - class GADTMap(var bounds: SimpleMap[Symbol, TypeBounds]) + class GADTMap(initBounds: SimpleMap[Symbol, TypeBounds]) { + private var myBounds = initBounds + def setBounds(sym: Symbol, b: TypeBounds): Unit = + myBounds = myBounds.updated(sym, b) + def bounds = myBounds + } /** Initial size of superId table */ private final val InitialSuperIdsSize = 4096 diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 5cb384361..6ea67617c 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -919,7 +919,7 @@ class TypeComparer(initctx: Context) extends DotClass { def narrowGADTBounds(tr: NamedType, bounds: TypeBounds): Boolean = isSubType(bounds.lo, bounds.hi) && - { ctx.gadt.bounds = ctx.gadt.bounds.updated(tr.symbol, bounds); true } + { ctx.gadt.setBounds(tr.symbol, bounds); true } // Tests around `matches` diff --git a/src/dotty/tools/dotc/typer/Typer.scala b/src/dotty/tools/dotc/typer/Typer.scala index 624a86c1c..f6f5a638e 100644 --- a/src/dotty/tools/dotc/typer/Typer.scala +++ b/src/dotty/tools/dotc/typer/Typer.scala @@ -675,7 +675,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit val c = ctx.fresh.setFreshGADTBounds for (sym <- gadtSyms) if (!c.gadt.bounds.contains(sym)) - c.gadt.bounds = c.gadt.bounds.updated(sym, TypeBounds.empty) + c.gadt.setBounds(sym, TypeBounds.empty) c } val pat1 = typedPattern(tree.pat, selType)(gadtCtx) |