Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 FøªjlEã@s ddlmZGdd„deƒZdS)é)Úc_astc@s6eZdZdZdŒdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdddddddddddd d d!d!d"d"d"d#œZd$d%„Zd&d'„Zd(d)„Zd*d+„Zd�d,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Zd@dA„ZdBdC„ZdDdE„Z dFdG„Z!dHdI„Z"dJdK„Z#dLdM„Z$dNdO„Z%dPdQ„Z&dRdS„Z'dTdU„Z(dVdW„Z)dXdY„Z*dZd[„Z+d\d]„Z,d^d_„Z-d`da„Z.dbdc„Z/ddde„Z0dfdg„Z1dhdi„Z2djdk„Z3dldm„Z4dndo„Z5dpdq„Z6drds„Z7dtdu„Z8dvdw„Z9dxdy„Z:dzd{„Z;d|d}„Zgd‚fdƒd„„Z?d…d†„Z@d‡dˆ„ZAd‰dŠ„ZBd‹S)�Ú CGeneratorz¬ Uses the same visitor pattern as c_ast.NodeVisitor, but modified to return a value from each visit method, using string accumulation in generic_visit. FcCsd|_||_dS)z“ Constructs C-code generator reduce_parentheses: if True, eliminates needless parentheses on binary operators éN)Ú indent_levelÚreduce_parentheses)Úselfr©rú:/tmp/pip-build-_d5lkt3n/pycparser/pycparser/c_generator.pyÚ__init__szCGenerator.__init__cCs d|jS)Nú )r)rrrr Ú _make_indentszCGenerator._make_indentcCsd|jj}t|||jƒ|ƒS)NÚvisit_)Ú __class__Ú__name__ÚgetattrÚ generic_visit)rÚnodeÚmethodrrr Úvisits zCGenerator.visitcs,|dkr dSdj‡fdd„|jƒDƒƒSdS)NÚc3s|]\}}ˆj|ƒVqdS)N)r)Ú.0Zc_nameÚc)rrr ú 'sz+CGenerator.generic_visit..)ÚjoinÚchildren)rrr)rr r#szCGenerator.generic_visitcCs|jS)N)Úvalue)rÚnrrr Úvisit_Constant)szCGenerator.visit_ConstantcCs|jS)N)Úname)rrrrr Úvisit_ID,szCGenerator.visit_IDcCsd}|jr|d|j7}|S)Nz#pragmar )Ústring)rrÚretrrr Ú visit_Pragma/szCGenerator.visit_PragmacCs$|j|jƒ}|d|j|jƒdS)Nú[ú])Ú_parenthesize_unless_simplerrZ subscript)rrZarrrefrrr Úvisit_ArrayRef5s zCGenerator.visit_ArrayRefcCs"|j|jƒ}||j|j|jƒS)N)r%rÚtyperÚfield)rrZsrefrrr Úvisit_StructRef9s zCGenerator.visit_StructRefcCs$|j|jƒ}|d|j|jƒdS)Nú(ú))r%rrÚargs)rrZfrefrrr Úvisit_FuncCall=s zCGenerator.visit_FuncCallcCs\|jdkrd|j|jƒS|j|jƒ}|jdkr8d|S|jdkrJd|Sd|j|fSdS)NÚsizeofz sizeof(%s)zp++z%s++zp--z%s--z%s%s)ÚoprÚexprr%)rrÚoperandrrr Ú visit_UnaryOpAs    zCGenerator.visit_UnaryOprréééééééé )z||z&&ú|ú^ú&z==z!=ú>z>=ú>z<<ú+ú-Ú*ú/ú%cs@ˆjˆj‡‡fdd„ƒ}ˆjˆj‡‡fdd„ƒ}d|ˆj|fS)Ncs6ˆj|ƒp2ˆjo2t|tjƒo2ˆj|jˆjˆjk S)N)Ú_is_simple_noderÚ isinstancerÚBinaryOpÚprecedence_mapr/)Úd)rrrr Úks z+CGenerator.visit_BinaryOp..cs6ˆj|ƒp2ˆjo2t|tjƒo2ˆj|jˆjˆjk S)N)rErrFrrGrHr/)rI)rrrr rJws z%s %s %s)Ú_parenthesize_ifÚleftÚrightr/)rrZlval_strÚrval_strr)rrr Úvisit_BinaryOp_s  zCGenerator.visit_BinaryOpcCs*|j|jdd„ƒ}d|j|jƒ|j|fS)NcSs t|tjƒS)N)rFrÚ Assignment)rrrr rJsz-CGenerator.visit_Assignment..z%s %s %s)rKZrvaluerZlvaluer/)rrrNrrr Úvisit_Assignment|s zCGenerator.visit_AssignmentcCs dj|jƒS)Nr )rÚnames)rrrrr Úvisit_IdentifierType‚szCGenerator.visit_IdentifierTypecCsJt|tjƒrd|j|ƒdSt|tjƒr.)rÚdeclsÚlenr)rrr[r)rr Úvisit_DeclList—s zCGenerator.visit_DeclListcCs2d}|jr|dj|jƒd7}||j|jƒ7}|S)Nrr )ÚstoragerÚ_generate_typer')rrr[rrr Ú visit_Typedefžs zCGenerator.visit_TypedefcCs,d|j|jdd�d}|d|j|jƒS)Nr*F)Ú emit_declnamer+r )rbZto_typer%r0)rrr[rrr Ú visit_Cast¤szCGenerator.visit_CastcCs.g}x|jD]}|j|j|ƒƒq Wdj|ƒS)Nz, )ÚexprsÚappendrWr)rrÚvisited_subexprsr0rrr Úvisit_ExprList¨s zCGenerator.visit_ExprListcCs.g}x|jD]}|j|j|ƒƒq Wdj|ƒS)Nz, )rfrgrWr)rrrhr0rrr Úvisit_InitList®s zCGenerator.visit_InitListcCs|j|dd�S)NÚenum)r)Ú_generate_struct_union_enum)rrrrr Ú visit_Enum´szCGenerator.visit_EnumcCsdj|j|jƒƒS)Nz _Alignas({}))ÚformatrÚ alignment)rrrrr Ú visit_Alignas·szCGenerator.visit_AlignascCs<|jsdj|jƒ|jd�Sdj|jƒ|j|j|jƒd�SdS)Nz{indent}{name}, )Úindentrz{indent}{name} = {value}, )rqrr)rrnr rr)rrrrr Úvisit_Enumeratorºs zCGenerator.visit_Enumeratorcsjˆj|jƒ}dˆ_ˆj|jƒ}|jrVdj‡fdd„|jDƒƒ}|d|d|dS|d|dSdS)Nrz; c3s|]}ˆj|ƒVqdS)N)r)rÚp)rrr rÌsz+CGenerator.visit_FuncDef..Ú )rr]rÚbodyZ param_declsr)rrr]ruZknrdeclsr)rr Ú visit_FuncDefÇs  zCGenerator.visit_FuncDefcCsfd}x\|jD]R}t|tjƒr,||j|ƒ7}q t|tjƒrL||j|ƒd7}q ||j|ƒd7}q W|S)Nrrtz; )ÚextrFrZFuncDefrZPragma)rrr[rwrrr Ú visit_FileASTÑs   zCGenerator.visit_FileASTcs`ˆjƒd}ˆjd7_|jr>|dj‡fdd„|jDƒƒ7}ˆjd8_|ˆjƒd7}|S)Nz{ r3rc3s|]}ˆj|ƒVqdS)N)Ú_generate_stmt)rÚstmt)rrr ràsz,CGenerator.visit_Compound..z} )r rZ block_itemsr)rrr[r)rr Úvisit_CompoundÜs zCGenerator.visit_CompoundcCs$d|j|jƒd|j|jƒdS)Nr*z){rU)rr'rY)rrrrr Úvisit_CompoundLiteralåsz CGenerator.visit_CompoundLiteralcCsdS)Nú;r)rrrrr Úvisit_EmptyStatementészCGenerator.visit_EmptyStatementcsdj‡fdd„|jDƒƒS)Nz, c3s|]}ˆj|ƒVqdS)N)r)rÚparam)rrr rísz-CGenerator.visit_ParamList..)rÚparams)rrr)rr Úvisit_ParamListìszCGenerator.visit_ParamListcCs&d}|jr|d|j|jƒ7}|dS)NÚreturnr r})r0r)rrr[rrr Ú visit_ReturnïszCGenerator.visit_ReturncCsdS)Nzbreak;r)rrrrr Ú visit_BreakôszCGenerator.visit_BreakcCsdS)Nz continue;r)rrrrr Úvisit_Continue÷szCGenerator.visit_ContinuecCsHd|j|jƒd}|d|j|jƒd7}|d|j|jƒd7}|S)Nr*z) ? z) : r+)rWÚcondÚiftrueÚiffalse)rrr[rrr Úvisit_TernaryOpúszCGenerator.visit_TernaryOpcCsdd}|jr||j|jƒ7}|d7}||j|jdd�7}|jr`||jƒd7}||j|jdd�7}|S)Nzif (z) T)Ú add_indentzelse )r†rryr‡rˆr )rrr[rrr Úvisit_IfszCGenerator.visit_IfcCs~d}|jr||j|jƒ7}|d7}|jr<|d|j|jƒ7}|d7}|jr^|d|j|jƒ7}|d7}||j|jdd�7}|S)Nzfor (r}r z) T)rŠ)rYrr†Únextryrz)rrr[rrr Ú visit_For szCGenerator.visit_ForcCs:d}|jr||j|jƒ7}|d7}||j|jdd�7}|S)Nzwhile (z) T)rŠ)r†rryrz)rrr[rrr Ú visit_Whiles zCGenerator.visit_WhilecCsJd}||j|jdd�7}||jƒd7}|jr>||j|jƒ7}|d7}|S)Nzdo T)rŠzwhile (z);)ryrzr r†r)rrr[rrr Ú visit_DoWhileszCGenerator.visit_DoWhilecCs>d}||j|jƒ7}|jr2|d7}||j|jƒ7}|d7}|S)Nz_Static_assert(ú,r+)rr†Úmessage)rrr[rrr Úvisit_StaticAssert$szCGenerator.visit_StaticAssertcCs,d|j|jƒd}||j|jdd�7}|S)Nzswitch (z) T)rŠ)rr†ryrz)rrr[rrr Ú visit_Switch-szCGenerator.visit_SwitchcCs:d|j|jƒd}x |jD]}||j|dd�7}qW|S)Nzcase z: T)rŠ)rr0Ústmtsry)rrr[rzrrr Ú visit_Case2s zCGenerator.visit_CasecCs*d}x |jD]}||j|dd�7}q W|S)Nz default: T)rŠ)r”ry)rrr[rzrrr Ú visit_Default8s zCGenerator.visit_DefaultcCs|jd|j|jƒS)Nz: )rryrz)rrrrr Ú visit_Label>szCGenerator.visit_LabelcCsd|jdS)Nzgoto r})r)rrrrr Ú visit_GotoAszCGenerator.visit_GotocCsdS)Nz...r)rrrrr Úvisit_EllipsisParamDszCGenerator.visit_EllipsisParamcCs |j|dƒS)NÚstruct)rl)rrrrr Ú visit_StructGszCGenerator.visit_StructcCs |j|jƒS)N)rbr')rrrrr Úvisit_TypenameJszCGenerator.visit_TypenamecCs |j|dƒS)NÚunion)rl)rrrrr Ú visit_UnionMszCGenerator.visit_UnioncCs^d}x@|jD]6}t|tjƒr,|d|j7}q |d|j|ƒd7}q W|d|j|jƒ7}|S)NrÚ.r#r$z = )rrFrÚIDrrWr0)rrr[rrrr Úvisit_NamedInitializerPs  z!CGenerator.visit_NamedInitializercCs |j|ƒS)N)rb)rrrrr Úvisit_FuncDeclZszCGenerator.visit_FuncDeclcCs|j|dd�S)NF)rd)rb)rrrrr Úvisit_ArrayDecl]szCGenerator.visit_ArrayDeclcCs|j|dd�S)NF)rd)rb)rrrrr Úvisit_TypeDecl`szCGenerator.visit_TypeDeclcCs|j|dd�S)NF)rd)rb)rrrrr Ú visit_PtrDeclcszCGenerator.visit_PtrDeclcCs°|d kr|j}|j}n(|dks"t‚|jdkr0dn|jj}|j}|d|jpLd}|dk r¬|d7}||jƒ7}|jd7_|d 7}|||ƒ7}|jd8_||jƒd 7}|S) zq Generates code for structs, unions, and enums. name should be 'struct', 'union', or 'enum'. ršr�rkNr rrtr3z{ rU)ršr�) r^Ú_generate_struct_union_bodyÚAssertionErrorÚvaluesZ enumeratorsÚ_generate_enum_bodyrr r)rrrÚmembersZ body_functionr[rrr rlfs    z&CGenerator._generate_struct_union_enumcsdj‡fdd„|DƒƒS)Nrc3s|]}ˆj|ƒVqdS)N)ry)rr])rrr rsz9CGenerator._generate_struct_union_body..)r)rrªr)rr r¦~sz&CGenerator._generate_struct_union_bodycs$dj‡fdd„|Dƒƒdd…dS)Nrc3s|]}ˆj|ƒVqdS)N)r)rr)rrr rƒsz1CGenerator._generate_enum_body..r3rtéþÿÿÿ)r)rrªr)rr r©�szCGenerator._generate_enum_bodycCsÈt|ƒ}|r|jd7_|jƒ}|r4|jd8_|tjtjtjtjtjtj tj tj tj tj tjtjtjf kr‚||j|ƒdS|tjfkr˜|j|ƒS|tjfkr²||j|ƒS||j|ƒdSdS)zÄ Generation from a statement node. This method exists as a wrapper for individual visit_* methods to handle different treatment of some statements in this context. r3z; rtN)r'rr rÚDeclrPZCastÚUnaryOprGZ TernaryOpÚFuncCallÚArrayRefÚ StructRefÚConstantr ZTypedefrVrZCompoundÚIf)rrrŠÚtyprqrrr ry…s"    zCGenerator._generate_stmtcCsfd}|jrdj|jƒd}|jr4|dj|jƒd7}|jrR||j|jdƒd7}||j|jƒ7}|S)z& Generation from a Decl node. rr r)ZfuncspecrraZalignrrbr')rrr[rrr rX£szCGenerator._generate_declTc Cst|ƒ}|tjk�r†d}|jr2|dj|jƒd7}||j|jƒ7}|jrR|rR|jnd}�xt|ƒD�]\}}t|tj ƒrØ|dkr t||dtj ƒr d|d}|d7}|j rÂ|dj|j ƒd7}||j|j ƒd7}qbt|tj ƒ�r,|dk�rt||dtj ƒ�rd|d}|d|j|jƒd7}qbt|tj ƒrb|j�rdd dj|jƒ|�rZd|ndf}qbd |}qbW|�r‚|d|7}|S|tjk�rž|j|jƒS|tjk�rº|j|j|d �S|tjk�rÖdj|jƒdS|tj tj tj fk�r|j|j||g|d �S|j|ƒSd S) zø Recursive generation from a type node. n is the type node. modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers encountered on the way down to a TypeDecl, to allow proper generation from it. rr rrr*r+r#r$z* %s%srB)rdN)r'rZTypeDeclZqualsrrZdeclnameÚ enumeraterFZ ArrayDeclZPtrDeclZ dim_qualsZdimZFuncDeclr,r¬rXZTypenamerbZIdentifierTyperR) rrÚ modifiersrdr³r[ZnstrÚiÚmodifierrrr rb­sN             zCGenerator._generate_typecCs&|j|ƒ}||ƒrd|dS|SdS)z‘ Visits 'n' and returns its string representation, parenthesized if the condition function applied to the node returns True. r*r+N)rW)rrÚ conditionr[rrr rKâs  zCGenerator._parenthesize_ifcsˆj|‡fdd„ƒS)z. Common use case for _parenthesize_if cs ˆj|ƒ S)N)rE)rI)rrr rJïsz8CGenerator._parenthesize_unless_simple..)rK)rrr)rr r%ìsz&CGenerator._parenthesize_unless_simplecCst|tjtjtjtjtjfƒS)z~ Returns True for nodes that are "simple" - i.e. nodes that always have higher precedence than operators. )rFrr±r r¯r°r®)rrrrr rEñszCGenerator._is_simple_nodeN)F)F)F)CrÚ __module__Ú __qualname__Ú__doc__r r rrrrr"r&r)r-r2rHrOrQrSrWr\r`rcrerirjrmrprrrvrxr{r|r~r�rƒr„r…r‰r‹r�rŽr�r’r“r•r–r—r˜r™r›rœržr¡r¢r£r¤r¥rlr¦r©ryrXrbrKr%rErrrr r s’             5 rN)rrÚobjectrrrrr Ú s