void duptraverse ( State s , State stmp ) { Arc a ; if ( s . tmp != null ) { return ; /* already done */ } s . tmp = ( stmp == null ) ? newstate ( ) : stmp ; if ( s . tmp == null ) { return ; } for ( a = s . outs ; a != null ; a = a . outchain ) { duptraverse ( a . to , null ) ; assert a . to . tmp != null ; cparc ( a , s . tmp , a . to . tmp ) ; } }
duptraverse - recursive heart of dupnfa