mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-07 15:59:10 +00:00
test #25849
This commit is contained in:
@@ -1842,6 +1842,8 @@ proc genArrAccessOpcode(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode;
|
||||
if dest < 0: dest = c.getTemp(n.typ)
|
||||
if opc in {opcLdArrAddr, opcLdStrIdxAddr} and gfNodeAddr in flags:
|
||||
c.gABC(n, opc, dest, a, b)
|
||||
if c.prc.regInfo[a].kind >= slotTempUnknown:
|
||||
c.prc.regInfo[a].kind = slotTempPerm
|
||||
elif needsRegLoad():
|
||||
var cc = c.getTemp(n.typ)
|
||||
c.gABC(n, opc, cc, a, b)
|
||||
@@ -1858,6 +1860,8 @@ proc genObjAccessAux(c: PCtx; n: PNode; a, b: int, dest: var TDest; flags: TGenF
|
||||
if dest < 0: dest = c.getTemp(n.typ)
|
||||
if {gfNodeAddr} * flags != {}:
|
||||
c.gABC(n, opcLdObjAddr, dest, a, b)
|
||||
if a < c.prc.regInfo.len and c.prc.regInfo[a].kind >= slotTempUnknown:
|
||||
c.prc.regInfo[a].kind = slotTempPerm
|
||||
elif needsRegLoad():
|
||||
var cc = c.getTemp(n.typ)
|
||||
c.gABC(n, opcLdObj, cc, a, b)
|
||||
|
||||
@@ -37,7 +37,7 @@ iterator mitems*[T](a: var openArray[T]): var T {.inline.} =
|
||||
yield a[i]
|
||||
unCheckedInc(i)
|
||||
|
||||
iterator items*[IX, T](a: array[IX, T]): T {.inline.} =
|
||||
iterator items*[IX, T](a: array[IX, T]): lent2 T {.inline.} =
|
||||
## Iterates over each item of `a`.
|
||||
when a.len > 0:
|
||||
var i = low(IX)
|
||||
|
||||
38
tests/lent/titems_array_lent.nim
Normal file
38
tests/lent/titems_array_lent.nim
Normal file
@@ -0,0 +1,38 @@
|
||||
discard """
|
||||
targets: "c cpp js"
|
||||
"""
|
||||
|
||||
template sameAddress(a, b): bool =
|
||||
when defined(js):
|
||||
a == b
|
||||
else:
|
||||
a.unsafeAddr == b.unsafeAddr
|
||||
|
||||
proc main() =
|
||||
block:
|
||||
let a = [10, 11, 12]
|
||||
for ai in items(a):
|
||||
doAssert sameAddress(ai, a[0])
|
||||
break
|
||||
|
||||
block:
|
||||
let a = [[1, 2], [1, 2], [1, 2]]
|
||||
for ai in items(a):
|
||||
doAssert sameAddress(ai[0], a[0][0])
|
||||
break
|
||||
|
||||
block:
|
||||
let s = @[(1, 2), (3, 4), (5, 6)]
|
||||
doAssert (3, 4) in s
|
||||
|
||||
main()
|
||||
|
||||
static:
|
||||
main()
|
||||
|
||||
block: # issue #25849
|
||||
static:
|
||||
const key = "NIM_TESTS_TOSENV_KEY"
|
||||
for val in ["val", "", "\xc3\x86"]:
|
||||
let s = @[(key, "val"), (key, ""), (key, "\xc3\x86")]
|
||||
doAssert (key, val) in s
|
||||
Reference in New Issue
Block a user