Skip to content

Commit

Permalink
polymorphic objects too
Browse files Browse the repository at this point in the history
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/poly_meth2@4239 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
  • Loading branch information
Jacques Garrigue committed Jan 7, 2002
1 parent 30c915c commit 9687712
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
6 changes: 5 additions & 1 deletion typing/ctype.ml
Expand Up @@ -1443,7 +1443,11 @@ and unify_fields env ty1 ty2 = (* Optimization *)
let (fields1, rest1) = flatten_fields ty1
and (fields2, rest2) = flatten_fields ty2 in
let (pairs, miss1, miss2) = associate_fields fields1 fields2 in
let va = newvar () in
let va =
if miss1 = [] then rest2
else if miss2 = [] then rest1
else newvar ()
in
unify env (build_fields (repr ty1).level miss1 va) rest2;
unify env rest1 (build_fields (repr ty2).level miss2 va);
List.iter
Expand Down
5 changes: 4 additions & 1 deletion typing/typetexp.ml
Expand Up @@ -264,9 +264,12 @@ let rec transl_type env policy rowvar styp =
if policy = Univars then new_pre_univar ()
else newvar () }
in newty (Tvariant row)
| Tobject (_, {contents=Some(_, tv::_)}) ->
| Tobject (fi, _) ->
let _, tv = flatten_fields fi in
if policy = Univars then pre_univars := tv :: !pre_univars;
begin match rowvar with None -> ()
| Some rv ->
let _, tv = flatten_fields fi in
try unify_var env tv rv with Unify trace ->
raise(Error(styp.ptyp_loc, Alias_type_mismatch trace))
end;
Expand Down

0 comments on commit 9687712

Please sign in to comment.