@@ -178,11 +178,7 @@ let set_match_stmt (id : symbol) ((ue, mev, ptn) : _ * _ * form) =
178178 with EcProofTerm. FindOccFailure _ ->
179179 tc_error pe " cannot find an occurrence of the pattern"
180180
181- <<<<<<< HEAD
182- let t_set_match_r (side : oside ) (cpos : EcMatching.Position.codepos ) (id : symbol ) pattern tc =
183- =======
184181let t_set_match_r (side : oside ) (cpos : Position.codepos ) (id : symbol ) pattern tc =
185- >>>>>>> origin/ main
186182 let tr = fun side -> `SetMatch (side, cpos) in
187183 t_code_transform side ~bdhoare: true cpos tr
188184 (t_zip (set_match_stmt id pattern)) tc
@@ -363,7 +359,7 @@ let process_set (side, cpos, fresh, id, e) tc =
363359
364360let process_set_match (side , cpos , id , pattern ) tc =
365361 let cpos = EcProofTyping. tc1_process_codepos tc (side, cpos) in
366- let me, _ = tc1_get_stmt side tc in
362+ let me, _ = tc1_get_stmt_with_memory side tc in
367363 let hyps = LDecl. push_active me (FApi. tc1_hyps tc) in
368364 let ue = EcProofTyping. unienv_of_hyps hyps in
369365 let ptnmap = ref Mid. empty in
@@ -472,115 +468,9 @@ let process_case ((side, pos) : side option * pcodepos) (tc : tcenv1) =
472468 if not (EcLowPhlGoal. is_program_logic concl kinds) then
473469 assert false ;
474470
475- let _, s = EcLowPhlGoal. tc1_get_stmt side tc in
471+ let s = EcLowPhlGoal. tc1_get_stmt side tc in
476472 let pos = EcProofTyping. tc1_process_codepos tc (side, pos) in
477473 let goals, s = EcMatching.Zipper. map env pos change s in
478474 let concl = EcLowPhlGoal. hl_set_stmt side concl s in
479475
480476 FApi. xmutate1 tc `ProcCase (goals @ [concl])
481-
482- (* -------------------------------------------------------------------- *)
483- (* Start of Code Cryogenic Vault: *)
484- (* -------------------------------------------------------------------- *)
485- let subst_array env (me : memenv ) (insts ) : memenv * instr list =
486- let cache : (prog_var, prog_var array * ty) Map.t = Map. empty in
487-
488- let size_of_array (arr_e : expr ) = match arr_e.e_ty.ty_node with
489- | Tconstr (p , _ ) -> begin match (EcPath. toqsymbol p) with
490- | [" Top" ; " Array256" ; _], _ -> Some 256
491- | [" Top" ; " Array32" ; _], _ -> Some 32
492- | _ , "ipoly" -> Some 256
493- | h ,t -> Format. eprintf " Unknown array type %s@." (List. fold_right (fun a b -> a ^ " ." ^ b) h t);
494- assert false
495- end
496- | _ -> None
497- in
498- let is_arr_read (e : expr ) : bool =
499- match e.e_node with
500- | Eop (p , _ ) -> begin
501- match (EcPath. toqsymbol p) with
502- | _ , "_.[_]" -> true
503- | _ -> Format. eprintf " Unknown arr read %a@." (EcPrinting. pp_expr (EcPrinting.PPEnv. ofenv env)) e; false
504- end
505- | _ -> false
506- in
507- let is_arr_write (e : expr ) : bool =
508- match e.e_node with
509- | Eop (p , _ ) -> begin
510- match (EcPath. toqsymbol p) with
511- | _ , "_.[_<-_]" -> true
512- | _ -> Format. eprintf " Unknown arr write %a@." (EcPrinting. pp_expr (EcPrinting.PPEnv. ofenv env)) e; false
513- end
514- | _ -> false
515- in
516-
517- let vars_of_array (arr_e : expr ) : prog_var array option =
518- let name_from_array (arr_e : expr ) : string =
519- match arr_e.e_node with
520- | Evar (PVloc v ) -> v
521- | _ -> assert false
522- in
523- let name = name_from_array arr_e in
524- match size_of_array arr_e with
525- | None -> assert false
526- | Some size -> Some (
527- Array. init size (fun i ->
528- pv_loc @@ name ^ " _" ^ (string_of_int i)))
529- in
530- let array_of_vars (ty :ty ) (vars : prog_var array ) : expr =
531- let vars = Array. map (fun v -> e_var v ty) vars in
532- let vars = Array. map (form_of_expr (fst me)) vars in
533- let arr = Array. fold_left
534- (fun acc v -> EcTypesafeFol. f_app_safe env EcCoreLib.CI_List. p_cons [v; acc])
535- (fop_empty ty)
536- (Array. rev vars)
537- in
538- let () = Format. eprintf " type of list :%a @." (EcPrinting. pp_type (EcPrinting.PPEnv. ofenv env)) arr.f_ty in
539- let p_of_list, o_of_list = EcEnv.Op. lookup ([" Array" ^ (string_of_int @@ Array. length vars)], " of_list" ) env in
540- let arr = EcTypesafeFol. f_app_safe env p_of_list [Array. get vars 0 ; arr] in
541- let () = Format. eprintf " type of arr :%a @." (EcPrinting. pp_type (EcPrinting.PPEnv. ofenv env)) arr.f_ty in
542- expr_of_form (fst me) arr
543-
544- in
545- let rec subst_expr cache (e : expr ) =
546- match e.e_node with
547- | Eapp (op , [{e_node =Evar arr_v } as arr_e ; {e_node =Eint idx } ]) when is_arr_read op ->
548- begin match Map. find_opt arr_v cache with
549- | Some (vars , ty ) -> (cache, e_var (Array. get vars (BI. to_int idx)) e.e_ty)
550- | None -> let vars = vars_of_array arr_e |> Option. get in
551- (Map. add arr_v (vars, e.e_ty) cache, e_var (Array. get vars (BI. to_int idx)) e.e_ty)
552- end
553- | Eapp (op , args ) -> let cache, args = List. fold_left_map (fun cache e -> subst_expr cache e) cache args in
554- (cache, e_app op args e.e_ty)
555- | _ -> (cache, e)
556- in
557-
558- let subst_instr cache (i : instr ) =
559- match i.i_node with
560- | Sasgn (lv , e ) -> begin match e.e_node with
561- | Eapp (op, [{e_node= Evar arr_v} as arr_e; {e_node = Eint idx}; v])
562- when is_arr_write op -> let cache, v = subst_expr cache v in
563- let cache, var = match Map. find_opt arr_v cache with
564- | Some (vars , ty ) -> (cache, Array. get vars (BI. to_int idx))
565- | None -> let vars = vars_of_array arr_e |> Option. get in
566- (Map. add arr_v (vars, v.e_ty) cache, Array. get vars (BI. to_int idx)) in
567- (cache, i_asgn (LvVar (var, v.e_ty), v))
568- | Eapp _ -> let cache, e = subst_expr cache e in
569- (cache, i_asgn (lv, e))
570- | _ -> (cache, i)
571- end
572- | _ -> (cache, i)
573- in
574- let cache, insts = List. fold_left_map subst_instr cache insts in
575- let arr_defs = Map. to_seq cache
576- |> List. of_seq
577- |> List. map (fun (arr , (vars , ty )) -> i_asgn (LvVar (arr, ty), array_of_vars ty vars))
578- in
579- let me = Map. fold (fun (vars , ty ) me ->
580- let vars = Array. map (fun v -> match v with | PVloc v -> {ov_name = Some v; ov_type= ty} | _ -> assert false ) vars in
581- EcMemory. bindall (Array. to_list vars) me) cache me in
582- (me, insts @ arr_defs)
583-
584- (* -------------------------------------------------------------------- *)
585- (* End of Code Cryogenic Vault: *)
586- (* -------------------------------------------------------------------- *)
0 commit comments