File tree 6 files changed +23
-3
lines changed
compiler/src/dotty/tools/dotc
6 files changed +23
-3
lines changed Original file line number Diff line number Diff line change @@ -60,6 +60,9 @@ object Feature:
60
60
def dependentEnabled (using Context ) =
61
61
enabled(nme.dependent, defn.LanguageExperimentalModule .moduleClass)
62
62
63
+ def scala2ExperimentalMacroEnabled (using Context ) =
64
+ enabled(" macros" .toTermName, defn.LanguageExperimentalModule .moduleClass)
65
+
63
66
def sourceVersionSetting (using Context ): SourceVersion =
64
67
SourceVersion .valueOf(ctx.settings.source.value)
65
68
Original file line number Diff line number Diff line change @@ -3581,6 +3581,16 @@ class Typer extends Namer
3581
3581
}
3582
3582
}
3583
3583
if ctx.phase.isTyper then
3584
+ call match
3585
+ case untpd.Ident (nme.??? ) => // Instinsic macros ignored
3586
+ case _ =>
3587
+ if ! config.Feature .scala2ExperimentalMacroEnabled then
3588
+ ctx.error(
3589
+ """ Scala 2 macro definition needs to be enabled
3590
+ |by making the implicit value scala.language.experimental.macros visible.
3591
+ |This can be achieved by adding the import clause 'import scala.language.experimental.macros'
3592
+ |or by setting the compiler option -language:experimental.macros.
3593
+ """ .stripMargin, call.sourcePos)
3584
3594
call match
3585
3595
case call : untpd.Ident =>
3586
3596
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 1
1
package classes
2
-
2
+ import scala . language /* ->scalaShadowing::language. */ . experimental /* ->scalaShadowing::language.experimental. */ . macros /* ->scalaShadowing::language.experimental.macros. */
3
3
class C1 /* <-classes::C1#*/ (val x1 /* <-classes::C1#x1.*/ : Int /* ->scala::Int#*/ ) extends AnyVal /* ->scala::AnyVal#*//* ->scala::AnyVal#`<init>`().*/
4
4
5
5
class 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 1
1
package classes
2
-
2
+ import scala . language . experimental . macros
3
3
class C1 (val x1 : Int ) extends AnyVal
4
4
5
5
class C2 (val x2 : Int ) extends AnyVal
Original file line number Diff line number Diff line change @@ -340,7 +340,7 @@ Uri => Classes.scala
340
340
Text => empty
341
341
Language => Scala
342
342
Symbols => 106 entries
343
- Occurrences => 126 entries
343
+ Occurrences => 130 entries
344
344
345
345
Symbols:
346
346
classes/C1# => final class C1
@@ -452,6 +452,10 @@ local3 => val local local
452
452
453
453
Occurrences:
454
454
[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.
455
459
[2:6..2:8): C1 <- classes/C1#
456
460
[2:8..2:21): <- classes/C1#`<init>`().
457
461
[2:13..2:15): x1 <- classes/C1#x1.
You can’t perform that action at this time.
0 commit comments