move {.injectStmt.} to experimental; add a test (#18300)
* move {.injectStmt.} to experimental; add a test
* undocument and deprecat `.injectStmt` but keep its implementation until we have a replacement
This commit is contained in:
parent
590d457631
commit
6030e139b5
6 changed files with 53 additions and 15 deletions
48
tests/pragmas/tinjectstmt.nim
Normal file
48
tests/pragmas/tinjectstmt.nim
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
discard """
|
||||
joinable: false
|
||||
output:'''
|
||||
onInject: 1
|
||||
onInject: 2
|
||||
ok0
|
||||
ok1
|
||||
onInject: 3
|
||||
onInject: 4
|
||||
0
|
||||
onInject: 5
|
||||
onInject: 6
|
||||
1
|
||||
onInject: 7
|
||||
onInject: 8
|
||||
2
|
||||
ok2
|
||||
onInject: 9
|
||||
'''
|
||||
"""
|
||||
|
||||
# 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. (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 honred in VM
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue