summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorStefan Talpalaru <stefantalpalaru@yahoo.com>2015-06-16 15:15:17 +0200
committerStefan Talpalaru <stefantalpalaru@yahoo.com>2015-06-16 15:15:17 +0200
commitb487d4e42501fa5d1ef8f589a0cd89c187d09fc3 (patch)
tree2cd2ae83f43496b8035772b43d225822a98cf246
parent8624654c57cd55e49a6d64cc66cb8657dfe9e86d (diff)
downloadNim-b487d4e42501fa5d1ef8f589a0cd89c187d09fc3.tar.gz
conditional TGenericSeq extension
-rw-r--r--lib/core/typeinfo.nim10
-rw-r--r--lib/system.nim10
-rw-r--r--lib/system/sysstr.nim6
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)