summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/macros/runtime/Parsers.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-07-24 12:34:18 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-08-02 15:51:12 +0200
commit9892f52adf76c1e39c6d129f8b35ee98802de188 (patch)
tree64525f8ab63b921717e4ef2c4dbbb5f3005eb8b1 /src/compiler/scala/reflect/macros/runtime/Parsers.scala
parent5e1a0052523349775be1cc98b4094c44804f1240 (diff)
downloadscala-9892f52adf76c1e39c6d129f8b35ee98802de188.tar.gz
scala-9892f52adf76c1e39c6d129f8b35ee98802de188.tar.bz2
scala-9892f52adf76c1e39c6d129f8b35ee98802de188.zip
reflect.makro => reflect.macros (Step I)
Builds a starr that uses stuff from scala.reflect.macros for macro activities. Crucial makro thingies (such as makro.Context or makro.internal.macroImpl) are temporarily left in place, because they are necessary for previous starr. Macro tests will be fixed in a dedicated commit, so that they don't pollute meaningful commits, making the life easy for reviewers and spelunkers.
Diffstat (limited to 'src/compiler/scala/reflect/macros/runtime/Parsers.scala')
-rw-r--r--src/compiler/scala/reflect/macros/runtime/Parsers.scala25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/compiler/scala/reflect/macros/runtime/Parsers.scala b/src/compiler/scala/reflect/macros/runtime/Parsers.scala
new file mode 100644
index 0000000000..6d89b71f39
--- /dev/null
+++ b/src/compiler/scala/reflect/macros/runtime/Parsers.scala
@@ -0,0 +1,25 @@
+package scala.reflect.macros
+package runtime
+
+import 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
+ try {
+ import scala.reflect.runtime.{universe => ru}
+ val parsed = ru.rootMirror.mkToolBox().parseExpr(code)
+ val importer = universe.mkImporter(ru)
+ importer.importTree(parsed)
+ } catch {
+ case ToolBoxError(msg, cause) =>
+ throw new ParseError(universe.NoPosition, msg)
+ }
+
+ case class ParseError(val pos: Position, val msg: String) extends Throwable(msg)
+ object ParseError extends ParseErrorExtractor
+} \ No newline at end of file