mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
73 lines
1.0 KiB
Nim
73 lines
1.0 KiB
Nim
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)
|