Skip to content

Commit 979f83c

Browse files
committed
Merge pull request scala#3237 from xeno-by/topic/macrodef-returntype-inference
deprecates macro def return type inference
2 parents 75cc6cf + 87979ad commit 979f83c

File tree

102 files changed

+245
-235
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+245
-235
lines changed

src/compiler/scala/reflect/macros/compiler/Validators.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ trait Validators {
155155
else mmap(macroDdef.vparamss)(param)
156156
val macroDefRet =
157157
if (!macroDdef.tpt.isEmpty) typer.typedType(macroDdef.tpt).tpe
158-
else computeMacroDefTypeFromMacroImplRef(macroDdef, macroImplRef)
158+
else computeMacroDefTypeFromMacroImplRef(macroDdef, macroImplRef) orElse AnyTpe
159159
val implReturnType = sigma(increaseMetalevel(ctxPrefix, macroDefRet))
160160

161161
object SigmaTypeMap extends TypeMap {

src/compiler/scala/reflect/macros/util/Helpers.scala

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ trait Helpers {
7777

7878
/** Decreases metalevel of the type, i.e. transforms:
7979
* * c.Expr[T] to T
80-
* * Anything else to Any
80+
* * Nothing to Nothing
81+
* * Anything else to NoType
8182
*
8283
* @see Metalevels.scala for more information and examples about metalevels
8384
*/
@@ -86,7 +87,10 @@ trait Helpers {
8687
import runDefinitions._
8788
transparentShallowTransform(RepeatedParamClass, tp) {
8889
case ExprClassOf(runtimeType) => runtimeType
89-
case _ => AnyTpe // so that macro impls with rhs = ??? don't screw up our inference
90+
// special-casing Nothing here is a useful convention
91+
// that enables no-hassle prototyping with `macro ???` and `macro { ...; ??? }`
92+
case nothing if nothing =:= NothingTpe => NothingTpe
93+
case _ => NoType
9094
}
9195
}
9296
}

src/compiler/scala/tools/nsc/typechecker/Typers.scala

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5517,7 +5517,23 @@ trait Typers extends Adaptations with Tags with TypersTracking with PatternTyper
55175517

55185518
val isMacroBodyOkay = !tree.symbol.isErroneous && !(tree1 exists (_.isErroneous)) && tree1 != EmptyTree
55195519
val shouldInheritMacroImplReturnType = ddef.tpt.isEmpty
5520-
if (isMacroBodyOkay && shouldInheritMacroImplReturnType) computeMacroDefTypeFromMacroImplRef(ddef, tree1) else AnyTpe
5520+
if (isMacroBodyOkay && shouldInheritMacroImplReturnType) {
5521+
val commonMessage = "macro defs must have explicitly specified return types"
5522+
def reportFailure() = {
5523+
ddef.symbol.setFlag(IS_ERROR)
5524+
unit.error(ddef.pos, commonMessage)
5525+
}
5526+
def reportWarning(inferredType: Type) = {
5527+
val explanation = s"inference of $inferredType from macro impl's c.Expr[$inferredType] is deprecated and is going to stop working in 2.12"
5528+
unit.deprecationWarning(ddef.pos, s"$commonMessage ($explanation)")
5529+
}
5530+
computeMacroDefTypeFromMacroImplRef(ddef, tree1) match {
5531+
case ErrorType => ErrorType
5532+
case NothingTpe => NothingTpe
5533+
case NoType => reportFailure(); AnyTpe
5534+
case tpe => reportWarning(tpe); tpe
5535+
}
5536+
} else AnyTpe
55215537
}
55225538

55235539
def transformedOr(tree: Tree, op: => Tree): Tree = transformed remove tree match {

test/files/neg/macro-blackbox-extractor/Macros_1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import scala.reflect.macros.BlackboxContext
22
import language.experimental.macros
33

44
object Extractor {
5-
def unapply(x: Int) = macro Macros.unapplyImpl
5+
def unapply(x: Int): Any = macro Macros.unapplyImpl
66
}
77

88
object Macros {

test/files/neg/macro-blackbox-structural/Impls_Macros_1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ object Macros {
1111
"""
1212
}
1313

14-
def foo = macro impl
14+
def foo: Any = macro impl
1515
}

test/files/neg/macro-bundle-object.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
macro-bundle-object.scala:10: error: macro implementation has incompatible shape:
2-
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Any]
2+
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Nothing]
33
or : (c: scala.reflect.macros.BlackboxContext): c.Tree
44
found : : Nothing
55
number of parameter sections differ

test/files/neg/macro-invalidret.check

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,24 @@ Macros_Test_2.scala:3: error: macro implementation has incompatible shape:
1212
type mismatch for return type: reflect.runtime.universe.Literal does not conform to c.Expr[Any]
1313
def foo2 = macro Impls.foo2
1414
^
15-
two errors found
15+
Macros_Test_2.scala:6: error: macro defs must have explicitly specified return types
16+
def foo5 = macro Impls.foo5
17+
^
18+
Macros_Test_2.scala:7: warning: macro defs must have explicitly specified return types (inference of Int from macro impl's c.Expr[Int] is deprecated and is going to stop working in 2.12)
19+
def foo6 = macro Impls.foo6
20+
^
21+
Macros_Test_2.scala:14: error: exception during macro expansion:
22+
scala.NotImplementedError: an implementation is missing
23+
at scala.Predef$.$qmark$qmark$qmark(Predef.scala:227)
24+
at Impls$.foo3(Impls_1.scala:7)
25+
26+
foo3
27+
^
28+
Macros_Test_2.scala:15: error: macro implementation is missing
29+
foo4
30+
^
31+
Macros_Test_2.scala:17: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
32+
foo6
33+
^
34+
two warnings found
35+
5 errors found

test/files/neg/macro-invalidret.flags

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
-language:experimental.macros
1+
-language:experimental.macros
2+
-Xfatal-warnings
3+
-deprecation

test/files/neg/macro-invalidret/Impls_1.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@ import scala.reflect.runtime.{universe => ru}
44
object Impls {
55
def foo1(c: BlackboxContext) = 2
66
def foo2(c: BlackboxContext) = ru.Literal(ru.Constant(42))
7+
def foo3(c: BlackboxContext) = ???
8+
def foo5(c: BlackboxContext) = c.universe.Literal(c.universe.Constant(42))
9+
def foo6(c: BlackboxContext) = c.Expr[Int](c.universe.Literal(c.universe.Constant(42)))
710
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
object Macros {
22
def foo1 = macro Impls.foo1
33
def foo2 = macro Impls.foo2
4+
def foo3 = macro Impls.foo3
5+
def foo4 = macro ???
6+
def foo5 = macro Impls.foo5
7+
def foo6 = macro Impls.foo6
48
}
59

610
object Test extends App {
711
import Macros._
812
foo1
913
foo2
14+
foo3
15+
foo4
16+
foo5
17+
foo6
1018
}

test/files/neg/macro-invalidsig-params-badtype.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Impls_Macros_1.scala:8: error: macro implementation has incompatible shape:
2-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Any]
2+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Nothing]
33
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree): c.Tree
44
found : (c: scala.reflect.macros.BlackboxContext)(x: Int): Nothing
55
type mismatch for parameter x: c.Expr[Int] does not conform to Int

test/files/neg/macro-invalidsig.check

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
Macros_Test_2.scala:2: error: macro implementations cannot have implicit parameters other than WeakTypeTag evidences
2-
def foo[U] = macro Impls1.foo[U]
3-
^
2+
def foo[U]: Int = macro Impls1.foo[U]
3+
^
44
Macros_Test_2.scala:6: error: macro implementation has incompatible shape:
5-
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Any]
5+
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Nothing]
66
or : (c: scala.reflect.macros.BlackboxContext): c.Tree
77
found : : Nothing
88
number of parameter sections differ
99
def foo = macro Impls2.foo
1010
^
1111
Macros_Test_2.scala:10: error: macro implementation has incompatible shape:
12-
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Any]
12+
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Nothing]
1313
or : (c: scala.reflect.macros.BlackboxContext): c.Tree
1414
found : (c: scala.reflect.api.Universe): Nothing
1515
type mismatch for parameter c: scala.reflect.macros.BlackboxContext does not conform to scala.reflect.api.Universe
1616
def foo = macro Impls3.foo
1717
^
1818
Macros_Test_2.scala:14: error: macro implementation has incompatible shape:
19-
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Any]
19+
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Nothing]
2020
or : (c: scala.reflect.macros.BlackboxContext): c.Tree
2121
found : (cs: scala.reflect.macros.BlackboxContext*): Nothing
2222
types incompatible for parameter cs: corresponding is not a vararg parameter
2323
def foo = macro Impls4.foo
2424
^
2525
Macros_Test_2.scala:18: error: macro implementation has incompatible shape:
26-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Any]): c.Expr[Any]
26+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Any]): c.Expr[Nothing]
2727
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree): c.Tree
2828
found : (c: scala.reflect.macros.BlackboxContext): Nothing
2929
number of parameter sections differ
@@ -33,35 +33,35 @@ Macros_Test_2.scala:22: error: macro implementations cannot have implicit parame
3333
def foo[U](x: Int) = macro Impls6.foo[T, U]
3434
^
3535
Macros_Test_2.scala:26: error: macro implementation has incompatible shape:
36-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Any]
36+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Nothing]
3737
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree): c.Tree
3838
found : (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int], y: c.Expr[Int]): Nothing
3939
parameter lists have different length, found extra parameter y: c.Expr[Int]
4040
def foo(x: Int) = macro Impls7.foo
4141
^
4242
Macros_Test_2.scala:30: error: macro implementation has incompatible shape:
43-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Any]
43+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int]): c.Expr[Nothing]
4444
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree): c.Tree
4545
found : (c: scala.reflect.macros.BlackboxContext)(x: c.universe.Symbol): Nothing
4646
type mismatch for parameter x: c.Expr[Int] does not conform to c.universe.Symbol
4747
def foo(x: Int) = macro Impls8.foo
4848
^
4949
Macros_Test_2.scala:34: error: macro implementation has incompatible shape:
50-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int], y: c.Expr[Int]): c.Expr[Any]
50+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int], y: c.Expr[Int]): c.Expr[Nothing]
5151
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree, y: c.Tree): c.Tree
5252
found : (c: scala.reflect.macros.BlackboxContext)(xs: c.Expr[Int]*): Nothing
5353
parameter lists have different length, required extra parameter y: c.Expr[Int]
5454
def foo(x: Int, y: Int) = macro Impls9.foo
5555
^
5656
Macros_Test_2.scala:38: error: macro implementation has incompatible shape:
57-
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int], y: c.Expr[Int]): c.Expr[Any]
57+
required: (c: scala.reflect.macros.BlackboxContext)(x: c.Expr[Int], y: c.Expr[Int]): c.Expr[Nothing]
5858
or : (c: scala.reflect.macros.BlackboxContext)(x: c.Tree, y: c.Tree): c.Tree
5959
found : (c: scala.reflect.macros.BlackboxContext)(y: c.Expr[Int], x: c.Expr[Int]): Nothing
6060
parameter names differ: x != y
6161
def foo(x: Int, y: Int) = macro Impls10.foo
6262
^
6363
Macros_Test_2.scala:42: error: macro implementation has incompatible shape:
64-
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Any]
64+
required: (c: scala.reflect.macros.BlackboxContext): c.Expr[Nothing]
6565
or : (c: scala.reflect.macros.BlackboxContext): c.Tree
6666
found : (c: scala.reflect.macros.BlackboxContext)(U: c.universe.Type): Nothing
6767
number of parameter sections differ
@@ -77,9 +77,9 @@ Macros_Test_2.scala:54: error: macro implementation reference has too few type a
7777
def foo = macro Impls14.foo
7878
^
7979
Macros_Test_2.scala:59: error: macro implementation reference has too few type arguments for method foo: [T, U, V](c: scala.reflect.macros.BlackboxContext)(implicit evidence$5: c.WeakTypeTag[T], implicit evidence$6: c.WeakTypeTag[U], implicit V: c.WeakTypeTag[V])c.Expr[Unit]
80-
def foo15[V] = macro Impls15.foo
81-
^
80+
def foo15[V]: Unit = macro Impls15.foo
81+
^
8282
Macros_Test_2.scala:60: error: wrong number of type parameters for method foo: [T, U, V](c: scala.reflect.macros.BlackboxContext)(implicit evidence$7: c.WeakTypeTag[T], implicit evidence$8: c.WeakTypeTag[U], implicit V: c.WeakTypeTag[V])c.Expr[Unit]
83-
def foo16[V] = macro Impls16.foo[V]
84-
^
83+
def foo16[V]: Unit = macro Impls16.foo[V]
84+
^
8585
16 errors found

test/files/neg/macro-invalidsig/Macros_Test_2.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
object Macros1 {
2-
def foo[U] = macro Impls1.foo[U]
2+
def foo[U]: Int = macro Impls1.foo[U]
33
}
44

55
object Macros2 {
@@ -56,8 +56,8 @@ object Macros14 {
5656

5757
class D[T] {
5858
class C[U] {
59-
def foo15[V] = macro Impls15.foo
60-
def foo16[V] = macro Impls16.foo[V]
59+
def foo15[V]: Unit = macro Impls15.foo
60+
def foo16[V]: Unit = macro Impls16.foo[V]
6161
}
6262
}
6363

test/files/neg/macro-invalidusage-badargs/Macros_Test_2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
object Macros { def foo(x: Int) = macro Impls.foo }
1+
object Macros { def foo(x: Int): Int = macro Impls.foo }
22
import Macros._
33

44
object Test extends App {

test/files/neg/macro-invalidusage-badbounds/Macros_Test_2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
object Macros {
2-
def foo[U <: String] = macro Impls.foo[U]
2+
def foo[U <: String]: Unit = macro Impls.foo[U]
33
}
44

55
object Test extends App {

test/files/neg/macro-invalidusage-badtargs.check

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
Macros_Test_2.scala:11: error: macro method foo1: (x: Int)Int does not take type parameters.
1+
Macros_Test_2.scala:13: error: macro method foo1: (x: Int)Int does not take type parameters.
22
foo1[String](42)
33
^
4-
Macros_Test_2.scala:12: error: wrong number of type parameters for macro method foo2: [T](x: Int)Int
4+
Macros_Test_2.scala:14: error: wrong number of type parameters for macro method foo2: [T](x: Int)Int
55
foo2[String, String](42)
66
^
7-
Macros_Test_2.scala:13: error: wrong number of type parameters for macro method foo3: [T, U](x: Int)Int
7+
Macros_Test_2.scala:15: error: wrong number of type parameters for macro method foo3: [T, U](x: Int)Int
88
foo3[String](42)
99
^
10-
Macros_Test_2.scala:14: error: String takes no type parameters, expected: one
10+
Macros_Test_2.scala:16: error: String takes no type parameters, expected: one
1111
foo4[String](42)
1212
^
13-
Macros_Test_2.scala:15: error: kinds of the type arguments (List) do not conform to the expected kinds of the type parameters (type T).
13+
Macros_Test_2.scala:17: error: kinds of the type arguments (List) do not conform to the expected kinds of the type parameters (type T).
1414
List's type parameters do not match type T's expected parameters:
1515
type A has no type parameters, but type U has one
1616
foo5[List](42)

test/files/neg/macro-invalidusage-badtargs/Macros_Test_2.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import scala.language.higherKinds
2+
13
object Macros {
2-
def foo1(x: Int) = macro Impls.foo
3-
def foo2[T](x: Int) = macro Impls.foo
4-
def foo3[T, U](x: Int) = macro Impls.foo
5-
def foo4[T[_]](x: Int) = macro Impls.foo
6-
def foo5[T[U[_]]](x: Int) = macro Impls.foo
4+
def foo1(x: Int): Int = macro Impls.foo
5+
def foo2[T](x: Int): Int = macro Impls.foo
6+
def foo3[T, U](x: Int): Int = macro Impls.foo
7+
def foo4[T[_]](x: Int): Int = macro Impls.foo
8+
def foo5[T[U[_]]](x: Int): Int = macro Impls.foo
79
}
810

911
object Test extends App {

test/files/neg/macro-invalidusage-methodvaluesyntax/Macros_Test_2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
object Macros {
2-
def foo = macro Impls.foo
2+
def foo: Unit = macro Impls.foo
33
}
44

55
object Test extends App {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Impls_Macros_1.scala:12: error: overriding method foo in trait Foo of type (x: Int)Int;
22
macro method foo cannot be used here - term macros cannot override abstract methods
3-
def foo(x: Int) = macro Impls.impl
3+
def foo(x: Int): Int = macro Impls.impl
44
^
55
one error found

test/files/neg/macro-override-macro-overrides-abstract-method-a/Impls_Macros_1.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ trait Foo {
99
}
1010

1111
object Macros extends Foo {
12-
def foo(x: Int) = macro Impls.impl
12+
def foo(x: Int): Int = macro Impls.impl
1313
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Macros_Test_2.scala:8: error: overriding macro method foo in class B of type (x: String)Unit;
22
method foo cannot be used here - only term macros can override term macros
3-
override def foo(x: String) = println("fooDString")
3+
override def foo(x: String): Unit = println("fooDString")
44
^
55
one error found
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
class B {
2-
def foo(x: String) = macro Impls.fooBString
3-
def foo(x: Int) = macro Impls.fooBInt
4-
def foo(x: Boolean) = println("fooBBoolean")
2+
def foo(x: String): Unit = macro Impls.fooBString
3+
def foo(x: Int): Unit = macro Impls.fooBInt
4+
def foo(x: Boolean): Unit = println("fooBBoolean")
55
}
66

77
class D extends B {
8-
override def foo(x: String) = println("fooDString")
9-
override def foo(x: Int) = macro Impls.fooDInt
8+
override def foo(x: String): Unit = println("fooDString")
9+
override def foo(x: Int): Unit = macro Impls.fooDInt
1010
}
1111

1212
class Z extends D {
13-
override def foo(x: String) = macro Impls.fooZString
14-
override def foo(x: Boolean) = println("fooZBoolean")
13+
override def foo(x: String): Unit = macro Impls.fooZString
14+
override def foo(x: Boolean): Unit = println("fooZBoolean")
1515
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
Macros_1.scala:14: error: macro implementation has incompatible shape:
2-
required: (x: Impls.this.c.Expr[Int]): Impls.this.c.Expr[Any]
2+
required: (x: Impls.this.c.Expr[Int]): Impls.this.c.Expr[Unit]
33
or : (x: Impls.this.c.Tree): Impls.this.c.Tree
44
found : (x: Impls.this.c.universe.Block): Impls.this.c.Tree
55
type mismatch for parameter x: Impls.this.c.Expr[Int] does not conform to Impls.this.c.universe.Block
6-
def m3(x: Int) = macro Impls.impl3
7-
^
6+
def m3(x: Int): Unit = macro Impls.impl3
7+
^
88
one error found

test/files/neg/macro-quasiquotes/Macros_1.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ trait Impls extends BlackboxMacro {
99
}
1010

1111
object Macros {
12-
def m1(x: Int) = macro Impls.impl1
13-
def m2(x: Int) = macro Impls.impl2
14-
def m3(x: Int) = macro Impls.impl3
12+
def m1(x: Int): Unit = macro Impls.impl1
13+
def m2(x: Int): Unit = macro Impls.impl2
14+
def m3(x: Int): Unit = macro Impls.impl3
1515
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import scala.reflect.macros.{BlackboxContext => Ctx}
22

33
trait Impls {
4-
def impl(c: Ctx)(x: c.Expr[Any]) = x
4+
def impl(c: Ctx)(x: c.Expr[Any]) = x
55
}
66

0 commit comments

Comments
 (0)