mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-12 06:18:51 +00:00
@@ -64,7 +64,7 @@ proc canAlias(arg, ret: PType; marker: var IntSet): bool =
|
||||
else:
|
||||
result = false
|
||||
|
||||
proc isValueOnlyType(t: PType): bool =
|
||||
proc isValueOnlyType(t: PType): bool =
|
||||
# t doesn't contain pointers and references
|
||||
proc wrap(t: PType): bool {.nimcall.} = t.kind in {tyRef, tyPtr, tyVar, tyLent}
|
||||
result = not types.searchTypeFor(t, wrap)
|
||||
@@ -88,7 +88,7 @@ proc checkIsolate*(n: PNode): bool =
|
||||
# XXX: as long as we don't update the analysis while examining arguments
|
||||
# we can do an early check of the return type, otherwise this is a
|
||||
# bug and needs to be moved below
|
||||
if n[0].typ.flags * {tfGcSafe, tfNoSideEffect} == {}:
|
||||
if tfNoSideEffect notin n[0].typ.flags:
|
||||
return false
|
||||
for i in 1..<n.len:
|
||||
if checkIsolate(n[i]):
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
discard """
|
||||
errormsg: "expression cannot be isolated: select(a, b)"
|
||||
line: 34
|
||||
line: 39
|
||||
"""
|
||||
|
||||
import std / isolation
|
||||
|
||||
import json, streams
|
||||
|
||||
proc myParseJson(s: Stream; filename: string): JsonNode =
|
||||
{.cast(noSideEffect).}:
|
||||
result = parseJson(s, filename)
|
||||
|
||||
|
||||
proc f(): seq[int] =
|
||||
@[1, 2, 3]
|
||||
|
||||
@@ -28,7 +33,7 @@ proc main =
|
||||
discard isolate select(Node(x: "a"), nil)
|
||||
discard isolate select(Node(x: "a"), Node(x: "b"))
|
||||
|
||||
discard isolate parseJson(newFileStream("my.json"), "my.json")
|
||||
discard isolate myParseJson(newFileStream("my.json"), "my.json")
|
||||
|
||||
var a, b: Node
|
||||
discard isolate select(a, b)
|
||||
|
||||
Reference in New Issue
Block a user