summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2021-09-19 23:35:50 +0200
committerGitHub <noreply@github.com>2021-09-19 23:35:50 +0200
commit3241df2a13662e0158ec9d0b0c07996b22fb0939 (patch)
tree5d6421679780232d09a0dbe1da55a93f1e4b0ebb
parentca51bb8fd97e36e001afc7e9ad150dc77e9ca83b (diff)
downloadNim-3241df2a13662e0158ec9d0b0c07996b22fb0939.tar.gz
fixes #18858 [backport] (#18868)
* fixes #18858 [backport]

* ensure async tests work with --experimental:strictEffects [backport]

* ensure async tests work with --experimental:strictEffects [backport]
-rw-r--r--lib/pure/asyncfutures.nim2
-rw-r--r--lib/pure/osproc.nim6
-rw-r--r--lib/pure/unicode.nim5
-rw-r--r--tests/async/nim.cfg1
4 files changed, 11 insertions, 3 deletions
diff --git a/lib/pure/asyncfutures.nim b/lib/pure/asyncfutures.nim
index af3fbb3ec..6906d03fd 100644
--- a/lib/pure/asyncfutures.nim
+++ b/lib/pure/asyncfutures.nim
@@ -93,7 +93,7 @@ proc setCallSoonProc*(p: (proc(cbproc: proc ()) {.gcsafe.})) =
   ## Change current implementation of `callSoon`. This is normally called when dispatcher from `asyncdispatcher` is initialized.
   callSoonProc = p
 
-proc callSoon*(cbproc: proc ()) =
+proc callSoon*(cbproc: proc () {.gcsafe.}) =
   ## Call `cbproc` "soon".
   ##
   ## If async dispatcher is running, `cbproc` will be executed during next dispatcher tick.
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim
index 1ac37661b..6a0ac9a8b 100644
--- a/lib/pure/osproc.nim
+++ b/lib/pure/osproc.nim
@@ -330,12 +330,16 @@ proc countProcessors*(): int {.rtl, extern: "nosp$1".} =
   ## It is implemented just calling `cpuinfo.countProcessors`.
   result = cpuinfo.countProcessors()
 
+when not defined(nimHasEffectsOf):
+  {.pragma: effectsOf.}
+
 proc execProcesses*(cmds: openArray[string],
     options = {poStdErrToStdOut, poParentStreams}, n = countProcessors(),
     beforeRunEvent: proc(idx: int) = nil,
     afterRunEvent: proc(idx: int, p: Process) = nil):
   int {.rtl, extern: "nosp$1",
-        tags: [ExecIOEffect, TimeEffect, ReadEnvEffect, RootEffect].} =
+        tags: [ExecIOEffect, TimeEffect, ReadEnvEffect, RootEffect],
+        effectsOf: [beforeRunEvent, afterRunEvent].} =
   ## Executes the commands `cmds` in parallel.
   ## Creates `n` processes that execute in parallel.
   ##
diff --git a/lib/pure/unicode.nim b/lib/pure/unicode.nim
index dda631633..660be7814 100644
--- a/lib/pure/unicode.nim
+++ b/lib/pure/unicode.nim
@@ -705,8 +705,11 @@ proc capitalize*(s: string): string {.noSideEffect,
   fastRuneAt(s, i, rune, doInc = true)
   result = $toUpper(rune) & substr(s, i)
 
+when not defined(nimHasEffectsOf):
+  {.pragma: effectsOf.}
+
 proc translate*(s: string, replacements: proc(key: string): string): string {.
-  rtl, extern: "nuc$1".} =
+  rtl, extern: "nuc$1", effectsOf: replacements.} =
   ## Translates words in a string using the ``replacements`` proc to substitute
   ## words inside ``s`` with their replacements.
   ##
diff --git a/tests/async/nim.cfg b/tests/async/nim.cfg
new file mode 100644
index 000000000..be50f572c
--- /dev/null
+++ b/tests/async/nim.cfg
@@ -0,0 +1 @@
+--experimental:strictEffects