summary refs log blame commit diff stats
path: root/tests/pragmas/treorder.nim
blob: 1006af5274c81fd605ec6f316281bac81c564bee (plain) (tree)








































































                                             
                                  
discard """
output:'''0
1
2
3'''
"""

import macros
{.reorder: on .}

echo foo(-1)
echo callWithFoo(0)
echo(CA+CD)
echo useTypes(TA(x:TB(x:1)), 2)
second(0)
  
template callWithFoo(arg: untyped): untyped =
  foo(arg)
  
proc first(i: int): void

proc second(i: int): void =
  make(first)
  first(i)

proc useTypes(a: TA, d: TD): int =
  result = a.x.x+d

type
  TDoubleCyclic = ref object
    x: TCyclicA
    y: TCyclicB

type
  TCyclicA = ref object
    x: TDoubleCyclic
  
type
  TCyclicB = ref object
    x: TDoubleCyclic

const
  CA = 1
  CB = CC

type
  TA = object
    x: TB
  TC = type(CC)
  TD = type(CA)

const
  CC = 1
  CD = CB

type
  TB = object
    x: TC

proc foo(x: int): int =
  result = bar(x)

proc bar(x: int): int =
  result = x+1

macro make(arg: untyped): untyped =
  ss &= arg.repr
  ss &= " "
  discard

proc first(i: int): void =
  make(second)

var ss {.compileTime.}: string = ""