@@ -336,9 +336,12 @@ object Objects:
336336 def emptyEnv (meth : Symbol )(using Context ): Data =
337337 new LocalEnv (Map .empty, meth, NoEnv )(valsMap = mutable.Map .empty, varsMap = mutable.Map .empty)
338338
339- def valValue (x : Symbol )(using data : Data , ctx : Context ): Value = data.getVal(x).get
340-
341- def varAddr (x : Symbol )(using data : Data , ctx : Context ): Heap .Addr = data.getVar(x).get
339+ def valValue (x : Symbol )(using data : Data , ctx : Context ): Value =
340+ data.getVal(x) match
341+ case Some (theValue) =>
342+ theValue
343+ case _ =>
344+ Bottom
342345
343346 def getVal (x : Symbol )(using data : Data , ctx : Context ): Option [Value ] = data.getVal(x)
344347
@@ -855,13 +858,16 @@ object Objects:
855858 if sym.is(Flags .Mutable ) then
856859 // Assume forward reference check is doing a good job
857860 given Env .Data = env
858- val addr = Env .varAddr(sym)
859- if addr.owner == State .currentObject then
860- Heap .read(addr)
861- else
862- errorReadOtherStaticObject(State .currentObject, addr.owner)
861+ Env .getVar(sym) match
862+ case Some (addr) =>
863+ if addr.owner == State .currentObject then
864+ Heap .read(addr)
865+ else
866+ errorReadOtherStaticObject(State .currentObject, addr.owner)
867+ Bottom
868+ end if
869+ case _ =>
863870 Bottom
864- end if
865871 else if sym.isPatternBound then
866872 // TODO: handle patterns
867873 Cold
@@ -908,11 +914,13 @@ object Objects:
908914 Env .resolveEnv(sym.enclosingMethod, thisV, summon[Env .Data ]) match
909915 case Some (thisV -> env) =>
910916 given Env .Data = env
911- val addr = Env .varAddr(sym)
912- if addr.owner != State .currentObject then
913- errorMutateOtherStaticObject(State .currentObject, addr.owner)
914- else
915- Heap .write(addr, value)
917+ Env .getVar(sym) match
918+ case Some (addr) =>
919+ if addr.owner != State .currentObject then
920+ errorMutateOtherStaticObject(State .currentObject, addr.owner)
921+ else
922+ Heap .write(addr, value)
923+ case _ =>
916924
917925 case _ =>
918926 report.warning(" Assigning to variables in outer scope. Calling trace:\n " + Trace .show, Trace .position)
0 commit comments