From a3719df8b327ce33d4fdbfc7be06b058e9a2ea48 Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 13 May 2020 14:29:37 +0200 Subject: fixes #14331 --- lib/pure/quitprocs.nim | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 lib/pure/quitprocs.nim (limited to 'lib/pure') diff --git a/lib/pure/quitprocs.nim b/lib/pure/quitprocs.nim new file mode 100644 index 000000000..76bbcdb2b --- /dev/null +++ b/lib/pure/quitprocs.nim @@ -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) -- cgit 1.4.1-2-gfad0