
    	^c6)                         d dl mZ 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d&S )'   )_)getattr)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              #     K   dt          |           }}t          j        |           } ||k     r| |         }|                                rn|dv r	|d |fV  nu|dv s|dk    r| ||dz            dv r|dk    r|dz  }| |         }d }nt          j        }|dz  }|}||k     r>| |         }|d	k    r|dz  }||k    rd
 || ||                   |fV  n-|dz  }||k     >t          j        t          d          |          n|	                                s|t          v st          |          dk    ry|}|dz  }||k     rD| |         }|	                                s|t          v st          |          dk    sn|dz  }||k     D| ||         }|t          v r|d |fV  nd||fV  |dz  }n"t          j        t          d          |          |dz  }||k     dd |fV  d S )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>C   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.   tokenizerD   2   sy     GCw''G
''CL99;; ,	<,dC.    KKDyycAg&.88DyyqCL$+1HCA''CL::1HC66$ffWQsU^&<&<a@@@@q '' &q)?'@'@!DDD  YY[[ 	<ANNc!ffsllA1HC''CL		 qI~~Q#q	 ''
 !C%.ChD!n$$$$ #q))))1HCC"1_#5#5s;;;q_ ''` 4
r0   c                    t          j         t                    }|                    t          |                     \  }}|t	          |           k    r"t          j        t          d          |          t          j        |ddh          S )Ns   invalid tokenr   r   )	r   elementsparserD   r3   r   r7   r   simplifyinfixops)exprptreer=   s       r.   rG   rG   h   sq    hA''ID#
c$iiq!122C888"4'5)9:::r0   c                 p    | r| d         dk    r| d         S t          j        t          d                    )Nr   r   r   s   not a symbol)r   r7   r   r,   s    r.   	getsymbolrM   p   s:     QqTYt

1_--
.
..r0   c                 n    | r | d         dk    s| d         dk    r| d         S t          j        |          )Nr   r   r   r   )r   r7   )r-   errs     r.   	getstringrP   v   s@     adi1Q49#4#4t

3

r0   c                     t          |           }t          ||          }||vr$t          j        t	          d          |z            d||fz  S )Ns   invalid pattern kind: %ss   %s:%s)rM   rP   r   r7   r   )r-   yallkindsrO   kindpats         r.   
getkindpatrV   |   sU    Q<<D
As

C8q!<==DEEEtSk!!r0   c                 z    | r*| d         dk    rt          | d         | d         ||          S t          | |          S )Nr   r   r   r   )rV   rP   )r-   rS   rO   s      r.   
getpatternrX      sD     5QqTZ!A$!h444Qr0   c                 V    | sg S | d         dk    rt          | dd                    S | gS )Nr   r   r   )listr,   s    r.   getlistr[      s7     	twAabbE{{3Jr0   c                     t          |           }t          |          |k     st          |          |k    rt          j        |          |S r*   )r[   r3   r   r7   )r-   minmaxrO   r>   s        r.   getargsr_      s@    

A
1vv||s1vv||s###Hr0   c                    | | S | d         }|dv r| S |dk    r5t          | 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    r5t          | 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   4   K   | ]}t          |          V  d S r*   )_analyze.0rR   s     r.   	<genexpr>z_analyze.<locals>.<genexpr>   s(      ..18A;;......r0   r      invalid operator %r)rM   rd   r   r7   r   tupleProgrammingError)r-   opttatbtss         r.   rd   rd      s   y	
1B	###	Z!A$QqTNNAaD!}	X~~!~~	Yq!MNNOOO	V||QqTNNAw	V||ad^^ad^^B|	X~~1!~6777	..!"".....urz	W}}!A$ad^^AaD"~

 !7"!<
=
==r0   c                    | d| fS | d         }|dv rd| fS |dk    rt          | d                   \  }}|||ffS |dk    r_t          | d                   \  }}t          | d                   \  }}||z   }|r!|r|d	|||fd
d                    |          fffS ||||ffS |dk    rst          d | dd         D              \  }	}
t          |	d          }t          d |	D                       dk    r |d	|f|
z   d
d                    |          fffS ||f|
z   fS |dk    r4t          d | dd         D              \  }	}
t          |	d          |f|
z   fS |dk    rvt	          | d                   }t          | d                   \  }}t          t                              |          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   4   K   | ]}t          |          V  d S r*   _insertstatushintsre   s     r.   rg   z%_insertstatushints.<locals>.<genexpr>   +      <<)!,,<<<<<<r0   c              3   4   K   | ]}t          |          V  d S r*   )bool)rf   hs     r.   rg   z%_insertstatushints.<locals>.<genexpr>   s(      ##1tAww######r0   r   c              3   4   K   | ]}t          |          V  d S r*   ru   re   s     r.   rg   z%_insertstatushints.<locals>.<genexpr>   rw   r0   r   _callstatusFrh   )
rv   joinzipsumrM   r   symbolsgetr   rj   )r-   rk   rz   rl   harm   hbrn   hrhsro   fs               r.   rv   rv      sV    	y1u	
1B	///1u	V||!!A$''12q'z	V||#AaD))B#AaD))B"W 	Q" 	Q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dOO#AaD))B7;;q>>=%88 	I4-"adB)QHHHB!b>!!

 !7"!<
=
==r0   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    r1t          | 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   rb   c              3   8   K   | ]}t          |          V  d S r*   )_mergestatushints)rf   rR   r   s     r.   rg   z$_mergestatushints.<locals>.<genexpr>   s.      AAa$Q11AAAAAAr0   r   Frh   )r   ri   r   rj   )r-   r   rk   rl   rm   rn   ro   s    `     r.   r   r      s^   
 	y	
1B	] 	5$QqT8444adT222Aqt}	///	V||adH--Aw	V||qtX..qtX..B|	AAAA1QRR5AAAAAurz	W}}qte444AaD"~

 !7"!<
=
==r0   c                 f    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   )rd   rv   r   )r-   rl   _hs      r.   analyzer   	  s3     	Aq!!EBQ////r0   c                 >    ||d         dk    rd||d         fS | ||fS )Nr   r   r   r   r+   )rk   rm   rn   s      r.   _optimizeandopsr     s0    	~"Q%6//"be$$B<r0   c                 ^   g g g }}}| D ]`}t          |          \  }}| |d         dv r|                    |           6|                    |           |                    |           a|r?|                    t                     |                    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GIIaLLL
		!
		!	 .
		'(((
		.599,---r6Mr0   c                   
 | 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    r\t          | d                   \  }}t          | d                   \  }}||k    r|t          |||          fS |t          |||          fS |d	k    rt          | dd                    \  
}t	          |          dk    r
d         |d         fS t          d
 t          t          |          
fd          D                       }t          
          |f|z   fS |dk    r3t          d | dd          D              \  
}t          
          |f|z   fS |dk    rft          | d                   }	t          t                              |	          dd          }t          | d                   \  }}||z   || d         |ffS t          j        d|z            )Nr   rr   r   r   ra   r   r   r   r   c              3   &   K   | ]}|d          V  dS )r   Nr+   )rf   its     r.   rg   z_optimize.<locals>.<genexpr>F  s7       
 
BqE
 
 
 
 
 
r0   c                      | d                  S )Nr   r+   )r   r   s    r.   r/   z_optimize.<locals>.<lambda>G  s    BqE r0   )keyr   c              3   4   K   | ]}t          |          V  d S r*   r   re   s     r.   rg   z_optimize.<locals>.<genexpr>K  s(      33y||333333r0   r   _weightrh   )r   r   r   r   r3   ri   sorted	enumerater^   r~   r   rM   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88r2r2222r2r2222	U{{!""&&Br77a<<a5"Q%< 
 
"9R==6J6J6J6JKKK
 
 
 
 
 2ww
""	W}}33QqrrU3334B2ww
""	W}}adOOGKKNNIq111Q4B2vAaD"~%%

 !7"!<
=
==r0   c                 *    t          |           \  }}|S )zsReorder/rewrite evaluatable tree for optimization

    All pseudo operations should be transformed beforehand.
    r   )r-   _wrl   s      r.   optimizer   U  s    
 aLLEBHr0   c                 ,    t          j        | d          S )N)r   r   )r   prettyformat)rK   s    r.   r   r   ^  s    t%;<<<r0   N) i18nr   r   r    r   r   r   WEIGHT_READ_CONTENTSWEIGHT_STATUSWEIGHT_STATUS_THOROUGHrF   r;   r   r9   rD   rG   rM   rP   rV   rX   r[   r_   rd   rv   r   r   r   r   r   r   r   r+   r0   r.   <module>r      s                            D
2
90
..
,,
+
+
-
%//'! & #""
	3 3 3l; ; ;/ / /     " " "      > > >D)> )> )>X> > >D	0 	0 	0     '> '> '>T  = = = = =r0   