forked from nim-lang/Nim
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
73 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
discard """ | ||
cmd: "nim c --threads:on $file" | ||
output: ''' | ||
1 | ||
2 | ||
3 | ||
''' | ||
""" | ||
|
||
assert compileOption("threads"), "this test will not do anything useful without --threads:on" | ||
|
||
import asyncdispatch | ||
|
||
var globalDummy: ref int | ||
proc gcUnsafeProc() = | ||
if not globalDummy.isNil: | ||
echo globalDummy[] | ||
echo "1" | ||
|
||
proc gcSafeAsyncProcWithNoAnnotation() {.async.} = | ||
echo "2" | ||
|
||
proc gcSafeAsyncProcWithAnnotation() {.gcsafe, async.} = | ||
echo "3" | ||
|
||
proc gcUnsafeAsyncProc() {.async.} = | ||
# We should be able to call gcUnsafe | ||
gcUnsafeProc() | ||
|
||
# We should be able to call async implicitly gcsafe | ||
await gcSafeAsyncProcWithNoAnnotation() | ||
|
||
# We should be able to call async explicitly gcsafe | ||
await gcSafeAsyncProcWithAnnotation() | ||
|
||
waitFor gcUnsafeAsyncProc() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
discard """ | ||
cmd: "nim c --threads:on $file" | ||
file: "asyncmacro.nim" | ||
errormsg: "'anotherGCSafeAsyncProcIter' is not GC-safe as it calls 'asyncGCUnsafeProc'" | ||
""" | ||
|
||
assert compileOption("threads"), "this test will not do anything useful without --threads:on" | ||
|
||
import asyncdispatch | ||
|
||
var globalDummy: ref int | ||
proc gcUnsafeProc() = | ||
if not globalDummy.isNil: | ||
echo globalDummy[] | ||
|
||
proc asyncExplicitlyGCSafeProc() {.gcsafe, async.} = | ||
echo "hi" | ||
|
||
proc asyncImplicitlyGCSafeProc() {.async.} = | ||
echo "hi" | ||
|
||
proc asyncGCUnsafeProc() {.async.} = | ||
gcUnsafeProc() | ||
|
||
proc anotherGCSafeAsyncProc() {.async, gcsafe.} = | ||
# We should be able to call other gcsafe procs | ||
await asyncExplicitlyGCSafeProc() | ||
await asyncImplicitlyGCSafeProc() | ||
# But we can't call gcunsafe procs | ||
await asyncGCUnsafeProc() |