X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fcontent_pres%2FtermContentPres.ml;h=378708bce764e9e0e8010ff5b64e696f9e52f7eb;hb=01001c883a8151edba81cd03a6f254d24a81c867;hp=0c83dd0bbb602334227444f8b0788811adb76e9f;hpb=e053aaf3085a079c3125ed4666ba648a48fbb2af;p=helm.git diff --git a/helm/software/components/content_pres/termContentPres.ml b/helm/software/components/content_pres/termContentPres.ml index 0c83dd0bb..378708bce 100644 --- a/helm/software/components/content_pres/termContentPres.ml +++ b/helm/software/components/content_pres/termContentPres.ml @@ -281,11 +281,32 @@ let pp_ast0 t k = (* persistent state *) -let level1_patterns21 = Hashtbl.create 211 - +let initial_level1_patterns21 () = Hashtbl.create 211 +let level1_patterns21 = ref (initial_level1_patterns21 ()) let compiled21 = ref None - let pattern21_matrix = ref [] +let counter = ref ~-1 + +let stack = ref [];; + +let push () = + stack := (!counter,!level1_patterns21,!compiled21,!pattern21_matrix)::!stack; + counter := ~-1; + level1_patterns21 := initial_level1_patterns21 (); + compiled21 := None; + pattern21_matrix := [] +;; + +let pop () = + match !stack with + [] -> assert false + | (ocounter,olevel1_patterns21,ocompiled21,opatterns21_matrix)::old -> + stack := old; + counter := ocounter; + level1_patterns21 := olevel1_patterns21; + compiled21 := ocompiled21; + pattern21_matrix := opatterns21_matrix +;; let get_compiled21 () = match !compiled21 with @@ -342,21 +363,16 @@ let instantiate21 idrefs env l1 = and subst_magic pos env = function | Ast.List0 (p, sep_opt) | Ast.List1 (p, sep_opt) -> - prerr_endline "1"; let rec_decls = CicNotationEnv.declarations_of_term p in - prerr_endline "2"; let rec_values = List.map (fun (n, _) -> CicNotationEnv.lookup_list env n) rec_decls in - prerr_endline "3"; let values = CicNotationUtil.ncombine rec_values in - prerr_endline "4"; let sep = match sep_opt with | None -> [] | Some l -> [ Ast.Literal l; break; space ] in - prerr_endline "5"; let rec instantiate_list acc = function | [] -> List.rev acc | value_set :: [] -> @@ -446,7 +462,7 @@ let rec pp_ast1 term = in let l1 = try - Hashtbl.find level1_patterns21 pid + Hashtbl.find !level1_patterns21 pid with Not_found -> assert false in instantiate21 idrefs (ast_env_of_env env) l1) @@ -475,11 +491,6 @@ let fill_pos_info l1_pattern = l1_pattern in aux true l1_pattern *) -let counter = ref ~-1 -let reset () = - counter := ~-1; - Hashtbl.clear level1_patterns21 -;; let fresh_id = fun () -> incr counter; @@ -489,14 +500,14 @@ let add_pretty_printer l2 (CicNotationParser.CL1P (l1,precedence)) = let id = fresh_id () in let l1' = add_level_info precedence (fill_pos_info l1) in let l2' = CicNotationUtil.strip_attributes l2 in - Hashtbl.add level1_patterns21 id l1'; + Hashtbl.add !level1_patterns21 id l1'; pattern21_matrix := (l2', id) :: !pattern21_matrix; load_patterns21 !pattern21_matrix; id let remove_pretty_printer id = (try - Hashtbl.remove level1_patterns21 id; + Hashtbl.remove !level1_patterns21 id; with Not_found -> raise Pretty_printer_not_found); pattern21_matrix := List.filter (fun (_, id') -> id <> id') !pattern21_matrix; load_patterns21 !pattern21_matrix