diff options
-rwxr-xr-x | compiler/ast.nim | 4 | ||||
-rw-r--r-- | tests/run/tclosure3.nim | 21 | ||||
-rwxr-xr-x | todo.txt | 2 |
3 files changed, 23 insertions, 4 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim index 9cd741cf1..9f3a99363 100755 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -245,6 +245,7 @@ type # language; for interfacing with Objective C sfDiscardable # returned value may be discarded implicitely sfDestructor # proc is destructor + sfByCopy # a variable is to be captured by value in a closure TSymFlags* = set[TSymFlag] @@ -264,9 +265,6 @@ const sfShadowed* = sfInnerProc # a variable that was shadowed in some inner scope - - sfByCopy* = sfBorrow - # a variable is to be captured by value in a closure sfHoist* = sfVolatile ## proc return value can be hoisted diff --git a/tests/run/tclosure3.nim b/tests/run/tclosure3.nim new file mode 100644 index 000000000..6dee49aea --- /dev/null +++ b/tests/run/tclosure3.nim @@ -0,0 +1,21 @@ +discard """ + file: "tclosure3.nim" + output: "success" + disabled: true +""" + +proc main = + const n = 30 + for iterations in 0..50_000: + var s: seq[proc(): int {.closure.}] = @[] + for i in 0 .. n-1: + let ii = i + s.add(proc(): int = return ii*ii) + for i in 0 .. n-1: + let val = s[i]() + if val != i*i: echo "bug ", val + + if getOccupiedMem() > 3000_000: quit("still a leak!") + echo "success" + +main() diff --git a/todo.txt b/todo.txt index d6b84d753..1e3bd6bae 100755 --- a/todo.txt +++ b/todo.txt @@ -11,7 +11,7 @@ version 0.9.0 New pragmas: - ``hoist`` pragma for loop hoisting -- test & document ``byCopy`` pragma +- fix & document ``byCopy`` pragma - document destructors - ``borrow`` needs to take type classes into account |