summary refs log tree commit diff stats
path: root/tests/vm/tissues.nim
blob: f0ae6c296ecc6d0bae1485b9ff883fd7ca75322f (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import macros

block t9043: # bug #9043
  proc foo[N: static[int]](dims: array[N, int]): string =
    const N1 = N
    const N2 = dims.len
    const ret = $(N, dims.len, N1, N2)
    static: doAssert ret == $(N, dims.len, N1, N2)
    ret

  doAssert foo([1, 2]) == "(2, 2, 2, 2)"

block t4952:
  proc doCheck(tree: NimNode) =
    let res: tuple[n: NimNode] = (n: tree)
    assert: tree.kind == res.n.kind
    for sub in tree:
      doCheck(sub)

  macro id(body: untyped): untyped =
    doCheck(body)

  id(foo((i: int)))

  static:
    let tree = newTree(nnkExprColonExpr)
    let t = (n: tree)
    doAssert: t.n.kind == tree.kind


# bug #19909
type
  SinglyLinkedList[T] = ref object
  SinglyLinkedListObj[T] = ref object


proc addMoved[T](a, b: var SinglyLinkedList[T]) =
  if a.addr != b.addr: discard

proc addMoved[T](a, b: var SinglyLinkedListObj[T]) =
  if a.addr != b.addr: discard

proc main =
  var a: SinglyLinkedList[int]; new a
  var b: SinglyLinkedList[int]; new b
  a.addMoved b

  var a0: SinglyLinkedListObj[int]
  var b0: SinglyLinkedListObj[int]
  a0.addMoved b0

static: main()


# bug #18641

type A = object
  ha1: int
static:
  var a = A()
  var a2 = a.addr
  a2.ha1 = 11
  doAssert a2.ha1 == 11
  a.ha1 = 12
  doAssert a.ha1 == 12
  doAssert a2.ha1 == 12 # ok
static:
  proc fn() =
    var a = A()
    var a2 = a.addr
    a2.ha1 = 11
    doAssert a2.ha1 == 11
    a.ha1 = 12
    doAssert a.ha1 == 12
    doAssert a2.ha1 == 12 # fails
  fn()