mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-25 12:25:08 +00:00
tests/gc/gcleak4.nim
This commit is contained in:
@@ -558,10 +558,10 @@ The template body does not open a new scope. To open a new scope use a ``block``
|
||||
statement:
|
||||
|
||||
.. code-block:: nimrod
|
||||
template declareInScope(x: expr, t: typeDesc): stmt =
|
||||
template declareInScope(x: expr, t: typeDesc): stmt {.immediate.} =
|
||||
var x: t
|
||||
|
||||
template declareInNewScope(x: expr, t: typeDesc): stmt =
|
||||
template declareInNewScope(x: expr, t: typeDesc): stmt {.immediate.} =
|
||||
# open a new scope:
|
||||
block:
|
||||
var x: t
|
||||
@@ -572,6 +572,8 @@ statement:
|
||||
declareInNewScope(b, int)
|
||||
b = 42 # does not work, `b` is unknown
|
||||
|
||||
(The manual explains why the ``immediate`` pragma is needed for these
|
||||
templates.)
|
||||
|
||||
If there is a ``stmt`` parameter it should be the last in the template
|
||||
declaration. The reason is that statements can be passed to a template
|
||||
@@ -580,7 +582,7 @@ via a special ``:`` syntax:
|
||||
.. code-block:: nimrod
|
||||
|
||||
template withFile(f: expr, filename: string, mode: TFileMode,
|
||||
body: stmt): stmt =
|
||||
body: stmt): stmt {.immediate.} =
|
||||
block:
|
||||
let fn = filename
|
||||
var f: TFile
|
||||
|
||||
@@ -632,7 +632,12 @@ proc genericHashAux(dest: Pointer, mt: PNimType, shallow: bool,
|
||||
else:
|
||||
result = h
|
||||
var s = cast[ppointer](dest)[]
|
||||
if s != nil: result = genericHashAux(s, mt.base, shallow, result)
|
||||
if s != nil:
|
||||
result = result !& genericHashAux(s, mt.base, shallow, result)
|
||||
# hash the object header:
|
||||
#const headerSize = sizeof(int)*2
|
||||
#result = result !& hash(cast[pointer](cast[int](s) -% headerSize),
|
||||
# headerSize)
|
||||
else:
|
||||
result = h !& hash(dest, mt.size) # hash raw bits
|
||||
|
||||
|
||||
@@ -100,6 +100,8 @@ proc usrToCell(usr: pointer): PCell {.inline.} =
|
||||
result = cast[PCell](cast[TAddress](usr)-%TAddress(sizeof(TCell)))
|
||||
|
||||
proc canbeCycleRoot(c: PCell): bool {.inline.} =
|
||||
if c.typ == nil:
|
||||
echo "ARRGHHHHHHH"
|
||||
result = ntfAcyclic notin c.typ.flags
|
||||
|
||||
proc extGetCellType(c: pointer): PNimType {.compilerproc.} =
|
||||
|
||||
Reference in New Issue
Block a user