12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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(FieldError): echo obj.f2
- echo obj.f3
- block:
- let a0 = addr(obj.f0)
- echo a0[]
- # let a1 = unsafeAddr(obj.f1)
- # echo a1[]
- doAssertRaises(FieldError):
- 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
|