diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nim | 6 | ||||
-rw-r--r-- | lib/system/inclrtl.nim | 16 |
2 files changed, 19 insertions, 3 deletions
diff --git a/lib/system.nim b/lib/system.nim index 221a538b1..3ba2050b6 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -2055,7 +2055,11 @@ export dollars const NimMajor* {.intdefine.}: int = 1 - ## is the major number of Nim's version. + ## is the major number of Nim's version. Example: + ## + ## .. code-block:: Nim + ## when (NimMajor, NimMinor, NimPatch) >= (1, 3, 1): discard + # See also private symbol `since: (1, 3)` reserved for stdlib NimMinor* {.intdefine.}: int = 3 ## is the minor number of Nim's version. diff --git a/lib/system/inclrtl.nim b/lib/system/inclrtl.nim index e84794c74..37cdb74d8 100644 --- a/lib/system/inclrtl.nim +++ b/lib/system/inclrtl.nim @@ -49,8 +49,20 @@ when defined(nimlocks): else: {.pragma: benign, gcsafe.} +template isSince(version: (int, int)): bool = + (NimMajor, NimMinor) >= version +template isSince(version: (int, int, int)): bool = + (NimMajor, NimMinor, NimPatch) >= version + template since(version, body: untyped) {.dirty, used.} = - ## limitation: can't be used to annotate a template (eg typetraits.get), would + ## Usage: + ## + ## .. code-block:: Nim + ## proc fun*() {since: (1, 3).} + ## proc fun*() {since: (1, 3, 1).} + ## + ## Limitation: can't be used to annotate a template (eg typetraits.get), would ## error: cannot attach a custom pragma. - when (NimMajor, NimMinor) >= version: + # `dirty` needed because `NimMajor` may not yet be defined in caller. + when isSince(version): body |