Files
Nim/tests/js/tfieldchecks.nim
flywind d102b2f54c deprecate unsafeAddr; extend addr (#19373)
* 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>
2022-01-16 11:08:38 +01:00

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