From 79cdb26b4659005c8d9ae2d03c868b78fc2622f5 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 27 Jun 2014 15:14:45 +0200 Subject: Add missing operators for uint and uint64: `+=`, `-=`, `*=` --- lib/core/unsigned.nim | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/core/unsigned.nim b/lib/core/unsigned.nim index a3ddd4125..db46c0c0b 100644 --- a/lib/core/unsigned.nim +++ b/lib/core/unsigned.nim @@ -57,3 +57,16 @@ proc `<=`*[T: SomeUInt](x, y: T): bool {.magic: "LeU", noSideEffect.} proc `<`*[T: SomeUInt](x, y: T): bool {.magic: "LtU", noSideEffect.} ## Returns true iff ``unsigned(x) < unsigned(y)``. + +proc `+=`*[T: uint|uint64](x: var T, y: T) {.magic: "Inc", noSideEffect.} + ## Increments uints and uint64s, uint8..uint32 are TOrdinals, and already + ## have a definition in the System module. + +proc `-=`*[T: uint|uint64](x: var T, y: T) {.magic: "Dec", noSideEffect.} + ## Decrements uints and uint64s, uint8..uint32 are TOrdinals, and already + ## have a definition in the System module. + +proc `*=`*[T: uint|uint64](x: var T, y: T) {.inline, noSideEffect.} = + ## Binary `*=` operator for uints and uint64s, uint8..uint32 are TOrdinals, + ## and already have a definition in the System module. + x = x * y -- cgit 1.4.1-2-gfad0 From 4f24facb7ca0e62cb19f4b3c3aceb63f31cf6569 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 27 Jun 2014 16:32:08 +0200 Subject: Add inc and dec for uint and uint64 --- lib/core/unsigned.nim | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/core/unsigned.nim b/lib/core/unsigned.nim index db46c0c0b..c9f7d0d15 100644 --- a/lib/core/unsigned.nim +++ b/lib/core/unsigned.nim @@ -70,3 +70,11 @@ proc `*=`*[T: uint|uint64](x: var T, y: T) {.inline, noSideEffect.} = ## Binary `*=` operator for uints and uint64s, uint8..uint32 are TOrdinals, ## and already have a definition in the System module. x = x * y + +proc inc*[T: uint|uint64](x: var T, y = 1) {.magic: "Inc", noSideEffect.} + ## Increments uints and uint64s ``x`` by ``y``, uint8..uint32 are TOrdinals, + ## and already have a definition in the System module. + +proc dec*[T: uint|uint64](x: var T, y = 1) {.magic: "Dec", noSideEffect.} + ## Decrements uints and uint64s ``x`` by ``y``, uint8..uint32 are TOrdinals, + ## and already have a definition in the System module. -- cgit 1.4.1-2-gfad0 From 5439699b9bd539f0b946c3033c887edd449f41b5 Mon Sep 17 00:00:00 2001 From: def Date: Sat, 28 Jun 2014 16:24:14 +0200 Subject: Add type constraints for uint and uint64 to the System module's procs instead --- lib/core/unsigned.nim | 21 --------------------- lib/system.nim | 10 +++++----- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/lib/core/unsigned.nim b/lib/core/unsigned.nim index c9f7d0d15..a3ddd4125 100644 --- a/lib/core/unsigned.nim +++ b/lib/core/unsigned.nim @@ -57,24 +57,3 @@ proc `<=`*[T: SomeUInt](x, y: T): bool {.magic: "LeU", noSideEffect.} proc `<`*[T: SomeUInt](x, y: T): bool {.magic: "LtU", noSideEffect.} ## Returns true iff ``unsigned(x) < unsigned(y)``. - -proc `+=`*[T: uint|uint64](x: var T, y: T) {.magic: "Inc", noSideEffect.} - ## Increments uints and uint64s, uint8..uint32 are TOrdinals, and already - ## have a definition in the System module. - -proc `-=`*[T: uint|uint64](x: var T, y: T) {.magic: "Dec", noSideEffect.} - ## Decrements uints and uint64s, uint8..uint32 are TOrdinals, and already - ## have a definition in the System module. - -proc `*=`*[T: uint|uint64](x: var T, y: T) {.inline, noSideEffect.} = - ## Binary `*=` operator for uints and uint64s, uint8..uint32 are TOrdinals, - ## and already have a definition in the System module. - x = x * y - -proc inc*[T: uint|uint64](x: var T, y = 1) {.magic: "Inc", noSideEffect.} - ## Increments uints and uint64s ``x`` by ``y``, uint8..uint32 are TOrdinals, - ## and already have a definition in the System module. - -proc dec*[T: uint|uint64](x: var T, y = 1) {.magic: "Dec", noSideEffect.} - ## Decrements uints and uint64s ``x`` by ``y``, uint8..uint32 are TOrdinals, - ## and already have a definition in the System module. diff --git a/lib/system.nim b/lib/system.nim index f45707849..0cd1f77df 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -431,12 +431,12 @@ proc pred*[T](x: Ordinal[T], y = 1): T {.magic: "Pred", noSideEffect.} ## an ordinal type. If such a value does not exist, ``EOutOfRange`` is raised ## or a compile time error occurs. -proc inc*[T](x: var Ordinal[T], y = 1) {.magic: "Inc", noSideEffect.} +proc inc*[T: Ordinal|uint|uint64](x: var T, y = 1) {.magic: "Inc", noSideEffect.} ## increments the ordinal ``x`` by ``y``. If such a value does not ## exist, ``EOutOfRange`` is raised or a compile time error occurs. This is a ## short notation for: ``x = succ(x, y)``. -proc dec*[T](x: var Ordinal[T], y = 1) {.magic: "Dec", noSideEffect.} +proc dec*[T: Ordinal|uint|uint64](x: var T, y = 1) {.magic: "Dec", noSideEffect.} ## decrements the ordinal ``x`` by ``y``. If such a value does not ## exist, ``EOutOfRange`` is raised or a compile time error occurs. This is a ## short notation for: ``x = pred(x, y)``. @@ -2745,13 +2745,13 @@ proc staticExec*(command: string, input = ""): string {. ## inside a pragma like `passC `_ or `passL ## `_. -proc `+=`*[T: TOrdinal](x: var T, y: T) {.magic: "Inc", noSideEffect.} +proc `+=`*[T: TOrdinal|uint|uint64](x: var T, y: T) {.magic: "Inc", noSideEffect.} ## Increments an ordinal -proc `-=`*[T: TOrdinal](x: var T, y: T) {.magic: "Dec", noSideEffect.} +proc `-=`*[T: TOrdinal|uint|uint64](x: var T, y: T) {.magic: "Dec", noSideEffect.} ## Decrements an ordinal -proc `*=`*[T: TOrdinal](x: var T, y: T) {.inline, noSideEffect.} = +proc `*=`*[T: TOrdinal|uint|uint64](x: var T, y: T) {.inline, noSideEffect.} = ## Binary `*=` operator for ordinals x = x * y -- cgit 1.4.1-2-gfad0