OCaml implementation of the Mozilla Public Suffix service
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge commit '6120fde5ec6f6cfeab5199e1f476c609f79fd26d'

+11 -5
+11 -5
gen/gen_psl.ml
··· 34 34 (** A parsed rule *) 35 35 36 36 type trie_node = { 37 + id : int; (* Unique identifier for this node *) 37 38 mutable rule : (rule_type * section) option; 38 39 mutable children : (string * trie_node) list; 39 40 mutable wildcard_child : trie_node option; 40 41 } 41 42 (** Trie node for efficient lookup *) 42 43 43 - let make_node () = { rule = None; children = []; wildcard_child = None } 44 + let node_id_counter = ref 0 45 + 46 + let make_node () = 47 + let id = !node_id_counter in 48 + incr node_id_counter; 49 + { id; rule = None; children = []; wildcard_child = None } 44 50 45 51 (** Parse a single line from the PSL file *) 46 52 let parse_line section line = ··· 220 226 let rec assign_names node = 221 227 let name = Printf.sprintf "n%d" !node_counter in 222 228 incr node_counter; 223 - Hashtbl.add node_names (Obj.magic node : int) name; 229 + Hashtbl.add node_names node.id name; 224 230 List.iter (fun (_, child) -> assign_names child) node.children; 225 231 Option.iter assign_names node.wildcard_child 226 232 in ··· 231 237 let output_buffer = Buffer.create (1024 * 1024) in 232 238 233 239 let rec generate_node node = 234 - let node_id = (Obj.magic node : int) in 240 + let node_id = node.id in 235 241 if Hashtbl.mem generated node_id then Hashtbl.find node_names node_id 236 242 else begin 237 243 (* First generate all children *) ··· 268 274 Buffer.add_string output_buffer " children = [\n"; 269 275 List.iter 270 276 (fun (label, child) -> 271 - let child_name = Hashtbl.find node_names (Obj.magic child : int) in 277 + let child_name = Hashtbl.find node_names child.id in 272 278 Buffer.add_string output_buffer 273 279 (Printf.sprintf " (\"%s\", %s);\n" (escape_string label) 274 280 child_name)) ··· 280 286 (match node.wildcard_child with 281 287 | None -> Buffer.add_string output_buffer " wildcard_child = None;\n" 282 288 | Some child -> 283 - let child_name = Hashtbl.find node_names (Obj.magic child : int) in 289 + let child_name = Hashtbl.find node_names child.id in 284 290 Buffer.add_string output_buffer 285 291 (Printf.sprintf " wildcard_child = Some %s;\n" child_name)); 286 292