Skip to content

Commit

Permalink
don't try to complete scala 2 macro before the constructor (and its t…
Browse files Browse the repository at this point in the history
…ype params) have been completed
  • Loading branch information
johnduffell committed Oct 12, 2023
1 parent d788ef2 commit 974e4d3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
2 changes: 1 addition & 1 deletion compiler/src/dotty/tools/dotc/core/SymDenotations.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1030,7 +1030,7 @@ object SymDenotations {

/** Is this a Scala 2 macro defined */
final def isScala2MacroInScala3(using Context): Boolean =
is(Macro, butNot = Inline) && is(Erased)
is(Macro, butNot = Inline) && flagsUNSAFE.is(Erased) // flag is set initially for macros - we check if it's a scala 2 macro before completing the type constructor so do not force the info to check the flag
// Consider the macros of StringContext as plain Scala 2 macros when
// compiling the standard library with Dotty.
// This should be removed on Scala 3.x
Expand Down
14 changes: 14 additions & 0 deletions tests/pos-macros/i16630.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import scala.language.experimental.macros
import scala.quoted.{Quotes, Expr, Type}

trait TraitWithTypeParam[A]:
inline def foo: Option[A] = ${ MacrosImpl.fooImpl[A] }
def foo: Option[A] = macro MacrosImpl.compatFooImpl[A]

object MacrosImpl:
def fooImpl[A: Type](using quotes: Quotes): Expr[Option[A]] = ???
def compatFooImpl[A: c.WeakTypeTag](c: Context): c.Tree = ???

trait Context:
type WeakTypeTag[A]
type Tree

0 comments on commit 974e4d3

Please sign in to comment.