mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
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:
@@ -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)
|
||||
|
||||
20
tests/compileoption/texperimental.nim
Normal file
20
tests/compileoption/texperimental.nim
Normal 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")
|
||||
19
tests/compileoption/texperimental.nims
Normal file
19
tests/compileoption/texperimental.nims
Normal 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")
|
||||
Reference in New Issue
Block a user