summaryrefslogblamecommitdiff
path: root/test/files/run/t5713/Impls_Macros_1.scala
blob: b499bc7e4e1214adbc964b3fc16d6e096007889b (plain) (tree)


























                                                                                                        
package m

import language.experimental.macros
import scala.reflect.makro.Context

object Level extends Enumeration {
  val Error = Value(5)
}

object Logger {
  def error(message: String): Unit = macro LoggerMacros.error
}

private object LoggerMacros {

  type LoggerContext = Context { type PrefixType = Logger.type }

  def error(c: LoggerContext)(message: c.Expr[String]): c.Expr[Unit] =
    log(c)(c.reify(Level.Error), message)

  private def log(c: LoggerContext)(level: c.Expr[Level.Value], message: c.Expr[String]): c.Expr[Unit] =
    if (level.eval.id < 4) // TODO Remove hack!
      c.reify(())
    else {
      c.reify(println(message.eval))
    }
}