anchor.diff:      read_list_element_bits(Next, Left - 1, Count - 1, Rest, [Bit|Acc]).
   
   copy_ref(#ref{ kind=null }=Ref) -> {Ref, 0, []};
  -copy_ref(#ref{ kind={Kind, DSize, PSize} }=Ref)
  -  when Kind == struct_ref; Kind == interface_ref ->
  +copy_ref(#ref{ kind=#struct_ref{ dsize=DSize, psize=PSize } }=Ref) ->
       StructData = read_struct_data(0, DSize * 64, Ref),
       StructPtrs = [copy_ref(read_struct_ptr(Idx, Ref))
                     || Idx <- lists:seq(0, PSize - 1)],
  
positive.code: -spec read_struct_data(integer(), integer(), ref(), any()) -> binary() | any().
  read_struct_data(_, _, #ref{ kind=null }, Default) -> Default;
  read_struct_data(Align, Len,
                   #ref{ kind={Kind, DSize, _}}=Ref,
                   Default)
    when Kind == struct_ref; Kind == interface_ref ->
      if Align + Len =< DSize * 64 ->
              <<_:Align/bits, Value:Len/bits, _/bits>>
                  = read(1 + ((Align + Len - 1) div 64), Ref),
  
negative.code: read_struct_ptr(_, #ref{ kind=null }, Default) -> Default;
  read_struct_ptr(Idx, #ref{ segment=SegmentId, pos=Pos,
                             offset=Offset, data=Data,
                             kind=#struct_ref{ dsize=DSize, psize=PSize } },
                  Default) ->
      if Idx >= 0 andalso Idx < PSize ->
              get(SegmentId, Pos + 1 + Offset + DSize + Idx, Data);
         true -> Default
  