Implemented compileOption for experimental to test if a feature i… (#23933)

…s enabled at compile time.

#8644 This doesn't handle the case if `{.push experimental.}` is used,
but at least we can test if a feature was enabled globally.
This commit is contained in:
Don-Duong Quach
2024-08-12 06:18:56 -07:00
committed by GitHub
parent b215ec3735
commit 20043ea09e
3 changed files with 47 additions and 1 deletions

View File

@@ -24,7 +24,7 @@ bootSwitch(usedMarkAndSweep, defined(gcmarkandsweep), "--gc:markAndSweep")
bootSwitch(usedGoGC, defined(gogc), "--gc:go")
bootSwitch(usedNoGC, defined(nogc), "--gc:none")
import std/[setutils, os, strutils, parseutils, parseopt, sequtils, strtabs]
import std/[setutils, os, strutils, parseutils, parseopt, sequtils, strtabs, enumutils]
import
msgs, options, nversion, condsyms, extccomp, platform,
wordrecg, nimblecmd, lineinfos, pathutils
@@ -248,6 +248,7 @@ const
errNoneSpeedOrSizeExpectedButXFound = "'none', 'speed' or 'size' expected, but '$1' found"
errGuiConsoleOrLibExpectedButXFound = "'gui', 'console', 'lib' or 'staticlib' expected, but '$1' found"
errInvalidExceptionSystem = "'goto', 'setjmp', 'cpp' or 'quirky' expected, but '$1' found"
errInvalidFeatureButXFound = Feature.toSeq.map(proc(val:Feature): string = "'$1'" % $val).join(", ") & " expected, but '$1' found"
template warningOptionNoop(switch: string) =
warningDeprecated(conf, info, "'$#' is deprecated, now a noop" % switch)
@@ -303,6 +304,12 @@ proc testCompileOptionArg*(conf: ConfigRef; switch, arg: string, info: TLineInfo
else:
result = false
localError(conf, info, errInvalidExceptionSystem % arg)
of "experimental":
try:
result = conf.features.contains parseEnum[Feature](arg)
except ValueError:
result = false
localError(conf, info, errInvalidFeatureButXFound % arg)
else:
result = false
invalidCmdLineOption(conf, passCmd1, switch, info)

View File

@@ -0,0 +1,20 @@
static:
doAssert compileOption("experimental", "dotOperators")
doAssert compileOption("experimental", "callOperator")
doAssert compileOption("experimental", "parallel")
doAssert compileOption("experimental", "destructor")
doAssert compileOption("experimental", "notnil")
doAssert compileOption("experimental", "dynamicBindSym")
doAssert compileOption("experimental", "codeReordering")
doAssert compileOption("experimental", "compiletimeFFI")
doAssert compileOption("experimental", "vmopsDanger")
doAssert compileOption("experimental", "strictFuncs")
doAssert compileOption("experimental", "views")
doAssert compileOption("experimental", "strictNotNil")
doAssert compileOption("experimental", "strictEffects")
doAssert compileOption("experimental", "flexibleOptionalParams")
doAssert compileOption("experimental", "strictDefs")
doAssert compileOption("experimental", "strictCaseObjects")
doAssert compileOption("experimental", "inferGenericTypes")
doAssert compileOption("experimental", "genericsOpenSym")
doAssert compileOption("experimental", "vtables")

View File

@@ -0,0 +1,19 @@
switch("experimental", "dotOperators")
switch("experimental", "callOperator")
switch("experimental", "parallel")
switch("experimental", "destructor")
switch("experimental", "notnil")
switch("experimental", "dynamicBindSym")
switch("experimental", "codeReordering")
switch("experimental", "compiletimeFFI")
switch("experimental", "vmopsDanger")
switch("experimental", "strictFuncs")
switch("experimental", "views")
switch("experimental", "strictNotNil")
switch("experimental", "strictEffects")
switch("experimental", "flexibleOptionalParams")
switch("experimental", "strictDefs")
switch("experimental", "strictCaseObjects")
switch("experimental", "inferGenericTypes")
switch("experimental", "genericsOpenSym")
switch("experimental", "vtables")