
    j                        d dl mc mZ  G d d          Z G d de          Z G d de          Z G d d	e          Z G d
 de          Z G d de          Z G d de          Z	 G d de          Z
 G d de
          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z G d& d'e          Z G d( d)e          Z G d* d+e          Z G d, d-e          Z G d. d/e          Z G d0 d1e          Z G d2 d3e          Z G d4 d5e          Z G d6 d7e          Z G d8 d9e          Z G d: d;e          Z G d< d=e          Z  G d> d?e          Z! G d@ dAe          Z" G dB dCe          Z# G dD dEe#          Z$ G dF dGe#          Z% G dH dIe#          Z& G dJ dKe          Z' G dL dMe'          Z(dNdOdPdQdRdSdTZ) G dU dVe          Z* G dW dXe          Z+ G dY dZe          Z, G d[ d\e          Z-dS )]    Nc                   t    e 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 )IRFormc                 "    i | _         d | _        d S N)var_maptypeselfs    h/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/androguard/decompiler/instruction.py__init__zIRForm.__init__   s    			    c                     dS NF r	   s    r   is_callzIRForm.is_call       ur   c                     dS r   r   r	   s    r   is_condzIRForm.is_cond   r   r   c                     dS r   r   r	   s    r   is_constzIRForm.is_const    r   r   c                     dS r   r   r	   s    r   is_identzIRForm.is_ident#   r   r   c                     dS NTr   r	   s    r   is_propagablezIRForm.is_propagable&       tr   c                     | j         S r   r   r	   s    r   get_typezIRForm.get_type)   
    yr   c                     || _         d S r   r   )r
   _types     r   set_typezIRForm.set_type,   s    			r   c                     dS r   r   r	   s    r   has_side_effectzIRForm.has_side_effect/   r   r   c                     g S r   r   r	   s    r   get_used_varszIRForm.get_used_vars2       	r   c                 &    t          d| z            )Nzreplace not implemented in %rNotImplementedErrorr
   oldnews      r   replacezIRForm.replace5   s    !"AD"HIIIr   c                 &    t          d| z            )Nz!replace_lhs not implemented in %rr*   r
   r.   s     r   replace_lhszIRForm.replace_lhs8       !"E"LMMMr   c                 &    t          d| z            )Nz!replace_var not implemented in %rr*   r,   s      r   replace_varzIRForm.replace_var;   r3   r   c                     d S r   r   r	   s    r   remove_defined_varzIRForm.remove_defined_var>       r   c                     g S r   r   r	   s    r   get_rhszIRForm.get_rhsA   r(   r   c                     d S r   r   r	   s    r   get_lhszIRForm.get_lhsD   r   r   c                     d S r   r   r
   visitors     r   visitzIRForm.visitG   r8   r   N)__name__
__module____qualname__r   r   r   r   r   r   r   r#   r%   r'   r/   r2   r5   r7   r:   r<   r@   r   r   r   r   r      s                           J J JN N NN N N          r   r   c                   :    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	dS )
ConstantNc                 f    d|z  | _         || _        ||| _        n|| _        || _        || _        dS )z

        :param value:
        :param atype: the type of the constant as described in https://source.android.com/devices/tech/dalvik/dex-format.html#typedescriptor
        :param int_value:
        :param descriptor:
        c%sN)vcstcst2r   clsdesc)r
   valueatype	int_value
descriptors        r   r   zConstant.__init__L   s>     DII!DI	!r   c                     g S r   r   r	   s    r   r'   zConstant.get_used_vars^   r(   r   c                     dS r   r   r	   s    r   r   zConstant.is_consta   r   r   c                     | j         S r   )rJ   r	   s    r   get_int_valuezConstant.get_int_valued   r    r   c                     | j         S r   r   r	   s    r   r   zConstant.get_typeg   r    r   c                 T   | j         dk    r5| j        dk    r|                    d          S |                    d          S | j         dk    r!|                    | j        | j                  S | j         dv r|                    | j                  S |                    | j                  S )NZr   falsetruezLjava/lang/Class;dataIJB)r   rI   visit_constantvisit_base_classrJ   r>   s     r   r@   zConstant.visitj   s    9x1}}--g666--f555Y---++DH48+DDDY%))$)444))$(333r   c                 0    dt          | j                  z  S )NzCST_%s)reprrI   r	   s    r   __str__zConstant.__str__w   s    $tx..((r   )NN)
rA   rB   rC   r   r'   r   rS   r   r@   r`   r   r   r   rE   rE   K   s        " " " "$        4 4 4) ) ) ) )r   rE   c                   (    e Zd ZddZd Zd Zd ZdS )	BaseClassNc                 6    d|z  | _         || _        || _        d S )NrG   )rH   clsrK   )r
   namerO   s      r   r   zBaseClass.__init__|   s    !r   c                     dS r   r   r	   s    r   r   zBaseClass.is_const   r   r   c                 D    |                     | j        | j                  S NrY   )r]   rd   r>   s     r   r@   zBaseClass.visit   s    ''tx'@@@r   c                     d| j         z  S )NzBASECLASS_%s)rd   r	   s    r   r`   zBaseClass.__str__   s    ((r   r   )rA   rB   rC   r   r   r@   r`   r   r   r   rb   rb   {   sX        " " " "  A A A) ) ) ) )r   rb   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Variablec                 >    || _         d| _        d | _        || _        d S r   )rH   declaredr   re   )r
   rL   s     r   r   zVariable.__init__   s"    				r   c                     | j         gS r   rH   r	   s    r   r'   zVariable.get_used_vars   s    xr   c                     dS r   r   r	   s    r   r   zVariable.is_ident   r   r   c                     | j         S r   ro   r	   s    r   rL   zVariable.value   s	    vr   c                 ,    |                     |           S r   )visit_variabler>   s     r   r@   zVariable.visit   s    %%d+++r   c                 ,    |                     |           S r   )
visit_declr>   s     r   ru   zVariable.visit_decl   s    !!$'''r   c                     d| j         z  S )NzVAR_%sre   r	   s    r   r`   zVariable.__str__   s    $)##r   N)
rA   rB   rC   r   r'   r   rL   r@   ru   r`   r   r   r   rk   rk      s}                , , ,( ( ($ $ $ $ $r   rk   c                   0     e Zd Z fdZd Zd Zd Z xZS )Paramc                 t    t                                          |           d| _        || _        d| _        d S NTF)superr   rm   r   thisr
   rL   rM   	__class__s      r   r   zParam.__init__   s4    				r   c                     dS r   r   r	   s    r   r   zParam.is_const   r   r   c                 D    |                     | j        | j                  S rh   )visit_paramrH   r   r>   s     r   r@   zParam.visit   s    ""46	":::r   c                     d| j         z  S )NzPARAM_%srw   r	   s    r   r`   zParam.__str__   s    DI%%r   )rA   rB   rC   r   r   r@   r`   __classcell__r   s   @r   ry   ry      se              ; ; ;& & & & & & &r   ry   c                   *     e Zd Z fdZd Zd Z xZS )	ThisParamc                 h    t                                          ||           d| _        d| _         d S r{   )r|   r   r}   r~   s      r   r   zThisParam.__init__   s/    &&&	


r   c                 `    | j         r|                                S |                                S r   )r|   visit_super
visit_thisr>   s     r   r@   zThisParam.visit   s0    : 	)&&(((!!###r   c                     dS )NTHISr   r	   s    r   r`   zThisParam.__str__   s    vr   rA   rB   rC   r   r@   r`   r   r   s   @r   r   r      sV            
$ $ $
      r   r   c                   f     e Zd Z f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 xZS )AssignExpressionc                     t                                                       |rC|j        | _        || j        |j        <   |                    |                                           nd | _        || _        d S r   )r|   r   rH   lhsr   r#   r   rhsr
   r   r   r   s      r   r   zAssignExpression.__init__   sg     	uDH"%DLLL((((DHr   c                 4    | j                                         S r   )r   r   r	   s    r   r   zAssignExpression.is_propagable       x%%'''r   c                 4    | j                                         S r   )r   r   r	   s    r   r   zAssignExpression.is_call   s    x!!!r   c                 4    | j                                         S r   )r   r%   r	   s    r   r%   z AssignExpression.has_side_effect   s    x'')))r   c                     | j         S r   )r   r	   s    r   r:   zAssignExpression.get_rhs   	    xr   c                     | j         S r   r   r	   s    r   r<   zAssignExpression.get_lhs   r   r   c                 4    | j                                         S r   )r   r'   r	   s    r   r'   zAssignExpression.get_used_vars   r   r   c                     d | _         d S r   r   r	   s    r   r7   z#AssignExpression.remove_defined_var   s    r   c                 <    | j                             ||           d S r   )r   r/   r,   s      r   r/   zAssignExpression.replace   s     c"""""r   c                 <    |j         | _        || j        |j         <   d S r   )rH   r   r   r1   s     r   r2   zAssignExpression.replace_lhs   s    5!SUr   c                 <    | j                             ||           d S r   )r   r5   r,   s      r   r5   zAssignExpression.replace_var   s     S#&&&&&r   c                 r    |                     | j                            | j                  | j                  S r   )visit_assignr   getr   r   r>   s     r   r@   zAssignExpression.visit   s,    ##DL$4$4TX$>$>IIIr   c                 r    d                     | j                            | j                  | j                  S )NzASSIGN({}, {}))formatr   r   r   r   r	   s    r   r`   zAssignExpression.__str__   s,    &&t|'7'7'A'A48LLLr   )rA   rB   rC   r   r   r   r%   r:   r<   r'   r7   r/   r2   r5   r@   r`   r   r   s   @r   r   r      s            ( ( (" " "* * *    ( ( (  # # #" " "' ' 'J J JM M M M M M Mr   r   c                   Z     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z xZS )MoveExpressionc                    t                                                       |j        | _        |j        | _        | j                            |j        |f|j        |fg           |                    |                                           d S r   )	r|   r   rH   r   r   r   updater#   r   r   s      r   r   zMoveExpression.__init__   sr    55ceS\CE3<8999S\\^^$$$$$r   c                     dS r   r   r	   s    r   r%   zMoveExpression.has_side_effect   r   r   c                 J    | j         | j                                                 S r   )r   r   r   r	   s    r   r   zMoveExpression.is_call  s    |DH%--///r   c                 J    | j         | j                                                 S r   r   r   r'   r	   s    r   r'   zMoveExpression.get_used_vars      |DH%33555r   c                 &    | j         | j                 S r   )r   r   r	   s    r   r:   zMoveExpression.get_rhs  s    |DH%%r   c                     | j         S r   r   r	   s    r   r<   zMoveExpression.get_lhs  r   r   c                 h    | j         }|                    || j                 || j                           S r   )r   
visit_mover   r   r
   r?   v_ms      r   r@   zMoveExpression.visit  s+    l!!#dh-TX???r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   r   r   r   r   r/   rL   r
   r-   r.   r   r   s        r   r/   zMoveExpression.replace      l$(m 	#,,.. 	KKS!!!!!||~~ #&CIIKK 99;;Cr   c                     | j         | j        k    r| j                            | j                    |j        | _         || j        |j        <   d S r   )r   r   r   poprH   r1   s     r   r2   zMoveExpression.replace_lhs  sF    8txLTX&&&5!SUr   c                     | j         |k    r| j                            |           |j        | _        || j        |j        <   d S r   )r   r   r   rH   r   r,   s      r   r5   zMoveExpression.replace_var$  s@    8s??LS!!!5!SUr   c                     | j         }d                    |                    | j                  |                    | j                            S Nz{} = {}r   r   r   r   r   r
   r   s     r   r`   zMoveExpression.__str__*  ;    l 1 1377483D3DEEEr   )rA   rB   rC   r   r%   r   r'   r:   r<   r@   r/   r2   r5   r`   r   r   s   @r   r   r      s        % % % % %  0 0 06 6 6& & &  @ @ @
 
 
" " "" " "F F F F F F Fr   r   c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )MoveResultExpressionc                 L    t                                          ||           d S r   r|   r   r   s      r   r   zMoveResultExpression.__init__0  s#    c"""""r   c                 J    | j         | j                                                 S r   )r   r   r   r	   s    r   r   z"MoveResultExpression.is_propagable3  r   r   c                 J    | j         | j                                                 S r   )r   r   r%   r	   s    r   r%   z$MoveResultExpression.has_side_effect6  s    |DH%55777r   c                 h    | j         }|                    || j                 || j                           S r   )r   visit_move_resultr   r   r   s      r   r@   zMoveResultExpression.visit9  s+    l((TXDHFFFr   c                     | j         }d                    |                    | j                  |                    | j                            S r   r   r   s     r   r`   zMoveResultExpression.__str__=  r   r   )	rA   rB   rC   r   r   r%   r@   r`   r   r   s   @r   r   r   /  s~        # # # # #6 6 68 8 8G G GF F F F F F Fr   r   c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )ArrayStoreInstructionc                    t                                                       |j        | _        |j        | _        |j        | _        | j                            |j        |f|j        |f|j        |fg           || _        d S r   )	r|   r   rH   r   arrayindexr   r   r   )r
   r   r   r   r"   r   s        r   r   zArrayStoreInstruction.__init__C  sp    5W
W
ceS\EGU+;egu=MNOOO			r   c                     dS r   r   r	   s    r   r%   z%ArrayStoreInstruction.has_side_effectK  r   r   c                 N   | j         }|| j                                                 }|                    || j                                                            |                    || j                                                            t          t          |                    S r   )r   r   r'   extendr   r   listsetr
   r   
lused_varss      r   r'   z#ArrayStoreInstruction.get_used_varsN  s    l_2244
#dj/7799:::#dh-5577888C
OO$$$r   c                     | j         }|                    || j                 || j                 || j                 |           S rh   )r   visit_astorer   r   r   r   s      r   r@   zArrayStoreInstruction.visitU  sA    l##
OS_c$(m$ $ 
 
 	
r   c                     | j         |k    r|j        | _         | j        |k    r|j        | _        | j        |k    r|j        | _        | j                            |           || j        |j        <   d S r   )r   rH   r   r   r   r   r,   s      r   r5   z!ArrayStoreInstruction.replace_var[  sl    8s??uDH:DJ:DJ!SUr   c                    | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                r|||                                <   | j        |k    r|                                | _        | j        |k    r|                                | _        | j        |k    r|                                | _        d S d S |||<   d S || j                 || j                 || j                 fD ]@}|                                s*|                                s|                    ||           Ad S r   )r   r   r   r/   rL   r   r   r   r
   r-   r.   r   args        r   r/   zArrayStoreInstruction.replacee  sI   l#::c(CLLNN #cllnn #C%%%%%<<>> 	#'*C		$x3#&99;;zS((%(YY[[
zS((%(YY[[


 )(  #CHHHDJTZ#dh-H * * *#,,.. *KKS)))* *r   c                     | j         }d                    || j                 || j                 || j                           S )Nz{}[{}] = {})r   r   r   r   r   r   s     r   r`   zArrayStoreInstruction.__str__{  s:    l##
OS_c$(m
 
 	
r   rA   rB   rC   r   r%   r'   r@   r5   r/   r`   r   r   s   @r   r   r   B  s              % % %
 
 
" " "* * *,
 
 
 
 
 
 
r   r   c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	StaticInstructionc                     t                                                       |j        | _        t	          j        |          | _        || _        || _        || j	        |j        <   || _
        d S r   )r|   r   rH   r   utilr   rd   ftypere   r   rK   )r
   r   klassr   re   r   s        r   r   zStaticInstruction.__init__  Z    5=''
	!SUr   c                     dS r   r   r	   s    r   r%   z!StaticInstruction.has_side_effect  r   r   c                 J    | j         | j                                                 S r   r   r	   s    r   r'   zStaticInstruction.get_used_vars  r   r   c                     d S r   r   r	   s    r   r<   zStaticInstruction.get_lhs  r   r   c                 d    |                     | j        | j        | j        | j                           S r   )visit_put_staticrd   re   r   r   r>   s     r   r@   zStaticInstruction.visit  s.    ''Hdidh!7
 
 	
r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   r   r   r   r,   s      r   r5   zStaticInstruction.replace_var  5    5!SUr   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   r   r   s        r   r/   zStaticInstruction.replace  r   r   c                 d    d                     | j        | j        | j        | j                           S Nz
{}.{} = {})r   rd   re   r   r   r	   s    r   r`   zStaticInstruction.__str__  s'    ""48TYTX8NOOOr   rA   rB   rC   r   r%   r'   r<   r@   r5   r/   r`   r   r   s   @r   r   r     s              6 6 6  
 
 

" " "

 
 
P P P P P P Pr   r   c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	InstanceInstructionc                 (   t                                                       |j        | _        |j        | _        || _        t          j        |          | _        || _	        | j
                            |j        |f|j        |fg           || _        d S r   )r|   r   rH   r   r   rM   r   r   rd   re   r   r   rK   )r
   r   r   r   rM   re   r   s         r   r   zInstanceInstruction.__init__  s|    55
=''	ceS\CE3<8999r   c                     dS r   r   r	   s    r   r%   z#InstanceInstruction.has_side_effect  r   r   c                     | j         }|| j                                                 }|                    || j                                                            t          t          |                    S r   )r   r   r'   r   r   r   r   r   s      r   r'   z!InstanceInstruction.get_used_vars  sZ    l]0022
#dh-5577888C
OO$$$r   c                     d S r   r   r	   s    r   r<   zInstanceInstruction.get_lhs  r   r   c                     | j         }|                    || j                 | j        || j                 | j                  S rh   )r   visit_put_instancer   re   r   rM   r   s      r   r@   zInstanceInstruction.visit  s?    l))M49c$(m$* * 
 
 	
r   c                     | j         |k    r|j        | _         | j        |k    r|j        | _        | j                            |           || j        |j        <   d S r   )r   rH   r   r   r   r,   s      r   r5   zInstanceInstruction.replace_var  sT    8s??uDH8s??uDH!SUr   c                 ^   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                rc|||                                <   | j        |k    r|                                | _        | j        |k    r|                                | _        d S d S |||<   d S || j                 || j                 fD ]@}|                                s*|                                s|                    ||           Ad S r   )r   r   r   r/   rL   r   r   r   s        r   r/   zInstanceInstruction.replace  s"   l#::c(CLLNN 
#cllnn 
#C%%%%%<<>> #'*C		$x3#&99;;x3#&99;; '  #CHHHDHs48}5 * * *#,,.. *KKS)))* *r   c                 t    | j         }d                    || j                 | j        || j                           S r   )r   r   r   re   r   r   s     r   r`   zInstanceInstruction.__str__  s/    l""3tx=$)S]KKKr   r   r   s   @r   r   r     s        	 	 	 	 	  % % %  
 
 
" " "* * *(L L L L L L Lr   r   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )NewInstancec                 V    t                                                       || _        d S r   )r|   r   r   )r
   ins_typer   s     r   r   zNewInstance.__init__  s$    			r   c                     | j         S r   r   r	   s    r   r   zNewInstance.get_type  r    r   c                     g S r   r   r	   s    r   r'   zNewInstance.get_used_vars  r(   r   c                 :    |                     | j        |           S rh   )	visit_newr   r>   s     r   r@   zNewInstance.visit  s       666r   c                     d S r   r   r,   s      r   r/   zNewInstance.replace  r8   r   c                     d| j         z  S )NzNEW(%s)r   r	   s    r   r`   zNewInstance.__str__   s    49$$r   )
rA   rB   rC   r   r   r'   r@   r/   r`   r   r   s   @r   r   r     s                7 7 7  % % % % % % %r   r   c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
InvokeInstructionc                 *   t                                                       || _        || _        |j        | _        || _        || _        d |D             | _        || j	        |j        <   |D ]}|| j	        |j        <   || _
        |d         |k    sJ d S )Nc                     g | ]	}|j         
S r   ro   ).0r   s     r   
<listcomp>z.InvokeInstruction.__init__.<locals>.<listcomp>  s    +++sSU+++r      )r|   r   rd   re   rH   basertypeptypeargsr   triple)
r
   clsnamere   r  r  r  r  r  r   r   s
            r   r   zInvokeInstruction.__init__  s    	F	

++d+++	#TV 	& 	&C"%DLayD      r   c                 n    | j         dk    r$| j        | j                                                 S | j        S )Nz<init>)re   r   r  r   r  r	   s    r   r   zInvokeInstruction.get_type  s2    9  <	*33555zr   c                     dS r   r   r	   s    r   r   zInvokeInstruction.is_call  r   r   c                     dS r   r   r	   s    r   r%   z!InvokeInstruction.has_side_effect  r   r   c                    | j         |k    r|j        | _         g }| j        D ]8}||k    r|                    |           |                    |j                   9|| _        | j                            |           || j        |j        <   d S r   )r  rH   r  appendr   r   r
   r-   r.   new_argsr   s        r   r5   zInvokeInstruction.replace_var  s    9DI9 	' 	'Cczz$$$$&&&&	!SUr   c                 $   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                r|||                                <   | j        |k    r|                                | _        g }| j        D ]8}||k    r|                    |           |                    |j                   9|| _        d S |||<   d S || j                 }|                                s*|                                s|                    ||           | j        D ]H}||         }|                                s*|                                s|                    ||           Id S r   )	r   r   r   r/   rL   r  r  r  rH   )r
   r-   r.   r   r   r  r  cnts           r   r/   zInvokeInstruction.replace,  s   l#::c(CLLNN #cllnn #C%%%%%<<>> #'*C		$yC''$'IIKK	!H#y 3 3#::$OOC0000$OOCE2222 (DIII"CHHHty>DMMOO 't}} 'S#&&&y * *#h *#,,.. *KKS)))* *r   c                    | j         }g }| j        D ]/}|                    ||                                                    0|                    || j                                                            t          t          |                    S r   )r   r  r   r'   r  r   r   r
   r   r   r   s       r   r'   zInvokeInstruction.get_used_varsI  s    l
9 	8 	8Cc#h44667777#di.6688999C
OO$$$r   c                     | j         fd| j        D             }|                    | j        | j                 | j        | j        ||           S )Nc                      g | ]
}|         S r   r   r
  r   r   s     r   r  z+InvokeInstruction.visit.<locals>.<listcomp>S      ///cS///r   )r   r  visit_invokere   r  r  r  r
   r?   largsr   s      @r   r@   zInvokeInstruction.visitQ  sV    l////TY///##Is49~tz4:ud
 
 	
r   c                     | j         d                    | j                 | j        d                    fd| j        D                                 S )Nz	{}.{}({})z, c              3   .   K   | ]}d |         z  V  dS )z%sNr   )r
  ir   s     r   	<genexpr>z,InvokeInstruction.__str__.<locals>.<genexpr>]  s+      77dSVm777777r   )r   r   r  re   joinr  r   s    @r   r`   zInvokeInstruction.__str__X  sV    l!!	NIII7777TY77777
 
 	
r   )rA   rB   rC   r   r   r   r%   r5   r/   r'   r@   r`   r   r   s   @r   r  r    s        ! ! ! ! !  
    " " "* * *:% % %
 
 

 
 
 
 
 
 
r   r  c                        e Zd Z fdZ xZS )InvokeRangeInstructionc           	          |                     d          }t                                          |||||||           d S )Nr   )r   r|   r   )	r
   r  re   r  r  r  r  r  r   s	           r   r   zInvokeRangeInstruction.__init__b  s<    xx{{$eUD&IIIIIr   rA   rB   rC   r   r   r   s   @r   r+  r+  a  sA        J J J J J J J J Jr   r+  c                        e Zd Z fdZ xZS )InvokeDirectInstructionc           	      V    t                                          |||||||           d S r   r   	r
   r  re   r  r  r  r  r  r   s	           r   r   z InvokeDirectInstruction.__init__h  -    $eUD&IIIIIr   r-  r   s   @r   r/  r/  g  sA        J J J J J J J J Jr   r/  c                   $     e Zd Z fdZd Z xZS )InvokeStaticInstructionc           	      V    t                                          |||||||           d S r   r   r1  s	           r   r   z InvokeStaticInstruction.__init__m  r2  r   c                     | j         }g }| j        D ]/}|                    ||                                                    0t	          t          |                    S r   )r   r  r   r'   r   r   r  s       r   r'   z%InvokeStaticInstruction.get_used_varsp  sZ    l
9 	8 	8Cc#h44667777C
OO$$$r   )rA   rB   rC   r   r'   r   r   s   @r   r4  r4  l  sL        J J J J J% % % % % % %r   r4  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )ReturnInstructionc                     t                                                       || _        ||| j        |j        <   |j        | _        d S d S r   )r|   r   r   r   rH   )r
   r   r   s     r   r   zReturnInstruction.__init__y  sG    ?"%DLuDHHH ?r   c                 \    | j         g S | j        | j                                                  S r   )r   r   r'   r	   s    r   r'   zReturnInstruction.get_used_vars  s*    8I|DH%33555r   c                     d S r   r   r	   s    r   r<   zReturnInstruction.get_lhs  r   r   c                     | j         |                                S |                    | j        | j                            S r   )r   visit_return_voidvisit_returnr   r>   s     r   r@   zReturnInstruction.visit  s9    8,,...''TX(>???r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   rH   r   r   r   r,   s      r   r5   zReturnInstruction.replace_var  r   r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   r   r   r   r   r/   rL   r   s        r   r/   zReturnInstruction.replace  r   r   c                 X    | j         "d| j                            | j                   z  S dS )Nz
RETURN(%s)RETURN)r   r   r   r	   s    r   r`   zReturnInstruction.__str__  s,    8$,"2"248"<"<<<xr   )rA   rB   rC   r   r'   r<   r@   r5   r/   r`   r   r   s   @r   r8  r8  x  s            6 6 6
  @ @ @" " "

 
 
      r   r8  c                   &    e Zd Zd Zd Zd Zd ZdS )NopExpressionc                     d S r   r   r	   s    r   r   zNopExpression.__init__  r8   r   c                     g S r   r   r	   s    r   r'   zNopExpression.get_used_vars  r(   r   c                     d S r   r   r	   s    r   r<   zNopExpression.get_lhs  r   r   c                 *    |                                 S r   )	visit_nopr>   s     r   r@   zNopExpression.visit  s      """r   N)rA   rB   rC   r   r'   r<   r@   r   r   r   rF  rF    sP              # # # # #r   rF  c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )SwitchExpressionc                     t                                                       |j        | _        || _        || j        |j        <   d S r   )r|   r   rH   srcbranchr   )r
   rO  rP  r   s      r   r   zSwitchExpression.__init__  s=    5!SUr   c                 J    | j         | j                                                 S r   )r   rO  r'   r	   s    r   r'   zSwitchExpression.get_used_vars  r   r   c                 L    |                     | j        | j                           S r   )visit_switchr   rO  r>   s     r   r@   zSwitchExpression.visit  s    ##DL$:;;;r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   rO  r   r   r,   s      r   r5   zSwitchExpression.replace_var  r   r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   )r   rO  r   r   r/   rL   )r
   r-   r.   r   rO  s        r   r/   zSwitchExpression.replace  r   r   c                 ,    d| j         | j                 z  S )Nz
SWITCH(%s))r   rO  r	   s    r   r`   zSwitchExpression.__str__  s    t|DH566r   )
rA   rB   rC   r   r'   r@   r5   r/   r`   r   r   s   @r   rM  rM    s        " " " " "6 6 6< < <" " "

 
 
7 7 7 7 7 7 7r   rM  c                   D     e Zd Zd	 fd	Zd Zd Zd Zd Zd Zd Z	 xZ
S )
CheckCastExpressionNc                     t                                                       |j        | _        || j        |j        <   || _        || _        d S r   )r|   r   rH   r   r   r   rK   )r
   r   r"   rO   r   s       r   r   zCheckCastExpression.__init__  sB    5!SU	!r   c                 J    | j         | j                                                 S r   r   r   r   r	   s    r   r   zCheckCastExpression.is_const      |DH%..000r   c                 J    | j         | j                                                 S r   r   r   r'   r	   s    r   r'   z!CheckCastExpression.get_used_vars  r   r   c                 |    |                     | j        | j                 t          j        | j                            S r   )visit_check_castr   r   r   r   r   r>   s     r   r@   zCheckCastExpression.visit  s4    ''L"DM$)$<$<
 
 	
r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   r@  r,   s      r   r5   zCheckCastExpression.replace_var  r   r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   rB  r   s        r   r/   zCheckCastExpression.replace  r   r   c                 X    d                     | j        | j        | j                           S )NzCAST({}) {})r   r   r   r   r	   s    r   r`   zCheckCastExpression.__str__  s#    ##DIt|DH/EFFFr   r   )rA   rB   rC   r   r   r'   r@   r5   r/   r`   r   r   s   @r   rX  rX    s        " " " " " "1 1 16 6 6
 
 

" " "

 
 
G G G G G G Gr   rX  c                        e Zd Z fdZ xZS )ArrayExpressionc                 H    t                                                       d S r   r   )r
   r   s    r   r   zArrayExpression.__init__  s    r   r-  r   s   @r   re  re    s8                r   re  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )ArrayLoadExpressionc                     t                                                       |j        | _        |j        | _        | j                            |j        |f|j        |fg           || _        d S r   )r|   r   rH   r   idxr   r   r   )r
   r   r   r"   r   s       r   r   zArrayLoadExpression.__init__  s^    U
7ceS\EGU+;<===			r   c                     | j         }|| j                                                 }|                    || j                                                            t          t          |                    S r   )r   r   r'   r   rj  r   r   r   s      r   r'   z!ArrayLoadExpression.get_used_vars  sZ    l_2244
#dh-5577888C
OO$$$r   c                 h    | j         }|                    || j                 || j                           S r   )r   visit_aloadr   rj  r   s      r   r@   zArrayLoadExpression.visit  s+    l""3tz?CMBBBr   c                 t    | j         | j                                                                     ddd          S )N[ r  )r   r   r   r/   r	   s    r   r   zArrayLoadExpression.get_type  s/    |DJ'0022::3AFFFr   c                     | j         |k    r|j        | _         | j        |k    r|j        | _        | j                            |           || j        |j        <   d S r   )r   rH   rj  r   r   r,   s      r   r5   zArrayLoadExpression.replace_var  sV    :DJ8s??uDH!SUr   c                 V   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                rc|||                                <   | j        |k    r|                                | _        | j        |k    r|                                | _        d S d S |||<   d S | j        | j        fD ]H}||         }|                                s*|                                s|                    ||           Id S r   )r   r   r   r/   rL   r   rj  )r
   r-   r.   r   r   r  s         r   r/   zArrayLoadExpression.replace   s%   l#::c(CLLNN 
#cllnn 
#C%%%%%<<>> #'*C		$zS((%(YY[[
x3#&99;; '  #CHHH
DH- * *#h *#,,.. *KKS)))* *r   c                 h    | j         }d                    || j                 || j                           S )NzARRAYLOAD({}, {}))r   r   r   rj  r   s     r   r`   zArrayLoadExpression.__str__5  s+    l"))#dj/3tx=IIIr   )rA   rB   rC   r   r'   r@   r   r5   r/   r`   r   r   s   @r   rh  rh    s            % % %C C CG G G" " "* * **J J J J J J Jr   rh  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )ArrayLengthExpressionc                 ~    t                                                       |j        | _        || j        |j        <   d S r   )r|   r   rH   r   r   )r
   r   r   s     r   r   zArrayLengthExpression.__init__;  s6    W
 %UWr   c                     dS NIr   r	   s    r   r   zArrayLengthExpression.get_type@  s    sr   c                 J    | j         | j                                                 S r   )r   r   r'   r	   s    r   r'   z#ArrayLengthExpression.get_used_varsC  s    |DJ'55777r   c                 L    |                     | j        | j                           S r   )visit_alengthr   r   r>   s     r   r@   zArrayLengthExpression.visitF  s    $$T\$*%=>>>r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   r   r   r   r,   s      r   r5   z!ArrayLengthExpression.replace_varI  s5    U
!SUr   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   )r   r   r   r   r/   rL   )r
   r-   r.   r   r   s        r   r/   zArrayLengthExpression.replaceN  s    lDJ   	ENN$4$4 	MM#s#####||~~ #&CIIKK  YY[[


Cr   c                 ,    d| j         | j                 z  S )NzARRAYLEN(%s))r   r   r	   s    r   r`   zArrayLengthExpression.__str__Z  s    dj!9::r   rA   rB   rC   r   r   r'   r@   r5   r/   r`   r   r   s   @r   ru  ru  :  s        & & & & &
  8 8 8? ? ?" " "

 
 
; ; ; ; ; ; ;r   ru  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )NewArrayExpressionc                     t                                                       |j        | _        || _        || j        |j        <   d S r   )r|   r   rH   sizer   r   )r
   asizerM   r   s      r   r   zNewArrayExpression.__init___  s=    G		 %UWr   c                     dS r   r   r	   s    r   r   z NewArrayExpression.is_propagablee  r   r   c                 J    | j         | j                                                 S r   )r   r  r'   r	   s    r   r'   z NewArrayExpression.get_used_varsh  s    |DI&44666r   c                 X    |                     | j        | j        | j                           S r   )visit_new_arrayr   r   r  r>   s     r   r@   zNewArrayExpression.visitk  s#    &&ty$,ty2IJJJr   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   r  r   r   r,   s      r   r5   zNewArrayExpression.replace_varn  s5    E	!SUr   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   )r   r  r   r   r/   rL   )r
   r-   r.   r   r  s        r   r/   zNewArrayExpression.replaces  s    l49~ 	4==?? 	LLc"""""||~~ #&CIIKK IIKK			Cr   c                 X    d                     | j        | j        | j                           S )NzNEWARRAY_{}[{}])r   r   r   r  r	   s    r   r`   zNewArrayExpression.__str__  s#     ''	4<	3JKKKr   )rA   rB   rC   r   r   r'   r@   r5   r/   r`   r   r   s   @r   r  r  ^  s        & & & & &  7 7 7K K K" " "

 
 
L L L L L L Lr   r  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )FilledArrayExpressionc                     t                                                       || _        || _        g | _        |D ]0}|| j        |j        <   | j                            |j                   1d S r   )r|   r   r  r   r  r   rH   r  )r
   r  rM   r  r   r   s        r   r   zFilledArrayExpression.__init__  sp    			 	$ 	$C"%DLISU####	$ 	$r   c                     g }| j         D ]4}|                    | j        |                                                    5t	          t          |                    S r   )r  r   r   r'   r   r   )r
   r   r   s      r   r'   z#FilledArrayExpression.get_used_vars  sX    
9 	A 	ACdl3/==??@@@@C
OO$$$r   c                     g }| j         D ]8}||k    r|                    |j                   #|                    |           9|| _         | j                            |           || j        |j        <   d S r   )r  r  rH   r   r   r  s        r   r5   z!FilledArrayExpression.replace_var  s~    9 	% 	%Cczz&&&&$$$$	!SUr   c                 F   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                rb|||                                <   g }| j        D ]8}||k    r|                    |j                   #|                    |           9|| _        d S |||<   d S | j        D ]H}||         }|                                s*|                                s|                    ||           Id S r   )r   r   r   r/   rL   r  r  rH   )r
   r-   r.   r   r   r  r  s          r   r/   zFilledArrayExpression.replace  s1   l#::c(CLLNN #cllnn #C%%%%%<<>> 
#'*C		$!H#y 1 1#::$OOCE2222$OOC0000 (DIII"CHHHy * *#h *#,,.. *KKS)))* *r   c                 z    | j         fd| j        D             }|                    | j        | j        |          S )Nc                      g | ]
}|         S r   r   r   s     r   r  z/FilledArrayExpression.visit.<locals>.<listcomp>  r!  r   )r   r  visit_filled_new_arrayr   r  r#  s      @r   r@   zFilledArrayExpression.visit  sA    l////TY///--diEJJJr   )	rA   rB   rC   r   r'   r5   r/   r@   r   r   s   @r   r  r    s{        $ $ $ $ $% % %	" 	" 	"* * *0K K K K K K Kr   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )FillArrayExpressionc                     t                                                       |j        | _        || j        |j        <   || _        d S r   )r|   r   rH   regr   rL   )r
   r  rL   r   s      r   r   zFillArrayExpression.__init__  s;    5!SU


r   c                     dS r   r   r	   s    r   r   z!FillArrayExpression.is_propagable  r   r   c                     | j         S r   )r  r	   s    r   r:   zFillArrayExpression.get_rhs  r   r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   r  r   r   r,   s      r   r5   zFillArrayExpression.replace_var  r   r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   )r   r  r   r   r/   rL   )r
   r-   r.   r   r  s        r   r/   zFillArrayExpression.replace  r   r   c                 J    | j         | j                                                 S r   )r   r  r'   r	   s    r   r'   z!FillArrayExpression.get_used_vars  r   r   c                 X    |                     | j        | j                 | j                  S r   )visit_fill_arrayr   r  rL   r>   s     r   r@   zFillArrayExpression.visit  s#    ''TX(>
KKKr   )rA   rB   rC   r   r   r:   r5   r/   r'   r@   r   r   s   @r   r  r    s                " " "

 
 
6 6 6L L L L L L Lr   r  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )RefExpressionc                 ~    t                                                       |j        | _        || j        |j        <   d S r   )r|   r   rH   refr   r
   r  r   s     r   r   zRefExpression.__init__  s6    5!SUr   c                     dS r   r   r	   s    r   r   zRefExpression.is_propagable  r   r   c                 J    | j         | j                                                 S r   )r   r  r'   r	   s    r   r'   zRefExpression.get_used_vars  r   r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   )rH   r  r   r   r,   s      r   r5   zRefExpression.replace_var  r   r   c                 D   | j         }|| j                 }|                                s,|                                s|                    ||           d S |                                r2|||                                <   |                                | _        d S |||<   d S r   )r   r  r   r   r/   rL   )r
   r-   r.   r   r  s        r   r/   zRefExpression.replace  r   r   )	rA   rB   rC   r   r   r'   r5   r/   r   r   s   @r   r  r    st        " " " " "
  6 6 6" " "

 
 
 
 
 
 
r   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )MoveExceptionExpressionc                     t                                          |           || _        |                    |           d S r   )r|   r   r   r#   )r
   r  r"   r   s      r   r   z MoveExceptionExpression.__init__   s:    	Ur   c                     | j         S r   )r  r	   s    r   r<   zMoveExceptionExpression.get_lhs  r   r   c                     dS r   r   r	   s    r   r%   z'MoveExceptionExpression.has_side_effect  r   r   c                     g S r   r   r	   s    r   r'   z%MoveExceptionExpression.get_used_vars  r(   r   c                 z    | j                             | j                   |j        | _        || j         |j        <   d S r   )r   r   r  rH   r1   s     r   r2   z#MoveExceptionExpression.replace_lhs  s7    """5!SUr   c                 P    |                     | j        | j                 |           S rh   )visit_move_exceptionr   r  r>   s     r   r@   zMoveExceptionExpression.visit  s$    ++DL,B+NNNr   c                 ,    d| j         | j                 z  S )NzMOVE_EXCEPT %sr   r  r	   s    r   r`   zMoveExceptionExpression.__str__  s    $,tx"888r   )rA   rB   rC   r   r<   r%   r'   r2   r@   r`   r   r   s   @r   r  r    s            
      " " "
O O O9 9 9 9 9 9 9r   r  c                   $     e Zd Z fdZd Z xZS )MonitorEnterExpressionc                 J    t                                          |           d S r   r   r  s     r   r   zMonitorEnterExpression.__init__  !    r   c                 L    |                     | j        | j                           S r   )visit_monitor_enterr   r  r>   s     r   r@   zMonitorEnterExpression.visit  s    **4<+ABBBr   rA   rB   rC   r   r@   r   r   s   @r   r  r    sN            C C C C C C Cr   r  c                   $     e Zd Z fdZd Z xZS )MonitorExitExpressionc                 J    t                                          |           d S r   r   r  s     r   r   zMonitorExitExpression.__init__#  r  r   c                 L    |                     | j        | j                           S r   )visit_monitor_exitr   r  r>   s     r   r@   zMonitorExitExpression.visit&  s    ))$,tx*@AAAr   r  r   s   @r   r  r  "  sN            B B B B B B Br   r  c                   *     e Zd Z fdZd Zd Z xZS )ThrowExpressionc                 J    t                                          |           d S r   r   r  s     r   r   zThrowExpression.__init__+  r  r   c                 L    |                     | j        | j                           S r   )visit_throwr   r  r>   s     r   r@   zThrowExpression.visit.  s    ""4<#9:::r   c                 ,    d| j         | j                 z  S )NzThrow %sr  r	   s    r   r`   zThrowExpression.__str__1  s    DL222r   r   r   s   @r   r  r  *  sV            ; ; ;3 3 3 3 3 3 3r   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )BinaryExpressionc                     t                                                       || _        |j        | _        |j        | _        | j                            |j        |f|j        |fg           || _        d S r   )	r|   r   oprH   arg1arg2r   r   r   r
   r  r  r  r"   r   s        r   r   zBinaryExpression.__init__6  sd    F	F	dfd^dfd^<===			r   c                     | j         }|| j                                                 p|| j                                                 S r   )r   r  r%   r  r   s     r   r%   z BinaryExpression.has_side_effect>  s=    l	N**,, 049~--//	
r   c                     | j         }|| j                                                 }|                    || j                                                            t          t          |                    S r   r   r  r'   r   r  r   r   r   s      r   r'   zBinaryExpression.get_used_varsE  Z    l^1133
#di.6688999C
OO$$$r   c                 t    | j         }|                    | j        || j                 || j                           S r   )r   visit_binary_expressionr  r  r  r   s      r   r@   zBinaryExpression.visitK  s6    l..GS^S^
 
 	
r   c                     | j         |k    r|j        | _         | j        |k    r|j        | _        | j                            |           || j        |j        <   d S r   r  rH   r  r   r   r,   s      r   r5   zBinaryExpression.replace_varQ  X    9DI9DI!SUr   c                 ^   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                rc|||                                <   | j        |k    r|                                | _        | j        |k    r|                                | _        d S d S |||<   d S || j                 || j                 fD ]@}|                                s*|                                s|                    ||           Ad S r   r   r   r   r/   rL   r  r  r   s        r   r/   zBinaryExpression.replaceY  '   l#::c(CLLNN 
#cllnn 
#C%%%%%<<>> #'*C		$yC''$'IIKK	yC''$'IIKK			 ('  #CHHHDIDI7 * * *#,,.. *KKS)))* *r   c                 t    | j         }d                    | j        || j                 || j                           S )Nz
({} {} {})r   r   r  r  r  r   s     r   r`   zBinaryExpression.__str__m  s/    l""47C	NC	NKKKr   r   r   s   @r   r  r  5  s            
 
 
% % %
 
 
" " "* * *(L L L L L L Lr   r  c                   $     e Zd Z fdZd Z xZS )BinaryCompExpressionc                 P    t                                          ||||           d S r   r   r  s        r   r   zBinaryCompExpression.__init__s  s'    T4/////r   c                 t    | j         }|                    | j        || j                 || j                           S r   r   visit_cond_expressionr  r  r  r   s      r   r@   zBinaryCompExpression.visitv  6    l,,GS^S^
 
 	
r   r  r   s   @r   r  r  r  sG        0 0 0 0 0
 
 
 
 
 
 
r   r  c                        e Zd Z fdZ xZS )BinaryExpression2Addrc                 P    t                                          ||||           d S r   r   )r
   r  destr   r"   r   s        r   r   zBinaryExpression2Addr.__init__~  s'    T3.....r   r-  r   s   @r   r  r  }  s8        / / / / / / / / /r   r  c                        e Zd Z fdZ xZS )BinaryExpressionLitc                 P    t                                          |||d           d S rx  r   r
   r  r  r  r   s       r   r   zBinaryExpressionLit.__init__  s'    T4-----r   r-  r   s   @r   r  r    s8        . . . . . . . . .r   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )UnaryExpressionc                     t                                                       || _        |j        | _        || j        |j        <   || _        d S r   )r|   r   r  rH   r   r   r   )r
   r  r   r"   r   s       r   r   zUnaryExpression.__init__  sB    5!SU			r   c                 J    | j         | j                                                 S r   )r   r   r   r	   s    r   r   zUnaryExpression.get_type  r\  r   c                 J    | j         | j                                                 S r   r^  r	   s    r   r'   zUnaryExpression.get_used_vars  r   r   c                 X    |                     | j        | j        | j                           S r   )visit_unary_expressionr  r   r   r>   s     r   r@   zUnaryExpression.visit  #    --dgt|DH7MNNNr   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   r@  r,   s      r   r5   zUnaryExpression.replace_var  r   r   c                 P   | j         }|| j                 }|                                s,|                                s|                    ||           d S ||v rM|                                r2|||                                <   |                                | _        d S |||<   d S d S r   rB  r   s        r   r/   zUnaryExpression.replace      l$(m 	#,,.. 	KKS!!!!!CZZ||~~ #&CIIKK 99;;C Zr   c                 X    d                     | j        | j        | j                           S )Nz({}, {})r   r  r   r   r	   s    r   r`   zUnaryExpression.__str__  s#      $,tx*@AAAr   r  r   s   @r   r  r    s            1 1 16 6 6O O O" " "

 
 
B B B B B B Br   r  c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )CastExpressionc                 \    t                                          |||           || _        d S r   )r|   r   rK   )r
   r  rM   r   r   s       r   r   zCastExpression.__init__  s*    S%(((r   c                 J    | j         | j                                                 S r   r[  r	   s    r   r   zCastExpression.is_const  r\  r   c                     | j         S r   r   r	   s    r   r   zCastExpression.get_type  r    r   c                 J    | j         | j                                                 S r   r^  r	   s    r   r'   zCastExpression.get_used_vars  r   r   c                 X    |                     | j        | j        | j                           S r   )
visit_castr  r   r   r>   s     r   r@   zCastExpression.visit  s#    !!$'4<+ABBBr   c                 X    d                     | j        | j        | j                           S )NzCAST_{}({})r  r	   s    r   r`   zCastExpression.__str__  #    ##DGT\$(-CDDDr   )
rA   rB   rC   r   r   r   r'   r@   r`   r   r   s   @r   r  r    s            1 1 1  6 6 6C C CE E E E E E Er   r  !===>=><<=)r  r  r  r  r  r  c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
ConditionalExpressionc                     t                                                       || _        |j        | _        |j        | _        | j                            |j        |f|j        |fg           d S r   )r|   r   r  rH   r  r  r   r   r  s       r   r   zConditionalExpression.__init__  s_    F	F	dfd^dfd^<=====r   c                     d S r   r   r	   s    r   r<   zConditionalExpression.get_lhs  r   r   c                     dS r   r   r	   s    r   r   zConditionalExpression.is_cond  r   r   c                     | j         }|| j                                                 }|                    || j                                                            t          t          |                    S r   r  r   s      r   r'   z#ConditionalExpression.get_used_vars  r  r   c                 4    t           | j                 | _        d S r   CONDSr  r	   s    r   negzConditionalExpression.neg      .r   c                 t    | j         }|                    | j        || j                 || j                           S r   r  r   s      r   r@   zConditionalExpression.visit  r  r   c                     | j         |k    r|j        | _         | j        |k    r|j        | _        | j                            |           || j        |j        <   d S r   r  r,   s      r   r5   z!ConditionalExpression.replace_var  r  r   c                 ^   | j         }||v r||         }|                                s,|                                s|                    ||           d S |                                rc|||                                <   | j        |k    r|                                | _        | j        |k    r|                                | _        d S d S |||<   d S || j                 || j                 fD ]@}|                                s*|                                s|                    ||           Ad S r   r  r   s        r   r/   zConditionalExpression.replace  r  r   c                 t    | j         }d                    | j        || j                 || j                           S )NzCOND({}, {}, {})r  r   s     r   r`   zConditionalExpression.__str__  s6    l!((GS^S^
 
 	
r   rA   rB   rC   r   r<   r   r'   r  r@   r5   r/   r`   r   r   s   @r   r	  r	    s        > > > > >    % % %! ! !
 
 
" " "* * *(
 
 
 
 
 
 
r   r	  c                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
ConditionalZExpressionc                     t                                                       || _        |j        | _        || j        |j        <   d S r   )r|   r   r  rH   r   r   )r
   r  r   r   s      r   r   zConditionalZExpression.__init__  s=    5!SUr   c                     d S r   r   r	   s    r   r<   zConditionalZExpression.get_lhs  r   r   c                     dS r   r   r	   s    r   r   zConditionalZExpression.is_cond  r   r   c                 J    | j         | j                                                 S r   r^  r	   s    r   r'   z$ConditionalZExpression.get_used_vars  r   r   c                 4    t           | j                 | _        d S r   r  r	   s    r   r  zConditionalZExpression.neg  r  r   c                 X    |                     | j        | j        | j                           S r   )visit_condz_expressionr  r   r   r>   s     r   r@   zConditionalZExpression.visit  r  r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   r@  r,   s      r   r5   z"ConditionalZExpression.replace_var"  r   r   c                 P   | j         }|| j                 }|                                s,|                                s|                    ||           d S ||v rM|                                r2|||                                <   |                                | _        d S |||<   d S d S r   rB  r   s        r   r/   zConditionalZExpression.replace'  r  r   c                 X    d                     | j        | j        | j                           S )Nz(IS{}0, {})r  r	   s    r   r`   zConditionalZExpression.__str__3  r  r   r  r   s   @r   r  r    s        " " " " "    6 6 6! ! !O O O" " "

 
 
E E E E E E Er   r  c                   B     e Zd Z fdZd Zd Zd Zd Zd Zd Z	 xZ
S )InstanceExpressionc                     t                                                       |j        | _        t	          j        |          | _        || _        || _        || j	        |j        <   || _
        d S r   )r|   r   rH   r   r   r   rd   r   re   r   rK   )r
   r   r   r   re   r   s        r   r   zInstanceExpression.__init__8  r   r   c                     | j         S r   r   r	   s    r   r   zInstanceExpression.get_typeB  
    zr   c                 J    | j         | j                                                 S r   r^  r	   s    r   r'   z InstanceExpression.get_used_varsE  r   r   c                 f    |                     | j        | j                 | j        | j                  S rh   )visit_get_instancer   r   re   r   r>   s     r   r@   zInstanceExpression.visitH  s3    ))L"DIDJ * 
 
 	
r   c                 p    |j         | _        | j                            |           || j        |j         <   d S r   r@  r,   s      r   r5   zInstanceExpression.replace_varM  r   r   c                 P   | j         }|| j                 }|                                s,|                                s|                    ||           d S ||v rM|                                r2|||                                <   |                                | _        d S |||<   d S d S r   rB  r   s        r   r/   zInstanceExpression.replaceR  r  r   c                 X    d                     | j        | j                 | j                  S Nz{}.{})r   r   r   re   r	   s    r   r`   zInstanceExpression.__str__^  s!    ~~dl484di@@@r   r  r   s   @r   r%  r%  7  s              6 6 6
 
 

" " "

 
 
A A A A A A Ar   r%  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )StaticExpressionc                     t                                                       t          j        |          | _        || _        || _        || _        d S r   )r|   r   r   r   rd   r   re   rK   )r
   cls_name
field_type
field_namer   s       r   r   zStaticExpression.__init__c  sC    =**
	r   c                     | j         S r   r(  r	   s    r   r   zStaticExpression.get_typek  r)  r   c                 B    |                     | j        | j                  S r   )visit_get_staticrd   re   r>   s     r   r@   zStaticExpression.visitn  s    ''$)<<<r   c                     d S r   r   r,   s      r   r/   zStaticExpression.replaceq  r8   r   c                 B    d                     | j        | j                  S r0  )r   rd   re   r	   s    r   r`   zStaticExpression.__str__t  s    ~~dh	222r   )	rA   rB   rC   r   r   r@   r/   r`   r   r   s   @r   r2  r2  b  st                   = = =  3 3 3 3 3 3 3r   r2  ).androguard.decompiler.util
decompilerr   r   rE   rb   rk   ry   r   r   r   r   r   r   r   r   r  r+  r/  r4  r8  rF  rM  rX  re  rh  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r%  r2  r   r   r   <module>r>     s  $ * ) ) ) ) ) ) ) )3 3 3 3 3 3 3 3l-) -) -) -) -)v -) -) -)`) ) ) ) ) ) ) )"$ $ $ $ $v $ $ $4& & & & &H & & &"       .M .M .M .M .Mv .M .M .Mb5F 5F 5F 5F 5FV 5F 5F 5FpF F F F F> F F F&=
 =
 =
 =
 =
F =
 =
 =
@+P +P +P +P +P +P +P +P\<L <L <L <L <L& <L <L <L~% % % % %& % % %*Z
 Z
 Z
 Z
 Z
 Z
 Z
 Z
zJ J J J J. J J JJ J J J J/ J J J
	% 	% 	% 	% 	%/ 	% 	% 	%* * * * * * * *Z# # # # #F # # #7 7 7 7 7v 7 7 7D&G &G &G &G &G& &G &G &GR    f   
4J 4J 4J 4J 4J/ 4J 4J 4Jn!; !; !; !; !;O !; !; !;H"L "L "L "L "L "L "L "LJ6K 6K 6K 6K 6KO 6K 6K 6Kr"L "L "L "L "L/ "L "L "LJ    F   <9 9 9 9 9m 9 9 96C C C C C] C C CB B B B BM B B B3 3 3 3 3m 3 3 3:L :L :L :L :Lv :L :L :Lz
 
 
 
 
+ 
 
 
/ / / / /, / / /
. . . . .* . . .
#B #B #B #B #Bf #B #B #BLE E E E E_ E E E, 
	

		 	=
 =
 =
 =
 =
F =
 =
 =
@(E (E (E (E (EV (E (E (EV(A (A (A (A (A (A (A (AV3 3 3 3 3v 3 3 3 3 3r   