diff options
author | Stefan Talpalaru <stefantalpalaru@yahoo.com> | 2015-06-16 15:15:17 +0200 |
---|---|---|
committer | Stefan Talpalaru <stefantalpalaru@yahoo.com> | 2015-06-16 15:15:17 +0200 |
commit | b487d4e42501fa5d1ef8f589a0cd89c187d09fc3 (patch) | |
tree | 2cd2ae83f43496b8035772b43d225822a98cf246 | |
parent | 8624654c57cd55e49a6d64cc66cb8657dfe9e86d (diff) | |
download | Nim-b487d4e42501fa5d1ef8f589a0cd89c187d09fc3.tar.gz |
conditional TGenericSeq extension
-rw-r--r-- | lib/core/typeinfo.nim | 10 | ||||
-rw-r--r-- | lib/system.nim | 10 | ||||
-rw-r--r-- | lib/system/sysstr.nim | 6 |
3 files changed, 18 insertions, 8 deletions
diff --git a/lib/core/typeinfo.nim b/lib/core/typeinfo.nim index 9d29f6a00..dc97784c3 100644 --- a/lib/core/typeinfo.nim +++ b/lib/core/typeinfo.nim @@ -67,12 +67,16 @@ type pbyteArray = ptr array[0.. 0xffff, int8] TGenericSeq {.importc.} = object - len, space, elemSize: int + len, space: int + when defined(gogc): + elemSize: int PGenSeq = ptr TGenericSeq {.deprecated: [TAny: Any, TAnyKind: AnyKind].} -const - GenericSeqSize = (3 * sizeof(int)) +when defined(gogc): + const GenericSeqSize = (3 * sizeof(int)) +else: + const GenericSeqSize = (2 * sizeof(int)) proc genericAssign(dest, src: pointer, mt: PNimType) {.importCompilerProc.} proc genericShallowAssign(dest, src: pointer, mt: PNimType) {. diff --git a/lib/system.nim b/lib/system.nim index 5d723bed3..2beb5b88d 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -304,7 +304,9 @@ const ArrayDummySize = when defined(cpu16): 10_000 else: 100_000_000 when not defined(JS): type TGenericSeq {.compilerproc, pure, inheritable.} = object - len, reserved, elemSize: int + len, reserved: int + when defined(gogc): + elemSize: int PGenericSeq {.exportc.} = ptr TGenericSeq UncheckedCharArray {.unchecked.} = array[0..ArrayDummySize, char] # len and space without counting the terminating zero: @@ -2682,8 +2684,10 @@ when not defined(JS): #and not defined(NimrodVM): when not defined(NimrodVM): include "system/sets" - const - GenericSeqSize = (3 * sizeof(int)) + when defined(gogc): + const GenericSeqSize = (3 * sizeof(int)) + else: + const GenericSeqSize = (2 * sizeof(int)) proc getDiscriminant(aa: pointer, n: ptr TNimNode): int = sysAssert(n.kind == nkCase, "getDiscriminant: node != nkCase") diff --git a/lib/system/sysstr.nim b/lib/system/sysstr.nim index 6e3c8722d..33629016f 100644 --- a/lib/system/sysstr.nim +++ b/lib/system/sysstr.nim @@ -50,14 +50,16 @@ proc rawNewStringNoInit(space: int): NimString {.compilerProc.} = if s < 7: s = 7 result = allocStrNoInit(sizeof(TGenericSeq) + s + 1) result.reserved = s - result.elemSize = 1 + when defined(gogc): + result.elemSize = 1 proc rawNewString(space: int): NimString {.compilerProc.} = var s = space if s < 7: s = 7 result = allocStr(sizeof(TGenericSeq) + s + 1) result.reserved = s - result.elemSize = 1 + when defined(gogc): + result.elemSize = 1 proc mnewString(len: int): NimString {.compilerProc.} = result = rawNewString(len) |