blob: 1fba30d55b24ad8ac4f6370d8c505937e96347c7 (
plain) (
blame)
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
|
discard """
action: run
"""
type T = object
x: int
s: string
var obj: T
var fieldAddr = addr(obj.x)
var objAddr = addr(obj)
# Integer tests
var field = fieldAddr[]
doAssert field == 0
var objDeref = objAddr[]
doAssert objDeref.x == 0
# Change value
obj.x = 42
doAssert field == 0
doAssert objDeref.x == 0
field = fieldAddr[]
objDeref = objAddr[]
doAssert field == 42
doAssert objDeref.x == 42
# String tests
obj.s = "lorem ipsum dolor sit amet"
var indexAddr = addr(obj.s[2])
doAssert indexAddr[] == 'r'
indexAddr[] = 'd'
doAssert indexAddr[] == 'd'
doAssert obj.s == "lodem ipsum dolor sit amet"
# Bug #2148
var x: array[2, int]
var y = addr x[1]
y[] = 12
doAssert(x[1] == 12)
type
Foo = object
bar: int
var foo: array[2, Foo]
var z = addr foo[1]
z[].bar = 12345
doAssert(foo[1].bar == 12345)
var t : tuple[a, b: int]
var pt = addr t[1]
pt[] = 123
doAssert(t.b == 123)
#block: # Test "untyped" pointer.
proc testPtr(p: pointer, a: int) =
doAssert(a == 5)
(cast[ptr int](p))[] = 124
var i = 123
testPtr(addr i, 5)
doAssert(i == 124)
|