@LeGuim I guess bits would be truncated if you do the unsafe cast.

I created the following macros. It's a bit too verbose though - considering the 
python/c++.
    
    
    macro settattr(attr:static[string]): typed =
        
        newNimNode(nnkAsgn).add(
            newNimNode(nnkDotExpr).add(
              newIdentNode(!"obj"),
              newIdentNode(attr)
            ),
            newNimNode(nnkDotExpr).add(
              newIdentNode(!"data"),
              newIdentNode(attr)
            )
        )
    
    proc fillObj[T](obj:ref T,data:object|tuple) =
        for k,v in data.fieldPairs:
            settattr(k)
    
    proc createRef(T:typedesc, data:tuple|object): auto =
        result = new(T)
        fillObj(result,data)
    
    proc createRef(data:object): auto =
        result = new(type(data)
        fillObj(result, data)
    

Reply via email to