let rec get_field_type_from_desc id = 
  function
      [] -> raise (Type_Error_local ("field "^id^" not exist"))
    | (_, NormalField f) :: rest ->
        if f.sf_id = id then f.sf_type
        else get_field_type_from_desc id rest
    | (_, BitField f) :: rest ->
        let rec srch = function
            [] -> get_field_type_from_desc id rest
          | (Some s, t, _, _)::_ when s = id -> t
          | _ :: rest -> srch rest
        in
        srch f.s_bf_fields