U  eu@sdZddlZddlZddlmZddlmZddlmZddlmZddd d hZe d Z e edd dZ Gdddej ZGdddej ZGdddej ZGdddZdS)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)utilTrueFalseNoneprintargexecc Ksfzt|d|WStk r`}z2tjdtjjt|ddff||W5d}~XYnXdS)zParse an expression into ASTz z (%s) %s (%r)r2N) rparse ExceptionrZSyntaxExceptionrZ exception_as __class____name__)codemodeexception_kwargser;/opt/hc_python/lib/python3.8/site-packages/mako/pyparser.pyr s  r c@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)FindIdentifierscKs$d|_d|_t|_||_||_dSNF) in_functionin_assign_targetssetlocal_ident_stacklistenerrselfrrrrr__init__2s zFindIdentifiers.__init__cCs&|js|jj|n |j|dSN)rrdeclared_identifiersaddr)rnamerrr _add_declared9szFindIdentifiers._add_declaredcCs||jdSr!)r%r$rnoderrrvisit_ClassDef?szFindIdentifiers.visit_ClassDefcCs8||j|j}d|_|jD]}||q||_dSNT)visitvaluertargets)rr'Zin_anrrr visit_AssignBs    zFindIdentifiers.visit_AssigncCsF|jdk r||j|jdk r,||j|jD]}||q2dSr!)r$r%typer*bodyrr'Z statementrrrvisit_ExceptHandlerNs      z#FindIdentifiers.visit_ExceptHandlercGs||ddSr))_visit_function)rr'argsrrr visit_LambdaVszFindIdentifiers.visit_LambdacCs||j||ddSr)r%r$r3r&rrrvisit_FunctionDefYs z!FindIdentifiers.visit_FunctionDefccs.|D]$}t|tjr"|jEdHq|VqdSr!) isinstance_astTupleelts)rr4r rrr_expand_tuples]s zFindIdentifiers._expand_tuplescCsj|j}d|_|j}|dd||jjD|_|rD||jn|jD]}||qJ||_||_dS)NTcSsg|] }t|qSrarg_id.0r rrr psz3FindIdentifiers._visit_function..)rrunionr;r4r*r0)rr'islambdainfrr-rrrr3ds  zFindIdentifiers._visit_functioncCsH||j||j|jD]}||q|jD]}||q4dSr!)r*itertargetr0Zorelser1rrr visit_Forzs      zFindIdentifiers.visit_ForcCsTt|jtjr||jn4|jtkrP|j|jjkrP|j|j krP|jj |jdSr!) r7ctxr8Storer%idreservedrr"rundeclared_identifiersr#r&rrr visit_Names  zFindIdentifiers.visit_NamecCs>|jD]2}|jdk r"||jq||jddqdS)N.r)namesasnamer%r$splitrr'r$rrr visit_Imports  zFindIdentifiers.visit_ImportcCsN|jD]B}|jdk r"||jq|jdkr import , , ...' instead.)rT)rNrOr%r$rZCompileExceptionrrQrrrvisit_ImportFroms   z FindIdentifiers.visit_ImportFromN)r __module__ __qualname__r r%r(r.r2r5r6r;r3rFrLrRrUrrrrr1s   rc@seZdZddZddZdS) FindTuplecKs||_||_||_dSr!)rr code_factory)rrrYrrrrr szFindTuple.__init__cCst|jD]h}|j|f|j}|jj||jjt||jj }| |j |j_ |jj }| |j |j_ qdSr!) r:rYrrZcodeargsappendr4ExpressionGeneratorr+r"rArK)rr'r-pZldiZluirrr visit_Tuples zFindTuple.visit_TupleN)rrVrWr r]rrrrrXsrXc@seZdZddZddZdS) ParseFunccKs||_||_dSr!)rrrrrrr szParseFunc.__init__cCs|j|j_dd|jjD}|jjr4||jjjdd|jjD}|jjr^||jjj||j_ |jj |j_ ||j_ |jj |j_ |jj|j_|jj|j_dS)NcSsg|] }t|qSrr<r>rrrr@sz/ParseFunc.visit_FunctionDef..cSsg|] }t|qSrr<r>rrrr@s)r$rfuncnamer4varargrZr kwonlyargskwargargnamesdefaults kwargnames kw_defaults kwdefaultsvarargskwargs)rr'rcrerrrr6s    zParseFunc.visit_FunctionDefN)rrVrWr r6rrrrr^sr^c@seZdZddZddZdS)r[cCstd|_|j|dS)Nz )rZSourceGenerator generatorr*)rZastnoderrrr s zExpressionGenerator.__init__cCsd|jjS)N)joinrjresult)rrrrr+szExpressionGenerator.valueN)rrVrWr r+rrrrr[sr[)r )__doc__operatorr8makorrrrrJ attrgetterr=Z restore__astr NodeVisitorrrXr^r[rrrrs        v