This commit is contained in:
Araq
2020-05-13 14:29:37 +02:00
parent 041ee92bba
commit a3719df8b3

28
lib/pure/quitprocs.nim Normal file
View File

@@ -0,0 +1,28 @@
#
#
# Nim's Runtime Library
# (c) Copyright 2016 Andreas Rumpf
#
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
#
## ``system.addQuitProc`` is nice and very useful but due to its C-based
## implementation it doesn't support closures which limits its usefulness.
## This module fixes this. Later versions of this module will also
## support the JavaScript backend.
var
gClosures: seq[proc () {.closure.}]
proc callClosures() {.noconv.} =
for i in countdown(gClosures.len-1, 0):
gClosures[i]()
proc addQuitClosure*(cl: proc () {.closure.}) =
## Like ``system.addQuitProc`` but it supports closures.
if gClosures.len == 0:
addQuitProc(callClosures)
gClosures = @[cl]
else:
gClosures.add(cl)