summary refs log tree commit diff stats
path: root/tests/stdlib/twith.nim
blob: ceadbe7bf0f8298d320c2ea677419eedef27d1d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
discard """
  matrix: "--mm:refc; --mm:orc"
"""

import std/with
import std/[assertions, formatfloat]

type
  Foo = object
    col, pos: string
    name: string

proc setColor(f: var Foo; r, g, b: int) = f.col = $(r, g, b)
proc setPosition(f: var Foo; x, y: float) = f.pos = $(x, y)

var f: Foo
with(f, setColor(2, 3, 4), setPosition(0.0, 1.0))
doAssert f.col == "(2, 3, 4)"
doAssert f.pos == "(0.0, 1.0)"

f = Foo()
with f:
  col = $(2, 3, 4)
  pos = $(0.0, 1.0)
  _.name = "bar"
doAssert f.col == "(2, 3, 4)"
doAssert f.pos == "(0.0, 1.0)"
doAssert f.name == "bar"

type
  Baz* = object
    a*, b*: int
  Bar* = object
    x*: int
    baz*: Baz

var bar: Bar
with bar:
  x = 1
  with baz:
    a = 2

doAssert bar.x == 1
doAssert bar.baz.a == 2