Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- val evals = ListBuffer[ValDef]()
- def precompute(value: Tree, tpe: Type): Ident = {
- val freshName = TermName(c.fresh("eval$"))
- evals += ValDef(Modifiers(), freshName, TypeTree(tpe), value)
- Ident(freshName)
- }
- val paramsStack = Stack[Tree]((params map (_.tree)): _*)
- val refs = s_format.split("(?<=%[\\w%])|(?=%[\\w%])") map {
- case "%d" => precompute(paramsStack.pop, typeOf[Int])
- case "%s" => precompute(paramsStack.pop, typeOf[String])
- case "%%" => Literal(Constant("%"))
- case part => Literal(Constant(part))
- }
- val stats = evals ++ refs.map(ref => reify(print(c.Expr[Any](ref).splice)).tree)
- c.Expr[Unit](Block(stats.toList, Literal(Constant(()))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement