summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/macros/runtime/Parsers.scala
blob: 566bcde73d175321d800ff1aec4e23870ee1b959 (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
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
    // 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)
    }
}