@@ -13,19 +13,19 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
13
13
/** Representation of objects and values in the interpreter */
14
14
type AbstractAny
15
15
16
- type Result = implicit Env => AbstractAny
16
+ type Result = Env | => AbstractAny
17
17
18
18
def localValue (sym : Symbol )(implicit env : Env ): LocalValue = env(sym)
19
19
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)
22
22
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))
25
25
26
- def interpretCall (instance : AbstractAny , sym : DefSymbol , args : List [AbstractAny ]): Result = {
26
+ def interpretCall (inst : AbstractAny , sym : DefSymbol , args : List [AbstractAny ]): Result = {
27
27
// TODO
28
- // withLocalValue(`this`, instance ) {
28
+ // withLocalValue(`this`, inst ) {
29
29
val syms = sym.tree.paramss.headOption.getOrElse(Nil ).map(_.symbol)
30
30
withLocalValues(syms, args.map(LocalValue .valFrom(_))) {
31
31
eval(sym.tree.rhs.get)
@@ -65,7 +65,7 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
65
65
def interpretBlock (stats : List [Statement ], expr : Term ): Result = {
66
66
val newEnv = stats.foldLeft(implicitly[Env ])((accEnv, stat) => stat match {
67
67
case ValDef (name, tpt, Some (rhs)) =>
68
- def evalRhs = eval(rhs)( accEnv)
68
+ def evalRhs = eval(rhs) with accEnv
69
69
val evalRef : LocalValue =
70
70
if (stat.symbol.flags.is(Flags .Lazy )) LocalValue .lazyValFrom(evalRhs)
71
71
else if (stat.symbol.flags.is(Flags .Mutable )) LocalValue .varFrom(evalRhs)
@@ -76,10 +76,10 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
76
76
// TODO: record the environment for closure purposes
77
77
accEnv
78
78
case stat =>
79
- eval(stat)( accEnv)
79
+ eval(stat) with accEnv
80
80
accEnv
81
81
})
82
- eval(expr)( newEnv)
82
+ eval(expr) with newEnv
83
83
}
84
84
85
85
def interpretUnit (): AbstractAny
@@ -213,4 +213,4 @@ abstract class TreeInterpreter[R <: Reflection & Singleton](val reflect: R) {
213
213
case _ => None
214
214
}
215
215
}
216
- }
216
+ }
0 commit comments