Thanks. But I'm still under the impression that `d.s = "abc"` increases the ref 
count of `"abc"`. If I understand correctly `d.s = "abc"` will lead to the 
execution of the following function:
    
    
    proc unsureAsgnRef(dest: PPointer, src: pointer) {.compilerProc.} =
        # unsureAsgnRef updates the reference counters only if dest is not on 
the
        # stack. It is used by the code generator if it cannot decide wether a
        # reference is in the stack or not (this can happen for var parameters).
        if not isOnStack(dest):
          if src != nil: incRef(usrToCell(src))
          # XXX finally use assembler for the stack checking instead!
          # the test for '!= nil' is correct, but I got tired of the segfaults
          # resulting from the crappy stack checking:
          if cast[int](dest[]) >=% PageSize: decRef(usrToCell(dest[]))
        else:
          # can't be an interior pointer if it's a stack location!
          gcAssert(interiorAllocatedPtr(gch.region, dest) == nil,
                   "stack loc AND interior pointer")
        dest[] = src
    
    
    Run

`dest` not on stack and `src` is not nil, so ref is increased?

Reply via email to