1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
discard """
output: '''x
[10, 11, 12, 13]'''
"""
# bug #14805
type Foo = object
a: string
proc bar(f: var Foo): lent string =
result = f.a
var foo = Foo(a: "x")
echo bar(foo)
# bug #14878
# proc byLentImpl[T](a: T): lent T = a
proc byLentVar[T](a: var T): lent T =
result = a
# result = a.byLentImpl # this doesn't help
var x = 3 # error: cannot take the address of an rvalue of type 'NI *'
var xs = [10,11,12,13] # SIGSEGV
let x2 = x.byLentVar
let xs2 = xs.byLentVar
echo xs2
# bug #22138
type Xxx = object
type
Opt[T] = object
case oResultPrivate*: bool
of false:
discard
of true:
vResultPrivate*: T
func value*[T: not void](self: Opt[T]): lent T {.inline.} =
self.vResultPrivate
template get*[T: not void](self: Opt[T]): T = self.value()
method connect*(
self: Opt[(int, int)]) =
discard self.get()[0]
block: # bug #23454
type
Letter = enum
A
LetterPairs = object
values: seq[(Letter, string)]
iterator items(list: var LetterPairs): lent (Letter, string) =
for item in list.values:
yield item
var instance = LetterPairs(values: @[(A, "foo")])
for (a, _) in instance:
case a
of A: discard
block: # bug #23454
type
Letter = enum
A
LetterPairs = object
values: seq[(Letter, string)]
iterator items(list: var LetterPairs): var (Letter, string) =
for item in list.values.mItems:
yield item
var instance = LetterPairs(values: @[(A, "foo")])
for (a, _) in instance:
case a
of A: discard
block: # bug #24034
type T = object
v: array[100, byte]
iterator pairs(t: T): (int, lent array[100, byte]) =
yield (0, t.v)
block:
for a, b in default(T):
doAssert a == 0
doAssert b.len == 100
block:
for (a, b) in pairs(default(T)):
doAssert a == 0
doAssert b.len == 100
|