Skip to content

Commit

Permalink
Implemented compileOption for experimental to test if a feature i… (
Browse files Browse the repository at this point in the history
#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.
  • Loading branch information
geekrelief authored Aug 12, 2024
1 parent b215ec3 commit 20043ea
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 1 deletion.
9 changes: 8 additions & 1 deletion compiler/commands.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
20 changes: 20 additions & 0 deletions tests/compileoption/texperimental.nim
Original file line number Diff line number Diff line change
@@ -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 changes: 19 additions & 0 deletions tests/compileoption/texperimental.nims
Original file line number Diff line number Diff line change
@@ -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")

0 comments on commit 20043ea

Please sign in to comment.