def merge_code(left_code, right_code):
    """
    { relative_line:
      ((left_abs_line, ((offset, op, args), ...)),
       (right_abs_line, ((offset, op, args), ...))),
      ... }
    """
    data = dict()
    code_lines = left_code and left_code.iter_code_by_lines() or tuple()
    for abs_line, rel_line, dis in code_lines:
        assert rel_line is not None
        data[rel_line] = [(abs_line, dis), None]
    code_lines = right_code and right_code.iter_code_by_lines() or tuple()
    for abs_line, rel_line, dis in code_lines:
        assert rel_line is not None
        found = data.get(rel_line, None)
        if found is None:
            found = [None, (abs_line, dis)]
            data[rel_line] = found
        else:
            found[1] = abs_line, dis
    return data
