blob: b84e3ed8d31dc7a7dff864cf150ef6125cb64bb6 (
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
26
27
28
29
30
31
32
33
34
|
import scala.language.experimental.macros
import scala.reflect.macros.whitebox.Context
object Max {
def impl(c: Context)(any: c.Expr[Any]): c.Expr[Any] = {
import c.universe._
def fail(msg: String) = c.abort(c.enclosingPosition, msg)
val t = c.macroApplication match {
case q"$_.unapply($unargs)" =>
/* hangs
*/
q"""
new {
def isEmpty = false
def get = this
def unapply(x: String) = this
}.unapply($unargs)
"""
/*
if get returns Unit or Boolean:
wrong number of patterns for <$anon: AnyRef> offering Unit: expected 1, found 0
*/
/* straightforward
q"""
new {
def unapply(x: String) = true
}.unapply($unargs)
"""
*/
case _ => fail("bad appl")
}
c.Expr[Any](t)
}
}
|