
    ÆeW                     N    d dl Z d dlZd dlZdZd Z G d d      Z G d d      Zy)    N   c                 Z    | j                         }t        |      }|j                  |      S N)readWorderget_word_at)resourceoffsetsource_codeword_finders       2/usr/lib/python3/dist-packages/rope/base/worder.pyget_name_atr   	   s(    --/K%K""6**    c                       e Zd ZdZd"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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"y!)#r   a  A class for finding boundaries of words and expressions

    Note that in these methods, offset should be the index of the
    character not the index of the character after it.

    Some of the methods here doesn't exactly do what their name might lead you
    to think they do, these probably should be fixed. Refer to
    ropetest/codeanalyzetest.py for what these methods returns. Note that
    codeanalyzetest.py documents the current behavior, rather than what they
    should've been.
    c                     t         j                  j                  j                  |      }t	        ||      | _        || _        || _        y r   )ropebasesimplify	real_code_RealFindercode_finderhandle_ignorescode)selfr   r   
simplifieds       r   __init__zWorder.__init__   s:    YY''11$7
&z48,	r   c                 (   t         j                  j                  j                  | j                        }t        | j                  | j                        | _        |D cg c]  }|d   	 c}| _        |D cg c]  }|d   	 c}| _        y c c}w c c}w Nr      )	r   r   r   ignored_regionsr   r   dumb_finderstartsends)r   ignoresignoreds      r   _init_ignoreszWorder._init_ignores"   sk    ))$$44TYY?&tyy$))<189gwqz9/67GWQZ7	 :7s   B
5Bc                 6   | j                   rrt        | d      s| j                          t        j                  | j                  |      }|dkD  r1|| j
                  |dz
     k  r t        | j                  |      |      S  t        | j                  |      |      S )Nr"   r   r   )	r   hasattrr&   bisectr"   r#   getattrr!   r   )r   namer
   starts       r   _context_callzWorder._context_call(   s    4*""$MM$++v6EqyVdii	&::6wt//6v>>.wt''.v66r   c                 &    | j                  d|      S )Nget_primary_atr-   r   r
   s     r   r/   zWorder.get_primary_at1       !!"2F;;r   c                 &    | j                  d|      S )Nr   r0   r1   s     r   r   zWorder.get_word_at4   s    !!-88r   c                 &    | j                  d|      S )Nget_primary_ranger0   r1   s     r   r5   zWorder.get_primary_range7   s    !!"5v>>r   c                 &    | j                  d|      S )Nget_splitted_primary_beforer0   r1   s     r   r7   z"Worder.get_splitted_primary_before:   s    !!"?HHr   c                 &    | j                  d|      S )Nget_word_ranger0   r1   s     r   r9   zWorder.get_word_range=   r2   r   c                 8    | j                   j                  |      S r   )r   is_function_keyword_parameterr1   s     r   r;   z$Worder.is_function_keyword_parameter@       ==fEEr   c                 8    | j                   j                  |      S r   )r   %is_a_class_or_function_name_in_headerr1   s     r   r>   z,Worder.is_a_class_or_function_name_in_headerC   s    EEfMMr   c                 8    | j                   j                  |      S r   )r   is_from_statement_moduler1   s     r   r@   zWorder.is_from_statement_moduleF   s    88@@r   c                 8    | j                   j                  |      S r   )r   is_from_aliasedr1   s     r   rB   zWorder.is_from_aliasedI       //77r   c                 8    | j                   j                  |      S r   )r   "is_import_statement_aliased_moduler1   s     r   rE   z)Worder.is_import_statement_aliased_moduleL   s    BB6JJr   c                 8    | j                   j                  |      S r   )r   find_parens_start_from_insider1   s     r   rG   z$Worder.find_parens_start_from_insideO   r<   r   c                 8    | j                   j                  |      S r   )r   is_a_name_after_from_importr1   s     r   rI   z"Worder.is_a_name_after_from_importR       ;;FCCr   c                 8    | j                   j                  |      S r   )r   is_from_statementr1   s     r   rL   zWorder.is_from_statementU   s    11&99r   c                 8    | j                   j                  |      S r   )r   get_from_aliasedr1   s     r   rN   zWorder.get_from_aliasedX       0088r   c                 8    | j                   j                  |      S r   )r   is_import_statementr1   s     r   rQ   zWorder.is_import_statement[       33F;;r   c                 8    | j                   j                  |      S r   )r   is_assigned_herer1   s     r   rT   zWorder.is_assigned_here^   rO   r   c                 8    | j                   j                  |      S r   )r   is_a_function_being_calledr1   s     r   rV   z!Worder.is_a_function_being_calleda   s    ::6BBr   c                 8    | j                   j                  |      S r   )r   get_word_parens_ranger1   s     r   rX   zWorder.get_word_parens_ranged   s    55f==r   c                 8    | j                   j                  |      S r   )r   is_name_assigned_in_class_bodyr1   s     r   rZ   z%Worder.is_name_assigned_in_class_bodyg   s    >>vFFr   c                 8    | j                   j                  |      S r   )r   is_on_function_call_keywordr1   s     r   r\   z"Worder.is_on_function_call_keywordj   rJ   r   c                 8    | j                   j                  |      S r   )r   _find_parens_startr1   s     r   r^   zWorder._find_parens_startm   s    226::r   c                 :    | j                   j                  ||      S r   )r   get_parameters)r   firstlasts      r   r`   zWorder.get_parametersp   s    ..ud;;r   c                 8    | j                   j                  |      S r   )r   get_from_moduler1   s     r   rd   zWorder.get_from_modules   rC   r   c                 8    | j                   j                  |      S r   )r   !is_assigned_in_a_tuple_assignmentr1   s     r   rf   z(Worder.is_assigned_in_a_tuple_assignmentv   s    AA&IIr   c                 8    | j                   j                  |      S r   )r   get_assignment_typer1   s     r   rh   zWorder.get_assignment_typey   rR   r   c                 8    | j                   j                  |      S r   )r   get_function_and_args_in_headerr1   s     r   rj   z&Worder.get_function_and_args_in_header|   s    ??GGr   c                 8    | j                   j                  |      S r   )r   get_lambda_and_argsr1   s     r   rl   zWorder.get_lambda_and_args   rR   r   c                 8    | j                   j                  |      S r   )r   find_function_offsetr1   s     r   rn   zWorder.find_function_offset   s    44V<<r   N)F)#__name__
__module____qualname____doc__r   r&   r-   r/   r   r5   r7   r9   r;   r>   r@   rB   rE   rG   rI   rL   rN   rQ   rT   rV   rX   rZ   r\   r^   r`   rd   rf   rh   rj   rl   rn    r   r   r   r      s    
87<9?I<FNA8KFD:9<9C>GD;<8J<H<=r   r   c                      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 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% Z'd& Z(d/d'Z)d( Z*d) Z+d* Z,d+ Z-d0d,Z.d- Z/y.)1r   c                      || _         || _        y r   )r   raw)r   r   rv   s      r   r   z_RealFinder.__init__   s    	r   c                 t    |}|dk\  r-| j                  |      r|dz  }|dk\  r| j                  |      r|dz   S r   )_is_id_char)r   r
   current_offsets      r   _find_word_startz_RealFinder._find_word_start   sH    !d&6&6~&FaN !d&6&6~&F!!r   c                     |dz   t        | j                        k  rI| j                  |dz         r5|dz  }|dz   t        | j                        k  r| j                  |dz         r5|S Nr   lenr   rx   r1   s     r   _find_word_endz_RealFinder._find_word_end   s\    qj3tyy>)d.>.>vz.JaKF qj3tyy>)d.>.>vz.Jr   c                     |dk\  rY| j                   |   j                         r<| j                   |   dk(  r|S |dz  }|dk\  r| j                   |   j                         r<t        d|      S )Nr   
r   )r   isspacemaxr1   s     r   _find_last_non_space_charz%_RealFinder._find_last_non_space_char   sg    kdii/779yy D(aKF kdii/779 2vr   c                     | j                  |      }| j                  | j                  |      | j                  |      dz    S r|   )_get_fixed_offsetrv   rz   r   r1   s     r   r   z_RealFinder.get_word_at   s?    ''/xx--f58K8KF8SVW8WXXr   c                    |t        | j                        k\  r|dz
  S | j                  |      sR|dkD  r| j                  |dz
        r|dz
  S |t        | j                        dz
  k  r| j                  |dz         r|dz   S |S )Nr   r   r}   r1   s     r   r   z_RealFinder._get_fixed_offset   s    S^#A:'zd..vz:z!DII**t/?/?
/Kz!r   c                 d    | j                   |   j                         xs | j                   |   dk(  S )N_)r   isalnumr1   s     r   rx   z_RealFinder._is_id_char   s-    yy ((*Fdii.?3.FFr   c                 z    | j                   |   }	 | j                   j                  |d|      S # t        $ r Y yw xY w)Nr   r   rindex
ValueError)r   r
   kinds      r   _find_string_startz_RealFinder._find_string_start   s@    yy 	99##D!V44 		s   . 	::c                     | j                  |dz
        }|dk\  r^| j                  |   dvrM| j                  |   dvr| j                  |      }| j                  |dz
        }|dk\  r| j                  |   dvrM|S )Nr   r   z[({z:,)r   r   _find_primary_startr1   s     r   r^   z_RealFinder._find_parens_start   s    //
;kdii/u<yy ,11&933FQJ?F kdii/u< r   c                 `   |}| j                   |   dk(  r|dz   S | j                   |   j                         r| j                  |      }| j                   |   dv r| j                  |      S | j                   |   dv r| j	                  |      S | j                  |      r| j                  |      S |S )Nr   r   z'"z)]})r   r   r   r   r^   rx   rz   )r   r
   
old_offsets      r   _find_atom_startz_RealFinder._find_atom_start   s    
99V$A:99V$$&33F;F99V%**62299V%**622F#((00r   c                    |}| j                  |      }|dkD  rM| j                  |   dv r<| j                  |      }| j                  |dz
        }|dkD  r| j                  |   dv r<|dk\  r| j                  |   dv s| j                  |      rg| j	                  |      }t        j                  | j                  ||dz          r/|dz   t        | j                        k  r| j                  |dz         r|S |S )zIt tries to find the undotted primary start

        It is different from `self._get_atom_start()` in that it
        follows function calls, too; such as in ``f(x)``.

        r   z)]r   z"'})])r   r   r^   rx   r   keyword	iskeywordr~   )r   r
   	last_atom
atom_starts       r   _find_primary_without_dot_startz+_RealFinder._find_primary_without_dot_start   s     	//	:qjTYYv.$6//7I33IMBF qjTYYv.$6 Q;DIIf-9T=M=Mf=U..v6J$$TYYzFQJ%GH
S^+0@0@!0L!!r   c                    |t        | j                        k\  rt        | j                        dz
  }| j                  |   dk7  r| j                  |      }n|dz   }|dkD  r| j                  |dz
        }|dk  s| j                  |   dk7  r	 |S | j                  |dz
        }| j                  |dz
  |dz    dk(  r|}	 |S | j                  |dz
        }| j	                  |      s	 |S |dkD  r|S )Nr   .r      from)r~   r   r   r   rx   )r   r
   prevprev_word_ends       r   r   z_RealFinder._find_primary_start   s   S^#^a'F99V#99&AFaZFqj11&1*=D{diio4  !::4!8DMyy*]Q->?6I 	 99$(CF##F+! qj  r   c                     | j                  |      }| j                  |      \  }}| j                  || j                         S r   )r   r5   rv   stripr   r
   r,   ends       r   r/   z_RealFinder.get_primary_at   s@    ''/++F3
sxxc"((**r   c                    |dk(  ry|dz
  }| j                  |      }| j                  |      }| j                  || j                         dk(  r|}| j                  |   j	                         r|}| j                  || j                         dk(  r|}||cxk(  r|k(  rn n| j                  |      sdd|fS ||k(  rd| j                  || |fS | j                  |   dk(  r| j                  || d|fS |}| j                  |   dk7  r| j                  |dz
        }| j                  |dz
        }| j                  |   j	                         r|}| j                  ||dz    | j                  || |fS )z{returns expression, starting, starting_offset

        This function is used in `rope.codeassist.assist` function.
        r   ) r   r   r   r   r   )r   r   r   r   r   rx   rv   r   )r   r
   r   
word_start
real_startlast_dot_positionlast_char_positions          r   r7   z'_RealFinder.get_splitted_primary_before   s   
 Q;qj**3/
--c2
99Z'--/25J99S>!!#J99Z
+113r9#J*s*43C3CC3HF###F3Z@@yy~$C0"f== *yy$+$($B$B:PQ>$R!!%!?!?@QTU@U!Vyy$,,.#
&81&<=F+ r   c                 b    	 | j                   j                  dd|dz         S # t        $ r Y yw xY w)Nr   r   r   r   r1   s     r   _get_line_startz_RealFinder._get_line_start   s6    	99##D!VaZ88 		s   " 	..c                     	 | j                   j                  d|      S # t        $ r t        | j                         cY S w xY w)Nr   )r   indexr   r~   r1   s     r   _get_line_endz_RealFinder._get_line_end&  s9    	"99??400 	"tyy>!	"s    ??c                    | j                  |dz
        }| j                  |      dz   }d| j                  || v ry| j                  |      }| j                  || j	                         }| xr | j                  |      dk(  S )Nr   r   F=)rz   r   r   r   r   rh   )r   r
   r   word_end
line_startlines         r   rZ   z*_RealFinder.is_name_assigned_in_class_body,  s    **6A:6
&&v.2$))Jx00))*5
yyJ/557xCD44V<CCr   c                     | j                  |dz
        }| j                  |      }| j                  || j                         }|dv S )Nr   )defclass)rz   r   r   r   )r   r
   r   r   	prev_words        r   r>   z1_RealFinder.is_a_class_or_function_name_in_header5  sK    **6A:6
))*5
IIj4::<	,,,r   c                 h   |t        | j                        k\  rt        | j                        S |t        | j                        k  rl| j                  |   j                         rO| j                  |   dk(  r|S |dz  }|t        | j                        k  r| j                  |   j                         rO|S )Nr   r   )r~   r   r   r1   s     r   _find_first_non_space_charz&_RealFinder._find_first_non_space_char;  s    S^#tyy>!s499~%$))F*;*C*C*Eyy D(aKF s499~%$))F*;*C*C*E r   c                     | j                  |      dz   }| j                  |      }|t        | j                        k  xr& | j                  |   dk(  xr | j	                  |       S )Nr   ()r   r   r~   r   r>   )r   r
   r   	next_chars       r   rV   z&_RealFinder.is_a_function_being_calledD  sj    &&v.233H=	DII& G		)$+G>>vFF	
r   c                 $    | j                  |      S r   )r   )r   r,   s     r   _find_import_endz_RealFinder._find_import_endM  s    !!%((r   c                     	 | j                   j                  dd|      }| j                  |      }| j	                  |dz         |k\  xr | j                  |      |k(  S # t        $ r Y yw xY w)Nzimport r   F   )r   r   r   r   r   rz   )r   r
   last_importr   s       r   rQ   z_RealFinder.is_import_statementP  sz    	))**9a@K ))+6
!!+/2f< A%%j1[@	
  		s   A 	A)(A)c                     	 | j                   j                  dd|      }| j                   j                  d|      }|dz   }| j	                  |      }| j                  |      |k\  S # t        $ r Y yw xY w)Nfrom r    import    F)r   r   r   r   r   r   )r   r
   	last_fromfrom_import
from_namess        r   rL   z_RealFinder.is_from_statement[  sx    			((!V<I))//*i@K$qJ 44Z@
$$Z0F::  		s   >A% %	A10A1c                     |t        | j                        dz
  k\  ry| j                  |      }| j                  |      }| j                  || j	                         }|dk(  S )Nr   Fr   )r~   r   r   r   r   )r   r
   
stmt_startr   r   s        r   r@   z$_RealFinder.is_from_statement_modulee  s^    S^a''--f5
))*5
IIj4::<	F""r   c                    | j                  |      sy	 | j                  |      }| j                  j                  d||      }|dz   }|dz
  |kD  s| j                  |      |k  ry	 | j                  |      }| j                  |      syt        | j                  |dz         t        | j                              }| j                  |      }| j                  ||dz    dk(  S # t        $ r Y yw xY w# t        $ r Y yw xY w)NFimportr   r   as)rQ   r   r   r   r   r   _find_import_main_part_end_has_enough_len_for_asminr   r~   rz   )r   r
   r   
import_idximported_namesr   as_endas_starts           r   rE   z._RealFinder.is_import_statement_aliased_modulem  s   ''/	--f5J))(JGJ'!^N
 Q'$$^4v=	11&9C..s3,,S1W5s499~FF,,V4H99X
3t;;  		  		s*   3C %"C. AC. 	C+*C+.	C:9C:c                 @    t        | j                        |t        z   kD  S r   )r~   r   MINIMAL_LEN_FOR_AS)r   r   s     r   r   z"_RealFinder._has_enough_len_for_as  s    499~&8 888r   c                    | j                  |      }t        | j                        |dz   kD  rZ| j                  |dz      dk(  rE| j                  |dz         }t        | j                        |dz   kD  r| j                  |dz      dk(  rE|S )N   r   r   )r   r~   r   )r   r
   r   s      r   r   z&_RealFinder._find_import_main_part_end  s}    !!&)$))nsQw&499S1W+=+D%%cAg.C $))nsQw&499S1W+=+D
r   c                 x   	 t        | j                        |kD  r'| j                  |   dk(  r| j                  |dz
        }n| j                  |      }| j                  j                  d||      }| j                  j	                  d|      }|dz   }|dz
  |kD  ry| j                  |      |k\  S # t
        $ r Y yw xY w)Nr   r   r   r   r   F)r~   r   r   r   r   r   r   )r   r
   r   r   r   r   s         r   rI   z'_RealFinder.is_a_name_after_from_import  s    		499~&499V+<+D!11&1*=
!11&9
		((*fEI))//*i@K$qJ >F"$$Z0F::	  		s   BB- -	B98B9c                     	 | j                   j                  dd|      }| j                   j                  d|      }| j                  |      }| j	                  |      S # t
        $ r Y y w xY w)Nr   r   r   )r   r   r   r   r/   r   )r   r
   r   import_offsetr   s        r   rd   z_RealFinder.get_from_module  sf    			((!V<I IIOOJ	BM00?C&&s++ 		s   AA 	A)(A)c                    | j                  |      sy	 | j                  |      }t        | j                  |dz         t        | j                              }| j                  |      }| j                  ||dz    dk(  S # t        $ r Y yw xY w)NFr   r   )rI   r   r   r~   r   rz   r   )r   r
   r   r   r   s        r   rB   z_RealFinder.is_from_aliased  s    //7	%%f-C,,S1W5s499~FF,,V4H99X
3t;; 		s   A'A< <	BBc                     	 | j                  |      }| j                  |dz         }| j                  |dz         }| j                  |      }| j                  ||dz    S # t        $ r Y y w xY wr|   )r   rz   rv   r   )r   r
   r   as_aliasr,   s         r   rN   z_RealFinder.get_from_aliased  sv    	%%f-C%%cAg.C''a0E))%0E88EEAI.. 		s   AA 	A*)A*c                 V   | j                  |      }|dz   t        | j                        k(  ry| j                  |dz         }| j                  ||dz    }|dk(  s|j	                  d      sy| j                  |      }| j                  |dz
        }|dz
  dk\  xr | j                  |   dv S )Nr   Fr   ==r   r   z,()r   r~   r   r   
startswithrz   r   )r   r
   r   r   equalsr   	prev_chars          r   r;   z)_RealFinder.is_function_keyword_parameter  s    &&v.a<3tyy>)33HqLA	9y1}5T>!2!23!7**62
22:>B	1}!Bdii	&:d&BBr   c                     | j                  |      }| j                  |      r| j                  |      dz
  }| j                  |      }||k  s| j                  |   dvry| j                  |      }||k  S )Nr   (,F)r   rx   rz   r   r   rG   )r   r
   stopparens_starts       r   r\   z'_RealFinder.is_on_function_call_keyword  sz    ##F+F#**62Q6F//7T>TYYv.d:99&Al""r   c                     | j                  |      }||kD  rA| j                  |   dk(  rn.| j                  |   dk7  r| j                  |      }|dz  }||kD  rAt        ||      S )Nr   ,r   )r   r   r   r   )r   r
   r   s      r   rG   z)_RealFinder.find_parens_start_from_inside  so    ##F+tmyy C'yy C'11&9aKF tm 4  r   c                 (    | j                  |      d uS r   )rh   r1   s     r   rT   z_RealFinder.is_assigned_here  s    ''/t;;r   c                    | j                  |      }| j                  |dz         }| j                  ||dz    }| j                  ||dz    }| j                  ||dz    }|dvr |||fD ]  }|j                  d      s|c S  y y )Nr   r   r   )r   z<=z>=z!=r   )r   r   r   endswith)r   r
   r   r   singledoubletripleops           r   rh   z_RealFinder.get_assignment_type  s    &&v.33HqLA	9y1}59y1}59y1}511vv. ;;s#I 2r   c                 T    | j                  |      }| j                  |      dz   }||fS r|   )r   r   r   s       r   r5   z_RealFinder.get_primary_range  s1    ((0!!&)A-s|r   c                 l    t        d|      }| j                  |      }| j                  |      dz   }||fS r   )r   rz   r   r   s       r   r9   z_RealFinder.get_word_range  s<    Q%%f-!!&)A-s|r   c                 L   | j                  |      }| j                  j                  ||      }|}d}|t        | j                        k  rX| j                  |   |k(  r|dz  }| j                  |   |k(  r|dz  }|dk(  r||dz   fS |dz  }|t        | j                        k  rX||fS r   )r   r   r   r~   )r   r
   openingclosingr   start_parensr   
open_counts           r   rX   z!_RealFinder.get_word_parens_range  s    !!&)yyw4
c$))n$yy7*a
yy7*a
Q$eai00QJE c$))n$ e$$r   c                    g }g }| j                  |dz
        }||kD  r~|}| j                  |      }||k7  re| j                  |   dvs| j                  |dz
     dv r@| j                  |dz
        }||k7  r'| j                  |   dvr+| j                  |dz
     dv r@| j                  |dz   |dz    j	                         }| j                  |   dk(  r|dz
  }|dz  }||k7  r<| j                  |   dvr+| j                  |dz
        }||k7  r| j                  |   dvr+| j                  |dz   |dz    j	                         }|j                  | j                  |      |f       n |j                  | j                  |             | j                  |dz
        }||kD  r~|j                          |j                          ||fS )Nr   z=,z=!<>r   r   )r   r   r   rv   r   append_RealFinder__strip_type_hintreverse)	r   ra   rb   keywordsargscurrentprimary_startprimary
param_names	            r   r`   z_RealFinder.get_parameters  s   00:o#M..w7GU"		'"$.$))GaK2HF2R881E U"		'"$.$))GaK2HF2R hhw{]Q->?EEGGyy!S( '!1&499W+=S+H"<<Wq[IG &499W+=S+H!XXgkMA4EFLLN
!7!7
!CW MND227;<44Wq[AG# o$ 	X~r   c                 ,    |j                  dd      d   S )N:r   r   )split)r   r+   s     r   __strip_type_hintz_RealFinder.__strip_type_hint  s    zz#q!!$$r   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |dz
        }| j                  |dz         }dx}}	||k\  r| j                  |   }	||k  r| j                  |   }	 | j                  j                  d||      }
|	dvr|dvry| j                  |      }||
k  xr  | j                  || j                         dk(  S # t        $ r Y yw xY w)Nr   r   r   Fr   z,))r   r   r   r   r   r   r   r   r   rG   r   )r   r
   r,   r   r  primary_endprev_char_offsetnext_char_offsetr   r   equals_offsetr   s               r   rf   z-_RealFinder.is_assigned_in_a_tuple_assignment"  s"   $$V,  (008))&199-!:KL::;?K ""	Iu$		"23Ic!		"23I	 IIOOC<M D Yd%:99&A%U$))E,*G*M*M*OSU*UU  		s   C8 8	DDc                 p    | j                  |      }| j                  |      \  }}| j                  ||dz    S r|   rn   rX   rv   r   r
   lparensrparenss       r   rj   z+_RealFinder.get_function_and_args_in_header9  s<    **6255f=xx1--r   c                     	 | j                   j                  ||      }|dk(  s| j                  |dz
        sn|dz  }<|dz   }| j                  |      S )Nr   r      )r   r   rx   r   )r   r
   
definitiondef_s       r   rn   z _RealFinder.find_function_offset>  s^    YY__Z8F{$"2"26A:">aKF	 
 z..t44r   c                 z    | j                  |d      }| j                  |dd      \  }}| j                  ||dz    S )Nzlambda )r   r  )r   r   r   r  r  s       r   rl   z_RealFinder.get_lambda_and_argsG  sI    **6i*H55fcSV5Wxx1--r   N)r   ))zdef )0ro   rp   rq   r   rz   r   r   r   r   rx   r   r^   r   r   r   r/   r7   r   r   rZ   r>   r   rV   r   rQ   rL   r@   rE   r   r   rI   rd   rB   rN   r;   r\   rG   rT   rh   r5   r9   rX   r`   r   rf   rj   rn   rl   rs   r   r   r   r      s    "
YG(2+
!F"D-
)	
;#29;	
C#!<

%4%V..
5.r   r   )r)   r   rope.base.simplifyr   r   r   r   r   rs   r   r   <module>r     s2       +t= t=nD. D.r   