discard """
  joinable: false
  output:'''
onInject: 1
onInject: 2
ok0
ok1
onInject: 3
onInject: 4
onInject: 5
0
onInject: 6
onInject: 7
onInject: 8
1
onInject: 9
onInject: 10
onInject: 11
2
ok2
onInject: 12
'''
"""

# test {.injectStmt.}

#[
{.injectStmt.} pragma can be used to inject a statement before every
other statement in the current module. It's now undocumented and may be removed
in the future and replaced with something more general and without its limitations.
(e.g. doesn't work in VM or js backends).
]#

from system/ansi_c import c_printf

var count = 0
proc onInject*() =
  count.inc
  # echo count # xxx would fail, probably infinite recursion
  c_printf("onInject: %d\n", cast[int](count))

{.injectStmt: onInject().}
echo "ok0"
proc main()=
  echo "ok1"
  for a in 0..<3:
    echo a
  echo "ok2"

static: main() # xxx injectStmt not honored in VM
main()
