summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/runtime/ToolBoxes.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2011-10-21 16:05:48 +0000
committerMartin Odersky <odersky@gmail.com>2011-10-21 16:05:48 +0000
commitf262ab507ecf80c36cde4b5fb186f778911d916f (patch)
tree4102a68556606d4aabac0487aa7efaf33e54c1af /src/compiler/scala/reflect/runtime/ToolBoxes.scala
parent421605022dd5b075b080431cc2a8f72d06b302a4 (diff)
downloadscala-f262ab507ecf80c36cde4b5fb186f778911d916f.tar.gz
scala-f262ab507ecf80c36cde4b5fb186f778911d916f.tar.bz2
scala-f262ab507ecf80c36cde4b5fb186f778911d916f.zip
Towards runtime code generation. No review.
Diffstat (limited to 'src/compiler/scala/reflect/runtime/ToolBoxes.scala')
-rw-r--r--src/compiler/scala/reflect/runtime/ToolBoxes.scala24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/compiler/scala/reflect/runtime/ToolBoxes.scala b/src/compiler/scala/reflect/runtime/ToolBoxes.scala
index 9b0f8a33b4..8713ef01b7 100644
--- a/src/compiler/scala/reflect/runtime/ToolBoxes.scala
+++ b/src/compiler/scala/reflect/runtime/ToolBoxes.scala
@@ -14,6 +14,7 @@ import scala.tools.nsc.util.FreshNameCreator
import scala.reflect.internal.Flags
import scala.tools.nsc.util.NoSourceFile
import java.lang.{Class => jClass}
+import scala.tools.nsc.util.trace
trait ToolBoxes extends { self: Universe =>
@@ -46,7 +47,7 @@ trait ToolBoxes extends { self: Universe =>
}
def compileExpr(expr: Tree, fvs: List[Symbol]): String = {
- val cdef = wrapInClass(expr, fvs)
+ val cdef = trace("wrapped: ")(wrapInClass(expr, fvs))
val unit = wrapInCompilationUnit(cdef)
val run = new Run
run.compileUnits(List(unit), run.namerPhase)
@@ -78,14 +79,18 @@ trait ToolBoxes extends { self: Universe =>
lazy val classLoader = new AbstractFileClassLoader(virtualDirectory, getClass.getClassLoader)
-
- def typeCheck(tree: rm.Tree, expectedType: rm.Type): rm.Tree = {
- if (compiler.settings.verbose.value) println("typing "+tree+", pt = "+expectedType)
- val run = new compiler.Run
- compiler.phase = run.refchecksPhase
+ private def importAndTypeCheck(tree: rm.Tree, expectedType: rm.Type): compiler.Tree = {
val ctree: compiler.Tree = importer.importTree(tree.asInstanceOf[Tree])
val pt: compiler.Type = importer.importType(expectedType.asInstanceOf[Type])
+ val run = new compiler.Run
+ compiler.phase = run.refchecksPhase
val ttree: compiler.Tree = compiler.typer.typed(ctree, compiler.analyzer.EXPRmode, pt)
+ ttree
+ }
+
+ def typeCheck(tree: rm.Tree, expectedType: rm.Type): rm.Tree = {
+ if (compiler.settings.verbose.value) println("typing "+tree+", pt = "+expectedType)
+ val ttree = importAndTypeCheck(tree, expectedType)
exporter.importTree(ttree).asInstanceOf[rm.Tree]
}
@@ -100,5 +105,12 @@ trait ToolBoxes extends { self: Universe =>
} finally
compiler.settings.printtypes.value = saved
}
+
+ def runExpr(tree: rm.Tree, expectedType: rm.Type): Any = {
+ val ttree = importAndTypeCheck(tree, expectedType)
+ compiler.runExpr(ttree)
+ }
+
+ def runExpr(tree: rm.Tree): Any = runExpr(tree, WildcardType.asInstanceOf[rm.Type])
}
} \ No newline at end of file