I am trying to compile my [wNim](https://github.com/khchen/wNim) framework with 
gc:arc.

Here is the old code (simplified):
    
    
    type
      R = ref object of RootObj
        data: int
    
    var globalR {.global.} = R(data: 123)
    
    proc final(r: R) =
      echo "final: ", r.data
    
    proc newR(): R =
      new(result, final)
      result.data = 456
      echo "I need globalR: ", globalR.data
    
    for i in 1..10:
      var r = newR()
    
    
    Run

For now, this way may work: 
    
    
    type
      R = ref O
      O = object of RootObj
        data: int
    
    when defined(gcDestructors):
      proc final(r: R)
      proc `=destroy`(o: var O) =
        final(cast[R](addr o))
    
    var globalR {.global.} = R(data: 123)
    
    proc final(r: R) =
      echo "final: ", r.data
    
    proc newR(): R =
      when defined(gcDestructors):
        result = R()
      else:
        new(result, final)
      
      result.data = 456
      echo "I need globalR: ", globalR.data
    
    for i in 1..10:
      var r = newR()
    
    
    Run

Is there a better way?

Reply via email to