@@ -180,7 +180,6 @@ object Objects:
180
180
private [Env ] def get (x : Symbol )(using Context ): Option [Value ]
181
181
private [Env ] def contains (x : Symbol ): Boolean
182
182
183
- def exists : Boolean
184
183
def widen (height : Int )(using Context ): Data
185
184
186
185
/** Local environments can be deeply nested, therefore we need `outer`. */
@@ -194,8 +193,6 @@ object Objects:
194
193
private [Env ] def contains (x : Symbol ): Boolean =
195
194
params.contains(x) || locals.contains(x)
196
195
197
- val exists : Boolean = true
198
-
199
196
def widen (height : Int )(using Context ): Data =
200
197
new LocalEnv (params.map(_ -> _.widen(height)), owner, outer.widen(height))
201
198
@@ -213,8 +210,6 @@ object Objects:
213
210
private [Env ] def contains (x : Symbol ): Boolean =
214
211
throw new RuntimeException (" Invalid usage of non-existent env" )
215
212
216
- val exists : Boolean = false
217
-
218
213
def widen (height : Int )(using Context ): Data = this
219
214
end NoEnv
220
215
@@ -230,7 +225,7 @@ object Objects:
230
225
231
226
def of (ddef : DefDef , args : List [Value ], outer : Data )(using Context ): Data =
232
227
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)
234
229
new LocalEnv (params.zip(args).toMap, ddef.symbol, outer)
235
230
236
231
def setLocalVal (x : Symbol , value : Value )(using data : Data , ctx : Context ): Unit =
@@ -591,7 +586,11 @@ object Objects:
591
586
Heap .readLocalVar(ref, env, sym)
592
587
case _ =>
593
588
Cold
589
+ else if sym.isPatternBound then
590
+ // TODO: handle patterns
591
+ Cold
594
592
else
593
+ given Env .Data = env
595
594
Env (sym)
596
595
597
596
case _ => Cold
0 commit comments