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 108 109 110 111 112 113 114 115 116
|
discard """
output: '''@[1]
@[116, 101, 115, 116]
@[1953719668, 875770417]
destroying O1'''
cmd: '''nim c --mm:arc --expandArc:main --expandArc:main1 --expandArc:main2 --expandArc:main3 --hints:off --assertions:off $file'''
nimout: '''
--expandArc: main
var
data
:tmpD
data = cast[string](encode(cast[seq[byte]](
:tmpD = newString(100)
:tmpD)))
`=destroy`(:tmpD)
`=destroy`(data)
-- end of expandArc ------------------------
--expandArc: main1
var
s
data
s = newString(100)
data = cast[string](encode(toOpenArrayByte(s, 0, len(s) - 1)))
`=destroy`(data)
`=destroy`(s)
-- end of expandArc ------------------------
--expandArc: main2
var
s
data
s = newSeq(100)
data = cast[string](encode(s))
`=destroy`(data)
`=destroy_1`(s)
-- end of expandArc ------------------------
--expandArc: main3
var
data
:tmpD
data = cast[string](encode do:
:tmpD = newSeq(100)
:tmpD)
`=destroy`(:tmpD)
`=destroy_1`(data)
-- end of expandArc ------------------------
'''
"""
func encode*(src: openArray[byte]): seq[byte] =
result = newSeq[byte](src.len)
template compress*(src: string): string =
cast[string](encode(cast[seq[byte]](src)))
proc main =
let data = compress(newString(100))
main()
proc main1 =
var
s = newString(100)
let data = cast[string](encode(s.toOpenArrayByte(0, s.len-1)))
main1()
proc main2 =
var
s = newSeq[byte](100)
let data = cast[string](encode(s))
main2()
proc main3 =
let data = cast[string](encode(newSeq[byte](100)))
main3()
# bug #11018
discard cast[seq[uint8]](@[1])
discard cast[seq[uint8]]("test")
echo cast[seq[uint8]](@[1])
echo cast[seq[uint8]]("test")
discard cast[string](@[116'u8, 101, 115, 116])
#echo cast[string](@[116'u8, 101, 115, 116, 0])
var a = cast[seq[uint32]]("test1234")
a.setLen(2)
echo a
#issue 11204
var ac {.compileTime.} = @["a", "b"]
const bc = ac.len
type
O = object of RootRef
i: int
O1 = object of O
O2 = object of O
proc `=destroy`(o: var O) =
echo "destroying O"
proc `=destroy`(o: var O1) =
echo "destroying O1"
proc `=destroy`(o: var O2) =
echo "destroying O2"
proc test =
let o3 = cast[ref O2]((ref O1)())
test()
|