
    q&f)                         d dl mZ d dlmZmZmZ dZdZdZdZ	ddd	d
d
dddddddddddZ
h dZi ZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zy%)&   )_)errorparserpycompatg      ?   
   2   )   N)   groupr      ))   funcr   r   N)   NN)   kindpatr   N)   N)   negate   )   minusr   N)r   N)   notr   NN)r   NN)   andr   N)   NN)   orr   N)   NN)   listr   N)    NNNN)r      symbolNNN)r      stringNNN)   (   :   -r      !r      &r      |   +   ,r   r   r      end>   r   r   r   s
   .*{}[]?/\_c              #   B  K   dt        |       }}t        j                  |       } ||k  rl| |   }|j                         rnI|dv r	|d |f n<|dv s|dk(  r| ||dz    dv r|dk(  r|dz  }| |   }d }nt        j
                  }|dz  }|}||k  r1| |   }|d	k(  r|dz  }||k(  rd
 || ||       |f n|dz  }||k  r1t        j                  t        d      |      |j                         s|t        v st        |      dkD  re|}|dz  }||k  r7| |   }|j                         s|t        v st        |      dkD  sn|dz  }||k  r7| || }|t        v r|d |f nd||f |dz  }nt        j                  t        d      |      |dz  }||k  rldd |f y w)Nr   s	   (),-:|&+!s   "'   rr   )s   r's   r"r   c                     | S N xs    7/usr/lib/python3/dist-packages/mercurial/filesetlang.py<lambda>ztokenize.<locals>.<lambda>B   s    1        \r   s   unterminated string   r   s   syntax errorr%   )lenr   bytestrisspacer   unescapestrr   
ParseErrorr   isalnum	globcharsordkeywords)programposlcdecodesdsyms           r-   tokenizerC   1   s    GCw'G
'CL99;,dC. KDycAg&.8DyqCL$++1HCA'CL:1HC6$fWQs^&<a@@q ' &&q)?'@!DDYY[ANc!fslA1HC'CL		qI~Q#q	 '
 !C.ChD!n$ #q))1HC""1_#5s;;q_ '` 4
s   B?FBF
AFFc                     t        j                   t              }|j                  t        |             \  }}|t	        |       k7  rt        j                  t        d      |      t        j                  |ddh      S )Ns   invalid tokenr   r   )	r   elementsparserC   r2   r   r6   r   simplifyinfixops)exprptreer<   s       r-   rF   rF   g   sc    hA'ID#
c$iq!12C88""4'5)9::r/   c                 \    | r| d   dk(  r| d   S t        j                  t        d            )Nr   r   r   s   not a symbol)r   r6   r   r+   s    r-   	getsymbolrL   o   s/    QqTYt


1_-
..r/   c                 Z    | r| d   dk(  s| d   dk(  r| d   S t        j                  |      )Nr   r   r   r   )r   r6   )r,   errs     r-   	getstringrO   u   s5    adi1Q49#4t


3
r/   c                     t        |       }t        ||      }||vr!t        j                  t	        d      |z        d||fz  S )Ns   invalid pattern kind: %ss   %s:%s)rL   rO   r   r6   r   )r,   yallkindsrN   kindpats         r-   
getkindpatrU   {   sJ    Q<D
As
C8q!<=DEEtSk!!r/   c                 V    | r| d   dk(  rt        | d   | d   ||      S t        | |      S )Nr   r   r   r   )rU   rO   )r,   rR   rN   s      r-   
getpatternrW      s6    QqTZ!A$!h44Qr/   c                 <    | sg S | d   dk(  rt        | dd        S | gS )Nr   r   r   )listr+   s    r-   getlistrZ      s,    	twAabE{3Jr/   c                 ~    t        |       }t        |      |k  st        |      |kD  rt        j                  |      |S r)   )rZ   r2   r   r6   )r,   minmaxrN   r=   s        r-   getargsr^      s6    
A
1v|s1v|s##Hr/   c                 N   | | S | d   }|dv r| S |dk(  r$t        | d          t        | d         }|| d   |fS |dk(  rt        | d         S |dk(  rt        j                  t	        d            |d	k(  rt        | d         }||fS |d
k(  r!t        | d         }t        | d         }|||fS |dk(  rt        d
| d   d	| d   ff      S |dv rt        d | dd  D              }|f|z   S |dk(  r$t        | d          t        | d         }|| d   |fS t        j                  d|z        )Nr      r   r   r   r   r   r   r   s)   can't use negate operator in this contextr   r   r      r   r   c              3   2   K   | ]  }t        |        y wr)   )_analyze.0rQ   s     r-   	<genexpr>z_analyze.<locals>.<genexpr>   s     .18A;.   r      invalid operator %r)rL   rc   r   r6   r   tupleProgrammingError)r,   opttatbtss         r-   rc   rc      sf   y	
1B	##	Z!A$QqTNAaD!}	X~!~	Yq!MNOO	V|QqTNAw	V|ad^ad^B|	X~1!~677	.!"..urz	W}!A$ad^AaD"~

 
 !7"!<
==r/   c                    | d| fS | d   }|dv rd| fS |dk(  rt        | d         \  }}|||ffS |dk(  rMt        | d         \  }}t        | d         \  }}||z   }|r|r|d	|||fd
dj                  |      fffS ||||ffS |dk(  rZt        d | dd D         \  }	}
t        |	d      }t        d |	D              dkD  r|d	|f|
z   d
dj                  |      fffS ||f|
z   fS |dk(  r't        d | dd D         \  }	}
t        |	d      |f|
z   fS |dk(  rYt	        | d         }t        | d         \  }}t        t        j                  |      dd      r|fd	|| d   |fd
|fffS d|| d   |ffS t        j                  d|z        )am  Insert hint nodes where status should be calculated (first path)

    This works in bottom-up way, summing up status names and inserting hint
    nodes at 'and' and 'or' as needed. Thus redundant hint nodes may be left.

    Returns (status-names, new-tree) at the given subtree, where status-names
    is a sum of status names referenced in the given subtree.
    Nr*   r      r   r   r   r   r   r   r   
   withstatusr       r   c              3   2   K   | ]  }t        |        y wr)   _insertstatushintsrd   s     r-   rf   z%_insertstatushints.<locals>.<genexpr>        <)!,<rg   c              3   2   K   | ]  }t        |        y wr)   )bool)re   hs     r-   rf   z%_insertstatushints.<locals>.<genexpr>   s     #1tAw#rg   r   c              3   2   K   | ]  }t        |        y wr)   ru   rd   s     r-   rf   z%_insertstatushints.<locals>.<genexpr>   rw   rg   r   _callstatusFrh   )
rv   joinzipsumrL   getattrsymbolsgetr   rj   )r,   rk   rz   rl   harm   hbrn   hrhsro   fs               r-   rv   rv      s    	y1u	
1B	//1u	V|!!A$'12q'z	V|#AaD)B#AaD)B"W"B|i25OPPPBB<	U{<ae<=BR[###a'urzItyy}3MNNNB52:~	W}<ae<=B2r{REBJ&&	W}adO#AaD)B7;;q>=%84-"adB)QHHHB!b>!!

 
 !7"!<
==r/   c                    | | S | d   }|dk(  r)rt        | d         S t        | d   d      }||| d   fS |dv r| S |d	k(  rt        | d         }||fS |d
k(  r#t        | d         }t        | d         }|||fS |dv rt        fd| dd D              }|f|z   S |dk(  rt        | d   d      }|| d   |fS t        j                  d|z        )zsRemove redundant status hint nodes (second path)

    This is the top-down path to eliminate inner hint nodes.
    Nr   rr   r   Tinstatusr   rq   r   r   ra   c              3   6   K   | ]  }t        |        y wr)   )_mergestatushints)re   rQ   r   s     r-   rf   z$_mergestatushints.<locals>.<genexpr>   s     Aa$Q1As   r   Frh   )r   ri   r   rj   )r,   r   rk   rl   rm   rn   ro   s    `     r-   r   r      s   
 	y	
1B	]$QqT844adT2Aqt}	//	V|adH-Aw	V|qtX.qtX.B|	A1QR5AAurz	W}qte4AaD"~

 
 !7"!<
==r/   c                 N    t        |       }t        |      \  }}t        |d      S )zTransform raw parsed tree to evaluatable tree which can be fed to
    optimize() or getmatch()

    All pseudo operations should be mapped to real operations or functions
    defined in methods or symbols table respectively.
    Fr   )rc   rv   r   )r,   rl   _hs      r-   analyzer     s(     	Aq!EBQ//r/   c                 0    ||d   dk(  rd||d   fS | ||fS )Nr   r   r   r   r*   )rk   rm   rn   s      r-   _optimizeandopsr     s.    	~"Q%6/"be$$B<r/   c                 "   g g g }}}| D ]M  }t        |      \  }}||d   dv r|j                  |       ,|j                  |       |j                  |       O |r2|j                  t               |j                  dt        |      z          ||fS )Nr   rq   )s   patterns)	_optimizeappendWEIGHT_CHECK_FILENAMEri   )xswsro   ssr,   wrl   s          r-   _optimizeunionr     s    RBB |1=QqT%GGIIaL
		!
		! 

		'(
		.59,-r6Mr/   c                 v  
 | d| fS | d   }|dk(  rt        | d         \  }}|||| d   ffS |dv rt        | fS |dk(  rt        | d         \  }}||| d   |ffS |dk(  rt        | d         \  }}|||ffS |dk(  rEt        | d         \  }}t        | d         \  }}||k  r|t        |||      fS |t        |||      fS |d	k(  rct        | dd        \  
}t	        |      dk(  r

d   |d   fS t        d
 t        t        |      
fd      D              }t        
      |f|z   fS |dk(  r&t        d | dd  D         \  
}t        
      |f|z   fS |dk(  rLt        | d         }	t        t        j                  |	      dd      }t        | d         \  }}||z   || d   |ffS t        j                   d|z        )Nr   rr   r   r   r`   r   r   r   r   c              3   &   K   | ]	  }|d      yw)r   Nr*   )re   its     r-   rf   z_optimize.<locals>.<genexpr>E  s      
BqE
s   c                     | d      S )Nr   r*   )r   r   s    r-   r.   z_optimize.<locals>.<lambda>F  s    BqE r/   )keyr   c              3   2   K   | ]  }t        |        y wr)   r   rd   s     r-   rf   z_optimize.<locals>.<genexpr>J  s     3y|3rg   r   _weightrh   )r   r   r   r   r2   ri   sorted	enumerater]   r~   r   rL   r   r   r   r   rj   )r,   rk   r   rl   warm   wbrn   ro   r   r   s             @r-   r   r   *  s   y!t	
1B	]112q!A$-	##$a''	Z112qtQ-	V|112q'z	V|1Q4B1Q4B8r2r222r2r222	U{!"&Br7a<a5"Q%< 
"9R=6JK
 
 2w
""	W}3QqrU34B2w
""	W}adOGKKNIq11Q4B2vAaD"~%%

 
 !7"!<
==r/   c                 "    t        |       \  }}|S )zsReorder/rewrite evaluatable tree for optimization

    All pseudo operations should be transformed beforehand.
    r   )r,   _wrl   s      r-   optimizer   T  s    
 aLEBHr/   c                 .    t        j                  | d      S )N)r   r   )r   prettyformat)rJ   s    r-   r   r   ]  s    t%;<<r/   N)i18nr    r   r   r   r   WEIGHT_READ_CONTENTSWEIGHT_STATUSWEIGHT_STATUS_THOROUGHrE   r:   r   r8   rC   rF   rL   rO   rU   rW   rZ   r^   rc   rv   r   r   r   r   r   r   r   r*   r/   r-   <module>r      s          D
2
90
..
,,
+
+
-
%//'!& #
	3l;/ ">D)>X>D	0 '>T=r/   