Les index associes aux methodes doivent etre lies par un let strict et

non un alias...


git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1374 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Jérôme Vouillon 1997-03-12 10:30:19 +00:00
parent 79240af6cc
commit 59398f662a
1 changed files with 11 additions and 13 deletions

View File

@ -44,20 +44,18 @@ let reset_labels () =
let string s = Lconst (Const_base (Const_string s))
let transl_init kind labels expr =
if labels = [] then
let transl_label_init expr =
if !used_methods = [] then
expr
else
let init = Ident.create kind in
Llet(Alias, init, oo_prim kind,
List.fold_right
(fun (lab, id) expr ->
Llet(Alias, id, Lapply(Lvar init, [string lab]), expr))
labels
expr)
let transl_label_init expr =
let new_method = Ident.create "new_method" in
let expr' = transl_init "new_method" !used_methods expr in
let init = Ident.create "new_method" in
let expr' =
Llet(StrictOpt, init, oo_prim "new_method",
List.fold_right
(fun (lab, id) expr ->
Llet(StrictOpt, id, Lapply(Lvar init, [string lab]), expr))
!used_methods
expr)
in
reset_labels ();
expr'