summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/macros/runtime/Parsers.scala
blob: 5096526fdb14cb63c135df7c046b294a6b8dc76f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package scala.reflect.macros
package runtime

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
    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) =>
        throw new ParseError(universe.NoPosition, msg)
    }

  case class ParseError(val pos: Position, val msg: String) extends Throwable(msg)
  object ParseError extends ParseErrorExtractor
}