anchor.diff:               )
       end.
   
  -get_list(#list_ptr{ count=0 }) -> [];
  -get_list(#list_ptr{ 
  -            offset=Offset, size=composite, 
  -            count=TotalWordCount, segment=Segment }) ->
  +get_offset_list(#list_ptr{ count=0 }) -> [];
  +get_offset_list(#list_ptr{ offset=Offset,
  +                           size=composite, 
  +                           count=TotalWordCount,
  +                           segment=Segment }) ->
       <<_:Offset/binary-unit:64,
         C:32/integer-little,
         _/binary>> = Segment,
       ElementCount = C bsr 2,
       ElementSize = TotalWordCount div ElementCount,
  -    lists:seq(Offset + 1, Offset + TotalWordCount, ElementSize).     
  +    lists:seq(Offset + 1, Offset + TotalWordCount, ElementSize);
  +get_offset_list(#list_ptr{ offset=Offset,
  +                           size=Size,
  +                           count=Count }) ->
  +    [begin
  +         BitOffset = (Idx * Size),
  +         {Offset + BitOffset div 64,
  +          BitOffset rem 64}
  +     end || Idx <- lists:seq(0, Count - 1)].
   
   get_segment_object(Id, #object{ segments=S }) ->
       #object{ segment=lists:nth(Id + 1, S), 
  
positive.code:     Text;
  
  %% Struct field
  get_field(#ptr{ type={struct, Type} }=Ptr, Object) ->
      {ok, T} = get_type(Type, Object),
      case dereference_ptr(Ptr, Object) of
          O when is_record(O, object) ->
              O#object{ type=T }
      end.
  
  
  %% List field helpers
  dereference_ptr(
    #ptr{ offset=PtrOffset },
    #object{ offset=ObjOffset,
  
negative.code:             {FieldName, FieldValue}
      end;
  
  %% Value field
  get_data(#data{ type=Type,
                  offset=DataOffset,
                  bits=Bits },
           #object{ offset=ObjOffset,
                    segment=Segment }) ->
      Offset = ObjOffset + DataOffset,
      get_value(Type, Offset, Bits, Segment).
  
  
  %% List fields
  get_ptr(#ptr{ type={list, Type} }=Ptr, Object) ->
      case dereference_ptr(Ptr, Object) of
          #list_ptr{ size=composite, 
                     segment=S }=L ->
              {ok, T} = get_type(Type, Object),
              [Object#object{ offset=O, type=T, segment=S } || O <- get_offset_list(L)];
          #list_ptr{ segment=S }=L -> 
              [get_value(Type, O, B, S) || {O, B} <- get_offset_list(L)]
      end;
  
  %% Text field
  get_ptr(#ptr{ type=text }=Ptr, Object) ->
      #list_ptr{
         offset=Offset, 
         size=8,
  