mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
@@ -639,8 +639,10 @@ proc isAnalysableFieldAccess*(orig: PNode; owner: PSym): bool =
|
||||
of nkHiddenDeref, nkDerefExpr:
|
||||
# We "own" sinkparam[].loc but not ourVar[].location as it is a nasty
|
||||
# pointer indirection.
|
||||
# bug #14159, we cannot reason about sinkParam[].location as it can
|
||||
# still be shared for tyRef.
|
||||
n = n[0]
|
||||
return n.kind == nkSym and n.sym.owner == owner and (isSinkParam(n.sym) or
|
||||
return n.kind == nkSym and n.sym.owner == owner and (
|
||||
n.sym.typ.skipTypes(abstractInst-{tyOwned}).kind in {tyOwned})
|
||||
else:
|
||||
break
|
||||
|
||||
@@ -2,6 +2,8 @@ discard """
|
||||
output: '''BEGIN
|
||||
END
|
||||
END 2
|
||||
cpu.nes false
|
||||
cpu step nes is nil? - false
|
||||
0'''
|
||||
cmd: '''nim c --gc:orc $file'''
|
||||
"""
|
||||
@@ -59,6 +61,38 @@ proc main =
|
||||
c.run
|
||||
echo "END 2"
|
||||
|
||||
# bug #14159
|
||||
type
|
||||
NES = ref object
|
||||
cpu: CPU
|
||||
apu: APU
|
||||
|
||||
CPU = ref object
|
||||
nes: NES
|
||||
|
||||
APU = object
|
||||
nes: NES
|
||||
cpu: CPU
|
||||
|
||||
proc initAPU(nes: sink NES): APU {.nosinks.} =
|
||||
result.nes = nes
|
||||
result.cpu = nes.cpu
|
||||
|
||||
proc step(cpu: CPU): int =
|
||||
echo "cpu.nes ", cpu.isNil
|
||||
echo "cpu step nes is nil? - ", cpu.nes.isNil()
|
||||
|
||||
proc newNES(): NES =
|
||||
new result
|
||||
result.cpu = CPU(nes: result)
|
||||
result.apu = initAPU(result)
|
||||
|
||||
proc bug14159 =
|
||||
var nesConsole = newNES()
|
||||
discard nesConsole.cpu.step()
|
||||
|
||||
let mem = getOccupiedMem()
|
||||
main()
|
||||
bug14159()
|
||||
GC_fullCollect()
|
||||
echo getOccupiedMem() - mem
|
||||
|
||||
Reference in New Issue
Block a user