Skip to content

Commit 45cd168

Browse files
committed
byLent now takes a var input
1 parent c725094 commit 45cd168

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

lib/std/decls.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ template byaddr*(lhs, typ, ex) =
2222
let tmp: ptr typ = addr(ex)
2323
template lhs: untyped = tmp[]
2424

25-
proc byLent*[T](a: T): lent T {.inline.} =
25+
proc byLent*[T](a: var T): lent T {.inline.} =
2626
## Transforms `a` into a let param without copying; this is useful for overload
2727
## resolution
2828
runnableExamples:

tests/js/taddr.nim

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,29 +78,39 @@ doAssert(someGlobalPtr[] == 5)
7878
someGlobalPtr[] = 10
7979
doAssert(someGlobal == 10)
8080

81-
from std/decls import byLent
82-
8381
block:
8482
# issue #14576
8583
# lots of these used to give: Error: internal error: genAddr: 2
84+
proc byLentAny[T](a: T): lent T = a
85+
proc byLentVar[T](a: var T): lent T = a # see also decls.byLent
8686
proc byPtr[T](a: T): ptr T = a.unsafeAddr
8787

8888
block:
8989
let a = (10,11)
90-
let (x,y) = byLent(a)
90+
let (x,y) = byLentAny(a)
91+
doAssert (x,y) == a
92+
block:
93+
var a = (10,11)
94+
let (x,y) = byLentAny(a)
9195
doAssert (x,y) == a
9296

9397
block:
9498
let a = 10
95-
doAssert byLent(a) == 10
96-
let a2 = byLent(a)
99+
doAssert byLentAny(a) == 10
100+
let a2 = byLentAny(a)
97101
doAssert a2 == 10
98102

99103
block:
100104
let a = [11,12]
101-
doAssert byLent(a) == [11,12]
105+
doAssert byLentAny(a) == [11,12]
102106
let a2 = (11,)
103-
doAssert byLent(a2) == (11,)
107+
doAssert byLentAny(a2) == (11,)
108+
109+
block:
110+
var a = [11,12]
111+
doAssert byLentVar(a) == [11,12]
112+
var a2 = (11,)
113+
doAssert byLentVar(a2) == (11,)
104114

105115
block:
106116
when defined(c) and defined(release):
@@ -114,9 +124,9 @@ block:
114124
doAssert byPtr(a3)[] == 14
115125

116126
block:
117-
proc byLent2[T](a: seq[T]): lent T = a[1]
127+
proc byLentElem[T](a: seq[T]): lent T = a[1]
118128
var a = @[20,21,22]
119-
doAssert byLent2(a) == 21
129+
doAssert byLentElem(a) == 21
120130

121131
block: # sanity checks
122132
proc bar[T](a: var T): var T = a

0 commit comments

Comments
 (0)