mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 10:22:15 +00:00
Add 'noSideEffect' pragma for Time type's operators
This commit is contained in:
@@ -217,21 +217,21 @@ proc `$` *(time: Time): string {.tags: [], raises: [], benign.}
|
||||
## converts a calendar time to a string representation.
|
||||
|
||||
proc `-`*(a, b: Time): int64 {.
|
||||
rtl, extern: "ntDiffTime", tags: [], raises: [], benign.}
|
||||
rtl, extern: "ntDiffTime", tags: [], raises: [], noSideEffect, benign.}
|
||||
## computes the difference of two calendar times. Result is in seconds.
|
||||
|
||||
proc `<`*(a, b: Time): bool {.
|
||||
rtl, extern: "ntLtTime", tags: [], raises: [].} =
|
||||
rtl, extern: "ntLtTime", tags: [], raises: [], noSideEffect.} =
|
||||
## returns true iff ``a < b``, that is iff a happened before b.
|
||||
result = a - b < 0
|
||||
|
||||
proc `<=` * (a, b: Time): bool {.
|
||||
rtl, extern: "ntLeTime", tags: [], raises: [].}=
|
||||
rtl, extern: "ntLeTime", tags: [], raises: [], noSideEffect.}=
|
||||
## returns true iff ``a <= b``.
|
||||
result = a - b <= 0
|
||||
|
||||
proc `==`*(a, b: Time): bool {.
|
||||
rtl, extern: "ntEqTime", tags: [], raises: [].} =
|
||||
rtl, extern: "ntEqTime", tags: [], raises: [], noSideEffect.} =
|
||||
## returns true if ``a == b``, that is if both times represent the same value
|
||||
result = a - b == 0
|
||||
|
||||
|
||||
@@ -164,3 +164,14 @@ let dstT1 = parse("2016-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss")
|
||||
let dstT2 = parse("2016-06-01 00:00:00", "yyyy-MM-dd HH:mm:ss")
|
||||
doAssert dstT1 == getLocalTime(toTime(dstT1))
|
||||
doAssert dstT2 == getLocalTime(toTime(dstT2))
|
||||
|
||||
# Comparison between Time objects should be detected by compiler
|
||||
# as 'noSideEffect'.
|
||||
proc cmpTimeNoSideEffect(t1: Time, t2: Time): bool {.noSideEffect.} =
|
||||
result = t1 == t2
|
||||
doAssert cmpTimeNoSideEffect(0.fromSeconds, 0.fromSeconds)
|
||||
# Additionally `==` generic for seq[T] has explicit 'noSideEffect' pragma
|
||||
# so we can check above condition by comparing seq[Time] sequences
|
||||
let seqA: seq[Time] = @[]
|
||||
let seqB: seq[Time] = @[]
|
||||
doAssert seqA == seqB
|
||||
|
||||
Reference in New Issue
Block a user