1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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)
- var someGlobal = 5
- proc getSomeGlobalPtr(): ptr int = addr someGlobal
- let someGlobalPtr = getSomeGlobalPtr()
- doAssert(someGlobalPtr[] == 5)
- someGlobalPtr[] = 10
- doAssert(someGlobal == 10)
|