diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1996-05-03 16:05:40 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1996-05-03 16:05:40 +0000 |
commit | 6cfdc1aaba616d51283e2be44ff428fb67bcf52f (patch) | |
tree | d6ab07a4773806a170a4c31d79fe62edd0b1239e | |
parent | ddc24846d3766307a2681515048b4bf2473677df (diff) |
Bug dans compilation des let rec de valeurs.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@788 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | bytecomp/bytegen.ml | 8 | ||||
-rw-r--r-- | bytecomp/translcore.ml | 16 |
2 files changed, 12 insertions, 12 deletions
diff --git a/bytecomp/bytegen.ml b/bytecomp/bytegen.ml index a3416a1a4..b412be4df 100644 --- a/bytecomp/bytegen.ml +++ b/bytecomp/bytegen.ml @@ -114,7 +114,7 @@ let rec size_of_lambda = function | Llet(str, id, arg, body) -> size_of_lambda body | _ -> - fatal_error "Codegen.size_of_lambda" + fatal_error "Bytegen.size_of_lambda" (**** Compilation of a lambda expression ****) @@ -148,7 +148,7 @@ let rec comp_expr env exp sz cont = Kenvacc(pos) :: cont with Not_found -> Ident.print id; print_newline(); - fatal_error "Codegen.comp_expr: var" + fatal_error "Bytegen.comp_expr: var" end | Lconst cst -> Kconst cst :: cont @@ -316,7 +316,7 @@ let rec comp_expr env exp sz cont = | Parrayrefu kind -> Kgetvectitem | Parraysetu kind -> Ksetvectitem | Pbittest -> Kccall("bitvect_test", 2) - | _ -> fatal_error "Codegen.comp_expr: prim" in + | _ -> fatal_error "Bytegen.comp_expr: prim" in comp_args env args sz (instr :: cont) | Lcatch(body, Lstaticfail) -> comp_expr env body sz cont @@ -395,7 +395,7 @@ let rec comp_expr env exp sz cont = let pos = Ident.find_same id env.ce_stack in comp_expr env expr sz (Kassign(sz - pos) :: cont) with Not_found -> - fatal_error "Codegen.comp_expr: assign" + fatal_error "Bytegen.comp_expr: assign" end diff --git a/bytecomp/translcore.ml b/bytecomp/translcore.ml index ab06c8516..2dc0594fa 100644 --- a/bytecomp/translcore.ml +++ b/bytecomp/translcore.ml @@ -226,16 +226,16 @@ let transl_primitive p = let check_recursive_lambda id lam = let rec check_top = function Lfunction(params, body) as funct -> true - | Lprim(Pmakeblock(tag, mut), args) -> List.for_all check args - | Llet(str, id, arg, body) -> check arg & check_top body + | Lprim(Pmakeblock(tag, mut), args) -> List.for_all check_comp args + | Llet(str, id, arg, body) -> check_comp arg & check_top body | _ -> false - and check = function - Lvar _ -> true + and check_comp = function + Lvar v -> true | Lconst cst -> true - | Lfunction(params, body) -> true - | Llet(_, _, arg, body) -> check arg & check body - | Lprim(Pmakeblock(tag, mut), args) -> List.for_all check args - | lam -> not(IdentSet.mem id (free_variables lam)) + | Lfunction(params, body) as funct -> true + | Lprim(Pmakeblock(tag, mut), args) -> List.for_all check_comp args + | Llet(str, id, arg, body) -> check_comp arg & check_comp body + | _ -> false in check_top lam (* To propagate structured constants *) |