* make more standard libraries work with `nimPreviewSlimSystem` * typo * part two * Delete specutils.nim * fixes more tests * more fixes * fixes tests * fixes three more tests * add formatfloat import * fix * last
93 lines
1.3 KiB
Nim
93 lines
1.3 KiB
Nim
discard """
|
|
targets: "c cpp js"
|
|
"""
|
|
|
|
# xxx merge with tests/metatype/ttypetraits.nim
|
|
|
|
import std/typetraits
|
|
import std/assertions
|
|
|
|
macro testClosure(fn: typed, flag: static bool) =
|
|
if flag:
|
|
doAssert hasClosure(fn)
|
|
else:
|
|
doAssert not hasClosure(fn)
|
|
|
|
block:
|
|
proc h1() =
|
|
echo 1
|
|
|
|
testClosure(h1, false)
|
|
|
|
proc h2() {.nimcall.} =
|
|
echo 2
|
|
|
|
testClosure(h2, false)
|
|
|
|
|
|
block:
|
|
proc fn(): auto =
|
|
proc hello() {.nimcall.} =
|
|
echo 3
|
|
hello
|
|
|
|
let name = fn()
|
|
testClosure(name, false)
|
|
|
|
block:
|
|
proc fn(): auto =
|
|
proc hello() =
|
|
echo 3
|
|
hello
|
|
|
|
let name = fn()
|
|
testClosure(name, false)
|
|
|
|
block:
|
|
proc fn(): auto =
|
|
var x = 0
|
|
proc hello() =
|
|
echo 3
|
|
inc x
|
|
hello
|
|
|
|
let name = fn()
|
|
testClosure(name, true)
|
|
|
|
block:
|
|
proc fn(): auto =
|
|
var x = 0
|
|
proc hello() {.closure.} =
|
|
echo 3
|
|
inc x
|
|
hello
|
|
|
|
let name = fn()
|
|
testClosure(name, true)
|
|
|
|
block:
|
|
proc fn(): auto =
|
|
var x = 0
|
|
proc hello() {.closure.} =
|
|
echo 3
|
|
inc x
|
|
hello
|
|
|
|
let name = fn()
|
|
testClosure(name, true)
|
|
|
|
let name2 = name
|
|
testClosure(name2, true)
|
|
|
|
block:
|
|
iterator hello(): int =
|
|
yield 1
|
|
|
|
testClosure(hello, false)
|
|
|
|
when not defined(js):
|
|
block:
|
|
iterator hello(): int {.closure.}=
|
|
yield 1
|
|
|
|
testClosure(hello, true)
|