diff --git a/infer/src/IR/Tenv.re b/infer/src/IR/Tenv.re index 2a6700f50..f3514c018 100644 --- a/infer/src/IR/Tenv.re +++ b/infer/src/IR/Tenv.re @@ -40,6 +40,21 @@ let mk_struct supers::supers=? annots::annots=? name => { + let normalize_fields fs => + IList.map_changed + ( + fun ((fld, typ, ann) as fta) => + switch typ { + | Typ.Tstruct {name} => (fld, Typ.Tvar name, ann) + | _ => fta + } + ) + fs; + let fields = + switch fields { + | Some fields => Some (normalize_fields fields) + | None => fields + }; let struct_typ = Typ.internal_mk_struct default::?default diff --git a/infer/src/IR/Typ.re b/infer/src/IR/Typ.re index 64fda8651..e9cd44cbe 100644 --- a/infer/src/IR/Typ.re +++ b/infer/src/IR/Typ.re @@ -494,12 +494,11 @@ let internal_mk_struct () }; -let name t => - switch t { +let name = + fun | Tvar name | Tstruct {name} => Some name - | _ => None - }; + | _ => None; let unsome s => fun