Skip to content

NamedTuples: Error compiling macro that selects an argument #22863

Open
@fede0664

Description

@fede0664

Compiler version

3.7.0-RC1

Minimized code

MacroNamedTuple.scala

//> using scala 3.7.0-RC1
//> using jvm temurin:23

import scala.quoted.*
import scala.deriving.*

object MacroNamedTuple:
  inline def tupleStringArg[T](t: T, arg: String) = ${tupleArg('t,'arg)}

  def tupleArg[T](t: Expr[T], arg: Expr[String])(using Quotes) = 
    import quotes.reflect.*
    val sel = Select.unique(t.asTerm, arg.valueOrAbort)
    sel.asExprOf[String]

Example.scala

//> using scala 3.7.0-RC1
//> using jvm temurin:23

object Example:
  def main(args:Array[String]): Unit =
    val t = (name = "abc", v = 123)
    val str = MacroNamedTuple.tupleStringArg(t, "name")
    println(str)

Output

Running with:

scala-cli MacroNamedTuple.scala Example.scala
[error] ./Example.scala:7:46
[error] value name is not a member of (name : String, v : Int)
[error]     val str = MacroNamedTuple.tupleStringArg(t, "name")

Expectation

Should print "abc"
Changing Example to regular tuples works fine:

object Example:
  def main(args:Array[String]): Unit =
    val t = ("abc",123)
    val str = MacroNamedTuple.tupleStringArg(t, "_1")
    println(str)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions