Skip to content

Regression: Failed to evaluate macro - ClassNotFoundException #19909

Closed
@hmf

Description

@hmf

Compiler version

Compiles in 3.3.3.
Compilation fails in 3.4.0.

Minimized code

File: meta/src/examples/select/Wrapper.scala

package examples.select

import scala.language.dynamics
import scala.quoted.*

case class Wrapper[A](inner: A) extends Dynamic:
  transparent inline def selectDynamic(inline name: String) =
    ${selectDynamicImpl('inner, 'name)}

def selectDynamicImpl[A:Type](inner: Expr[A], name: Expr[String])(using quotes: Quotes): Expr[Any] =
  import quotes.reflect.*
  Select.unique(inner.asTerm, name.valueOrAbort).asExpr

File: meta/src/examples/select/Dynamic0.scala

package examples.select


import scala.language.dynamics
import examples.select.Wrapper

object Dynamic0:

  @main
  def runTimeError =

    val w = Wrapper(Option(1))
    println(w.isEmpty)

end Dynamic0

Output

[error] -- Error: /home/hmf/VSCodeProjects/sploty/meta/src/examples/select/Dynamic0.scala:100:14 
[error] 100 |    println(w.isEmpty)
[error]     |            ^^^^^^^^^
[error]     |Failed to evaluate macro.
[error]     |  Caused by class java.lang.ClassNotFoundException: examples.select.Wrapper$package$
[error]     |    java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
[error]     |    java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
[error]     |    dotty.tools.dotc.quoted.Interpreter.loadClass(Interpreter.scala:214)
[error]     |    dotty.tools.dotc.quoted.Interpreter.loadModule(Interpreter.scala:199)
[error]     |    dotty.tools.dotc.quoted.Interpreter.interpretedStaticMethodCall(Interpreter.scala:167)
[error]     |    dotty.tools.dotc.quoted.Interpreter.interpretTree(Interpreter.scala:80)
[error]     |    dotty.tools.dotc.transform.Splicer$SpliceInterpreter.interpretTree(Splicer.scala:266)
[error]     |    dotty.tools.dotc.quoted.Interpreter.interpretTree$$anonfun$2(Interpreter.scala:99)
[error]     |              

Expectation

Expected this to compile without changes.

Note: I find it strange that the compiler complains about a examples.select.Wrapper$package$ and not a examples.select.Wrapper class.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions