Really fix StringStream with ARC at compile-time, improve streams test (#19739)
* Fix compile-time StringStream with ARC * make readDataStr work with ARC, improve test
This commit is contained in:
parent
efaa6777a4
commit
2f32b450d3
2 changed files with 15 additions and 4 deletions
|
|
@ -243,6 +243,9 @@ proc readDataStr*(s: Stream, buffer: var string, slice: Slice[int]): int =
|
|||
result = s.readDataStrImpl(s, buffer, slice)
|
||||
else:
|
||||
# fallback
|
||||
when declared(prepareMutation):
|
||||
# buffer might potentially be a CoW literal with ARC
|
||||
prepareMutation(buffer)
|
||||
result = s.readData(addr buffer[slice.a], slice.b + 1 - slice.a)
|
||||
|
||||
template jsOrVmBlock(caseJsOrVm, caseElse: untyped): untyped =
|
||||
|
|
@ -1274,8 +1277,11 @@ else: # after 1.3 or JS not defined
|
|||
|
||||
new(result)
|
||||
result.data = s
|
||||
when declared(prepareMutation):
|
||||
prepareMutation(result.data) # Allows us to mutate using `addr` logic like `copyMem`, otherwise it errors.
|
||||
when nimvm:
|
||||
discard
|
||||
else:
|
||||
when declared(prepareMutation):
|
||||
prepareMutation(result.data) # Allows us to mutate using `addr` logic like `copyMem`, otherwise it errors.
|
||||
result.pos = 0
|
||||
result.closeImpl = ssClose
|
||||
result.atEndImpl = ssAtEnd
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue