ensure the Nim compiler works with --experimental:strictFuncs --experimental:views [backport:1.4] (#15737)
This commit is contained in:
parent
3a69f14621
commit
cf01945f54
3 changed files with 23 additions and 1 deletions
|
|
@ -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")
|
localError(c.config, n[i].info, "cannot determine the target of the borrow")
|
||||||
|
|
||||||
proc borrowingAsgn(c: var Partitions; dest, src: PNode) =
|
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 dest.kind == nkSym:
|
||||||
if directViewType(dest.typ) != noView:
|
if directViewType(dest.typ) != noView:
|
||||||
borrowFrom(c, dest.sym, src)
|
borrowFrom(c, dest.sym, src)
|
||||||
|
|
@ -559,6 +562,10 @@ proc borrowingAsgn(c: var Partitions; dest, src: PNode) =
|
||||||
if vid >= 0:
|
if vid >= 0:
|
||||||
c.s[vid].flags.incl viewDoesMutate
|
c.s[vid].flags.incl viewDoesMutate
|
||||||
of immutableView:
|
of immutableView:
|
||||||
|
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")
|
localError(c.config, dest.info, "attempt to mutate a borrowed location from an immutable view")
|
||||||
of noView: discard "nothing to do"
|
of noView: discard "nothing to do"
|
||||||
|
|
||||||
|
|
|
||||||
4
tests/views/tcan_compile_nim.nim
Normal file
4
tests/views/tcan_compile_nim.nim
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
discard """
|
||||||
|
cmd: "nim check --hints:on --experimental:strictFuncs --experimental:views compiler/nim.nim"
|
||||||
|
action: "compile"
|
||||||
|
"""
|
||||||
|
|
@ -46,3 +46,14 @@ proc main() =
|
||||||
echo i, ": ", x
|
echo i, ": ", x
|
||||||
|
|
||||||
main()
|
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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue