mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-03 19:52:36 +00:00
48 lines
1.0 KiB
Nim
48 lines
1.0 KiB
Nim
discard """
|
|
cmd: "nim c --gc:orc -d:useMalloc $file"
|
|
output: "true"
|
|
valgrind: "true"
|
|
"""
|
|
|
|
import strutils
|
|
|
|
type
|
|
FutureBase* = ref object of RootObj ## Untyped future.
|
|
finished: bool
|
|
stackTrace: seq[StackTraceEntry] ## For debugging purposes only.
|
|
|
|
proc newFuture*(): FutureBase =
|
|
new(result)
|
|
result.finished = false
|
|
result.stackTrace = getStackTraceEntries()
|
|
|
|
type
|
|
PDispatcher {.acyclic.} = ref object
|
|
|
|
var gDisp: PDispatcher
|
|
new gDisp
|
|
|
|
proc testCompletion(): FutureBase =
|
|
var retFuture = newFuture()
|
|
|
|
iterator testCompletionIter(): FutureBase {.closure.} =
|
|
retFuture.finished = true
|
|
when not defined(nobug):
|
|
let disp = gDisp # even worse memory consumption this way...
|
|
|
|
var nameIterVar = testCompletionIter
|
|
proc testCompletionNimAsyncContinue() {.closure.} =
|
|
if not nameIterVar.finished:
|
|
discard nameIterVar()
|
|
testCompletionNimAsyncContinue()
|
|
return retFuture
|
|
|
|
proc main =
|
|
for i in 0..10_000:
|
|
discard testCompletion()
|
|
|
|
main()
|
|
|
|
GC_fullCollect()
|
|
echo getOccupiedMem() < 1024
|