- | Pt.If (guard, p) ->
- prerr_endline ("guard = " ^ CicNotationPp.pp_term guard) ;
- prerr_endline ("p = " ^ CicNotationPp.pp_term p) ;
- let compiled_guard = compiler [guard, 0]
- and compiled_p = compiler [p, 0] in
- (fun term env ->
- prerr_endline "GUARDIA?" ;
- match compiled_guard term with
- | None -> None
- | Some _ ->
- begin
- match compiled_p term with
- | None -> None
- | Some (env', _) ->
- prerr_endline "guardia ok" ;
- Some (env' @ env)
- end)
+ | Ast.If (p_test, p_true, p_false) ->
+ let compiled_test = compiler [p_test, 0]
+ and compiled_true = compiler [p_true, 0]
+ and compiled_false = compiler [p_false, 0] in
+ (fun term env ctors ->
+ let branch =
+ match compiled_test term with
+ | None -> compiled_false
+ | Some _ -> compiled_true
+ in
+ match branch term with
+ | None -> None
+ | Some (env', ctors', _) -> Some (env' @ env, ctors' @ ctors))
+
+ | Ast.Fail -> (fun _ _ _ -> None)