From 982571d7fe7a4710a5275573cb7811e8974cd4a5 Mon Sep 17 00:00:00 2001 From: radrow Date: Fri, 19 Apr 2019 16:24:45 +0200 Subject: [PATCH] Fixed letrec and letfun env management --- src/aeso_ast_infer_types.erl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/aeso_ast_infer_types.erl b/src/aeso_ast_infer_types.erl index f8fe59f..86b6f3c 100644 --- a/src/aeso_ast_infer_types.erl +++ b/src/aeso_ast_infer_types.erl @@ -1109,10 +1109,13 @@ infer_block(_Env, Attrs, [], BlockType) -> error({impossible, empty_block, Attrs, BlockType}); infer_block(Env, Attrs, [Def={letfun, _, _, _, _, _}|Rest], BlockType) -> NewDef = infer_letfun(Env, Def), - [NewDef|infer_block(Env, Attrs, Rest, BlockType)]; + {{Name, TypeSig}, _} = NewDef, + NewE = bind_fun(Name, TypeSig, Env), + [NewDef|infer_block(NewE, Attrs, Rest, BlockType)]; infer_block(Env, Attrs, [Def={letrec, _, _}|Rest], BlockType) -> - NewDef = infer_letrec(Env, Def), - [NewDef|infer_block(Env, Attrs, Rest, BlockType)]; + NewDefs = {DefList, _} = infer_letrec(Env, Def), + NewE = bind_funs(DefList, Env), + [NewDefs|infer_block(NewE, Attrs, Rest, BlockType)]; infer_block(Env, _, [{letval, Attrs, Pattern, Type, E}|Rest], BlockType) -> NewE = {typed, _, _, PatType} = infer_expr(Env, {typed, Attrs, E, arg_type(Type)}), {'case', _, NewPattern, {typed, _, {block, _, NewRest}, _}} =