
_rY]                 @   s  d  d l  Z  d d l m Z d d l m Z Gd d   d e  Z Gd d   d e  Z Gd	 d
   d
  Z Gd d   d  Z Gd d   d  Z	 Gd d   d e	  Z
 Gd d   d e	  Z Gd d   d e	  Z Gd d   d e	  Z Gd d   d  Z Gd d   d  Z Gd d   d  Z Gd d   d  Z Gd d    d   Z Gd! d"   d"  Z Gd# d$   d$  Z Gd% d&   d&  Z Gd' d(   d(  Z Gd) d*   d*  Z Gd+ d,   d,  Z Gd- d.   d.  Z Gd/ d0   d0  Z Gd1 d2   d2  Z Gd3 d4   d4  Z Gd5 d6   d6  Z Gd7 d8   d8  Z Gd9 d:   d:  Z Gd; d<   d<  Z  i d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6dG dH 6Z! GdI dJ   dJ  Z" d S)K    N   )MesonException)mlogc                   s"   e  Z d  Z   f d d   Z   S)ParseExceptionc                s;   t    j d | | d d | f  | |  _ | |  _ d  S)Nz%s
%s
%sz%s^ )super__init__linenocolno)selftextliner	   r
   )	__class__ N/mnt/raid6/a/bak/reczko/tools/protein/utils/meson-0.42.1/mesonbuild/mparser.pyr      s    %	zParseException.__init__)__name__
__module____qualname__r   r   r   )r   r   r      s   r   c                   s"   e  Z d  Z   f d d   Z   S)BlockParseExceptionc                s   | | k rF t    j d | | d d | d | | d f f  n9 t    j d | | d d | | | | d d | f  | |  _ | |  _ d  S)Nz%s
%s
%sz%s^%s^r   _r   z0%s
%s
%s
For a block that started at %d,%d
%s
%sz%s^)r   r   r	   r
   )r   r   r   r	   r
   Z
start_lineZstart_linenoZstart_colno)r   r   r   r      s
    :	9	zBlockParseException.__init__)r   r   r   r   r   r   )r   r   r      s   r   c               @   s(   e  Z d  Z d d   Z d d   Z d S)Tokenc             C   sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S)N)tidsubdir
line_startr	   r
   bytespanvalue)r   r   r   r   r	   r
   r   r   r   r   r   r   3   s    						zToken.__init__c             C   s,   t  | t  r |  j | k S|  j | j k S)N)
isinstancestrr   )r   otherr   r   r   __eq__<   s    zToken.__eq__N)r   r   r   r   r   r   r   r   r   r   2   s   	r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)Lexerc              C   sb  | |  _  d d d d d d d d d	 d
 d h |  _ d t j d  f d t j d  f d t j d  f d t j d  f d t j d  f d t j d t j  f d t j d  f d t j d  f d t j d  f d t j d  f d  t j d!  f d" t j d#  f d$ t j d%  f d& t j d'  f d( t j d)  f d* t j d+  f d, t j d-  f d. t j d/  f d0 t j d1  f d2 t j d3  f d4 t j d5  f d6 t j d7  f d8 t j d9  f d: t j d;  f d< t j d=  f d> t j d?  f d@ t j dA  f dB t j dC  f dD t j dE  f dF t j dG  f g |  _ d  S)HNtruefalseifelseelifendifandornotforeach
endforeachignorez[ \t]idz[_a-zA-Z][_0-9a-zA-Z]*numberz\d+eol_contz\\\neolz\nmultiline_stringz'''(.|\n)*?'''commentz#.*lparenz\(rparenz\)lbracketz\[rbracketz\]dblquote"stringz'([^'\\]|(\\.))*'comma,
plusassignz\+=dotz\.plusz\+dash-starz\*percent%fslash/colon:equalz==nequalz!=assign=lez<=lt<gez>=gt>questionmarkz\?)codekeywordsrecompileMtoken_specification)r   rS   r   r   r   r   B   sB    	zLexer.__init__c             C   s    |  j  | |  j  j d |   S)N
)rS   find)r   r   r   r   r   getlineh   s    zLexer.getlinec          	   c   s!  d } d } d } d } d } d } x| t  |  j  k  rd } d  }	 x|  j D]\ }
 } | j |  j |  } | rR | } | } | j   | } d } | } | j   } | } | | f } | j   } |
 d k s |
 d k r Pn|
 d k r | d 7} n|
 d k r| d 8} n|
 d	 k r2| d 7} n|
 d
 k rK| d 8} n|
 d k rxt d |  j |  | |   nU|
 d k r| d d  j	 d d  j	 d j
   d j
    j	 d d  }	 n|
 d k r>d }
 | d d  }	 | j d  } t  |  d k r| t  |  d 7} | j   t  | d  } qn |
 d k rYt |  }	 nt |
 d k sq|
 d k r| d 7} | } | d k s| d k rPqn- |
 d k r| |  j k r| }
 q| }	 n  t |
 | | | | | |	  VPqR qR W| s' t d |  j |  | |   q' q' Wd  S)Nr   r   FTr,   r2   r3   r4   r5   r6   r7   z3Double quotes are not supported. Use single quotes.r9   z\''z \\ z \ z\nrY   r1      r.   r0   r/   r-   lexerr_   )lenrS   rX   matchstartendgroupr   r[   replacestripsplitintrT   r   )r   r   r   r	   locZ	par_countZbracket_countcolZmatchedr   r   ZregmocurlineZcurline_startZ
span_startZspan_endr   Z
match_textlinesr   r   r   lexk   sr    !C 
		z	Lexer.lexN)r   r   r   r   r[   ro   r   r   r   r   r    A   s   &r    c               @   s   e  Z d  Z d d   Z d S)ElementaryNodec             C   s@   | j  |  _  | j |  _ | j |  _ | j |  _ | j |  _ d  S)N)r	   r   r
   r   r   )r   tokenr   r   r   r      s
    zElementaryNode.__init__N)r   r   r   r   r   r   r   r   rp      s   rp   c                   s"   e  Z d  Z   f d d   Z   S)BooleanNodec                s5   t    j |  | |  _ t |  j t  s1 t  d  S)N)r   r   r   r   boolAssertionError)r   rq   r   )r   r   r   r      s    	zBooleanNode.__init__)r   r   r   r   r   r   )r   r   rr      s   rr   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)IdNodec                s,   t    j |  t |  j t  s( t  d  S)N)r   r   r   r   r   rt   )r   rq   )r   r   r   r      s    zIdNode.__init__c             C   s   d |  j  |  j |  j f S)NzId node: '%s' (%d, %d).)r   r	   r
   )r   r   r   r   __str__   s    zIdNode.__str__)r   r   r   r   rv   r   r   )r   r   ru      s   ru   c                   s"   e  Z d  Z   f d d   Z   S)
NumberNodec                s,   t    j |  t |  j t  s( t  d  S)N)r   r   r   r   ri   rt   )r   rq   )r   r   r   r      s    zNumberNode.__init__)r   r   r   r   r   r   )r   r   rw      s   rw   c                   s.   e  Z d  Z   f d d   Z d d   Z   S)
StringNodec                s,   t    j |  t |  j t  s( t  d  S)N)r   r   r   r   r   rt   )r   rq   )r   r   r   r      s    zStringNode.__init__c             C   s   d |  j  |  j |  j f S)NzString node: '%s' (%d, %d).)r   r	   r
   )r   r   r   r   rv      s    zStringNode.__str__)r   r   r   r   rv   r   r   )r   r   rx      s   rx   c               @   s   e  Z d  Z d d   Z d S)	ArrayNodec             C   s1   | j  |  _  | j |  _ | j |  _ | |  _ d  S)N)r   r	   r
   args)r   rz   r   r   r   r      s    zArrayNode.__init__N)r   r   r   r   r   r   r   r   ry      s   ry   c               @   s   e  Z d  Z d d   Z d S)	EmptyNodec             C   s(   d |  _  | |  _ | |  _ d  |  _ d  S)N )r   r	   r
   r   )r   r	   r
   r   r   r   r      s    			zEmptyNode.__init__N)r   r   r   r   r   r   r   r   r{      s   r{   c               @   s   e  Z d  Z d d   Z d S)OrNodec             C   s:   | j  |  _  | j |  _ | j |  _ | |  _ | |  _ d  S)N)r   r	   r
   leftright)r   r~   r   r   r   r   r      s
    	zOrNode.__init__N)r   r   r   r   r   r   r   r   r}      s   r}   c               @   s   e  Z d  Z d d   Z d S)AndNodec             C   s:   | j  |  _  | j |  _ | j |  _ | |  _ | |  _ d  S)N)r   r	   r
   r~   r   )r   r~   r   r   r   r   r      s
    	zAndNode.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d d   Z d S)ComparisonNodec             C   sC   | j  |  _  | j |  _ | j |  _ | |  _ | |  _ | |  _ d  S)N)r	   r
   r   r~   r   ctype)r   r   r~   r   r   r   r   r      s    		zComparisonNode.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d d   Z d S)ArithmeticNodec             C   sC   | j  |  _  | j |  _ | j |  _ | |  _ | |  _ | |  _ d  S)N)r   r	   r
   r~   r   	operation)r   r   r~   r   r   r   r   r      s    		zArithmeticNode.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d d   Z d S)NotNodec             C   s1   | j  |  _  | j |  _ | j |  _ | |  _ d  S)N)r   r	   r
   r   )r   location_noder   r   r   r   r      s    zNotNode.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d d   Z d S)CodeBlockNodec             C   s1   | j  |  _  | j |  _ | j |  _ g  |  _ d  S)N)r   r	   r
   rn   )r   r   r   r   r   r     s    zCodeBlockNode.__init__N)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)	IndexNodec             C   s:   | |  _  | |  _ | j |  _ | j |  _ | j |  _ d  S)N)iobjectindexr   r	   r
   )r   r   r   r   r   r   r     s
    		zIndexNode.__init__N)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)
MethodNodec             C   sR   | |  _  | |  _ | |  _ | |  _ | |  _ t |  j t  sE t  | |  _ d  S)N)	r   r	   r
   source_objectnamer   r   rt   rz   )r   r   r	   r
   r   r   rz   r   r   r   r     s    					zMethodNode.__init__N)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)FunctionNodec             C   sF   | |  _  | |  _ | |  _ | |  _ t | t  s9 t  | |  _ d  S)N)r   r	   r
   	func_namer   r   rt   rz   )r   r   r	   r
   r   rz   r   r   r   r     s    				zFunctionNode.__init__N)r   r   r   r   r   r   r   r   r     s   r   c               @   s   e  Z d  Z d d   Z d S)AssignmentNodec             C   s=   | |  _  | |  _ | |  _ t | t  s0 t  | |  _ d  S)N)r	   r
   var_namer   r   rt   r   )r   r	   r
   r   r   r   r   r   r   '  s
    			zAssignmentNode.__init__N)r   r   r   r   r   r   r   r   r   &  s   r   c               @   s   e  Z d  Z d d   Z d S)PlusAssignmentNodec             C   s=   | |  _  | |  _ | |  _ t | t  s0 t  | |  _ d  S)N)r	   r
   r   r   r   rt   r   )r   r	   r
   r   r   r   r   r   r   /  s
    			zPlusAssignmentNode.__init__N)r   r   r   r   r   r   r   r   r   .  s   r   c               @   s   e  Z d  Z d d   Z d S)ForeachClauseNodec             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r	   r
   varnameitemsblock)r   r	   r
   r   r   r   r   r   r   r   7  s
    				zForeachClauseNode.__init__N)r   r   r   r   r   r   r   r   r   6  s   r   c               @   s   e  Z d  Z d d   Z d S)IfClauseNodec             C   s1   | |  _  | |  _ g  |  _ t | |  |  _ d  S)N)r	   r
   ifsr{   	elseblock)r   r	   r
   r   r   r   r   ?  s    			zIfClauseNode.__init__N)r   r   r   r   r   r   r   r   r   >  s   r   c               @   s   e  Z d  Z d d   Z d S)
UMinusNodec             C   s1   | j  |  _  | j |  _ | j |  _ | |  _ d  S)N)r   r	   r
   r   )r   Zcurrent_locationr   r   r   r   r   F  s    zUMinusNode.__init__N)r   r   r   r   r   r   r   r   r   E  s   r   c               @   s   e  Z d  Z d d   Z d S)IfNodec             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)r	   r
   	conditionr   )r   r	   r
   r   r   r   r   r   r   M  s    			zIfNode.__init__N)r   r   r   r   r   r   r   r   r   L  s   r   c               @   s   e  Z d  Z d d   Z d S)TernaryNodec             C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S)N)r	   r
   r   	trueblock
falseblock)r   r	   r
   r   r   r   r   r   r   r   T  s
    				zTernaryNode.__init__N)r   r   r   r   r   r   r   r   r   S  s   r   c               @   sp   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d S)ArgumentNodec             C   sL   | j  |  _  | j |  _ | j |  _ g  |  _ g  |  _ i  |  _ d |  _ d  S)NF)r	   r
   r   	argumentscommaskwargsorder_error)r   rq   r   r   r   r   \  s    			zArgumentNode.__init__c             C   sG   |  j    d k r d |  _ n  t | t  sC | g |  j |  _ n  d  S)Nr   T)
num_kwargsr   r   r{   r   )r   	statementr   r   r   prepende  s    zArgumentNode.prependc             C   sF   |  j    d k r d |  _ n  t | t  sB |  j | g 7_ n  d  S)Nr   T)r   r   r   r{   r   )r   r   r   r   r   appendk  s    zArgumentNode.appendc             C   s4   | |  j  k r# t j d |  n  | |  j  | <d  S)Nz_Keyword argument "%s" defined multiple times. This will be a an error in future Meson releases.)r   r   warning)r   r   r   r   r   r   	set_kwargq  s    zArgumentNode.set_kwargc             C   s   t  |  j  S)N)ra   r   )r   r   r   r   num_argsv  s    zArgumentNode.num_argsc             C   s   t  |  j  S)N)ra   r   )r   r   r   r   r   y  s    zArgumentNode.num_kwargsc             C   s   |  j  S)N)r   )r   r   r   r   incorrect_order|  s    zArgumentNode.incorrect_orderc             C   s
   |  j    S)N)r   )r   r   r   r   __len__  s    zArgumentNode.__len__N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   [  s   	r   z==rH   z!=rI   rN   rM   z<=rL   rQ   rP   z>=rO   c               @   s  e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z d% d&   Z d' d(   Z d) d*   Z d+ d,   Z d- d.   Z d/ d0   Z d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z  d= d>   Z! d? S)@Parserc             C   s\   t  |  |  _ |  j j |  |  _ t d d d d d d d   |  _ |  j   d |  _ d  S)Neofr|   r   F)r   r   )r    r^   ro   streamr   currentgetsym
in_ternary)r   rS   r   r   r   r   r     s
    !
zParser.__init__c             C   s~   y t  |  j  |  _ Wna t k
 ry t d d |  j j |  j j |  j j |  j j d |  j j d d d   |  _ Yn Xd  S)Nr   r|   r   r   )r   r   )	nextr   r   StopIterationr   r   r	   r
   r   )r   r   r   r   r     s    zParser.getsymc             C   s   |  j  j |  j j  S)N)r^   r[   r   r   )r   r   r   r   r[     s    zParser.getlinec             C   s$   |  j  j | k r  |  j   d Sd S)NTF)r   r   r   )r   sr   r   r   accept  s    
zParser.acceptc             C   sN   |  j  |  r d St d | |  j j f |  j   |  j j |  j j   d  S)NTzExpecting %s got %s.)r   r   r   r   r[   r	   r
   )r   r   r   r   r   expect  s    zParser.expectc             C   sl   |  j  |  r d St d | |  j j f |  j   |  j j |  j j |  j j | j  | j | j   d  S)NTzExpecting %s got %s.)	r   r   r   r   r[   r	   r
   r^   r   )r   r   block_startr   r   r   block_expect  s    zParser.block_expectc             C   s   |  j    } |  j d  | S)Nr   )	codeblockr   )r   r   r   r   r   parse  s    zParser.parsec             C   s
   |  j    S)N)e1)r   r   r   r   r     s    zParser.statementc             C   ss  |  j    } |  j d  rv |  j   } t | t  sZ t d |  j   | j | j   n  t	 | j | j | j
 |  S|  j d  r |  j   } t | t  s t d |  j   | j | j   n  t | j | j | j
 |  S|  j d  ro|  j rt d |  j   | j | j   n  d |  _ |  j   } |  j d  |  j   } d	 |  _ t | j | j | | |  S| S)
Nr<   z$Plusassignment target must be an id.rJ   z Assignment target must be an id.rR   z)Nested ternary operators are not allowed.TrF   F)e2r   r   r   ru   r   r[   r	   r
   r   r   r   r   r   r   )r   r~   r   r   r   r   r   r   r     s.    $			z	Parser.e1c             C   sn   |  j    } x[ |  j d  ri t | t  rQ t d |  j   | j | j   n  t | |  j     } q W| S)Nr(   zInvalid or clause.)	e3r   r   r{   r   r[   r	   r
   r}   )r   r~   r   r   r   r     s    z	Parser.e2c             C   sn   |  j    } x[ |  j d  ri t | t  rQ t d |  j   | j | j   n  t | |  j     } q W| S)Nr'   zInvalid and clause.)	e4r   r   r{   r   r[   r	   r
   r   )r   r~   r   r   r   r     s    z	Parser.e3c             C   sR   |  j    } x? t j   D]1 \ } } |  j |  r t | | |  j     Sq W| S)N)e5comparison_mapr   r   r   )r   r~   nodenameZoperator_typer   r   r   r     s
    z	Parser.e4c             C   s
   |  j    S)N)e5add)r   r   r   r   r     s    z	Parser.e5c             C   s5   |  j    } |  j d  r1 t d | |  j    S| S)Nr>   add)e5subr   r   r   )r   r~   r   r   r   r     s    zParser.e5addc             C   s5   |  j    } |  j d  r1 t d | |  j    S| S)Nr?   sub)e5modr   r   r   )r   r~   r   r   r   r     s    zParser.e5subc             C   s5   |  j    } |  j d  r1 t d | |  j    S| S)NrB   mod)e5mulr   r   r   )r   r~   r   r   r   r     s    zParser.e5modc             C   s5   |  j    } |  j d  r1 t d | |  j    S| S)NrA   mul)e5divr   r   r   )r   r~   r   r   r   r   	  s    zParser.e5mulc             C   s5   |  j    } |  j d  r1 t d | |  j    S| S)NrD   Zdiv)e6r   r   r   )r   r~   r   r   r   r     s    zParser.e5divc             C   sT   |  j  d  r% t |  j |  j    S|  j  d  rJ t |  j |  j    S|  j   S)Nr)   r?   )r   r   r   e7r   )r   r   r   r   r     s
    z	Parser.e6c             C   s  |  j    } |  j } |  j d  r |  j   } |  j d |  t | t  ss t d |  j   | j	 | j
   n  t | j | j	 | j
 | j |  } n  d } x^ | r d } |  j d  r d } |  j |  } n  |  j d  r d } |  j |  } q q W| S)Nr3   r4   z)Function call must be applied to plain idTFr=   r5   )e8r   r   rz   r   r   ru   r   r[   r	   r
   r   r   r   method_call
index_call)r   r~   r   rz   Zgo_againr   r   r   r     s&    	'	z	Parser.e7c             C   s{   |  j  } |  j d  r8 |  j   } |  j d |  | S|  j d  rm |  j   } |  j d |  t |  S|  j   Sd  S)Nr3   r4   r5   r6   )r   r   r   r   rz   ry   e9)r   r   erz   r   r   r   r   1  s    	
z	Parser.e8c             C   s   |  j  } |  j d  r% t | d  S|  j d  rA t | d  S|  j d  rZ t |  S|  j d  rs t |  S|  j d  r t |  St |  j  j |  j  j  S)Nr!   Tr"   Fr-   r.   r9   )	r   r   rr   ru   rw   rx   r{   r	   r
   )r   tr   r   r   r   >  s    	


z	Parser.e9c             C   s  |  j    } t |  } x t | t  s|  j } |  j d  rb | j j |  | j |  n |  j d  r t | t  s t	 d |  j
   | j | j   n  | j | j |  j     |  j } |  j d  s | S| j j |  n | j |  | S|  j    } q W| S)Nr:   rF   z,Keyword argument must be a plain identifier.)r   r   r   r{   r   r   r   r   ru   r   r[   r	   r
   r   r   )r   r   aZ	potentialr   r   r   rz   L  s(    		zParser.argsc             C   s   |  j    } t | t  sE t d |  j   |  j j |  j j   n  |  j d  |  j	   } |  j d  t
 | j | j | j | | j |  } |  j d  r |  j |  S| S)NzMethod name must be plain idr3   r4   r=   )r   r   ru   r   r[   r   r	   r
   r   rz   r   r   r   r   r   )r   r   Z
methodnamerz   methodr   r   r   r   d  s    $'zParser.method_callc             C   s&   |  j    } |  j d  t | |  S)Nr6   )r   r   r   )r   r   Zindex_statementr   r   r   r   q  s    zParser.index_callc             C   s]   |  j  } |  j d  | } |  j d  |  j   } |  j   } t | j | j | | |  S)Nr-   rF   )r   r   r   r   r   r	   r
   )r   r   r   r   r   r   r   r   foreachblockv  s    	zParser.foreachblockc             C   s   |  j    } t | j | j  } |  j d  |  j   } | j j t | j | j | |   |  j	 |  |  j
   | _
 | S)Nr0   )r   r   r	   r
   r   r   r   r   r   elseifblockr   )r   r   clauser   r   r   r   ifblock  s    %zParser.ifblockc             C   sd   x] |  j  d  r_ |  j   } |  j d  |  j   } | j j t | j | j | |   q Wd  S)Nr%   r0   )	r   r   r   r   r   r   r   r	   r
   )r   r   r   br   r   r   r     s
    zParser.elseifblockc             C   s*   |  j  d  r& |  j d  |  j   Sd  S)Nr$   r0   )r   r   r   )r   r   r   r   r     s    zParser.elseblockc             C   s   |  j  } |  j  d k r1 t |  j  j |  j  j  S|  j d  r` |  j   } |  j d |  | S|  j d  r |  j   } |  j d |  | S|  j   S)Nr0   r#   r&   r*   r+   )	r   r{   r	   r
   r   r   r   r   r   )r   r   r   r   r   r   r     s    	zParser.linec             C   sc   t  |  j  } d } xG | r^ |  j   } t | t  sL | j j |  n  |  j d  } q W| S)NTr0   )r   r   r   r   r{   rn   r   r   )r   r   Zcondrm   r   r   r   r     s    	zParser.codeblockN)"r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r     s>   			
r   )#rU   mesonlibr   r|   r   r   r   r   r    rp   rr   ru   rw   rx   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sJ   i		
	'

