Cleaning dead code
[SXSI/xpathcomp.git] / xPath.ml
index 4d83634..3fbfacf 100644 (file)
--- a/xPath.ml
+++ b/xPath.ml
@@ -230,6 +230,7 @@ type config = { st_root : Ata.state; (* state matching the root element (initial
                mutable entry_points : (Tag.t*Ptset.t) list;
                mutable  contains : string option;
                mutable univ_states : Ata.state list;
+               mutable starstate : Ptset.t option;
              }
 let dummy_conf = { st_root = -1;
                   st_univ = -1;
@@ -242,6 +243,7 @@ let dummy_conf = { st_root = -1;
                   entry_points = [];
                   contains = None;
                   univ_states = [];
+                  starstate = None;
                 }
                   
 
@@ -326,15 +328,18 @@ let rec compile_step  ?(existential=false) conf q_src dir ctx_path nrec step num
   in
   let new_st,new_dst, new_ctx = 
   match axis with
-
     | Child | Descendant ->
+       if (TagSet.is_finite test)
+       then conf.entry_points <- (TagSet.choose test,Ptset.singleton q_src)::conf.entry_points;          
        let left,right =
          if nrec then `LLeft,`RRight
          else `Left,`Right
        in
-           
+       let _ = if is_last && axis=Descendant && TagSet.equal test TagSet.star
+       then conf.starstate <- Some(Ptset.singleton q_src)
+       in        
        let t1 = ?< q_src><(test, is_last && not(ex))>=>
-         p_f *& ( if false (*is_last*) then Ata.true_ else  (_l left) ** q_dst) in
+         p_f *& ( if is_last then Ata.true_ else  (_l left) ** q_dst) in
        
        let _ = add_trans num conf.tr t1 in
 
@@ -503,6 +508,7 @@ let compile path =
                       entry_points = [];
                       contains = None;
                       univ_states = [];
+                      starstate = None;
                     } 
        in
        let q0 = Ata.mk_state() in
@@ -544,12 +550,13 @@ let compile path =
              let s = Ptset.union anc_st (Ptset.from_list []) 
              in if has_backward then Ptset.add config.st_from_root s else s
            in { Ata.id = Oo.id (object end);
-                Ata.states = if has_backward then Ptset.add config.st_from_root a_st else a_st;
+                Ata.states = Hashtbl.fold (fun q _ acc -> Ptset.add q acc) phi Ptset.empty;
                 Ata.init = Ptset.singleton config.st_root;
                 Ata.final = Ptset.union anc_st config.final_state;
                 Ata.universal = Ptset.add a_dst (Ptset.from_list config.univ_states);
                 Ata.phi = phi;
-                Ata.sigma = Ata.HTagSet.create 17;
+                Ata.sigma = Hashtbl.create 17;
+                Ata.starstate = config.starstate;
               },config.entry_points,!contains