X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=src%2Fruntime.ml;h=8337d2ad538cd51515a7e4df04d0bdabf7cc91f6;hb=a4b9c7188c2169eddaeabe66a5706a4ec1b6872d;hp=c355f5e35edbec206adfd2fa0c76aafe0735b5b3;hpb=4b52da1a20a4fe031930bb96d2ca46bec06dc529;p=SXSI%2Fxpathcomp.git diff --git a/src/runtime.ml b/src/runtime.ml index c355f5e..8337d2a 100644 --- a/src/runtime.ml +++ b/src/runtime.ml @@ -1,4 +1,5 @@ INCLUDE "debug.ml" +INCLUDE "trace.ml" INCLUDE "utils.ml" open Format @@ -24,6 +25,7 @@ module Make (U : ResJIT.S) : S with type result_set = U.NS.t = | Formula.Atom (`Right, b, q) -> Formula.of_bool(b == (StateSet.mem q s2)), if b && StateSet.mem q auto.topdown_marking_states then [ResJIT.RIGHT q] else [] + | Formula.Atom (`Epsilon, _, _) -> assert false | Formula.Or(f1, f2) -> let b1, i1 = loop f1 in @@ -114,7 +116,7 @@ module Make (U : ResJIT.S) : S with type result_set = U.NS.t = Translist.fold (fun t (a1, a2) -> let _, _, _, f = Transition.node t in let (_, _, fs1), (_, _, fs2) = Formula.st f in - (StateSet.union s1 fs1, StateSet.union s2 fs2) + (StateSet.union a1 fs1, StateSet.union a2 fs2) ) trl (StateSet.empty, StateSet.empty) in let ns1 = StateSet.inter s1 orig_s1 @@ -188,6 +190,12 @@ module Make (U : ResJIT.S) : S with type result_set = U.NS.t = DEFINE LOOP (t, states, ctx) = ( let _t = (t) in + TRACE("top-down-run", 3, + __ "Entering node %i with loop (tag %s, context %i) with states %a\n%!" + (Node.to_int _t) + (Tag.to_string (Tree.tag tree _t)) + (Node.to_int (ctx)) + (StateSet.print) (states)); if _t == Tree.nil then nil_res else let tag = Tree.tag tree _t in @@ -197,6 +205,12 @@ DEFINE LOOP (t, states, ctx) = ( DEFINE LOOP_TAG (t, states, tag, ctx) = ( let _t = (t) in (* to avoid duplicating expression t *) + TRACE("top-down-run", 3, + __ "Entering node %i with loop_tag (tag %s, context %i) with states %a\n%!" + (Node.to_int _t) + (Tag.to_string (tag)) + (Node.to_int (ctx)) + (StateSet.print) (states)); if _t == Tree.nil then nil_res else l2jit_dispatch @@ -247,9 +261,11 @@ DEFINE LOOP_TAG (t, states, tag, ctx) = ( | L2JIT.NOP () -> nil_res | L2JIT.FIRST_CHILD s -> LOOP ((Tree.first_child tree t), s, ctx) | L2JIT.NEXT_SIBLING s -> LOOP ((Tree.next_sibling tree t), s, ctx) +(* | L2JIT.NEXT_SIBLING s -> LOOP ((Tree.next_node_before tree t ctx), s, ctx) *) | L2JIT.FIRST_ELEMENT s -> LOOP ((Tree.first_element tree t), s, ctx) - | L2JIT.NEXT_ELEMENT s -> LOOP ((Tree.next_element tree t), s, ctx) + | L2JIT.NEXT_ELEMENT s -> LOOP ((Tree.next_element tree t), s, ctx) +(* | L2JIT.NEXT_ELEMENT s -> LOOP ((Tree.next_node_before tree t ctx), s, ctx) *) | L2JIT.TAGGED_DESCENDANT (s, tag) -> LOOP_TAG ((Tree.tagged_descendant tree t tag), s, tag, ctx)