Skip to content

Commit 6b159c2

Browse files
committed
Lookup local variable using the right environment
1 parent 4cf7494 commit 6b159c2

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

compiler/src/dotty/tools/dotc/transform/init/Objects.scala

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ object Objects:
180180
private[Env] def get(x: Symbol)(using Context): Option[Value]
181181
private[Env] def contains(x: Symbol): Boolean
182182

183-
def exists: Boolean
184183
def widen(height: Int)(using Context): Data
185184

186185
/** Local environments can be deeply nested, therefore we need `outer`. */
@@ -194,8 +193,6 @@ object Objects:
194193
private[Env] def contains(x: Symbol): Boolean =
195194
params.contains(x) || locals.contains(x)
196195

197-
val exists: Boolean = true
198-
199196
def widen(height: Int)(using Context): Data =
200197
new LocalEnv(params.map(_ -> _.widen(height)), owner, outer.widen(height))
201198

@@ -213,8 +210,6 @@ object Objects:
213210
private[Env] def contains(x: Symbol): Boolean =
214211
throw new RuntimeException("Invalid usage of non-existent env")
215212

216-
val exists: Boolean = false
217-
218213
def widen(height: Int)(using Context): Data = this
219214
end NoEnv
220215

@@ -230,7 +225,7 @@ object Objects:
230225

231226
def of(ddef: DefDef, args: List[Value], outer: Data)(using Context): Data =
232227
val params = ddef.termParamss.flatten.map(_.symbol)
233-
assert(args.size == params.size && (ddef.symbol.owner.isClass ^ outer.exists), "arguments = " + args.size + ", params = " + params.size)
228+
assert(args.size == params.size && (ddef.symbol.owner.isClass ^ (outer != NoEnv)), "arguments = " + args.size + ", params = " + params.size)
234229
new LocalEnv(params.zip(args).toMap, ddef.symbol, outer)
235230

236231
def setLocalVal(x: Symbol, value: Value)(using data: Data, ctx: Context): Unit =
@@ -591,7 +586,11 @@ object Objects:
591586
Heap.readLocalVar(ref, env, sym)
592587
case _ =>
593588
Cold
589+
else if sym.isPatternBound then
590+
// TODO: handle patterns
591+
Cold
594592
else
593+
given Env.Data = env
595594
Env(sym)
596595

597596
case _ => Cold

0 commit comments

Comments
 (0)