case=<> # lexed <[> len=1 # <\[> case=<> qm=# _lex out <\[> ok 17 - _lex \Q[ # _lex <\Q]> # lexed <\Q> len=2 # state change qm=case=<> # lexed <]> len=1 # <\]> case=<> qm=# _lex out <\]> ok 18 - _lex \Q] # _lex <\Q(> # lexed <\Q> len=2 # state change qm=case=<> # lexed <(> len=1 # <\(> case=<> qm=# _lex out <\(> ok 19 - _lex \Q( # _lex <\Q)> # lexed <\Q> len=2 # state change qm=case=<> # lexed <)> len=1 # <\)> case=<> qm=# _lex out <\)> ok 20 - _lex \Q) # _lex <\Qa+b*c?> # lexed <\Q> len=2 # state change qm=case=<> # lexed len=1 # case=<> qm=# lexed <+> len=1 # <\+> case=<> qm=# lexed len=1 # case=<> qm=# lexed <*> len=1 # <\*> case=<> qm=# lexedlen=1 # case=<> qm= # lexed > len=1 # <\?> case=<> qm=# _lex out ok 21 - _lex \Qa+b*c? # _lex # lexed len=1 # case=<> qm=<> # lexed <\L> len=2 # state change qm=<> case=# lexed len=1 # case= qm=<> # lexed len=1 # case= qm=<> # lexed <\U> len=2 # state change qm=<> case= # lexed len=1 # case= qm=<> # lexed len=1 # case= qm=<> # lexed <\E> len=2 # state change qm=<> case=<> # lexed len=1 # case=<> qm=<> # lexed <\Q> len=2 # state change qm= case=<> # lexedlen=1 # case=<> qm= # lexed <+> len=1 # <\+> case=<> qm=# _lex out ok 22 - _lex a\LBC\Ude\Ef\Qg+ # _lex # lexed len=1 # case=<> qm=<> # lexed <\uC> len=3 # apply case= to# _lex out ok 23 - _lex a\uC # _lex <\Q\/?> # lexed <\Q> len=2 # state change qm= case=<> # lexed <\/> len=2 # backslashed <\/> # <\/> case=<> qm=# lexed > len=1 # <\?> case=<> qm=# _lex out <\/ \?> ok 24 - _lex \Q\/? # add# _lex
# token
<> clean
# backslash # case L # backslash # Q # token <> clean # token <+> <> clean <\+> # E # token
<> clean ok 25 - add p\L\QA+\EZ # add <^\Qa[b[> # _lex <^\Qa[b[> # token <^> <> clean <^> # backslash # Q # token <> clean # token <[> <> clean <\[> # token <> clean # token <[> <> clean <\[> ok 26 - add ^\Qa[b[ # add <\x45> # _lex <\x45> # backslash # x 45 # cooked # giving ok 27 - _lex(\x45) with debug ok 28 - insert(undef) # add <67abc123def+> # _lex <67abc123def+> # lexed <6> len=1 # <6> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <1> len=1 # recover as , save <1> # case=<> qm=<> # redo <1> # <1> case=<> qm=<> # lexed <2> len=1 # <2> case=<> qm=<> # lexed <3> len=1 # <3> case=<> qm=<> # add remaining case=<> qm=<> # _lex out <6 7 abc 1 2 3 def+> ok 29 - 67abc123def+ with \d lexer ok 30 - 67ab12de+ with \d lexer # add <67\Q1a*\E12jk> # _lex <67\Q1a*\E12jk> # lexed <6> len=1 # <6> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <1> len=1 # recover <\Q> as <\Q>, save <1> # state change qm= case=<> # redo <1> # <1> case=<> qm=# lexed len=1 # case=<> qm=# lexed <*> len=1 # <\*> case=<> qm=# lexed <\E> len=2 # state change qm=<> case=<> # lexed <1> len=1 # <1> case=<> qm=<> # lexed <2> len=1 # <2> case=<> qm=<> # add remainingcase=<> qm=<> # _lex out <6 7 1 a \* 1 2 jk> ok 31 - 67\Q1a*\E12jk with \d lexer # add <67\Q1a*45k+> # _lex <67\Q1a*45k+> # lexed <6> len=1 # <6> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <1> len=1 # recover <\Q> as <\Q>, save <1> # state change qm= case=<> # redo <1> # <1> case=<> qm=# lexed len=1 # case=<> qm=# lexed <*> len=1 # <\*> case=<> qm=# lexed <4> len=1 # <4> case=<> qm=# lexed <5> len=1 # <5> case=<> qm=# lexedlen=1 # case=<> qm= # lexed <+> len=1 # <\+> case=<> qm=# _lex out <6 7 1 a \* 4 5 k \+> ok 32 - 67\Q1a*45k+ with \d lexer # add <7\U6a> # _lex <7\U6a> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <6> len=1 # recover <\U> as <\U>, save <6> # state change qm=<> case= # redo <6> # <6> case= qm=<> # add remaining case= qm=<> # _lex out <7 6 A> ok 33 - 7\U6a with \d lexer # add <8\L9C> # _lex <8\L9C> # lexed <8> len=1 # <8> case=<> qm=<> # lexed <9> len=1 # recover <\L> as <\L>, save <9> # state change qm=<> case=# redo <9> # <9> case= qm=<> # add remaining case= qm=<> # _lex out <8 9 c> ok 34 - 8\L9C with \d lexer # add <57\Q2a+23d+> # _lex <57\Q2a+23d+> # lexed <5> len=1 # <5> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <2> len=1 # recover <\Q> as <\Q>, save <2> # state change qm= case=<> # redo <2> # <2> case=<> qm=# lexed len=1 # case=<> qm=# lexed <+> len=1 # <\+> case=<> qm=# lexed <2> len=1 # <2> case=<> qm=# lexed <3> len=1 # <3> case=<> qm=# lexedlen=1 # case=<> qm= # lexed <+> len=1 # <\+> case=<> qm=# _lex out <5 7 2 a \+ 2 3 d \+> ok 35 - 57\Q2a+23d+ with \d lexer # add <67\Uabc\E123def> # _lex <67\Uabc\E123def> # lexed <6> len=1 # <6> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <1> len=1 # recover <\Uabc\E> as <\Uabc\E>, save <1> # backslashed <\Uabc\E> # <\Uabc\E> case=<> qm=<> # redo <1> # <1> case=<> qm=<> # lexed <2> len=1 # <2> case=<> qm=<> # lexed <3> len=1 # <3> case=<> qm=<> # add remainingcase=<> qm=<> # _lex out <6 7 \Uabc\E 1 2 3 def> ok 36 - 67\Uabc\E123def with \d lexer # add <67\Q(?:a)?\E123def> # _lex <67\Q(?:a)?\E123def> # lexed <6> len=1 # <6> case=<> qm=<> # lexed <7> len=1 # <7> case=<> qm=<> # lexed <1> len=1 # recover <\Q(?:a)?\E> as <\Q(?:a)?\E>, save <1> # backslashed <\Q(?:a)?\E> # <\Q(?:a)?\E> case=<> qm=<> # redo <1> # <1> case=<> qm=<> # lexed <2> len=1 # <2> case=<> qm=<> # lexed <3> len=1 # <3> case=<> qm=<> # add remaining case=<> qm=<> # _lex out <6 7 \Q(?:a)?\E 1 2 3 def> ok 37 - 67\Uabc\E123def with \d lexer # _insert_path [0 \. 2] into [0 \. 0] # at path (<0> \. 0) # at path (0 <\.> 0) # at path (0 \. <0>) # token 2 not present # path=[0 \. {0=>[0] 2=>[2]}] # _insert_path [0 \. 7] into [0 \. {0=>[0] 2=>[2]}] # at path (<0> \. {0 2}) # at path (0 <\.> {0 2}) # at (off=2 len=3) {0=>[0] 2=>[2]} # add path (7:[]) into [0 \. {0=>[0] 2=>[2]}] at off=2 to end=2 # _insert_path [0 \. 0 1] into [0 \. {0=>[0] 2=>[2] 7=>[7]}] # at path (<0> \. {0 7 2}) # at path (0 <\.> {0 7 2}) # at (off=2 len=3) {0=>[0] 2=>[2] 7=>[7]} # descend key=0 [0] # at path (<0>) # at path (0) # added remaining [0 {* 1=>[1]}] # _insert_path [0 \. 0 0 3] into [0 \. {0=>[0 {* 1=>[1]}] 2=>[2] 7=>[7]}] # at path (<0> \. {0 7 2}) # at path (0 <\.> {0 7 2}) # at (off=2 len=3) {0=>[0 {* 1=>[1]}] 2=>[2] 7=>[7]} # descend key=0 [0 {* 1=>[1]}] # at path (<0> { 1}) # at (off=1 len=2) {* 1=>[1]} # add path (0:[3]) into [0 {* 1=>[1]}] at off=1 to end=1 ok 38 - pretty 0.0 0.2 0.7 0.01 0.003 # _insert_path [d a r k n e s s] into [d o g] # at path ( o g) # at path (d g) # token a not present # path=[d {a=>[a r k n e s s] o=>[o g]}] # _insert_path [d o g g e r e l] into [d {a=>[a r k n e s s] o=>[o g]}] # at path ( {a o}) # at (off=1 len=2) {a=>[a r k n e s s] o=>[o g]} # descend key=o [o g] # at path ( g) # at path (o ) # at path (o g) # added remaining [o g {* g=>[g e r e l]}] # _insert_path [d a r k] into [d {a=>[a r k n e s s] o=>[o g {* g=>[g e r e l]}]}] # at path ( {a o}) # at (off=1 len=2) {a=>[a r k n e s s] o=>[o g {* g=>[g e r e l]}]} # descend key=a [a r k n e s s] # at path ( r k n e s s) # at path (a k n e s s) # at path (a r n e s s) # last token to add # convert to node for sentinel # _reduce_path 0 [d {a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]}] # _reduce_node 1 in {a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]} opt=0 # |_scan_node head=[g o] tail={* g=>[g e r e l]} # | check=[l e r e g] # | slide in h=[] t={* l=>[l e r e g]} p=[g o] # | slide potential [l e r e g] over [g o] # | slide path [l e r e g] # | slide out h=[] s={* l=>[l e r e g]} p=[g o] # _reduce_node 3 in {g=>[g e r e l]} opt=1 # | fast fail {* g=>[g e r e l]} # | +failed o # |_scan_node head=[k r a] tail={* n=>[n e s s]} # | check=[s s e n] # | slide in h=[] t={* s=>[s s e n]} p=[k r a] # | slide potential [s s e n] over [k r a] # | slide path [s s e n] # | slide out h=[] s={* s=>[s s e n]} p=[k r a] # _reduce_node 3 in {n=>[n e s s]} opt=1 # | fast fail {* n=>[n e s s]} # | +failed a # |_scan_node counts: reduce=0 fail=2 # |_scan_node done opt=0 reduce={} fail=[[o g {* g=>[g e r e l]}] [a r k {* n=>[n e s s]}]] # | +fail [o g {* g=>[g e r e l]}] # | +fail [a r k {* n=>[n e s s]}] # _reduce_fail 2 fail={a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]} #| head=[] tail={a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]} #| unshift d #| tail nr=2 t0= # _reduce_path 0 out head=[] tail=[d {a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]}] # final head=[] tail=[d {a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]}] # final path=[d {a=>[a r k {* n=>[n e s s]}] o=>[o g {* g=>[g e r e l]}]}] ok 39 # _insert_path [l i t] into [l i m i t] # at path ( i m i t) # at path (l m i t) # at path (l i i t) # token t not present # path=[l i {m=>[m i t] t=>[t]}] # _reduce_path 0 [l i {m=>[m i t] t=>[t]}] # _reduce_node 1 in {m=>[m i t] t=>[t]} opt=0 # |_scan_node push reduce (t:[]) # |_scan_node push reduce (t:[i m]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t] [t i m]]} fail=[] # | do [[t] [t i m]] # _insert_path [t i m] into [t] # at path ( ) # at path (t) # added remaining [t {* i=>[i m]}] # | _do_reduce common=[t] tail={* i=>[i m]} # |_reduce_node 1 common=[t] tail={* i=>[i m]} #| head=[t] tail={* i=>[i m]} #| push i leaves [l] #| push l leaves [] #| tail nr=3 t0=HASH n=2 #| scan k= p=[] #| scan k=i p=[i m] # | slide in h=[t] t={* i=>[i m]} p=[i l] # | slide potential [i m] over [i l] # | slide=tail=i # | slide path [m i] # | slide out h=[t i] s={* m=>[m i]} p=[l] # _reduce_path 0 out head=[t i] tail=[{* m=>[m i]} l] # final head=[t i] tail=[{* m=>[m i]} l] # unrev path in [{* m=>[m i]} l] # unrev node in {m=>[m i]} opt=1 # _unrev path fast [m i]# -> [i m] # unrev node out {* i=>[i m]} # unrev path out [l {* i=>[i m]}] # _unrev path fast [t i]# -> [i t] # final path=[l {* i=>[i m]} i t] ok 40 # _insert_path [s e a h o r s e] into [s e a f o o d] # at path ( e a f o o d) # at path (sa f o o d) # at path (s e f o o d) # at path (s e a o o d) # token h not present # path=[s e a {f=>[f o o d] h=>[h o r s e]}] # _insert_path [s e a] into [s e a {f=>[f o o d] h=>[h o r s e]}] # at path ( e a {h f}) # at path (sa {h f}) # at path (s e {h f}) # last token to add # add sentinel to node # _reduce_path 0 [s e a {* f=>[f o o d] h=>[h o r s e]}] # _reduce_node 1 in {f=>[f o o d] h=>[h o r s e]} opt=1 # |_scan_node push reduce (d:[o o f]) # |_scan_node push reduce (e:[s r o h]) # |_scan_node counts: reduce=2 fail=0 # |_scan_node done opt=1 reduce={d=>[[d o o f]] e=>[[e s r o h]]} fail=[] # | -simple opt=1 unrev [e s r o h] # _unrev path fast [e s r o h]# -> [h o r s e] # | -simple opt=1 unrev [d o o f] # _unrev path fast [d o o f]# -> [f o o d] # _reduce_fail 2 fail={* f=>[f o o d] h=>[h o r s e]} #| head=[] tail={* f=>[f o o d] h=>[h o r s e]} #| unshift a #| unshift e #| unshift s #| tail nr=4 t0= # _reduce_path 0 out head=[] tail=[s e a {* f=>[f o o d] h=>[h o r s e]}] # final head=[] tail=[s e a {* f=>[f o o d] h=>[h o r s e]}] # final path=[s e a {* f=>[f o o d] h=>[h o r s e]}] ok 41 # _insert_path [c a t] into [b i r d] # at path ( i r d) # token c not present # path=[{b=>[b i r d] c=>[c a t]}] # _insert_path [d o g] into [{b=>[b i r d] c=>[c a t]}] # at (off=0 len=1) {b=>[b i r d] c=>[c a t]} # add path (d:[o g]) into [{b=>[b i r d] c=>[c a t]}] at off=0 to end=0 # _insert_path [e l e p h a n t] into [{b=>[b i r d] c=>[c a t] d=>[d o g]}] # at (off=0 len=1) {b=>[b i r d] c=>[c a t] d=>[d o g]} # add path (e:[l e p h a n t]) into [{b=>[b i r d] c=>[c a t] d=>[d o g]}] at off=0 to end=0 # _insert_path [f o x] into [{b=>[b i r d] c=>[c a t] d=>[d o g] e=>[e l e p h a n t]}] # at (off=0 len=1) {b=>[b i r d] c=>[c a t] d=>[d o g] e=>[e l e p h a n t]} # add path (f:[o x]) into [{b=>[b i r d] c=>[c a t] d=>[d o g] e=>[e l e p h a n t]}] at off=0 to end=0 # _reduce_path 0 [{b=>[b i r d] c=>[c a t] d=>[d o g] e=>[e l e p h a n t] f=>[f o x]}] # _reduce_node 1 in {b=>[b i r d] c=>[c a t] d=>[d o g] e=>[e l e p h a n t] f=>[f o x]} opt=0 # |_scan_node push reduce (t:[a c]) # |_scan_node push reduce (g:[o d]) # |_scan_node push reduce (x:[o f]) # |_scan_node push reduce (d:[r i b]) # |_scan_node push reduce (t:[n a h p e l e]) # |_scan_node counts: reduce=4 fail=0 # |_scan_node done opt=0 reduce={d=>[[d r i b]] g=>[[g o d]] t=>[[t a c] [t n a h p e l e]] x=>[[x o f]]} fail=[] # | -simple opt=0 unrev [g o d] # _unrev path fast [g o d]# -> [d o g] # | -simple opt=0 unrev [d r i b] # _unrev path fast [d r i b]# -> [b i r d] # | -simple opt=0 unrev [x o f] # _unrev path fast [x o f]# -> [f o x] # | _do_reduce([[t a c] [t n a h p e l e]]) # | do [[t a c] [t n a h p e l e]] # _insert_path [t n a h p e l e] into [t a c] # at path ( a c) # at path (t c) # token n not present # path=[t {a=>[a c] n=>[n a h p e l e]}] # | _do_reduce common=[t] tail={a=>[a c] n=>[n a h p e l e]} # unrev node in {a=>[a c] n=>[n a h p e l e]} opt=0 # _unrev path fast [n a h p e l e]# -> [e l e p h a n] # _unrev path fast [a c]# -> [c a] # unrev node out {c=>[c a] e=>[e l e p h a n]} # _unrev path fast [t]# -> [t] # | +reduced [{c=>[c a] e=>[e l e p h a n]} t] # _reduce_fail 2 fail={b=>[b i r d] c=>[{c=>[c a] e=>[e l e p h a n]} t] d=>[d o g] f=>[f o x]} #| head=[] tail={b=>[b i r d] c=>[{c=>[c a] e=>[e l e p h a n]} t] d=>[d o g] f=>[f o x]} #| tail nr=1 t0=HASH n=4 # _reduce_path 0 out head=[] tail=[{b=>[b i r d] c=>[{c=>[c a] e=>[e l e p h a n]} t] d=>[d o g] f=>[f o x]}] # final head=[] tail=[{b=>[b i r d] c=>[{c=>[c a] e=>[e l e p h a n]} t] d=>[d o g] f=>[f o x]}] # final path=[{b=>[b i r d] c=>[{c=>[c a] e=>[e l e p h a n]} t] d=>[d o g] f=>[f o x]}] ok 42 # _insert_path [b a t] into [b i t] # at path ( i t) # at path (b t) # token a not present # path=[b {a=>[a t] i=>[i t]}] # _insert_path [s i t] into [b {a=>[a t] i=>[i t]}] # at path ( {a i}) # token s not present # path=[{b=>[b {a=>[a t] i=>[i t]}] s=>[s i t]}] # _insert_path [s a t] into [{b=>[b {a=>[a t] i=>[i t]}] s=>[s i t]}] # at (off=0 len=1) {b=>[b {a=>[a t] i=>[i t]}] s=>[s i t]} # descend key=s [s i t] # at path ( i t) # at path (s t) # token a not present # path=[s {a=>[a t] i=>[i t]}] # _insert_path [f i t] into [{b=>[b {a=>[a t] i=>[i t]}] s=>[s {a=>[a t] i=>[i t]}]}] # at (off=0 len=1) {b=>[b {a=>[a t] i=>[i t]}] s=>[s {a=>[a t] i=>[i t]}]} # add path (f:[i t]) into [{b=>[b {a=>[a t] i=>[i t]}] s=>[s {a=>[a t] i=>[i t]}]}] at off=0 to end=0 # _insert_path [f a t] into [{b=>[b {a=>[a t] i=>[i t]}] f=>[f i t] s=>[s {a=>[a t] i=>[i t]}]}] # at (off=0 len=1) {b=>[b {a=>[a t] i=>[i t]}] f=>[f i t] s=>[s {a=>[a t] i=>[i t]}]} # descend key=f [f i t] # at path (i t) # at path (f t) # token a not present # path=[f {a=>[a t] i=>[i t]}] # _reduce_path 0 [{b=>[b {a=>[a t] i=>[i t]}] f=>[f {a=>[a t] i=>[i t]}] s=>[s {a=>[a t] i=>[i t]}]}] # _reduce_node 1 in {b=>[b {a=>[a t] i=>[i t]}] f=>[f {a=>[a t] i=>[i t]}] s=>[s {a=>[a t] i=>[i t]}]} opt=0 # |_scan_node head=[b] tail={a=>[a t] i=>[i t]} # _reduce_node 3 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 3 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[b] # |_scan_node head=[f] tail={a=>[a t] i=>[i t]} # _reduce_node 3 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 3 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[f] # |_scan_node head=[s] tail={a=>[a t] i=>[i t]} # _reduce_node 3 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 3 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[s] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t {a=>[a] i=>[i]} b] [t {a=>[a] i=>[i]} f] [t {a=>[a] i=>[i]} s]]} fail=[] # | do [[t {a=>[a] i=>[i]} b] [t {a=>[a] i=>[i]} f] [t {a=>[a] i=>[i]} s]] # _insert_path [t {a=>[a] i=>[i]} f] into [t {a=>[a] i=>[i]} b] # at path ( {a i} b) # p0=[t {a=>[a] i=>[i]} b] # insert node({a=>[a] i=>[i]}:[f]) (key=[ai]) at path=[{a=>[a] i=>[i]} b] # identical nodes [{a=>[a] i=>[i]}] # insert at 2 f:[] into [b] # _insert_path [f] into [b] # at path () # token f not present # path=[{b=>[b] f=>[f]}] # got off=2 s=0 path_add=[{b=>[b] f=>[f]}] # got final=[t {a=>[a] i=>[i]} {b=>[b] f=>[f]}] # p1=[t {a=>[a] i=>[i]} {b=>[b] f=>[f]}] # _insert_path [t {a=>[a] i=>[i]} s] into [t {a=>[a] i=>[i]} {b=>[b] f=>[f]}] # at path ( {a i} {b f}) # p0=[t {a=>[a] i=>[i]} {b=>[b] f=>[f]}] # insert node({a=>[a] i=>[i]}:[s]) (key=[ai]) at path=[{a=>[a] i=>[i]} {b=>[b] f=>[f]}] # identical nodes [{a=>[a] i=>[i]}] # insert at 2 s:[] into [{b=>[b] f=>[f]}] # _insert_path [s] into [{b=>[b] f=>[f]}] # at (off=0 len=1) {b=>[b] f=>[f]} # add path (s:[]) into [{b=>[b] f=>[f]}] at off=0 to end=0 # got off=2 s=0 path_add=[{b=>[b] f=>[f] s=>[s]}] # got final=[t {a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # p1=[t {a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # | _do_reduce common=[t] tail=[{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # |_reduce_node 1 common=[t] tail=[{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] #| head=[t] tail=[{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] #| tail nr=2 t0=HASH n=2 #| scan k=a p=[a] #| scan k=i p=[i] # _reduce_path 0 out head=[t] tail=[{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # final head=[t] tail=[{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # unrev path in [{a=>[a] i=>[i]} {b=>[b] f=>[f] s=>[s]}] # unrev node in {b=>[b] f=>[f] s=>[s]} opt=0 # _unrev path fast [b]# -> [b] # _unrev path fast [s]# -> [s] # _unrev path fast [f]# -> [f] # unrev node out {b=>[b] f=>[f] s=>[s]} # unrev node in {a=>[a] i=>[i]} opt=0 # _unrev path fast [a]# -> [a] # _unrev path fast [i]# -> [i] # unrev node out {a=>[a] i=>[i]} # unrev path out [{b=>[b] f=>[f] s=>[s]} {a=>[a] i=>[i]}] # _unrev path fast [t]# -> [t] # final path=[{b=>[b] f=>[f] s=>[s]} {a=>[a] i=>[i]} t] ok 43 # _insert_path [s p l a t] into [s p l i t] # at path ( p l i t) # at path (sl i t) # at path (s p
i t) # at path (s p l t) # token a not present # path=[s p l {a=>[a t] i=>[i t]}] # _insert_path [s l i t] into [s p l {a=>[a t] i=>[i t]}] # at path ( p l {a i}) # at path (sl {a i}) # token l not present # path=[s {l=>[l i t] p=>[p l {a=>[a t] i=>[i t]}]}] # _insert_path [s l a t] into [s {l=>[l i t] p=>[p l {a=>[a t] i=>[i t]}]}] # at path (
{l p}) # at (off=1 len=2) {l=>[l i t] p=>[p l {a=>[a t] i=>[i t]}]} # descend key=l [l i t] # at path (i t) # at path (l t) # token a not present # path=[l {a=>[a t] i=>[i t]}] # _insert_path [f l a t] into [s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}] # at path ( {l p}) # token f not present # path=[{f=>[f l a t] s=>[s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}]}] # _insert_path [f l i t] into [{f=>[f l a t] s=>[s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}]}] # at (off=0 len=1) {f=>[f l a t] s=>[s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}]} # descend key=f [f l a t] # at path (l a t) # at path (f a t) # at path (f l t) # token i not present # path=[f l {a=>[a t] i=>[i t]}] # _reduce_path 0 [{f=>[f l {a=>[a t] i=>[i t]}] s=>[s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}]}] # _reduce_node 1 in {f=>[f l {a=>[a t] i=>[i t]}] s=>[s {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]}]} opt=0 # |_scan_node head=[s] tail={l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]} # _reduce_node 3 in {l=>[l {a=>[a t] i=>[i t]}] p=>[p l {a=>[a t] i=>[i t]}]} opt=0 # |_scan_node head=[l] tail={a=>[a t] i=>[i t]} # _reduce_node 5 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 5 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[l] # |_scan_node head=[l p] tail={a=>[a t] i=>[i t]} # _reduce_node 5 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 5 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[l p] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t {a=>[a] i=>[i]} l] [t {a=>[a] i=>[i]} l p]]} fail=[] # | do [[t {a=>[a] i=>[i]} l] [t {a=>[a] i=>[i]} l p]] # _insert_path [t {a=>[a] i=>[i]} l p] into [t {a=>[a] i=>[i]} l] # at path ( {a i} l) # p0=[t {a=>[a] i=>[i]} l] # insert node({a=>[a] i=>[i]}:[l p]) (key=[ai]) at path=[{a=>[a] i=>[i]} l] # identical nodes [{a=>[a] i=>[i]}] # identical nodes [l] # convert opt {* p=>[p]} # p1=[t {a=>[a] i=>[i]} l {* p=>[p]}] # | _do_reduce common=[t] tail=[{a=>[a] i=>[i]} l {* p=>[p]}] # |_reduce_node 3 common=[t] tail=[{a=>[a] i=>[i]} l {* p=>[p]}] # |_scan_node ++recovered common=[t] tail=[{a=>[a] i=>[i]} l {* p=>[p]}] path=[s] # |_scan_node head=[l f] tail={a=>[a t] i=>[i t]} # _reduce_node 3 in {a=>[a t] i=>[i t]} opt=0 # |_scan_node push reduce (t:[a]) # |_scan_node push reduce (t:[i]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t a] [t i]]} fail=[] # | do [[t a] [t i]] # _insert_path [t i] into [t a] # at path ( a) # at path (t ) # token i not present # path=[t {a=>[a] i=>[i]}] # | _do_reduce common=[t] tail={a=>[a] i=>[i]} # |_reduce_node 3 common=[t] tail={a=>[a] i=>[i]} # |_scan_node ++recovered common=[t] tail={a=>[a] i=>[i]} path=[l f] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t {a=>[a] i=>[i]} l {* p=>[p]} s] [t {a=>[a] i=>[i]} l f]]} fail=[] # | do [[t {a=>[a] i=>[i]} l {* p=>[p]} s] [t {a=>[a] i=>[i]} l f]] # _insert_path [t {a=>[a] i=>[i]} l {* p=>[p]} s] into [t {a=>[a] i=>[i]} l f] # at path ( {a i} l f) # p0=[t {a=>[a] i=>[i]} l f] # insert node({a=>[a] i=>[i]}:[l {* p=>[p]} s]) (key=[ai]) at path=[{a=>[a] i=>[i]} l f] # identical nodes [{a=>[a] i=>[i]}] # identical nodes [l] # insert at 3 HASH(0x18a0fb8):[s] into [f] # _insert_path [{* p=>[p]} s] into [f] # p0=[f] # insert node({* p=>[p]}:[s]) (key=p?) at path=[f] # atom->node {f=>[f] p?=>[{* p=>[p]} s]} # out=[{f=>[f] p?=>[{* p=>[p]} s]}] # p1=[{f=>[f] p?=>[{* p=>[p]} s]}] # got off=3 s=1 path_add=[{f=>[f] p?=>[{* p=>[p]} s]}] # got final=[t {a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # p1=[t {a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # | _do_reduce common=[t] tail=[{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # |_reduce_node 1 common=[t] tail=[{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] #| head=[t] tail=[{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] #| tail nr=3 t0=HASH n=2 #| scan k=a p=[a] #| scan k=i p=[i] # _reduce_path 0 out head=[t] tail=[{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # final head=[t] tail=[{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # unrev path in [{a=>[a] i=>[i]} l {f=>[f] p?=>[{* p=>[p]} s]}] # unrev node in {f=>[f] p?=>[{* p=>[p]} s]} opt=0 # unrev path in [{* p=>[p]} s] # unrev node in {p=>[p]} opt=1 # _unrev path fast [p]# -> [p] # unrev node out {* p=>[p]} # unrev path out [s {* p=>[p]}] # _unrev path fast [f]# -> [f] # unrev node out {f=>[f] s=>[s {* p=>[p]}]} # unrev node in {a=>[a] i=>[i]} opt=0 # _unrev path fast [a]# -> [a] # _unrev path fast [i]# -> [i] # unrev node out {a=>[a] i=>[i]} # unrev path out [{f=>[f] s=>[s {* p=>[p]}]} l {a=>[a] i=>[i]}] # _unrev path fast [t]# -> [t] # final path=[{f=>[f] s=>[s {* p=>[p]}]} l {a=>[a] i=>[i]} t] ok 44 # _insert_path [b c k x] into [b c k t x] # at path ( c k t x) # at path (b k t x) # at path (b c t x) # at path (b c k x) # token x not present # path=[b c k {t=>[t x] x=>[x]}] # _insert_path [b d i x] into [b c k {t=>[t x] x=>[x]}] # at path ( c k {x t}) # at path (b k {x t}) # token d not present # path=[b {c=>[c k {t=>[t x] x=>[x]}] d=>[d i x]}] # _insert_path [b d k t x] into [b {c=>[c k {t=>[t x] x=>[x]}] d=>[d i x]}] # at path ( {c d}) # at (off=1 len=2) {c=>[c k {t=>[t x] x=>[x]}] d=>[d i x]} # descend key=d [d i x] # at path ( i x) # at path (d x) # token k not present # path=[d {i=>[i x] k=>[k t x]}] # _insert_path [b d k x] into [b {c=>[c k {t=>[t x] x=>[x]}] d=>[d {i=>[i x] k=>[k t x]}]}] # at path ( {c d}) # at (off=1 len=2) {c=>[c k {t=>[t x] x=>[x]}] d=>[d {i=>[i x] k=>[k t x]}]} # descend key=d [d {i=>[i x] k=>[k t x]}] # at path ( {k i}) # at (off=1 len=2) {i=>[i x] k=>[k t x]} # descend key=k [k t x] # at path ( t x) # at path (k x) # token x not present # path=[k {t=>[t x] x=>[x]}] # _reduce_path 0 [b {c=>[c k {t=>[t x] x=>[x]}] d=>[d {i=>[i x] k=>[k {t=>[t x] x=>[x]}]}]}] # _reduce_node 1 in {c=>[c k {t=>[t x] x=>[x]}] d=>[d {i=>[i x] k=>[k {t=>[t x] x=>[x]}]}]} opt=0 # |_scan_node head=[d] tail={i=>[i x] k=>[k {t=>[t x] x=>[x]}]} # _reduce_node 3 in {i=>[i x] k=>[k {t=>[t x] x=>[x]}]} opt=0 # |_scan_node push reduce (x:[i]) # |_scan_node head=[k] tail={t=>[t x] x=>[x]} # _reduce_node 5 in {t=>[t x] x=>[x]} opt=0 # |_scan_node push reduce (x:[]) # |_scan_node push reduce (x:[t]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={x=>[[x] [x t]]} fail=[] # | do [[x] [x t]] # _insert_path [x t] into [x] # at path ( ) # at path (x) # added remaining [x {* t=>[t]}] # | _do_reduce common=[x] tail={* t=>[t]} # |_reduce_node 5 common=[x] tail={* t=>[t]} # |_scan_node ++recovered common=[x] tail={* t=>[t]} path=[k] # | slide in h=[x] t={* t=>[t]} p=[k] # | slide potential [t] over [k] # | slide path [t] # | slide out h=[x] s={* t=>[t]} p=[k] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={x=>[[x i] [x {* t=>[t]} k]]} fail=[] # | do [[x i] [x {* t=>[t]} k]] # _insert_path [x {* t=>[t]} k] into [x i] # at path ( i) # p0=[x i] # insert node({* t=>[t]}:[k]) (key=t?) at path=[i] # atom->node {i=>[i] t?=>[{* t=>[t]} k]} # out=[x {i=>[i] t?=>[{* t=>[t]} k]}] # p1=[x {i=>[i] t?=>[{* t=>[t]} k]}] # | _do_reduce common=[x] tail={i=>[i] t?=>[{* t=>[t]} k]} # |_reduce_node 3 common=[x] tail={i=>[i] t?=>[{* t=>[t]} k]} # |_scan_node ++recovered common=[x] tail={i=>[i] t?=>[{* t=>[t]} k]} path=[d] # |_scan_node head=[k c] tail={t=>[t x] x=>[x]} # _reduce_node 3 in {t=>[t x] x=>[x]} opt=0 # |_scan_node push reduce (x:[]) # |_scan_node push reduce (x:[t]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={x=>[[x] [x t]]} fail=[] # | do [[x] [x t]] # _insert_path [x t] into [x] # at path ( ) # at path (x) # added remaining [x {* t=>[t]}] # | _do_reduce common=[x] tail={* t=>[t]} # |_reduce_node 3 common=[x] tail={* t=>[t]} # |_scan_node ++recovered common=[x] tail={* t=>[t]} path=[k c] # | slide in h=[x] t={* t=>[t]} p=[k c] # | slide potential [t] over [k c] # | slide path [t] # | slide out h=[x] s={* t=>[t]} p=[k c] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={x=>[[x {i=>[i] t?=>[{* t=>[t]} k]} d] [x {* t=>[t]} k c]]} fail=[] # | do [[x {i=>[i] t?=>[{* t=>[t]} k]} d] [x {* t=>[t]} k c]] # _insert_path [x {* t=>[t]} k c] into [x {i=>[i] t?=>[{* t=>[t]} k]} d] # at path ( {t? i} d) # p0=[x {i=>[i] t?=>[{* t=>[t]} k]} d] # insert node({* t=>[t]}:[k c]) (key=t?) at path=[{i=>[i] t?=>[{* t=>[t]} k]} d] # +bifurcate new={(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} # p1=[x {(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]}] # | _do_reduce common=[x] tail={(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} # |_reduce_node 1 common=[x] tail={(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} #| head=[x] tail={(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} #| push b leaves [] #| tail nr=2 t0=HASH n=2 #| scan k=t? p=[{* t=>[t]} k c] #| scan k=(?:t?k|i) p=[{i=>[i] t?=>[{* t=>[t]} k]} d] # _reduce_path 0 out head=[x] tail=[{(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} b] # final head=[x] tail=[{(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} b] # unrev path in [{(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} b] # unrev node in {(?:t?k|i)=>[{i=>[i] t?=>[{* t=>[t]} k]} d] t?=>[{* t=>[t]} k c]} opt=0 # unrev path in [{* t=>[t]} k c] # unrev node in {t=>[t]} opt=1 # _unrev path fast [t]# -> [t] # unrev node out {* t=>[t]} # unrev path out [c k {* t=>[t]}] # unrev path in [{i=>[i] t?=>[{* t=>[t]} k]} d] # unrev node in {i=>[i] t?=>[{* t=>[t]} k]} opt=0 # unrev path in [{* t=>[t]} k] # unrev node in {t=>[t]} opt=1 # _unrev path fast [t]# -> [t] # unrev node out {* t=>[t]} # unrev path out [k {* t=>[t]}] # _unrev path fast [i]# -> [i] # unrev node out {i=>[i] k=>[k {* t=>[t]}]} # unrev path out [d {i=>[i] k=>[k {* t=>[t]}]}] # unrev node out {c=>[c k {* t=>[t]}] d=>[d {i=>[i] k=>[k {* t=>[t]}]}]} # unrev path out [b {c=>[c k {* t=>[t]}] d=>[d {i=>[i] k=>[k {* t=>[t]}]}]}] # _unrev path fast [x]# -> [x] # final path=[b {c=>[c k {* t=>[t]}] d=>[d {i=>[i] k=>[k {* t=>[t]}]}]} x] ok 45 - bcktx bckx bdix bdktx bdkx # _insert_path [g r i t] into [g a i t] # at path ( a i t) # at path (g i t) # token r not present # path=[g {a=>[a i t] r=>[r i t]}] # _insert_path [w a i t] into [g {a=>[a i t] r=>[r i t]}] # at path ( {a r}) # token w not present # path=[{g=>[g {a=>[a i t] r=>[r i t]}] w=>[w a i t]}] # _insert_path [w r i t] into [{g=>[g {a=>[a i t] r=>[r i t]}] w=>[w a i t]}] # at (off=0 len=1) {g=>[g {a=>[a i t] r=>[r i t]}] w=>[w a i t]} # descend key=w [w a i t] # at path ( a i t) # at path (w i t) # token r not present # path=[w {a=>[a i t] r=>[r i t]}] # _reduce_path 0 [{g=>[g {a=>[a i t] r=>[r i t]}] w=>[w {a=>[a i t] r=>[r i t]}]}] # _reduce_node 1 in {g=>[g {a=>[a i t] r=>[r i t]}] w=>[w {a=>[a i t] r=>[r i t]}]} opt=0 # |_scan_node head=[g] tail={a=>[a i t] r=>[r i t]} # _reduce_node 3 in {a=>[a i t] r=>[r i t]} opt=0 # |_scan_node push reduce (t:[i a]) # |_scan_node push reduce (t:[i r]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i a] [t i r]]} fail=[] # | do [[t i a] [t i r]] # _insert_path [t i r] into [t i a] # at path ( i a) # at path (t a) # at path (t i ) # token r not present # path=[t i {a=>[a] r=>[r]}] # | _do_reduce common=[t i] tail={a=>[a] r=>[r]} # |_reduce_node 3 common=[t i] tail={a=>[a] r=>[r]} # |_scan_node ++recovered common=[t i] tail={a=>[a] r=>[r]} path=[g] # |_scan_node head=[w] tail={a=>[a i t] r=>[r i t]} # _reduce_node 3 in {a=>[a i t] r=>[r i t]} opt=0 # |_scan_node push reduce (t:[i a]) # |_scan_node push reduce (t:[i r]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i a] [t i r]]} fail=[] # | do [[t i a] [t i r]] # _insert_path [t i r] into [t i a] # at path ( i a) # at path (t a) # at path (t i ) # token r not present # path=[t i {a=>[a] r=>[r]}] # | _do_reduce common=[t i] tail={a=>[a] r=>[r]} # |_reduce_node 3 common=[t i] tail={a=>[a] r=>[r]} # |_scan_node ++recovered common=[t i] tail={a=>[a] r=>[r]} path=[w] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i {a=>[a] r=>[r]} g] [t i {a=>[a] r=>[r]} w]]} fail=[] # | do [[t i {a=>[a] r=>[r]} g] [t i {a=>[a] r=>[r]} w]] # _insert_path [t i {a=>[a] r=>[r]} w] into [t i {a=>[a] r=>[r]} g] # at path ( i {a r} g) # at path (t {a r} g) # p0=[t i {a=>[a] r=>[r]} g] # insert node({a=>[a] r=>[r]}:[w]) (key=[ar]) at path=[{a=>[a] r=>[r]} g] # identical nodes [{a=>[a] r=>[r]}] # insert at 3 w:[] into [g] # _insert_path [w] into [g] # at path ( ) # token w not present # path=[{g=>[g] w=>[w]}] # got off=3 s=0 path_add=[{g=>[g] w=>[w]}] # got final=[t i {a=>[a] r=>[r]} {g=>[g] w=>[w]}] # p1=[t i {a=>[a] r=>[r]} {g=>[g] w=>[w]}] # | _do_reduce common=[t i] tail=[{a=>[a] r=>[r]} {g=>[g] w=>[w]}] # |_reduce_node 1 common=[t i] tail=[{a=>[a] r=>[r]} {g=>[g] w=>[w]}] #| head=[t i] tail=[{a=>[a] r=>[r]} {g=>[g] w=>[w]}] #| tail nr=2 t0=HASH n=2 #| scan k=a p=[a] #| scan k=r p=[r] # _reduce_path 0 out head=[t i] tail=[{a=>[a] r=>[r]} {g=>[g] w=>[w]}] # final head=[t i] tail=[{a=>[a] r=>[r]} {g=>[g] w=>[w]}] # unrev path in [{a=>[a] r=>[r]} {g=>[g] w=>[w]}] # unrev node in {g=>[g] w=>[w]} opt=0 # _unrev path fast [w]# -> [w] # _unrev path fast [g]# -> [g] # unrev node out {g=>[g] w=>[w]} # unrev node in {a=>[a] r=>[r]} opt=0 # _unrev path fast [a]# -> [a] # _unrev path fast [r]# -> [r] # unrev node out {a=>[a] r=>[r]} # unrev path out [{g=>[g] w=>[w]} {a=>[a] r=>[r]}] # _unrev path fast [t i]# -> [i t] # final path=[{g=>[g] w=>[w]} {a=>[a] r=>[r]} i t] ok 46 # _insert_path [g r i t] into [g a i t] # at path ( a i t) # at path (g i t) # token r not present # path=[g {a=>[a i t] r=>[r i t]}] # _insert_path [l i t] into [g {a=>[a i t] r=>[r i t]}] # at path ( {a r}) # token l not present # path=[{g=>[g {a=>[a i t] r=>[r i t]}] l=>[l i t]}] # _insert_path [l i m i t] into [{g=>[g {a=>[a i t] r=>[r i t]}] l=>[l i t]}] # at (off=0 len=1) {g=>[g {a=>[a i t] r=>[r i t]}] l=>[l i t]} # descend key=l [l i t] # at path ( i t) # at path (l t) # at path (l i ) # token m not present # path=[l i {m=>[m i t] t=>[t]}] # _reduce_path 0 [{g=>[g {a=>[a i t] r=>[r i t]}] l=>[l i {m=>[m i t] t=>[t]}]}] # _reduce_node 1 in {g=>[g {a=>[a i t] r=>[r i t]}] l=>[l i {m=>[m i t] t=>[t]}]} opt=0 # |_scan_node head=[g] tail={a=>[a i t] r=>[r i t]} # _reduce_node 3 in {a=>[a i t] r=>[r i t]} opt=0 # |_scan_node push reduce (t:[i a]) # |_scan_node push reduce (t:[i r]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i a] [t i r]]} fail=[] # | do [[t i a] [t i r]] # _insert_path [t i r] into [t i a] # at path ( i a) # at path (t a) # at path (t i ) # token r not present # path=[t i {a=>[a] r=>[r]}] # | _do_reduce common=[t i] tail={a=>[a] r=>[r]} # |_reduce_node 3 common=[t i] tail={a=>[a] r=>[r]} # |_scan_node ++recovered common=[t i] tail={a=>[a] r=>[r]} path=[g] # |_scan_node head=[i l] tail={m=>[m i t] t=>[t]} # _reduce_node 3 in {m=>[m i t] t=>[t]} opt=0 # |_scan_node push reduce (t:[]) # |_scan_node push reduce (t:[i m]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t] [t i m]]} fail=[] # | do [[t] [t i m]] # _insert_path [t i m] into [t] # at path ( ) # at path (t) # added remaining [t {* i=>[i m]}] # | _do_reduce common=[t] tail={* i=>[i m]} # |_reduce_node 3 common=[t] tail={* i=>[i m]} # |_scan_node ++recovered common=[t] tail={* i=>[i m]} path=[i l] # | slide in h=[t] t={* i=>[i m]} p=[i l] # | slide potential [i m] over [i l] # | slide=tail=i # | slide path [m i] # | slide out h=[t i] s={* m=>[m i]} p=[l] # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i {a=>[a] r=>[r]} g] [t i {* m=>[m i]} l]]} fail=[] # | do [[t i {a=>[a] r=>[r]} g] [t i {* m=>[m i]} l]] # _insert_path [t i {* m=>[m i]} l] into [t i {a=>[a] r=>[r]} g] # at path ( i {a r} g) # at path (t {a r} g) # p0=[t i {a=>[a] r=>[r]} g] # insert node({* m=>[m i]}:[l]) (key=(?:mi)?) at path=[{a=>[a] r=>[r]} g] # path->node1 at [ar]/(?:mi)? {(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]} # p1=[t i {(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]}] # | _do_reduce common=[t i] tail={(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]} # |_reduce_node 1 common=[t i] tail={(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]} #| head=[t i] tail={(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]} #| tail nr=1 t0=HASH n=2 # _reduce_path 0 out head=[t i] tail=[{(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]}] # final head=[t i] tail=[{(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]}] # unrev path in [{(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]}] # unrev node in {(?:mi)?=>[{* m=>[m i]} l] [ar]=>[{a=>[a] r=>[r]} g]} opt=0 # unrev path in [{* m=>[m i]} l] # unrev node in {m=>[m i]} opt=1 # _unrev path fast [m i]# -> [i m] # unrev node out {* i=>[i m]} # unrev path out [l {* i=>[i m]}] # unrev path in [{a=>[a] r=>[r]} g] # unrev node in {a=>[a] r=>[r]} opt=0 # _unrev path fast [a]# -> [a] # _unrev path fast [r]# -> [r] # unrev node out {a=>[a] r=>[r]} # unrev path out [g {a=>[a] r=>[r]}] # unrev node out {g=>[g {a=>[a] r=>[r]}] l=>[l {* i=>[i m]}]} # unrev path out [{g=>[g {a=>[a] r=>[r]}] l=>[l {* i=>[i m]}]}] # _unrev path fast [t i]# -> [i t] # final path=[{g=>[g {a=>[a] r=>[r]}] l=>[l {* i=>[i m]}]} i t] ok 47 # _insert_path [b r i t] into [b a i t] # at path ( a i t) # at path (b i t) # token r not present # path=[b {a=>[a i t] r=>[r i t]}] # _insert_path [f r i t] into [b {a=>[a i t] r=>[r i t]}] # at path ( {a r}) # token f not present # path=[{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t]}] # _insert_path [g a i t] into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t]}] # at (off=0 len=1) {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t]} # add path (g:[a i t]) into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t]}] at off=0 to end=0 # _insert_path [g r i t] into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g a i t]}] # at (off=0 len=1) {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g a i t]} # descend key=g [g a i t] # at path ( a i t) # at path (g i t) # token r not present # path=[g {a=>[a i t] r=>[r i t]}] # _insert_path [t a i t] into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}]}] # at (off=0 len=1) {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}]} # add path (t:[a i t]) into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}]}] at off=0 to end=0 # _insert_path [w a i t] into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t]}] # at (off=0 len=1) {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t]} # add path (w:[a i t]) into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t]}] at off=0 to end=0 # _insert_path [w r i t] into [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t] w=>[w a i t]}] # at (off=0 len=1) {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t] w=>[w a i t]} # descend key=w [w a i t] # at path ( a i t) # at path (w i t) # token r not present # path=[w {a=>[a i t] r=>[r i t]}] # _reduce_path 0 [{b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t] w=>[w {a=>[a i t] r=>[r i t]}]}] # _reduce_node 1 in {b=>[b {a=>[a i t] r=>[r i t]}] f=>[f r i t] g=>[g {a=>[a i t] r=>[r i t]}] t=>[t a i t] w=>[w {a=>[a i t] r=>[r i t]}]} opt=0 # |_scan_node push reduce (t:[i r f]) # |_scan_node push reduce (t:[i a t]) # |_scan_node head=[b] tail={a=>[a i t] r=>[r i t]} # _reduce_node 3 in {a=>[a i t] r=>[r i t]} opt=0 # |_scan_node push reduce (t:[i a]) # |_scan_node push reduce (t:[i r]) # |_scan_node counts: reduce=1 fail=0 # |_scan_node done opt=0 reduce={t=>[[t i a] [t i r]]} fail=[] # | do [[t i a] [t i r]] # _insert_path [t i r] into [t i a] # at path ( i a) # at path (t a) # at path (t i