@@ -13,19 +13,19 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
1313 /** Representation of objects and values in the interpreter */
1414 type AbstractAny
1515
16- type Result = implicit Env => AbstractAny
16+ type Result = Env | => AbstractAny
1717
1818 def localValue (sym : Symbol )(implicit env : Env ): LocalValue = env(sym)
1919
20- def withLocalValue [T ](sym : Symbol , value : LocalValue )(in : implicit Env => T )(implicit env : Env ): T =
21- in( env.updated(sym, value) )
20+ def withLocalValue [T ](sym : Symbol , value : LocalValue )(in : Env | => T )(implicit env : Env ): T =
21+ in with env.updated(sym, value)
2222
23- def withLocalValues [T ](syms : List [Symbol ], values : List [LocalValue ])(in : implicit Env => T )(implicit env : Env ): T =
24- in(env ++ syms.zip(values))
23+ def withLocalValues [T ](syms : List [Symbol ], values : List [LocalValue ])(in : Env | => T )(implicit env : Env ): T =
24+ in with (env ++ syms.zip(values))
2525
26- def interpretCall (instance : AbstractAny , sym : DefSymbol , args : List [AbstractAny ]): Result = {
26+ def interpretCall (inst : AbstractAny , sym : DefSymbol , args : List [AbstractAny ]): Result = {
2727 // TODO
28- // withLocalValue(`this`, instance ) {
28+ // withLocalValue(`this`, inst ) {
2929 val syms = sym.tree.paramss.headOption.getOrElse(Nil ).map(_.symbol)
3030 withLocalValues(syms, args.map(LocalValue .valFrom(_))) {
3131 eval(sym.tree.rhs.get)
@@ -65,7 +65,7 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
6565 def interpretBlock (stats : List [Statement ], expr : Term ): Result = {
6666 val newEnv = stats.foldLeft(implicitly[Env ])((accEnv, stat) => stat match {
6767 case ValDef (name, tpt, Some (rhs)) =>
68- def evalRhs = eval(rhs)( accEnv)
68+ def evalRhs = eval(rhs) with accEnv
6969 val evalRef : LocalValue =
7070 if (stat.symbol.flags.is(Flags .Lazy )) LocalValue .lazyValFrom(evalRhs)
7171 else if (stat.symbol.flags.is(Flags .Mutable )) LocalValue .varFrom(evalRhs)
@@ -76,10 +76,10 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
7676 // TODO: record the environment for closure purposes
7777 accEnv
7878 case stat =>
79- eval(stat)( accEnv)
79+ eval(stat) with accEnv
8080 accEnv
8181 })
82- eval(expr)( newEnv)
82+ eval(expr) with newEnv
8383 }
8484
8585 def interpretUnit (): AbstractAny
@@ -213,4 +213,4 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
213213 case _ => None
214214 }
215215 }
216- }
216+ }
0 commit comments