mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 03:32:32 +00:00
* deprecate unsafeAddr; extend addr
addr is now available for all addressable locations, unsafeAddr is deprecated and become an alias for addr
* follow @Vindaar's advice
* change the signature of addr
* unsafeAddr => addr (stdlib)
* Update changelog.md
* unsafeAddr => addr (tests)
* Revert "unsafeAddr => addr (stdlib)"
This reverts commit ab83c99c50.
* doc changes; thanks to @konsumlamm
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
49 lines
678 B
Nim
49 lines
678 B
Nim
discard """
|
|
output: '''
|
|
foo
|
|
C
|
|
3.14
|
|
foo
|
|
3.14
|
|
3.14
|
|
'''
|
|
"""
|
|
|
|
type
|
|
V = enum
|
|
A, B, C
|
|
X = object
|
|
f0: string
|
|
case f1: V
|
|
of A: f2: string
|
|
of B: discard
|
|
of C: f3: float
|
|
|
|
var obj = X(f0: "foo", f1: C, f3: 3.14)
|
|
|
|
block:
|
|
echo obj.f0
|
|
echo obj.f1
|
|
doAssertRaises(FieldDefect): echo obj.f2
|
|
echo obj.f3
|
|
|
|
block:
|
|
let a0 = addr(obj.f0)
|
|
echo a0[]
|
|
# let a1 = addr(obj.f1)
|
|
# echo a1[]
|
|
doAssertRaises(FieldDefect):
|
|
let a2 = addr(obj.f2)
|
|
echo a2[]
|
|
let a3 = addr(obj.f3)
|
|
echo a3[]
|
|
|
|
# Prevent double evaluation of LHS
|
|
block:
|
|
var flag = false
|
|
proc wrap(x: X): X =
|
|
doAssert flag == false
|
|
flag = true
|
|
result = x
|
|
echo wrap(obj).f3
|