diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/hashes.nim | 2 | ||||
-rw-r--r-- | lib/system.nim | 12 | ||||
-rw-r--r-- | lib/system/arithmetics.nim | 4 | ||||
-rw-r--r-- | lib/system/basic_types.nim | 6 |
4 files changed, 16 insertions, 8 deletions
diff --git a/lib/pure/hashes.nim b/lib/pure/hashes.nim index b55a7865d..52a724d7b 100644 --- a/lib/pure/hashes.nim +++ b/lib/pure/hashes.nim @@ -112,7 +112,7 @@ proc hash*[T: proc](x: T): Hash {.inline.} = else: result = hash(pointer(x)) -proc hash*(x: int|int64|uint|uint64|char|Ordinal): Hash {.inline.} = +proc hash*[T: Ordinal](x: T): Hash {.inline.} = ## Efficient hashing of integers. cast[Hash](ord(x)) diff --git a/lib/system.nim b/lib/system.nim index 69083673b..51ff3af40 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -87,6 +87,18 @@ proc defined*(x: untyped): bool {.magic: "Defined", noSideEffect, compileTime.} ## # Do here programmer friendly expensive sanity checks. ## # Put here the normal code +when defined(nimHashOrdinalFixed): + type + Ordinal*[T] {.magic: Ordinal.} ## Generic ordinal type. Includes integer, + ## bool, character, and enumeration types + ## as well as their subtypes. See also + ## `SomeOrdinal`. +else: + # bootstrap <= 0.20.0 + type + OrdinalImpl[T] {.magic: Ordinal.} + Ordinal* = OrdinalImpl | uint | uint64 + when defined(nimHasRunnableExamples): proc runnableExamples*(body: untyped) {.magic: "RunnableExamples".} ## A section you should use to mark `runnable example`:idx: code with. diff --git a/lib/system/arithmetics.nim b/lib/system/arithmetics.nim index ba9ade192..757a813e8 100644 --- a/lib/system/arithmetics.nim +++ b/lib/system/arithmetics.nim @@ -22,7 +22,7 @@ proc pred*[T: Ordinal](x: T, y = 1): T {.magic: "Pred", noSideEffect.} ## echo pred(5) # => 4 ## echo pred(5, 3) # => 2 -proc inc*[T: Ordinal|uint|uint64](x: var T, y = 1) {.magic: "Inc", noSideEffect.} +proc inc*[T: Ordinal](x: var T, y = 1) {.magic: "Inc", noSideEffect.} ## Increments the ordinal ``x`` by ``y``. ## ## If such a value does not exist, ``OverflowError`` is raised or a compile @@ -33,7 +33,7 @@ proc inc*[T: Ordinal|uint|uint64](x: var T, y = 1) {.magic: "Inc", noSideEffect. ## inc(i) # i <- 3 ## inc(i, 3) # i <- 6 -proc dec*[T: Ordinal|uint|uint64](x: var T, y = 1) {.magic: "Dec", noSideEffect.} +proc dec*[T: Ordinal](x: var T, y = 1) {.magic: "Dec", noSideEffect.} ## Decrements the ordinal ``x`` by ``y``. ## ## If such a value does not exist, ``OverflowError`` is raised or a compile diff --git a/lib/system/basic_types.nim b/lib/system/basic_types.nim index 39ad0a76c..a6bf69ebc 100644 --- a/lib/system/basic_types.nim +++ b/lib/system/basic_types.nim @@ -20,10 +20,6 @@ const off* = false ## Alias for ``false``. type - Ordinal*[T] {.magic: Ordinal.} ## Generic ordinal type. Includes integer, - ## bool, character, and enumeration types - ## as well as their subtypes. - SomeSignedInt* = int|int8|int16|int32|int64 ## Type class matching all signed integer types. @@ -35,7 +31,7 @@ type SomeOrdinal* = int|int8|int16|int32|int64|bool|enum|uint|uint8|uint16|uint32|uint64 ## Type class matching all ordinal types; however this includes enums with - ## holes. + ## holes. See also `Ordinal` BiggestInt* = int64 ## is an alias for the biggest signed integer type the Nim compiler |