@@ -6,22 +6,22 @@ import core._
66import Contexts ._ , Symbols ._ , Names ._ , NameOps ._ , Phases ._
77import StdNames .nme
88import Decorators .{_ , given }
9- import util .SrcPos
9+ import util .{ SrcPos , NoSourcePosition }
1010import SourceVersion ._
1111import reporting .Message
1212import NameKinds .QualifiedName
1313
1414object Feature :
1515
16- private def experimental (str : String ): TermName =
16+ def experimental (str : PreName ): TermName =
1717 QualifiedName (nme.experimental, str.toTermName)
1818
19- private def deprecated (str : String ): TermName =
19+ private def deprecated (str : PreName ): TermName =
2020 QualifiedName (nme.deprecated, str.toTermName)
2121
2222 private val namedTypeArguments = experimental(" namedTypeArguments" )
2323 private val genericNumberLiterals = experimental(" genericNumberLiterals" )
24- private val scala2macros = experimental(" macros" )
24+ val scala2macros = experimental(" macros" )
2525
2626 val dependent = experimental(" dependent" )
2727 val erasedDefinitions = experimental(" erasedDefinitions" )
@@ -97,15 +97,17 @@ object Feature:
9797 else
9898 false
9999
100- val experimentalWarningMessage = " Experimental features may only be used with nightly or snapshot version of compiler."
100+ def allowExperimentalFeatures (using Context ) =
101+ Config .allowExperimentalFeatures
102+
103+ def checkExperimentalFeature (which : String , srcPos : SrcPos = NoSourcePosition )(using Context ) =
104+ if ! allowExperimentalFeatures then
105+ report.error(i " Experimental feature $which may only be used with nightly or snapshot version of compiler " , srcPos)
101106
102107 /** Check that experimental compiler options are only set for snapshot or nightly compiler versions. */
103- def checkExperimentalFlags (using Context ): Unit =
104- if ! Properties .experimental then
105- val features = ctx.settings.language.value.filter(_.startsWith(" experimental." ))
106- if features.nonEmpty then
107- report.error(
108- i """ $experimentalWarningMessage
109- |The experimental language features were enabled via -language: $features%,% """ )
108+ def checkExperimentalSettings (using Context ): Unit =
109+ ctx.settings.language.value
110+ .filter(str => str.startsWith(" experimental." ) && str != " experimental.scala2macros" )
111+ .foreach(str => checkExperimentalFeature(s " $str" ))
110112
111113end Feature
0 commit comments