diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-01-22 17:26:01 +0300 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-01-22 17:26:01 +0300 |
commit | 7591aa1ce525a372a302134d0e7354d68fa14ec1 (patch) | |
tree | 84484346a59bfeb2506bb2314dfcd4ea47c2ea40 | |
parent | a242101282ba986c4e336b759aaa08a32ca82a7b (diff) | |
download | scala-7591aa1ce525a372a302134d0e7354d68fa14ec1.tar.gz scala-7591aa1ce525a372a302134d0e7354d68fa14ec1.tar.bz2 scala-7591aa1ce525a372a302134d0e7354d68fa14ec1.zip |
an optimization for c.eval
People are very frequently using c.eval in order to obtain underlying
values of literals. Spinning up a new compiler for that modest purpose
is a gross waste of fossil fuels.
-rw-r--r-- | src/compiler/scala/reflect/macros/contexts/Evals.scala | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/compiler/scala/reflect/macros/contexts/Evals.scala b/src/compiler/scala/reflect/macros/contexts/Evals.scala index 84928ddf86..180a998c39 100644 --- a/src/compiler/scala/reflect/macros/contexts/Evals.scala +++ b/src/compiler/scala/reflect/macros/contexts/Evals.scala @@ -12,7 +12,12 @@ trait Evals { private lazy val evalImporter = ru.mkImporter(universe).asInstanceOf[ru.Importer { val from: universe.type }] def eval[T](expr: Expr[T]): T = { - val imported = evalImporter.importTree(expr.tree) - evalToolBox.eval(imported).asInstanceOf[T] + expr.tree match { + case global.Literal(global.Constant(value)) => + value.asInstanceOf[T] + case _ => + val imported = evalImporter.importTree(expr.tree) + evalToolBox.eval(imported).asInstanceOf[T] + } } }
\ No newline at end of file |