Skip to content

Commit

Permalink
document since (nim-lang#17048)
Browse files Browse the repository at this point in the history
* document `since`
* address comment
  • Loading branch information
timotheecour authored and ardek66 committed Mar 26, 2021
1 parent 105d0fd commit 0d3c7c0
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
8 changes: 3 additions & 5 deletions compiler/commands.nim
Original file line number Diff line number Diff line change
Expand Up @@ -940,8 +940,6 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
of "1.0":
defineSymbol(conf.symbols, "NimMajor", "1")
defineSymbol(conf.symbols, "NimMinor", "0")
# always be compatible with 1.0.100:
defineSymbol(conf.symbols, "NimPatch", "100")
# old behaviors go here:
defineSymbol(conf.symbols, "nimOldRelativePathBehavior")
undefSymbol(conf.symbols, "nimDoesntTrackDefects")
Expand All @@ -950,11 +948,11 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
of "1.2":
defineSymbol(conf.symbols, "NimMajor", "1")
defineSymbol(conf.symbols, "NimMinor", "2")
# always be compatible with 1.2.100:
defineSymbol(conf.symbols, "NimPatch", "100")
conf.globalOptions.incl optNimV12Emulation
else:
localError(conf, info, "unknown Nim version; currently supported values are: {1.0}")
localError(conf, info, "unknown Nim version; currently supported values are: `1.0`, `1.2`")
# always be compatible with 1.x.100:
defineSymbol(conf.symbols, "NimPatch", "100")
of "benchmarkvm":
processOnOffSwitchG(conf, {optBenchmarkVM}, arg, pass, info)
of "profilevm":
Expand Down
2 changes: 1 addition & 1 deletion doc/advopt.txt
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ Advanced options:
enable experimental language feature
--legacy:$2
enable obsolete/legacy language feature
--useVersion:1.0 emulate Nim version X of the Nim compiler
--useVersion:1.0|1.2 emulate Nim version X of the Nim compiler, for testing
--profiler:on|off enable profiling; requires `import nimprof`, and
works better with `--stackTrace:on`
see also https://nim-lang.github.io/Nim/estp.html
Expand Down
16 changes: 15 additions & 1 deletion lib/std/private/since.nim
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
##[
`since` is used to emulate older versions of nim stdlib with `--useVersion`,
see `tuse_version.nim`.
If a symbol `foo` is added in version `(1,3,5)`, use `{.since: (1.3.5).}`, not
`{.since: (1.4).}`, so that it works in devel in between releases.
The emulation cannot be 100% faithful and to avoid adding too much complexity,
`since` is not needed in those cases:
* if a new module is added
* if an overload is added
* if an extra parameter to an existing routine is added
]##

template since*(version: (int, int), body: untyped) {.dirty.} =
## Evaluates `body` if the ``(NimMajor, NimMinor)`` is greater than
## or equal to `version`. Usage:
Expand All @@ -16,4 +30,4 @@ template since*(version: (int, int, int), body: untyped) {.dirty.} =
## proc fun*() {.since: (1, 3, 1).}
## since (1, 3, 1): fun()
when (NimMajor, NimMinor, NimPatch) >= version:
body
body

0 comments on commit 0d3c7c0

Please sign in to comment.