Skip to content

Commit 18e8a18

Browse files
Merge pull request #15032 from dotty-staging/fix-15028
Add missing cases in SourceCode printer
2 parents 1a19d50 + 8315cdf commit 18e8a18

File tree

5 files changed

+40
-1
lines changed

5 files changed

+40
-1
lines changed

compiler/src/scala/quoted/runtime/impl/printers/SourceCode.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,9 +530,12 @@ object SourceCode {
530530
case Closure(meth, _) =>
531531
printTree(meth)
532532

533-
case _:Unapply | _:Alternatives | _:Bind =>
533+
case _:TypedOrTest | _:Unapply | _:Alternatives | _:Bind =>
534534
printPattern(tree)
535535

536+
case tree: CaseDef =>
537+
printCaseDef(tree)
538+
536539
case _ =>
537540
throw new MatchError(tree.show(using Printer.TreeStructure))
538541

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import scala.quoted.*
2+
3+
inline def myTreeTraverse[T](inline expr: T): T = ${ treeTraverseImpl('expr) }
4+
5+
def treeTraverseImpl[T: Type](value: Expr[T])(using quotes: Quotes): Expr[T] = {
6+
import quotes.reflect.*
7+
(new TreeTraverser {}).traverseTree(value.asTerm)(Symbol.spliceOwner)
8+
value
9+
}

tests/pos-macros/i15028a/Test_2.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def test() =
2+
myTreeTraverse {
3+
Option.empty[Int] match
4+
case Some(n) => 1
5+
case None => 5
6+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import scala.quoted.*
2+
3+
inline def myTreeTraverse[T](inline expr: T): T = ${ treeTraverseImpl('expr) }
4+
5+
def treeTraverseImpl[T: Type](value: Expr[T])(using quotes: Quotes): Expr[T] = {
6+
import quotes.reflect.*
7+
(new TreeTraverser {
8+
override def traverseTree(tree: Tree)(owner: Symbol): Unit =
9+
tree.show
10+
tree.show(using Printer.TreeStructure)
11+
super.traverseTree(tree)(owner)
12+
}).traverseTree(value.asTerm)(Symbol.spliceOwner)
13+
value
14+
}

tests/pos-macros/i15028b/Test_2.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
def test() =
2+
myTreeTraverse {
3+
println(1: Int)
4+
Option.empty[Int] match
5+
case Some(n) => 1
6+
case None => 5
7+
}

0 commit comments

Comments
 (0)