JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr g62dZddlZddlZddlmZddlmZddlmZddlmZhdZejdZ ejedd Z Gd d ejZGd d ejZGddejZGddZy)zyHandles parsing of Python code. Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler module is used. N) _ast_util)compat) exceptions)util>NoneTrueFalseprintargc  tj|d|S#t$ra}tjdt j jjdt j d|dddfi||d}~wwxYw) zParse an expression into ASTz (z) z (r2)N) rparse ExceptionrSyntaxExceptionr exception_as __class____name__)codemodeexception_kwargses >BcneZdZdZdZdZdZdZdZdZ dZ e xZ Z d Z d Zd Zd Zd ZdZdZy)FindIdentifiersc Zd|_d|_t|_||_||_yNF) in_functionin_assign_targetssetlocal_ident_stacklistenerrselfr#rs r__init__zFindIdentifiers.__init__2s+ !&!$  0c|js&|jjj|y|jj|yN)rr#declared_identifiersaddr")r%names r _add_declaredzFindIdentifiers._add_declared9s7 MM . . 2 24 8  " " & &t ,r'c:|j|jyr))r-r,r%nodes rvisit_ClassDefzFindIdentifiers.visit_ClassDef?s 499%r'c|j|j|j}d|_|jD]}|j|||_yNT)visitvaluer targets)r%r0in_ans r visit_AssignzFindIdentifiers.visit_AssignBsH 4::%%!%A JJqM!%r'c|j|j|j|j|j|j|jD]}|j|yr))r,r-typer4bodyr%r0 statements rvisit_ExceptHandlerz#FindIdentifiers.visit_ExceptHandlerNsR 99   tyy ) 99 JJtyy !I JJy !#r'c(|j|dyr3)_visit_function)r%r0argss r visit_LambdazFindIdentifiers.visit_LambdaVs T4(r'c^|j|j|j|dyr)r-r,rAr/s rvisit_FunctionDefz!FindIdentifiers.visit_FunctionDefYs$ 499% T5)r'c|jr-|jD]}|j|jy|j |yr)r generatorsr4iter generic_visitr%r0comps rvisit_ListCompzFindIdentifiers.visit_ListComp]9    499%(   t $r'c|jr-|jD]}|j|jy|j |yr)rGrKs rvisit_DictCompzFindIdentifiers.visit_DictCompfrNr'c#K|D]5}t|tjr|jEd{2|7y7 wr)) isinstance_astTupleelts)r%rBr s r_expand_tupleszFindIdentifiers._expand_tuplesms3C#tzz*88## #s/A> Ac|j}d|_|j}|j|j|jjDcgc] }t |c}|_|r|j |jn"|jD]}|j |||_||_ycc}wr3)rr"unionrVrBarg_idr4r<)r%r0islambdainfr"r r8s rrAzFindIdentifiers._visit_functionts 22!2!8!8$($7$7 $G H$GSVC[$G H"   JJtyy !YY 1 !2 IsB?c|j|j|j|j|jD]}|j||jD]}|j|yr))r4rItargetr<orelser=s r visit_ForzFindIdentifiers.visit_ForsX 499 4;;I JJy !#I JJy !%r'ct|jtjr|j |j y|j t vrl|j |jjvrI|j |jvr0|jjj|j yyyyr)) rRctxrSStorer-idreservedr#r*r"undeclared_identifiersr+r/s r visit_NamezFindIdentifiers.visit_Names dhh +   tww ' GG8 #t}}AAAt555 MM 0 0 4 4TWW =6B $r'c|jD]W}|j|j|j+|j|jj ddYy)N.r)namesasnamer-r,splitr%r0r,s r visit_ImportzFindIdentifiers.visit_ImportsLJJD{{&""4;;/""499??3#7#:; r'c |jD]t}|j|j|j+|jdk(r t j di|j |j|jvy)N*)z'import *' is not supported, since all identifier names must be explicitly declared. Please use the form 'from import , , ...' instead.)rirjr-r,rCompileExceptionrrls rvisit_ImportFromz FindIdentifiers.visit_ImportFromstJJD{{&""4;;/c! 11$ ++ ""499-r'N)r __module__ __qualname__r&r-r1r9r?rCrErM visit_SetCompvisit_GeneratorExprPrVrAr_rfrmrqr'rrr1sZ1- & &")*%*87M&%3," >< .r'rceZdZdZdZy) FindTuplec .||_||_||_yr))r#r code_factory)r%r#rzrs rr&zFindTuple.__init__s  0(r'c&|jD]}|j|fi|j}|jjj ||jj j t|j|jj}|j|j|j_ |jj}|j|j|j_ yr)) rUrzrr#codeargsappendrBExpressionGeneratorr5r*rXre)r%r0r8pldiluis r visit_TuplezFindTuple.visit_TuplesA!!!!=t'<'<=A MM " " ) )! , MM   % %&9!&<&B&B&D E--44C14&&2DMM .--66C3699((4DMM 0r'N)rrrrsr&rrvr'rrxrxs ) r'rxceZdZdZdZy) ParseFuncc ||_||_yr))r#rr$s rr&zParseFunc.__init__s  0r'c~|j|j_|jjDcgc] }t |}}|jj r/|j |jj j|jjDcgc] }t |}}|jjr/|j |jjj||j_ |jj|j_ ||j_ |jj|j_|jj |j_|jj|j_ycc}wcc}wr))r,r#funcnamerBrYvarargr}r kwonlyargskwargargnamesdefaults kwargnames kw_defaults kwdefaultsvarargskwargs)r%r0r rrs rrEzParseFunc.visit_FunctionDefs!% +/99>>:>CF3K>: 99   OODII,,00 1-1YY-A-AB-AcfSk-A B 99??   diioo11 2!) !%!3!3 #-  #'99#8#8  $ 0 0 #yy ;Cs F5%F:N)rrrrsr&rErvr'rrrs 1/r'rceZdZdZdZy)r~cntjd|_|jj|y)Nz )rSourceGenerator generatorr4)r%astnodes rr&zExpressionGenerator.__init__s&"227; W%r'cLdj|jjS)N)joinrresult)r%s rr5zExpressionGenerator.valueswwt~~,,--r'N)rrrrsr&r5rvr'rr~r~s &.r'r~)exec)__doc__operatorrSmakorrrrrd attrgetterrY restore__astr NodeVisitorrrxrr~rvr'rrs   .   U #$"C.i++C.L %%*/ %%/...r'