ensure the Nim compiler works with --experimental:strictFuncs --experimental:views [backport:1.4] (#15737)

This commit is contained in:
Andreas Rumpf
2020-10-26 21:08:57 +01:00
committed by GitHub
parent 3a69f14621
commit cf01945f54
3 changed files with 23 additions and 1 deletions

View File

@@ -545,6 +545,9 @@ proc borrowingCall(c: var Partitions; destType: PType; n: PNode; i: int) =
localError(c.config, n[i].info, "cannot determine the target of the borrow")
proc borrowingAsgn(c: var Partitions; dest, src: PNode) =
proc mutableParameter(n: PNode): bool {.inline.} =
result = n.kind == nkSym and n.sym.kind == skParam and n.sym.typ.kind == tyVar
if dest.kind == nkSym:
if directViewType(dest.typ) != noView:
borrowFrom(c, dest.sym, src)
@@ -559,7 +562,11 @@ proc borrowingAsgn(c: var Partitions; dest, src: PNode) =
if vid >= 0:
c.s[vid].flags.incl viewDoesMutate
of immutableView:
localError(c.config, dest.info, "attempt to mutate a borrowed location from an immutable view")
if dest.kind == nkBracketExpr and dest[0].kind == nkHiddenDeref and
mutableParameter(dest[0][0]):
discard "remains a mutable location anyhow"
else:
localError(c.config, dest.info, "attempt to mutate a borrowed location from an immutable view")
of noView: discard "nothing to do"
proc containsPointer(t: PType): bool =

View File

@@ -0,0 +1,4 @@
discard """
cmd: "nim check --hints:on --experimental:strictFuncs --experimental:views compiler/nim.nim"
action: "compile"
"""

View File

@@ -46,3 +46,14 @@ proc main() =
echo i, ": ", x
main()
# This has to continue to work:
type
PNode = ref object
TSrcGen = object
comStack: seq[PNode]
proc pushCom(g: var TSrcGen, n: PNode) =
setLen(g.comStack, g.comStack.len + 1)
g.comStack[^1] = n