File tree Expand file tree Collapse file tree 6 files changed +23
-3
lines changed
compiler/src/dotty/tools/dotc Expand file tree Collapse file tree 6 files changed +23
-3
lines changed Original file line number Diff line number Diff line change @@ -60,6 +60,9 @@ object Feature:
6060 def dependentEnabled (using Context ) =
6161 enabled(nme.dependent, defn.LanguageExperimentalModule .moduleClass)
6262
63+ def scala2ExperimentalMacroEnabled (using Context ) =
64+ enabled(" macros" .toTermName, defn.LanguageExperimentalModule .moduleClass)
65+
6366 def sourceVersionSetting (using Context ): SourceVersion =
6467 SourceVersion .valueOf(ctx.settings.source.value)
6568
Original file line number Diff line number Diff line change @@ -3583,6 +3583,16 @@ class Typer extends Namer
35833583 }
35843584 }
35853585 if ctx.phase.isTyper then
3586+ call match
3587+ case untpd.Ident (nme.??? ) => // Instinsic macros ignored
3588+ case _ =>
3589+ if ! config.Feature .scala2ExperimentalMacroEnabled then
3590+ ctx.error(
3591+ """ Scala 2 macro definition needs to be enabled
3592+ |by making the implicit value scala.language.experimental.macros visible.
3593+ |This can be achieved by adding the import clause 'import scala.language.experimental.macros'
3594+ |or by setting the compiler option -language:experimental.macros.
3595+ """ .stripMargin, call.sourcePos)
35863596 call match
35873597 case call : untpd.Ident =>
35883598 typedIdent(call, defn.AnyType )
Original file line number Diff line number Diff line change 1+ object FooMacros {
2+ def foo [T ]: String = macro Foo .fooImpl[T ] // error: Scala 2 macro definition needs to be enabled
3+ }
Original file line number Diff line number Diff line change 11package classes
2-
2+ import scala . language /* ->scalaShadowing::language. */ . experimental /* ->scalaShadowing::language.experimental. */ . macros /* ->scalaShadowing::language.experimental.macros. */
33class C1 /* <-classes::C1#*/ (val x1 /* <-classes::C1#x1.*/ : Int /* ->scala::Int#*/ ) extends AnyVal /* ->scala::AnyVal#*//* ->scala::AnyVal#`<init>`().*/
44
55class C2 /* <-classes::C2#*/ (val x2 /* <-classes::C2#x2.*/ : Int /* ->scala::Int#*/ ) extends AnyVal /* ->scala::AnyVal#*//* ->scala::AnyVal#`<init>`().*/
Original file line number Diff line number Diff line change 11package classes
2-
2+ import scala . language . experimental . macros
33class C1 (val x1 : Int ) extends AnyVal
44
55class C2 (val x2 : Int ) extends AnyVal
Original file line number Diff line number Diff line change @@ -340,7 +340,7 @@ Uri => Classes.scala
340340Text => empty
341341Language => Scala
342342Symbols => 106 entries
343- Occurrences => 126 entries
343+ Occurrences => 130 entries
344344
345345Symbols:
346346classes/C1# => final class C1
@@ -452,6 +452,10 @@ local3 => val local local
452452
453453Occurrences:
454454[0:8..0:15): classes <- classes/
455+ [1:7..1:12): scala -> scala/
456+ [1:13..1:21): language -> scalaShadowing/language.
457+ [1:22..1:34): experimental -> scalaShadowing/language.experimental.
458+ [1:35..1:41): macros -> scalaShadowing/language.experimental.macros.
455459[2:6..2:8): C1 <- classes/C1#
456460[2:8..2:21): <- classes/C1#`<init>`().
457461[2:13..2:15): x1 <- classes/C1#x1.
You can’t perform that action at this time.
0 commit comments