more exception paths requiring normalization

git-svn-id: http://caml.inria.fr/svn/ocaml/branches/module-alias@14211 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Jacques Garrigue 2013-10-03 12:51:30 +00:00
parent a9ea0064c4
commit 06d511c857
5 changed files with 12 additions and 8 deletions

View File

@ -386,6 +386,11 @@ let rec transl_path = function
| Papply(p1, p2) ->
fatal_error "Lambda.transl_path"
(* Translation of value identifiers *)
let transl_ident_path env path =
transl_path (Env.normalize_path env path)
(* Compile a sequence of expressions *)
let rec make_sequence fn = function

View File

@ -211,6 +211,7 @@ val free_variables: lambda -> IdentSet.t
val free_methods: lambda -> IdentSet.t
val transl_path: Path.t -> lambda
val transl_ident_path: Env.t -> Path.t -> lambda
val make_sequence: ('a -> lambda) -> 'a list -> lambda
val subst_lambda: lambda Ident.tbl -> lambda -> lambda

View File

@ -2158,7 +2158,8 @@ let combine_constructor arg ex_pat cstr partial ctx def
match ex with
| Cstr_exception (path, _) ->
Lifthenelse(Lprim(Pintcomp Ceq,
[Lprim(Pfield 0, [arg]); transl_path path]),
[Lprim(Pfield 0, [arg]);
transl_ident_path ex_pat.pat_env path]),
act, rem)
| _ -> assert false)
tests default in

View File

@ -38,10 +38,6 @@ let transl_object =
ref (fun id s cl -> assert false :
Ident.t -> string list -> class_expr -> lambda)
(* Translation of value identifiers *)
let transl_ident_path env path =
transl_path (Env.normalize_path env path)
(* Translation of primitives *)
let comparisons_table = create_hashtable 11 [
@ -725,7 +721,8 @@ and transl_exp0 e =
Lprim(Pmakeblock(n, Immutable), ll)
end
| Cstr_exception (path, _) ->
Lprim(Pmakeblock(0, Immutable), transl_path path :: ll)
Lprim(Pmakeblock(0, Immutable),
transl_ident_path e.exp_env path :: ll)
end
| Texp_variant(l, arg) ->
let tag = Btype.hash_variant l in
@ -803,7 +800,8 @@ and transl_exp0 e =
in
event_after e lam
| Texp_new (cl, _, _) ->
Lapply(Lprim(Pfield 0, [transl_path cl]), [lambda_unit], Location.none)
Lapply(Lprim(Pfield 0, [transl_ident_path e.exp_env cl]),
[lambda_unit], Location.none)
| Texp_instvar(path_self, path, _) ->
Lprim(Parrayrefu Paddrarray, [transl_path path_self; transl_path path])
| Texp_setinstvar(path_self, path, _, expr) ->

View File

@ -24,7 +24,6 @@ val transl_let: rec_flag -> value_binding list -> lambda -> lambda
val transl_primitive: Location.t -> Primitive.description -> lambda
val transl_exception:
Path.t option -> constructor_declaration -> lambda
val transl_ident_path: Env.t -> Path.t -> lambda
val check_recursive_lambda: Ident.t list -> lambda -> bool