mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-15 23:54:19 +00:00
* closes #18690 * don't allow capturing of view types [backport]
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
import
|
||||
intsets, strutils, options, ast, astalgo, msgs,
|
||||
idents, renderer, types, magicsys, lowerings, tables, modulegraphs, lineinfos,
|
||||
transf, liftdestructors
|
||||
transf, liftdestructors, typeallowed
|
||||
|
||||
discard """
|
||||
The basic approach is that captured vars need to be put on the heap and
|
||||
@@ -191,9 +191,7 @@ proc interestingVar(s: PSym): bool {.inline.} =
|
||||
s.typ.kind notin {tyStatic, tyTypeDesc}
|
||||
|
||||
proc illegalCapture(s: PSym): bool {.inline.} =
|
||||
result = skipTypes(s.typ, abstractInst).kind in
|
||||
{tyVar, tyOpenArray, tyVarargs, tyLent} or
|
||||
s.kind == skResult
|
||||
result = classifyViewType(s.typ) != noView or s.kind == skResult
|
||||
|
||||
proc isInnerProc(s: PSym): bool =
|
||||
if s.kind in {skProc, skFunc, skMethod, skConverter, skIterator} and s.magic == mNone:
|
||||
|
||||
@@ -6,7 +6,8 @@ discard """
|
||||
2
|
||||
3
|
||||
3
|
||||
15'''
|
||||
15
|
||||
(oa: [1, 3, 4])'''
|
||||
targets: "c cpp"
|
||||
"""
|
||||
|
||||
@@ -38,3 +39,13 @@ var y: var int = foo(x)
|
||||
y = 15
|
||||
echo foo(x)
|
||||
# bug #16132
|
||||
|
||||
# bug #18690
|
||||
|
||||
type
|
||||
F = object
|
||||
oa: openarray[int]
|
||||
|
||||
let s1 = @[1,3,4,5,6]
|
||||
var test = F(oa: toOpenArray(s1, 0, 2))
|
||||
echo test
|
||||
|
||||
Reference in New Issue
Block a user