Workaround for Nim's issue #8044. (#27)

This commit is contained in:
Eugene Kabanov 2018-08-27 18:53:34 +03:00 committed by Yuriy Glukhov
parent d49a57f943
commit 6efa5b365a
2 changed files with 11 additions and 2 deletions

View File

@ -17,10 +17,19 @@ type
ByteRange* = Range[byte]
MutByteRange* = MutRange[byte]
proc isLiteral[T](s: seq[T]): bool {.inline.} =
type
SeqHeader = object
length, reserved: int
(cast[ptr SeqHeader](s).reserved and (1 shl (sizeof(int) * 8 - 2))) != 0
proc toImmutableRange[T](a: seq[T]): Range[T] =
if a.len != 0:
when rangesGCHoldEnabled:
result.gcHold = a
if not isLiteral(a):
shallowCopy(result.gcHold, a)
else:
result.gcHold = a
result.start = addr result.gcHold[0]
result.mLen = a.len

View File

@ -71,7 +71,7 @@ suite "Typed ranges":
var r = s.toRange()
var r2 = r
s[0] = 5
# check(r[0] == 5) # XXX: Uncomment once nim bug #8044 is fixed
check(r[0] == 5)
r[1] = 10
check(r2[1] == 10)