From 4706f25bf7e8dccd62f57dfa72c84a542a3ba073 Mon Sep 17 00:00:00 2001 From: Josh Berdine Date: Thu, 8 Sep 2016 06:01:32 -0700 Subject: [PATCH] Normalize struct field types to be shallow Reviewed By: cristianoc Differential Revision: D3791867 fbshipit-source-id: 3f115b1 --- infer/src/IR/Tenv.re | 15 +++++++++++++++ infer/src/IR/Typ.re | 7 +++---- 2 files changed, 18 insertions(+), 4 deletions(-) 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