-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Open
Labels
area:metaprogramming:quotesIssues related to quotes and splicesIssues related to quotes and splicesitype:enhancement
Description
Compiler version
3.3.0-RC1-bin-20221215-ef653b6-NIGHTLY
Minimized code
After inlining, pat(3)
is replaced by "ok"
as expected in the following code:
import scala.quoted.*
inline def pat(inline e: Int): String = ${patImpl('e)}
private def patImpl(e: Expr[Int])(using Quotes): Expr[String] = {
e match
case '{ 3 } => '{"ok"}
case _ => '{"other"}
}
def test = pat(3)
But if I put the quote in a pattern, then I get "other" instead:
private def patImpl(e: Expr[Int])(using Quotes): Expr[String] = {
val Expr = '{ 3 }
e match
case Expr => '{"ok"}
case _ => '{"other"}
}
Expectation
I think ideally both code snippets should behave the same. My usecase is that I'd like to check if some expression is already present in the input, and if not output what code should be generated (cf https://contributors.scala-lang.org/t/scala-3-macro-annotations-and-code-generation/6035), so I'd like to write the Expr once and use it both for pattern matching and as an output.
Metadata
Metadata
Assignees
Labels
area:metaprogramming:quotesIssues related to quotes and splicesIssues related to quotes and splicesitype:enhancement