summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/macros/contexts/Parsers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/reflect/macros/contexts/Parsers.scala')
-rw-r--r--src/compiler/scala/reflect/macros/contexts/Parsers.scala24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/macros/contexts/Parsers.scala b/src/compiler/scala/reflect/macros/contexts/Parsers.scala
new file mode 100644
index 0000000000..3dab02beba
--- /dev/null
+++ b/src/compiler/scala/reflect/macros/contexts/Parsers.scala
@@ -0,0 +1,24 @@
+package scala.reflect.macros
+package contexts
+
+import scala.language.existentials
+import scala.tools.reflect.ToolBox
+import scala.tools.reflect.ToolBoxError
+
+trait Parsers {
+ self: Context =>
+
+ def parse(code: String): Tree =
+ // todo. provide decent implementation
+ // see `Typers.typedUseCase` for details
+ try {
+ import scala.reflect.runtime.{universe => ru}
+ val parsed = ru.rootMirror.mkToolBox().parse(code)
+ val importer = universe.mkImporter(ru)
+ importer.importTree(parsed)
+ } catch {
+ case ToolBoxError(msg, cause) =>
+ // todo. provide a position
+ throw new ParseException(universe.NoPosition, msg)
+ }
+}