diff options
Diffstat (limited to 'lib/system.nim')
-rwxr-xr-x | lib/system.nim | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/system.nim b/lib/system.nim index 892f4f8c5..b4c265f62 100755 --- a/lib/system.nim +++ b/lib/system.nim @@ -186,9 +186,9 @@ when not defined(niminheritable): when not defined(EcmaScript) and not defined(NimrodVM): type - TGenericSeq {.compilerproc, pure, inheritable.} = object + TGenericSeq* {.compilerproc, pure, inheritable.} = object len, reserved: int - PGenericSeq {.exportc.} = ptr TGenericSeq + PGenericSeq* {.exportc.} = ptr TGenericSeq # len and space without counting the terminating zero: NimStringDesc {.compilerproc, final.} = object of TGenericSeq data: array[0..100_000_000, char] @@ -565,7 +565,7 @@ proc abs*(x: int64): int64 {.magic: "AbsI64", noSideEffect.} ## checking is turned on). type - IntMax32 = int|int8|int16|int32 + IntMax32 = bool|int|int8|int16|int32 proc `+%` *(x, y: IntMax32): IntMax32 {.magic: "AddU", noSideEffect.} proc `+%` *(x, y: Int64): Int64 {.magic: "AddU", noSideEffect.} @@ -2486,3 +2486,17 @@ proc compiles*(x: expr): bool {.magic: "Compiles", noSideEffect.} = when defined(initDebugger): initDebugger() + +# XXX: make these the default (or implement the NilObject optimization) +proc safeAdd*[T](x: var seq[T], y: T) {.noSideEffect.} = + if x == nil: x = @[y] + else: x.add(y) + +proc safeAdd*(x: var string, y: char) = + if x == nil: x = "" + x.add(y) + +proc safeAdd*(x: var string, y: string) = + if x == nil: x = y + else: x.add(y) + |