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?