From 8a9e1ade269f644664fd4499f65dfa445ab2ac55 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 4 Nov 2017 13:21:08 -0700 Subject: - Get rid of lazy `Target` wrapper since we're using lazy `def`s everywhere - Switch to using just `sourcecode.Enclosing` to key the `cacherLazyMap`, since the caller is already present as the `this` owning the `cacherLazyMap` and does not need to be stored --- core/src/main/scala/forge/Target.scala | 16 +++++----------- core/src/main/scala/forge/util/Caller.scala | 12 ------------ 2 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 core/src/main/scala/forge/util/Caller.scala (limited to 'core/src/main') diff --git a/core/src/main/scala/forge/Target.scala b/core/src/main/scala/forge/Target.scala index df9d9cc3..ba18184c 100644 --- a/core/src/main/scala/forge/Target.scala +++ b/core/src/main/scala/forge/Target.scala @@ -33,11 +33,10 @@ abstract class Target[T] extends Target.Ops[T]{ object Target{ trait Cacher{ - val cacherLazyMap = mutable.Map.empty[(Any, sourcecode.Line, sourcecode.Enclosing), Target[_]] + val cacherLazyMap = mutable.Map.empty[sourcecode.Enclosing, Target[_]] def T[T](t: T): Target[T] = macro impl[T] - def T[T](t: => Target[T]) - (implicit c: forge.util.Caller, l: sourcecode.Line, e: sourcecode.Enclosing): Target[T] = { - cacherLazyMap.getOrElseUpdate((c, l, e), t).asInstanceOf[Target[T]] + def T[T](t: => Target[T])(implicit c: sourcecode.Enclosing): Target[T] = { + cacherLazyMap.getOrElseUpdate(c, t).asInstanceOf[Target[T]] } } class Target0[T](t: T) extends Target[T]{ @@ -45,12 +44,7 @@ object Target{ val inputs = Nil def evaluate(args: Args) = t0 } - class Target1[T](t: => Target[T]) extends Target[T]{ - lazy val t0 = t - lazy val inputs = t0.inputs - def evaluate(args: Args) = t0.evaluate(args) - } - def apply[T](t: => Target[T]): Target[T] = new Target1(t) + def apply[T](t: Target[T]): Target[T] = t def apply[T](t: T): Target[T] = macro impl[T] def impl[T: c.WeakTypeTag](c: Context)(t: c.Expr[T]): c.Expr[Target[T]] = { import c.universe._ @@ -76,7 +70,7 @@ object Target{ val bindings = symbols.map(c.internal.valDef(_)) - val newTargetTree = q"new forge.Target.Target1(forge.zipMap(..$exprs){ (..$bindings) => $transformed })" + val newTargetTree = q"forge.zipMap(..$exprs){ (..$bindings) => $transformed }" val embedded = if (!(c.prefix.tree.tpe <:< typeOf[Cacher])) newTargetTree diff --git a/core/src/main/scala/forge/util/Caller.scala b/core/src/main/scala/forge/util/Caller.scala deleted file mode 100644 index 30dcb22a..00000000 --- a/core/src/main/scala/forge/util/Caller.scala +++ /dev/null @@ -1,12 +0,0 @@ -package forge.util - -import scala.reflect.macros.blackbox -import language.experimental.macros -case class Caller(value: Any) -object Caller { - implicit def generate: Caller = macro impl - def impl(c: blackbox.Context): c.Tree = { - import c.universe._ - q"new _root_.forge.util.Caller(this)" - } -} -- cgit v1.2.3