File tree 2 files changed +47
-4
lines changed
compiler/src/dotty/tools/dotc/transform 2 files changed +47
-4
lines changed Original file line number Diff line number Diff line change @@ -508,10 +508,26 @@ class ReifyQuotes extends MacroTransformWithImplicits {
508
508
case _ : Import =>
509
509
tree
510
510
case tree : DefDef if tree.symbol.is(Macro ) && level == 0 =>
511
- markDef(tree)
512
- nested(isQuote = true ).transform(tree)
513
- // check macro code as it if appeared in a quoted context
514
- cpy.DefDef (tree)(rhs = EmptyTree )
511
+ tree.rhs match {
512
+ case InlineSplice (_) =>
513
+ markDef(tree)
514
+ nested(isQuote = true ).transform(tree)
515
+ // check macro code as it if appeared in a quoted context
516
+ cpy.DefDef (tree)(rhs = EmptyTree )
517
+ case _ =>
518
+ ctx.error(
519
+ """ Malformed inline macro.
520
+ |
521
+ |Expected the ~ to be at the top of the RHS:
522
+ | inline def foo(...): Int = ~impl(...)
523
+ |or
524
+ | inline def foo(...): Int = ~{
525
+ | val x = 1
526
+ | impl(... x ...)
527
+ | }
528
+ """ .stripMargin, tree.rhs.pos)
529
+ EmptyTree
530
+ }
515
531
case _ =>
516
532
markDef(tree)
517
533
checkLevel(mapOverTree(enteredSyms))
Original file line number Diff line number Diff line change
1
+ import scala .quoted ._
2
+
3
+ object Test {
4
+
5
+ inline def foo1 : Int = { // error
6
+ println()
7
+ ~ impl(1 .toExpr)
8
+ }
9
+
10
+ inline def foo2 : Int = { // error
11
+ ~ impl(1 .toExpr)
12
+ ~ impl(2 .toExpr)
13
+ }
14
+
15
+ inline def foo3 : Int = { // error
16
+ val a = 1
17
+ ~ impl('(a))
18
+ }
19
+
20
+ inline def foo4 : Int = { // error
21
+ ~ impl('(1))
22
+ 1
23
+ }
24
+
25
+ def impl (n : Expr [Int ]): Expr [Int ] = ???
26
+
27
+ }
You can’t perform that action at this time.
0 commit comments