mirror of
https://github.com/status-im/nim-ranges.git
synced 2025-02-13 21:26:40 +00:00
parent
d49a57f943
commit
6efa5b365a
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user