| [] -> fail (lazy "no more goals to shift")
| loc :: loc_tl ->
new_stack
- (([ loc ], t @+ filter_open g, [],`BranchTag)
+ (([ loc ], t @+ filter_open g @+ k, [],`BranchTag)
:: (loc_tl, t', k', tag) :: s))
| Shift, _ -> fail (lazy "can't shift goals here")
- | Pos i_s, ([ loc ], [], [],`BranchTag) :: (g', t', k', tag) :: s
+ | Pos i_s, ([ loc ], t, [],`BranchTag) :: (g', t', k', tag) :: s
when is_fresh loc ->
let l_js = List.filter (fun (i, _) -> List.mem i i_s) (g' @+ [loc]) in
new_stack
- ((l_js, [], [],`BranchTag)
- :: ([ loc ] @+ g' @- l_js, t', k', tag) :: s)
- | Pos i_s, (g, t, k,`BranchTag) :: (g', t', k', tag) :: s ->
- let l_js = List.filter (fun (i, pos) -> List.mem i i_s) g' in
- new_stack
- ((l_js, [], [],`BranchTag)
- :: (g' @- l_js, t' @+ filter_open g, k', tag) :: s)
-(*
- | Pos i_s, ([ loc ], [], [],`BranchTag) :: (g', t', k', tag) :: s
- when is_fresh loc ->
- let l_js = List.filter (fun (i, _) -> List.mem i i_s) g' in
- new_stack
- ((l_js, [], [],`BranchTag)
- :: ([ loc ] @+ g' @- l_js, t', k', tag) :: s)
- | Pos i_s, (g, t, k,`BranchTag) :: (g', t', k', tag) :: s ->
- let l_js = List.filter (fun (i, _) -> List.mem i i_s) g' in
- new_stack
- ((l_js, [], [],`BranchTag)
- :: (g' @- l_js, t' @+ filter_open g, k', tag) :: s)
-*)
+ ((l_js, t , [],`BranchTag)
+ :: (([ loc ] @+ g') @- l_js, t', k', tag) :: s)
| Pos _, _ -> fail (lazy "can't use relative positioning here")
- | Wildcard, ([ loc ] , t, k, `BranchTag) :: (g', t', k', tag) :: s
+ | Wildcard, ([ loc ] , t, [], `BranchTag) :: (g', t', k', tag) :: s
when is_fresh loc ->
new_stack
- (([loc] @+ g', [], [], `BranchTag)
- :: ([], t' @+ k, k', tag) :: s)
- | Wildcard, (g, t, k, `BranchTag) :: (g', t', k', tag) :: s ->
- new_stack
- ((g', [], [], `BranchTag)
- :: ([], t' @+ filter_open g @+ k, k', tag) :: s)
-(*
- | Wildcard, (g, t, k, `BranchTag) :: (g', t', k', tag) :: s
- when g = [] || is_fresh (List.hd g) ->
- new_stack
- ((g', [], [], `BranchTag)
- :: ([], t' @+ filter_open g @+ k, k', tag) :: s)
-*)
+ (([loc] @+ g', t, [], `BranchTag)
+ :: ([], t', k', tag) :: s)
| Wildcard, _ -> fail (lazy "can't use wildcard here")
| Merge, (g, t, k,`BranchTag) :: (g', t', k', tag) :: s ->
new_stack ((t @+ filter_open g @+ g' @+ k, t', k', tag) :: s)