Skip to content

Commit

Permalink
Allow dual Scala 2/3 in non-experimental scopes
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasstucki committed Nov 3, 2021
1 parent 7b57e72 commit 0030e1e
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ class PruneErasedDefs extends MiniPhase with SymTransformer { thisTransform =>
tree

def checkErasedInExperimental(sym: Symbol)(using Context): Unit =
if sym.is(Erased) && sym != defn.Compiletime_erasedValue && !sym.isInExperimentalScope then
// Make an exception for Scala 2 experimental macros to allow dual Scala 2/3 macros under non experimental mode
if sym.is(Erased, butNot = Macro) && sym != defn.Compiletime_erasedValue && !sym.isInExperimentalScope then
Feature.checkExperimentalFeature("erased", sym.sourcePos)
}

Expand Down
27 changes: 27 additions & 0 deletions tests/pos-custom-args/no-experimental/i8945.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// src-2/MacroImpl.scala
trait Context {
object universe {
type Literal
}
}

class MacroImpl(val c: Context) {
import c.universe.*
def mono: Literal = ???
}

// src-3/Macros.scala
import scala.language.experimental.macros

object Macros {

object Bundles {
def mono: Unit = macro MacroImpl.mono
inline def mono: Unit = ${ Macros3.monoImpl }
}

object Macros3 {
def monoImpl(using quoted.Quotes) = '{()}
}

}

0 comments on commit 0030e1e

Please sign in to comment.