§
    ]ö6iÑ`  ã                   ó4  — d Z ddlmZ ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZ ej        d         dk    Zd	„ Zej        d
„ ¦   «         Z G d„ dej        ¦  «        Zd„ Zd„ Zd.d„Zd„ Zd„ Zd/d„Zd„ Zd„ Zd„ Z d„ Z! G d„ dej"        ¦  «        Z# G d„ de#¦  «        Z$d0d„Z%d/d„Z&	 	 	 d1d„Z'	 	 d2d„Z(d3d „Z)d/d!„Z*ddd e+¦   «         fd"„Z,d/d#„Z-ddd e+¦   «         fd$„Z.	 	 d4d&„Z/d'„ Z0d5d(„Z1d)„ Z2d*„ Z3d+„ Z4d,„ Z5d-„ Z6dS )6z4
Shared __main__ method functionality for emitters.
é    )Úabsolute_import)Úprint_functionNé   )Úast)Úcladé   c           
      ó†   — | d |                       dt          |                       d¦  «        d¦  «        ¦  «        …         |z   S )Nú.ú/r   )ÚfindÚmax)ÚfileÚsuffixs     úU/home/metal/girl-os/anki/victor/victor-clad/tools/message-buffers/clad/emitterutil.pyÚget_included_filer   &   s:   € ØÐ7�—’˜3¥ D§I¢I¨c¡N¤N°AÑ 6Ô 6Ñ7Ô7Ð7Ô8¸6ÑAÐAó    c              #   ó   K  — | V — d S ©N© )Úcontexts    r   Ú_disable_withr   )   s   è è € à
€M€M€M€M€Mr   c                   óp   ‡ — e Zd Z G d„ de¦  «        Zdˆ fd„	Zˆ fd„Zd„ Zd„ Zˆ fd	„Z	d
„ Z
d„ Zdd„Zˆ xZS )ÚIndentedTextIOWrapperc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ú%IndentedTextIOWrapper.DepthWithHelperc                 ó"   — || _         || _        d S r   )ÚwrapperÚdepth_delta)Úselfr   r   s      r   Ú__init__z.IndentedTextIOWrapper.DepthWithHelper.__init__0   s   € Ø"ˆDŒLØ*ˆDÔÐÐr   c                 ó   — d S r   r   )r   s    r   Ú	__enter__z/IndentedTextIOWrapper.DepthWithHelper.__enter__4   s   € àˆDr   c                 ó:   — | j         xj        | j        z  c_        d S r   )r   Údepthr   )r   ÚtypeÚvalueÚ	tracebacks       r   Ú__exit__z.IndentedTextIOWrapper.DepthWithHelper.__exit__8   s!   € ØŒLÐÔ $Ô"2Ñ2ÐÔÐÐr   N)Ú__name__Ú
__module__Ú__qualname__r    r"   r(   r   r   r   ÚDepthWithHelperr   /   sA   € € € € € ð	+ð 	+ð 	+ð	ð 	ð 	ð	3ð 	3ð 	3ð 	3ð 	3r   r,   r   ú	c                 ó’   •— t          t          | ¦  «                             d¬¦  «         || _        || _        d| _        || _        d S )Nú
©ÚnewlineF)Úsuperr   r    Úpathr$   Úended_on_newlineÚtab_character)r   r3   r$   r5   Ú	__class__s       €r   r    zIndentedTextIOWrapper.__init__;   sI   ø€ ÝÕ# TÑ*Ô*×3Ò3¸DÐ3ÑAÔAÐAØˆŒ	ØˆŒ
Ø %ˆÔØ*ˆÔÐÐr   c                 óˆ   •— |€|                       ¦   «          t          t          | ¦  «                             |||¦  «         d S r   )Ú_write_to_filer2   r   r(   )r   r%   r&   r'   r6   s       €r   r(   zIndentedTextIOWrapper.__exit__B   sC   ø€ Øˆ<Ø×ÒÑ!Ô!Ð!ÝÕ# TÑ*Ô*×3Ò3°D¸%ÀÑKÔKÐKÐKÐKr   c                 óä   — t           j                             |¦  «        rt          j        |d¦  «         t          rt          ||d¬¦  «        S t          |d                     |¬¦  «        ¦  «        S )Nií  r/   r0   z{mode}b)Úmode)Úosr3   ÚexistsÚchmodÚ_py3ÚopenÚformat)r   Úfilenamer:   s      r   Ú
_open_filez IndentedTextIOWrapper._open_fileG   sh   € ÝŒ7�>Š>˜(Ñ#Ô#ð 	'ÝŒH�X˜vÑ&Ô&Ð&Ýð 	?Ý˜ $°Ð5Ñ5Ô5Ð5å˜ )×"2Ò"2¸Ð"2Ñ"=Ô"=Ñ>Ô>Ð>r   c                 ó®  — | j         �œ|                      | j         d¦  «        5 }|                     |                      ¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j                              | j         ¦  «        rt	          j        | j         d¦  «         d S d S t          j                             |                      ¦   «         ¦  «         d S )NÚwim  )	r3   rB   ÚwriteÚgetvaluer;   r<   r=   ÚsysÚstdout)r   Úoutputs     r   r8   z$IndentedTextIOWrapper._write_to_fileO   sî   € ØŒ9Ð Ø—’ ¤¨CÑ0Ô0ð .°FØ—’˜TŸ]š]™_œ_Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .åŒw�~Š~˜dœiÑ(Ô(ð ,Ý”˜œ FÑ+Ô+Ð+Ð+Ð+ð,ð ,õ ŒJ×Ò˜TŸ]š]™_œ_Ñ-Ô-Ð-Ð-Ð-s   £(AÁAÁAc                 ó¶  •— |sd S | j         r| j        dk    rd| j        z  |z   }|d         dk    | _         | j        dk    r>d|d d…         v r2|d d…                              ddd| j        z  z   ¦  «        |d         z   }|                     d| j        ¦  «        }t          st          |d¦  «        }t          t          | ¦  «                             |¦  «         d S )Nr   r-   éÿÿÿÿr/   Úutf8)	r4   r$   Úreplacer5   r>   Úunicoder2   r   rE   )r   r&   r6   s     €r   rE   zIndentedTextIOWrapper.writeX   sê   ø€ Øð 	ØˆFàÔ ð 	. T¤Z°!¢^ ^Ø˜4œ:Ñ%¨Ñ-ˆEà!& r¤¨dÒ!2ˆÔð Œ:˜Š>ˆ>˜d e¨C¨R¨C¤jÐ0Ð0Ø˜#˜2˜#”J×&Ò& t¨T°D¸4¼:Ñ4EÑ-EÑFÔFÈÈrÌÑRˆEà—’˜d DÔ$6Ñ7Ô7ˆåð 	+Ý˜E 6Ñ*Ô*ˆEåÕ# TÑ*Ô*×0Ò0°Ñ7Ô7Ð7Ð7Ð7r   c                 óN   — | xj         |z  c_         |                      | |¦  «        S )zfStarts indenting text and returns an object that unindents if this method is called in a 'with' block.©r$   r,   )r   r   s     r   ÚindentzIndentedTextIOWrapper.indentm   s(   € àˆ
Œ
�kÑ!ˆ
Œ
Ø×#Ò# D¨+Ñ6Ô6Ð6r   c                 óL   — | j         }d| _         |                      | | ¦  «        S )zpReduces indent to 0 temporarily and returns an object that reindents if this method is called in a 'with' block.r   rP   )r   Ú	old_depths     r   Úreset_indentz"IndentedTextIOWrapper.reset_indentr   s(   € à”Jˆ	ØˆŒ
Ø×#Ò# D¨9¨*Ñ5Ô5Ð5r   c           	      ó¶  ‡	— |sdS t          d„ |D ¦   «         ¦  «        Š	ˆ	fd„|D ¦   «         }t          |Ž }d„ |D ¦   «         }|D ]”}|r�t          |dd…         ¦  «        D ]H\  }}|                      |¦  «         |                      d||         t	          |¦  «        z
  z  ¦  «         ŒI|                      |d         ¦  «         |                      d¦  «         Œ•dS )ag  
        Takes in a list of sequences of strings, then writes them all to the buffer as lines,
        adding whitespace to keep each column aligned.

        extra_whitespace -- extra space to join the strings with (1 would mean a space inbetween)

        [('int', ' foo', ' = 5;'), ('float', ' bar;')] ->
        int   foo  = 5;
        float bar;
        Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   ©Úlen)Ú.0Úsequences     r   ú	<genexpr>zFIndentedTextIOWrapper.write_with_aligned_whitespace.<locals>.<genexpr>‡   s(   è è € Ð!FÐ!F°H¥# h¡-¤-Ð!FÐ!FÐ!FÐ!FÐ!FÐ!Fr   c                 óZ   •— g | ]'}t          |¦  «        d ‰t          |¦  «        z
  z  z   ‘Œ(S ))Ú )ÚtuplerX   )rY   rZ   Úmax_sequence_lengths     €r   ú
<listcomp>zGIndentedTextIOWrapper.write_with_aligned_whitespace.<locals>.<listcomp>ˆ   s6   ø€ ÐfÐfÐfÐT\•�h‘” %Ð+>ÅÀXÁÄÑ+NÑ"OÑOÐfÐfÐfr   c                 ó@   — g | ]}t          d „ |D ¦   «         ¦  «        ‘ŒS )c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   rW   )rY   Úpieces     r   r[   zQIndentedTextIOWrapper.write_with_aligned_whitespace.<locals>.<listcomp>.<genexpr>Œ   s(   è è € Ð?Ð?¨u¥ E¡
¤
Ð?Ð?Ð?Ð?Ð?Ð?r   )r   )rY   Úcolumns     r   r`   zGIndentedTextIOWrapper.write_with_aligned_whitespace.<locals>.<listcomp>Œ   s/   € ÐVÐVÐVÀF�CÐ?Ð?¸Ð?Ñ?Ô?Ñ?Ô?ÐVÐVÐVr   rK   ú r/   )r   ÚzipÚ	enumeraterE   rX   )
r   ÚlinesÚextra_whitespaceÚrowsÚcolumnsÚspace_per_columnrZ   Úirc   r_   s
            @r   Úwrite_with_aligned_whitespacez3IndentedTextIOWrapper.write_with_aligned_whitespacex   s  ø€ ð ð 	ØˆFõ "Ð!FÐ!FÀÐ!FÑ!FÔ!FÑFÔFÐØfÐfÐfÐfÐ`eÐfÑfÔfˆõ �t�*ˆØVÐVÈgÐVÑVÔVÐàð 	!ð 	!ˆHØð !Ý )¨(°3°B°3¬-Ñ 8Ô 8ð Ið I‘H�A�uØ—J’J˜uÑ%Ô%Ð%Ø—J’J˜sÐ&6°qÔ&9½CÀ¹J¼JÑ&FÑGÑHÔHÐHÐHØ—
’
˜8 Bœ<Ñ(Ô(Ð(Ø—
’
˜4Ñ Ô Ð øð	!ð 	!r   )r   r-   )r   )r)   r*   r+   Úobjectr,   r    r(   rB   r8   rE   rQ   rT   rn   Ú__classcell__©r6   s   @r   r   r   -   sî   ø€ € € € € ð
3ð 
3ð 
3ð 
3ð 
3˜&ñ 
3ô 
3ð 
3ð+ð +ð +ð +ð +ð +ðLð Lð Lð Lð Lð
?ð ?ð ?ð.ð .ð .ð8ð 8ð 8ð 8ð 8ð*7ð 7ð 7ð
6ð 6ð 6ð!ð !ð !ð !ð !ð !ð !ð !r   r   c                 ó¾   — | j         dk    r:t          j                             | j        | j         ¦  «        }t          |d¦  «        S t          t          j        ¦  «        S )Nú-Úr)	Ú
input_filer;   r3   ÚjoinÚinput_directoryr?   r   rG   Ústdin)ÚoptionsÚ	real_paths     r   Ú
_get_inputr{   –   sK   € ØÔ˜SÒ Ð Ý”G—L’L Ô!8¸'Ô:LÑMÔMˆ	Ý�I˜sÑ#Ô#Ð#å�SœYÑ'Ô'Ð'r   c                 ó|   — | j         r| j         dk    rdS | j         S | j        dk    rt          | j        |¦  «        S dS )Nrs   )Úoutput_fileru   r   )ry   r   s     r   Úget_output_filer~   �   sO   € ØÔð ØÔ #Ò%Ð%Ø�3àÔ&Ð&Ø	Ô	˜sÒ	"Ð	"Ý  Ô!3°VÑ<Ô<Ð<àˆsr   Fc                 ó  — | dk    ru|dk    rot           j                             | |¦  «        }t          t           j                             |¦  «        ¦  «         |rt          |d¦  «        S t          |d¬¦  «        S t          d d¬¦  «        S )Nrs   Úwbú  )r5   )r;   r3   rv   Úmkdir_pÚdirnamer?   r   )Úoutput_directoryr}   Úbinaryrz   s       r   Ú
get_outputr†   ¨   sˆ   € Ø˜3ÒÐ ;°#Ò#5Ð#5Ý”G—L’LÐ!1°;Ñ?Ô?ˆ	å•”—’ 	Ñ*Ô*Ñ+Ô+Ð+àð 	HÝ˜	 4Ñ(Ô(Ð(å(¨À$ÐGÑGÔGÐGå$ T¸Ð>Ñ>Ô>Ð>r   c                 óœ   — t           j                             | ¦  «        s,t          | d¦  «        5  	 ddd¦  «         dS # 1 swxY w Y   dS dS )zNCreates an empty file unless it already exists, in which case it does nothing.ÚaN)r;   r3   r<   r?   ©r3   s    r   Úcreate_filerŠ   µ   s—   € åŒ7�>Š>˜$ÑÔð Ý�$˜‰_Œ_ð 	ð 	Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ðð s   °?¿AÁAc                 óÌ   — 	 t          j        | ¦  «         d S # t          $ rA}|j        t          j        k    r t           j                             | ¦  «        rn‚ Y d }~d S d }~ww xY wr   )r;   ÚmakedirsÚOSErrorÚerrnoÚEEXISTr3   Úisdir)r3   Úexcs     r   r‚   r‚   ¼   ss   € ðÝ
Œ�DÑÔÐÐÐøÝð ð ð ØŒ9�œÒ$Ð$­¬¯ª°tÑ)<Ô)<Ð$ØØð ˆDˆDˆDˆDˆDøøøøðøøøs   ‚ ˜
A#¢6AÁA#c                 ó6  — |r<t           j                             t           j                             |¦  «        ¦  «        }t           j                             t           j                             | ¦  «        ¦  «        } t           j                             | |¦  «        S )z:Does os.path.relpath, first resolving to an absolute path.)r;   r3   ÚnormpathÚabspathÚrelpath)r3   Ústarts     r   Úmake_path_relativer—   Ä   sf   € àð 9Ý”× Ò ¥¤§¢°Ñ!7Ô!7Ñ8Ô8ˆÝŒ7×Ò�BœGŸOšO¨DÑ1Ô1Ñ2Ô2€DÝŒ7�?Š?˜4 Ñ'Ô'Ð'r   c                 ó®   — t           j                             | ¦  «        } t           j                             | ¦  «        r| S |                      dd¦  «        S )z?Makes a path as portable if possible. Can't fix absolute paths.ú\r   )r;   r3   r“   ÚisabsrM   r‰   s    r   Úmake_path_portabler›   Ë   sF   € åŒ7×Ò˜DÑ!Ô!€DÝ	„w‡}‚}�TÑÔð ØˆØ�<Š<˜˜cÑ"Ô"Ð"r   c                 ó  — | j         dk    r| j         }nd}t          t          j        ¦  «        }d                     d„ |D ¦   «         ¦  «        }d                     |¬¦  «        d                     |¬¦  «        d	                     |¬
¦  «        gS )Nrs   z<stdin>re   c              3   ó>   K  — | ]}t          j        |¦  «        V — Œd S r   )ÚshlexÚquote)rY   Úargs     r   r[   z$get_comment_lines.<locals>.<genexpr>Ø   s,   è è € ÐAÐA°�EœK¨Ñ,Ô,ÐAÐAÐAÐAÐAÐAr   z-Autogenerated {language} message buffer code.©ÚlanguagezSource: {source})Úsourcez!Full command line: {command_line})Úcommand_line)ru   Ú_convert_abspaths_to_relpathsrG   Úargvrv   r@   )ry   r¢   r£   Úrel_argsr¤   s        r   Úget_comment_linesr¨   Ò   s”   € ØÔ˜SÒ Ð ØÔ#ˆˆàˆÝ,­S¬XÑ6Ô6€HØ—8’8ÐAÐA¸ÐAÑAÔAÑAÔA€Là7×>Ò>ÈÐ>ÑQÔQØ×!Ò!¨Ð!Ñ0Ô0Ø+×2Ò2ÀÐ2ÑMÔMðð r   c                 ó~   — t          j        dd| ¦  «        } t          j        dd| ¦  «                             ¦   «         S )Nz([A-Za-z0-9])([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))ÚreÚsubÚlower)Ú
identifiers    r   Ú convert_camelcase_to_underscoresr®   à   s7   € Ý”Ð4°hÀ
ÑKÔK€JÝŒ6Ð% x°Ñ<Ô<×BÒBÑDÔDÐDr   c                 ó  — | }t          j        dd|¦  «        }|                     d¦  «        }t          j        dd|¦  «        }t          |¦  «                             ¦   «         }|pd}d                     |¬¦  «        }|S )	z(Creates a C-style macro inclusion guard.z[^A-Za-z0-9_./-]r]   z./-z[./-]Ú_r   z__{guard}__)Úguard)rª   r«   Ústripr®   Úupperr@   )r}   r±   s     r   Úc_inclusion_guardr´   ä   s|   € à€EÝŒFÐ% r¨5Ñ1Ô1€EØ�KŠK˜ÑÔ€EÝŒF�7˜C Ñ'Ô'€EÝ,¨UÑ3Ô3×9Ò9Ñ;Ô;€EØˆO�V€EØ× Ò  uÐ Ñ-Ô-€EØ€Lr   c                   ó2   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚSimpleArgumentParserat  
    The bare-minimum arguments for parsing. No output arguments.

    Calculates the following arguments and metavalues:
    input_file -- the filename of the file to read from (made portable)
    input_directory -- the directory to resolve includes from
    debug_yacc -- turn on yacc debug

    You may add your own arguments like a normal argparse.ArgumentParser.
    c           	      ó   •—  t          t          | ¦  «        j        |i |¤Ž |                      ddd¬¦  «         |                      ddddd	¬
¦  «         |                      ddddddd¬¦  «         |                      ddt          d¬¦  «         d S )Nru   z
input-filezThe .clad file to parse.©ÚmetavarÚhelpz-Cz--input-directoryz./ÚdirzThe input prefix directory.©Údefaultr¹   rº   z-Iz--include-directoryr   Ú*Úinclude_directoriesz=Additional directories in which to search for included files.)r½   r¹   ÚnargsÚdestrº   z--namespaceÚemitter_namespacez?Global namespace prefixed in front of all specified namespaces.)r¹   r%   rº   )r2   r¶   r    Úadd_argumentÚstr)r   ÚargsÚkwargsr6   s      €r   r    zSimpleArgumentParser.__init__û   sÝ   ø€ Ø2�Õ" DÑ)Ô)Ô2°DÐC¸FÐCÐCÐCØ×Ò˜,°Ø+ð 	ñ 	-ô 	-ð 	-à×Ò˜$Ð 3¸TÈ5Ø.ð 	ñ 	0ô 	0ð 	0à×Ò˜$Ð 5¸rÈ5ØÐ1ØPð 	ñ 	Rô 	Rð 	Rð 	×Ò˜-Ð1DÍ3ØRð 	ñ 	Tô 	Tð 	Tð 	Tð 	Tr   c                 ó®   •— |                       dddd¬¦  «          t          t          | ¦  «        j        |i |¤Ž\  }}|                      |¦  «         ||fS )Nz-dz--debug-yaccÚ
store_truezTurn on yacc debug.)Úactionrº   )rÃ   r2   r¶   Úparse_known_argsÚpostprocess)r   rÅ   rÆ   r¦   r6   s       €r   rÊ   z%SimpleArgumentParser.parse_known_args  sq   ø€ à×Ò˜$ °|Ø&ð 	ñ 	(ô 	(ð 	(ð H•UÕ/°Ñ6Ô6ÔGÈÐXÐQWÐXÐX‰
ˆˆdØ×Ò˜ÑÔÐØ�TˆzÐr   c                 ó8   — t          |j        ¦  «        |_        d S r   )r›   ru   )r   rÅ   s     r   rË   z SimpleArgumentParser.postprocess  s   € Ý,¨T¬_Ñ=Ô=ˆŒˆˆr   )r)   r*   r+   Ú__doc__r    rÊ   rË   rp   rq   s   @r   r¶   r¶   ï   so   ø€ € € € € ð	ð 	ð
Tð 
Tð 
Tð 
Tð 
Tðð ð ð ð ð>ð >ð >ð >ð >ð >ð >r   r¶   c                   ó.   ‡ — e Zd ZdZdˆ fd„	Zˆ fd„Zˆ xZS )ÚStandardArgumentParserzý
    An argparse.ArgumentParser used to parse arguments supported in every language.

    Calculates the additional arguments and metavalues:
    output_directory -- the directory to output to
    output_file (if permitted) -- the file to output to
    Fc           	      óÆ  •— d                      |¬¦  «        } t          t          | ¦  «        j        |d|i|¤Ž || _        |rp|                      ¦   «         }|                     ddddd                      |¬¦  «        ¬	¦  «         |                     d
dd                      |¬¦  «        ¬¦  «         d S |                      ddddd                      |¬¦  «        ¬	¦  «         d S )Nz+Generate {language} code from a .clad file.r¡   Údescriptionz-oz--output-directoryrs   r»   z/The directory to output the {language} file to.r¼   z--output-filer   z.The file path to write the {language} file to.r¸   z2The directory to output the {language} file(s) to.)r@   r2   rÏ   r    Ú_allow_override_outputÚadd_mutually_exclusive_grouprÃ   )r   r¢   Úallow_override_outputrÅ   rÆ   rÑ   Úgroupr6   s          €r   r    zStandardArgumentParser.__init__  s5  ø€ ØC×JÒJÐT\ÐJÑ]Ô]ˆØ4�Õ$ dÑ+Ô+Ô4ÈtÐ^ÀÐ^ÐW]Ð^Ð^Ð^à&;ˆÔ#Ø ð 	eØ×5Ò5Ñ7Ô7ˆEØ×Ò˜tÐ%9À3ÐPUØF×MÒMÐW_ÐMÑ`Ô`ð ñ bô bð bà×Ò˜¸ØE×LÒLÐV^ÐLÑ_Ô_ð ñ aô að að að að ×Ò˜dÐ$8À#ÈuØI×PÒPÐZbÐPÑcÔcð ñ eô eð eð eð er   c                 ó¶   •— t          t          | ¦  «                             |¦  «         | j        r!|j        rt          j        ¦   «         |_        d S d |_        d S r   )r2   rÏ   rË   rÒ   r}   r;   Úgetcwdr„   )r   rÅ   r6   s     €r   rË   z"StandardArgumentParser.postprocess+  sY   ø€ ÝÕ$ dÑ+Ô+×7Ò7¸Ñ=Ô=Ð=ØÔ&ð 	$¨4Ô+;ð 	$Ý$&¤I¡K¤KˆDÔ!Ð!Ð!à#ˆDÔÐÐr   ©F)r)   r*   r+   rÍ   r    rË   rp   rq   s   @r   rÏ   rÏ     sf   ø€ € € € € ðð ðeð eð eð eð eð eð$ð $ð $ð $ð $ð $ð $ð $ð $r   rÏ   c                 óf  — t          | ¦  «        5 }| j        g}|                     | j        ¦  «         t	          j        || j        |¬¦  «        }|                     ¦   «         }	 |                     || j	        | j        |¬¦  «        }nZ# t          j
        $ rH}|j        d         }	|j        d         }
t          |
d                     |	¬¦  «        ¦  «         Y d}~nd}~ww xY w| j        r/t          j        | j        ¬¦  «        }|                     |¦  «         |cddd¦  «         S # 1 swxY w Y   dS )	zParses a clad input file.)Úyacc_optimizeÚ
yacc_debugÚinput_directories)rA   Ú	directoryÚ
debuglevelr   r   zSyntax Error: {msg})ÚmsgN)Ú
wrapper_ns)r{   rw   Úextendr¿   r   Ú
CLADParserÚ
debug_yaccÚreadÚparseru   Ú
ParseErrorrÅ   Úexit_at_coordr@   Ú	namespacer   ÚASTNamespaceWrapperÚvisit)ry   rÚ   rÞ   ÚinputrÜ   Úclad_parserÚtextÚtreeÚerß   ÚcoordÚnsws               r   rå   rå   2  s›  € å	�GÑ	Ô	ð  Ø$Ô4Ð5ÐØ× Ò  Ô!<Ñ=Ô=Ð=Ý”o°MØÔ)Ð=NðPñ Pô Pˆà�zŠz‰|Œ|ˆð	HØ×$Ò$ TØ Ô+Ø!Ô1Ø%ð %ñ 'ô 'ˆDˆDøõ Œð 	Hð 	Hð 	HØ”&˜”)ˆCØ”F˜1”IˆEÝ˜%Ð!6×!=Ò!=À#Ð!=Ñ!FÔ!FÑGÔGÐGÐGÐGÐGÐGÐGøøøøð	Høøøð Ôð 	ÝÔ)°WÔ5FÐGÑGÔGˆCØ�IŠI�d‰OŒOˆOàð+ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s<   �AD&Á$#BÂD&ÂCÂ>CÃD&ÃCÃ:D&Ä&D*Ä-D*c           
      ó¼  — |r>t           j                             |¦  «         t           j                             d¦  «         | t          j        k    rt           j                             d¦  «         | r	| j        s#|€!t           j                             d¦  «         �n¬| j        s¾t           j                             d¦  «         | j        �wt           j                             d                     | j        ¬¦  «        ¦  «         | j        �8t           j                             d                     | j        ¬	¦  «        ¦  «         t           j                             d¦  «         �nçt           j                             | j        ¦  «         | j        �wt           j                             d                     | j        ¬¦  «        ¦  «         | j        �8t           j                             d                     | j        ¬	¦  «        ¦  «         t           j                             d
¦  «         t          j
                             | j        | j        ¦  «        }| j        �õt          j
                             |¦  «        rÖt          |d¦  «        5 }t          |¦  «        D ]ž\  }}|dz   }|| j        dz   k    r n…|| j        dz
  k    rvt           j                             d                     t!          |¦  «                             dd¦  «        |                     d¦  «        || j        k    rdnd¬¦  «        ¦  «         ŒŸddd¦  «         n# 1 swxY w Y   t          j        d¦  «         dS )z'Exits, specifying a coord as the cause.r/   z<located at builtin value>
Nz<unknown location>
z<unknown file>z line {line})Úlinez col {column})rd   z:
rt   r   r   z{spacer}{line_number} {line}
re   z>>r�   )Úline_numberró   Úspacer)rG   ÚstderrrE   r   Úbuiltin_coordr   Úlinenor@   rd   r;   r3   rv   rÝ   r<   r?   rg   rÄ   ÚrjustÚrstripÚexit)rð   Ú
error_textró   Úreal_file_pathÚdebug_inputrm   rô   s          r   rç   rç   K  s9  € àð ÝŒ
×Ò˜Ñ$Ô$Ð$ÝŒ
×Ò˜ÑÔÐà•Ô!Ò!Ð!ÝŒ
×ÒÐ7Ñ8Ô8Ð8àð U˜œ
ð U t |ÝŒ
×ÒÐ/Ñ0Ô0Ð0Ñ0àŒZð UÝŒ
×ÒÐ)Ñ*Ô*Ð*ØŒ<Ð#ÝŒJ×Ò˜^×2Ò2¸¼Ð2ÑEÔEÑFÔFÐFØŒ|Ð'Ý”
× Ò  ×!7Ò!7¸u¼|Ð!7Ñ!LÔ!LÑMÔMÐMÝŒ
×Ò˜ÑÔÐÑõ 	Œ
×Ò˜œÑ$Ô$Ð$ØŒ<Ð#ÝŒJ×Ò˜^×2Ò2¸¼Ð2ÑEÔEÑFÔFÐFØŒ|Ð'Ý”
× Ò  ×!7Ò!7¸u¼|Ð!7Ñ!LÔ!LÑMÔMÐMÝŒ
×Ò˜ÑÔÐåœŸš e¤o°u´zÑBÔBˆØŒ<Ð#­¬¯ª¸Ñ)GÔ)GÐ#Ý�n cÑ*Ô*ð 	U¨kÝ(¨Ñ5Ô5ð Uð U‘G�A�tØ"# a¡%�KØ" U¤\°AÑ%5Ò5Ð5Ø˜Ø$¨¬°qÑ(8Ò8Ð8Ýœ
×(Ò(Ð)I×)PÒ)PÝ(+¨KÑ(8Ô(8×(>Ò(>¸qÀ#Ñ(FÔ(FØ!%§¢¨TÑ!2Ô!2Ø,7¸5¼<Ò,GÐ,G D DÈTð *Qñ *Tô *Tñ Uô Uð Uøð	Uð 	Uð 	Uñ 	Uô 	Uð 	Uð 	Uð 	Uð 	Uð 	Uð 	Uøøøð 	Uð 	Uð 	Uð 	Uõ „HˆQ�K„K€K€K€Ks   ÊB/L=Ì=MÍMc	           
      ó>  ‡‡‡— t          | |¦  «        }	|r|	                     d‰dd¬¦  «         |	                     ¦   «         }
|r|
j        Št	          |
¦  «        Št          |
‰¦  «        }t          |
| ¦  «        }ˆˆˆfd„}t          |
j        |||||||¦  «         dS )aŒ  
    Entry point for a simple C-like language.

    language -- C, C++, C#
    extension -- .h, .cs
    emitter_types -- a list of emitters to have visit the ast
    use_inclusion_guards -- put inclusion guards around the header file
    system_headers -- a list of headers: #include <foo>
    local_headers -- a list of headers: #include "foo"
    usings -- a list of namespaces: using foo;
    z--header-output-extensionÚextzOThe extension to use for header files. (Helps work around a CMake Xcode issue.)r¼   c                 óR   •— ‰D ]"} || ‰¬¦  «                              ‰¦  «         Œ#d S )N)Úinclude_extension©rê   )rI   Úemitter_typeÚemitter_typesÚ	extensionrî   s     €€€r   Úoutput_callbackzc_main.<locals>.output_callback’  sF   ø€ Ø)ð 	Jð 	JˆLØˆL˜°9Ð=Ñ=Ô=×CÒCÀDÑIÔIÐIÐIð	Jð 	Jr   N)	rÏ   rÃ   Ú
parse_argsÚheader_output_extensionrå   r~   r¨   Úwrite_c_filer„   )r¢   r  r  Úallow_custom_extensionrÔ   Úuse_inclusion_guardsÚsystem_headersÚlocal_headersÚusingsÚoption_parserry   Úmain_output_fileÚcomment_linesr  rî   s    ``           @r   Úc_mainr  v  sõ   øøø€ õ  +¨8Ð5JÑKÔK€MØð dØ×"Ò"Ð#>È	Ð[`Øbð 	#ñ 	dô 	dð 	dà×&Ò&Ñ(Ô(€GØð 4ØÔ3ˆ	å�‰>Œ>€DÝ& w°	Ñ:Ô:ÐÝ% g¨xÑ8Ô8€MðJð Jð Jð Jð Jð Jð Jõ �Ô)Ð+;¸_ØÐ+Ø˜ vñ/ô /ð /ð /ð /r   c                 ó  — t          | |¦  «        5 }|rG|                     d                     d„ |D ¦   «         ¦  «        ¦  «         |                     d¦  «         |rat          |¦  «        }	|                     d                     |	¬¦  «        ¦  «         |                     d                     |	¬¦  «        ¦  «         |rPt          |¦  «        D ]+}
|                     d                     |
¬¦  «        ¦  «         Œ,|                     d¦  «         |rPt          |¦  «        D ]+}
|                     d	                     |
¬¦  «        ¦  «         Œ,|                     d¦  «         |rPt          |¦  «        D ]+}|                     d
                     |¬¦  «        ¦  «         Œ,|                     d¦  «          ||¦  «         |r)|                     d                     |	¬¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr/   c              3   ó@   K  — | ]}d                       |¦  «        V — ŒdS ©z// {0}N©r@   ©rY   ró   s     r   r[   zwrite_c_file.<locals>.<genexpr>   ó.   è è € Ð"SÐ"S¸T 8§?¢?°4Ñ#8Ô#8Ð"SÐ"SÐ"SÐ"SÐ"SÐ"Sr   ú

z#ifndef {inclusion_guard}
)Úinclusion_guardz#define {inclusion_guard}

z#include <{header}>
)Úheaderz#include "{header}"
zusing {using};
)Úusingz#endif // {inclusion_guard}
)r†   rE   rv   r´   r@   Úsorted)r„   r}   r  r  r  r  r  r  rI   r  r  r  s               r   r
  r
  š  sy  € õ 
Ð$ kÑ	2Ô	2ð b°fØð 	!Ø�LŠL˜ŸšÐ"SÐ"SÀ]Ð"SÑ"SÔ"SÑSÔSÑTÔTÐTØ�LŠL˜Ñ Ô Ð àð 	bÝ/°Ñ<Ô<ˆOØ�LŠLÐ6×=Ò=ÈoÐ=Ñ^Ô^Ñ_Ô_Ð_Ø�LŠLÐ8×?Ò?ÐP_Ð?Ñ`Ô`ÑaÔaÐaàð 	Ý  Ñ0Ô0ð Lð L�Ø—’Ð4×;Ò;À6Ð;ÑJÔJÑKÔKÐKÐKØ�LŠL˜ÑÔÐØð 	Ý  Ñ/Ô/ð Lð L�Ø—’Ð4×;Ò;À6Ð;ÑJÔJÑKÔKÐKÐKØ�LŠL˜ÑÔÐØð 	Ý ™œð Eð E�Ø—’Ð/×6Ò6¸UÐ6ÑCÔCÑDÔDÐDÐDØ�LŠL˜ÑÔÐàˆ˜ÑÔÐàð 	bØ�LŠLÐ8×?Ò?ÐP_Ð?Ñ`Ô`ÑaÔaÐað5bð bð bñ bô bð bð bð bð bð bð bð bøøøð bð bð bð bð bð bs   ‘GG7Ç7G;Ç>G;c           
      ó4   — t          | |||dd d |¬¦  «         d S )NF)r  r  r  r  )r
  )r„   r}   r  r  r  s        r   Úwrite_cs_filer   º  s<   € åÐ! ;°Ø¨EØ¨4¸ð@ñ @ô @ð @ð @ð @r   c                 ó  ‡ ‡— t          |¦  «        Št          |d¦  «        }t          |d¦  «        }ˆ ˆfd„}t          ¦   «         }|� ||¦  «                             ‰¦  «         t          |j        ||||j        |¬¦  «         d S )Nz.goÚGoc                 óD   •—  ‰| ¦  «                              ‰¦  «         d S r   r  ©rI   Úemitterrî   s    €€r   r  z go_main.<locals>.output_callbackÅ  ó%   ø€ Øˆ�‰Œ×Ò˜dÑ#Ô#Ð#Ð#Ð#r   ©r  ÚpackageÚ
properties)rå   r~   r¨   Údictrê   Úwrite_go_filer„   r(  ©r%  ry   Úscannerr  r  r  r)  rî   s   `      @r   Úgo_mainr.  À  óµ   øø€ Ý�‰>Œ>€DÝ& w°Ñ6Ô6ÐÝ% g¨tÑ4Ô4€Mð$ð $ð $ð $ð $ð $õ ‘”€JØÐØˆ�
ÑÔ×!Ò! $Ñ'Ô'Ð'å�'Ô*Ð,<¸oØ#¨W¬_ÈðUñ Uô Uð Uð Uð Ur   c                 ó¼  — g }|                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d	¦  «         |                      d
d¦  «        r|                     d¦  «         |d k    ryt          j                             | |¦  «        }t          j                             t          j                             t          j                             |¦  «        ¦  «        ¦  «        }t          | |¦  «        5 }	|rG|	 	                    d                     d„ |D ¦   «         ¦  «        ¦  «         |	 	                    d¦  «         |	 	                    d 
                    |¦  «        ¦  «         |	 	                    d¦  «         d„ |D ¦   «         }|	 	                    d                     |¦  «        ¦  «         |	 	                    d¦  «          ||	¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚ	use_bytesTÚbytesÚ
use_binaryúencoding/binaryÚ
use_errorsÚerrorsÚuse_cladú	anki/cladÚuse_fmtÚfmtr/   c              3   ó@   K  — | ]}d                       |¦  «        V — ŒdS r  r  r  s     r   r[   z write_go_file.<locals>.<genexpr>ã  r  r   r  zpackage {}

z	import (
c                 ó   — g | ]
}d |z   dz   ‘ŒS )z	"z"
r   )rY   Úxs     r   r`   z!write_go_file.<locals>.<listcomp>ç  s!   € Ð8Ð8Ð8¨!�E˜A‘I Ñ%Ð8Ð8Ð8r   r]   z)

©ÚgetÚappendr;   r3   rv   Úbasenamer“   rƒ   r†   rE   r@   ©
r„   r}   r  r  r(  Úimportsr)  ÚincludesÚ	full_pathrI   s
             r   r+  r+  Ï  sc  € ð €HØ‡~‚~�k 4Ñ(Ô(ð !Ø�Š˜Ñ Ô Ð Ø‡~‚~�l DÑ)Ô)ð +Ø�ŠÐ)Ñ*Ô*Ð*Ø‡~‚~�l DÑ)Ô)ð "Ø�Š˜Ñ!Ô!Ð!Ø‡~‚~�j $Ñ'Ô'ð %Ø�Š˜Ñ$Ô$Ð$Ø‡~‚~�i Ñ&Ô&ð Ø�Š˜ÑÔÐà�$‚€Ý”G—L’LÐ!1°;Ñ?Ô?ˆ	Ý”'×"Ò"¥2¤7×#3Ò#3µB´G·O²OÀIÑ4NÔ4NÑ#OÔ#OÑPÔPˆÝ	Ð$ kÑ	2Ô	2ð 
 °fØð 	!Ø�LŠL˜ŸšÐ"SÐ"SÀ]Ð"SÑ"SÔ"SÑSÔSÑTÔTÐTØ�LŠL˜Ñ Ô Ð Ø�ŠÐ%×,Ò,¨WÑ5Ô5Ñ6Ô6Ð6Ø�Š�\Ñ"Ô"Ð"Ø8Ð8¨xÐ8Ñ8Ô8ˆØ�Š�R—W’W˜XÑ&Ô&Ñ'Ô'Ð'Ø�Š�WÑÔÐàˆ˜ÑÔÐð
 ð 
 ð 
 ñ 
 ô 
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 ð 
 øøøð 
 ð 
 ð 
 ð 
 ð 
 ð 
 s   Å)CIÉIÉIc                 ó  ‡ ‡— t          |¦  «        Št          |d¦  «        }t          |d¦  «        }ˆ ˆfd„}t          ¦   «         }|� ||¦  «                             ‰¦  «         t          |j        ||||j        |¬¦  «         d S )Nz.jsÚJSc                 óD   •—  ‰| ¦  «                              ‰¦  «         d S r   r  r$  s    €€r   r  z js_main.<locals>.output_callbackò  r&  r   r'  )rå   r~   r¨   r*  rê   Úwrite_js_filer„   r(  r,  s   `      @r   Újs_mainrJ  í  r/  r   c                 ó   — g }|                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d¦  «         |                      dd¦  «        r|                     d	¦  «         |                      d
d¦  «        r|                     d¦  «         |d k    ryt          j                             | |¦  «        }t          j                             t          j                             t          j                             |¦  «        ¦  «        ¦  «        }t          | |¦  «        5 }	|rG|	 	                    d                     d„ |D ¦   «         ¦  «        ¦  «         |	 	                    d¦  «         |	 	                    d 
                    |¦  «        ¦  «          ||	¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr1  Tr2  r3  r4  r5  r6  r7  r8  r9  r:  r/   c              3   ó@   K  — | ]}d                       |¦  «        V — ŒdS r  r  r  s     r   r[   z write_js_file.<locals>.<genexpr>  r  r   r  z<const {{ Clad, CladBuffer }} = require('./cladConfig.js');

r>  rB  s
             r   rI  rI  ü  s  € ð €HØ‡~‚~�k 4Ñ(Ô(ð !Ø�Š˜Ñ Ô Ð Ø‡~‚~�l DÑ)Ô)ð +Ø�ŠÐ)Ñ*Ô*Ð*Ø‡~‚~�l DÑ)Ô)ð "Ø�Š˜Ñ!Ô!Ð!Ø‡~‚~�j $Ñ'Ô'ð %Ø�Š˜Ñ$Ô$Ð$Ø‡~‚~�i Ñ&Ô&ð Ø�Š˜ÑÔÐà�$‚€Ý”G—L’LÐ!1°;Ñ?Ô?ˆ	Ý”'×"Ò"¥2¤7×#3Ò#3µB´G·O²OÀIÑ4NÔ4NÑ#OÔ#OÑPÔPˆÝ	Ð$ kÑ	2Ô	2ð  °fØð 	!Ø�LŠL˜ŸšÐ"SÐ"SÀ]Ð"SÑ"SÔ"SÑSÔSÑTÔTÐTØ�LŠL˜Ñ Ô Ð Ø�ŠÐW×^Ò^Ð_fÑgÔgÑhÔhÐhàˆ˜ÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  s   Å)A=G3Ç3G7Ç:G7©r   r   c                 óZ  — t          | |¦  «        5 }|r\|                     d¦  «         |                     d                     d„ |D ¦   «         ¦  «        ¦  «         |                     d¦  «         |rC|D ]+}|                     d                     |¬¦  «        ¦  «         Œ,|                     d¦  «         |t          j        k    r| g|pg z   }|r/t          |t          j                             | |¦  «        |¦  «         |rˆ|D ]p}	t          |	t          ¦  «        r0|	\  }
}|                     d                     |
|¬¦  «        ¦  «         ŒG|                     d	                     |	¬
¦  «        ¦  «         Œq|                     d¦  «          ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz"""
r/   c              3   ó@   K  — | ]}d                       |¦  «        V — ŒdS )z{0}Nr  r  s     r   r[   z$write_python_file.<locals>.<genexpr>  s.   è è € Ð"PÐ"P¸$ 5§<¢<°Ñ#5Ô#5Ð"PÐ"PÐ"PÐ"PÐ"PÐ"Pr   z
"""

z!from __future__ import {feature}
)Úfeaturezfrom {source} import {target}
)r£   Útargetzimport {module}
)Úmodule)r†   rE   rv   r@   rG   rH   Ú_write_python_modify_pathr;   r3   Ú
isinstancer^   )r„   r}   r  r  Úfuture_featuresÚadditional_pathsÚimport_modulesrI   rP  rR  r£   rQ  s               r   Úwrite_python_filerX    s%  € õ 
Ð$ kÑ	2Ô	2ð  °fØð 	&Ø�LŠL˜Ñ!Ô!Ð!Ø�LŠL˜ŸšÐ"PÐ"PÀ-Ð"PÑ"PÔ"PÑPÔPÑQÔQÐQØ�LŠL˜Ñ%Ô%Ð%àð 	Ø*ð [ð [�Ø—’ÐA×HÒHÐQXÐHÑYÔYÑZÔZÐZÐZØ�LŠL˜ÑÔÐà•S”ZÒÐØ 0Ð1Ð5EÐ5KÈÑLÐØð 	WÝ%Ø�œŸšÐ%5°{ÑCÔCÐEUñWô Wð Wð ð 	Ø(ð Lð L�Ý˜f¥eÑ,Ô,ð LØ%+‘N�F˜FØ—L’LÐ!B×!IÒ!IÐQWÐ`fÐ!IÑ!gÔ!gÑhÔhÐhÐhà—L’LÐ!4×!;Ò!;À6Ð!;Ñ!JÔ!JÑKÔKÐKÐKØ�LŠL˜ÑÔÐàˆ˜ÑÔÐð5 ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  s   ‘FF Æ F$Æ'F$c                 óX   ‡ — ˆ fd„t          dt          ‰ ¦  «        d¦  «        D ¦   «         S )Nc                 óF   •— g | ]}t          ‰||d z   …         d¦  «        ‘ŒS )é   é   )Úint)rY   rm   Ústrings     €r   r`   z%decode_hex_string.<locals>.<listcomp>7  s/   ø€ ÐEÐEÐE q�C��q˜˜1™�u”˜rÑ"Ô"ÐEÐEÐEr   r   r[  )ÚrangerX   ©r^  s   `r   Údecode_hex_stringra  6  s/   ø€ ØEÐEÐEÐE­E°!µS¸±[´[À!Ñ,DÔ,DÐEÑEÔEÐEr   c                 ón  — |s|                       d¦  «         d S |dz   }|                       d¦  «         |D ]Q}|                       d|z  ¦  «         |                       t          |¦  «        ¦  «         |                       d¦  «         ŒR|                       d|z  ¦  «         |                       d¦  «         d S )Nz[]r   z[
r-   z,
ú])rE   Úrepr)rI   Úpathsr$   Úinner_depthr3   s        r   Ú_pretty_print_listrg  9  s¾   € Øð 
Ø�Š�TÑÔÐÐÐà˜a‘iˆØ�Š�UÑÔÐØð 	 ð 	 ˆDØ�LŠL˜ Ñ+Ñ,Ô,Ð,Ø�LŠL�˜d™œÑ$Ô$Ð$Ø�LŠL˜ÑÔÐÐØ�Š�T˜E‘\Ñ"Ô"Ð"Ø�Š�SÑÔÐÐÐr   c                 óD  ‡— | t           j        k    r.t          j                             |¦  «        Šˆfd„|D ¦   «         }nd„ |D ¦   «         }|                      t          j        d¦  «        ¦  «         t          | |d¬¦  «         |                      d¦  «         | t           j        k    r|                      d¦  «         |                      d¦  «         | t           j        k    r|                      d	¦  «         |                      t          j        d
¦  «        ¦  «         d S )Nc                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r   )r—   )rY   r3   Úcurrentpaths     €r   r`   z-_write_python_modify_path.<locals>.<listcomp>J  s$   ø€ Ð_Ð_Ð_ÀdÕ.¨t°[ÑAÔAÐ_Ð_Ð_r   c                 ó†   — g | ]>}t           j                             t           j                             |¦  «        ¦  «        ‘Œ?S r   )r;   r3   r“   r”   )rY   r3   s     r   r`   z-_write_python_modify_path.<locals>.<listcomp>L  s6   € ÐaÐaÐaÈ�BœG×,Ò,­R¬W¯_ª_¸TÑ-BÔ-BÑCÔCÐaÐaÐar   zU        def _modify_path():
        	import inspect, os, sys
        	search_paths = r   )r$   r/   zY	currentpath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe())))
z"	for search_path in search_paths:
zl		search_path = os.path.normpath(os.path.abspath(os.path.realpath(os.path.join(currentpath, search_path))))
zu        		if search_path not in sys.path:
        			sys.path.insert(0, search_path)
        _modify_path()

        )	rG   rH   r;   r3   rƒ   rE   ÚtextwrapÚdedentrg  )rI   r}   rV  rj  s      @r   rS  rS  F  s;  ø€ à•”ÒÐÝ”g—o’o kÑ2Ô2ˆØ_Ð_Ð_Ð_ÐN^Ð_Ñ_Ô_ÐÐàaÐaÐP`ÐaÑaÔaÐà
‡L‚L•”ð "ñ ô ñ ô ð õ �vÐ/°qÐ9Ñ9Ô9Ð9Ø
‡L‚L�ÑÔÐà•”ÒÐØ�ŠÐrÑsÔsÐsà
‡L‚LÐ7Ñ8Ô8Ð8à•”ÒÐØ�Šð  Gñ  	Hô  	Hð  	Hà
‡L‚L•”ð "ñ ô ñ ô ð ð ð r   c                 óî   — |                       ¦   «         D ]_}t          |d¦  «        rMt          |j        d¦  «        r8|j        j        }t          |d¦  «        r
|j        s dS t          |¦  «        s dS Œ`dS )záRecursively traverses all members of an ast.Node and returns true if all of them have a default
       constructor. Returns false if any members don't have a default constructor. NOTE: does not check 'node'
       itself
    r%   Ú	type_declÚdefault_constructorFT)ÚmembersÚhasattrr%   ro  rp  Ú(_do_all_members_have_default_constructor)ÚnodeÚmemberÚchilds      r   rs  rs  d  sŒ   € ð —,’,‘.”.ð ð ˆÝ�6˜6Ñ"Ô"ð 	¥w¨v¬{¸KÑ'HÔ'Hð 	Ø”KÔ)ˆEÝ˜Ð 5Ñ6Ô6ð ØÔ.ðà�u�uÝ;¸EÑBÔBð Ø�u�uøàˆ4r   c                 ó|   — t          t          j        d| ¦  «        ¦  «        }d|v r|                     d¦  «         |S )z@Splits the string on the characters '*', '/', '+', '-', ' '
    z[*+/ -]r]   )Úsetrª   ÚsplitÚremove)r^  ry  s     r   Ú_split_string_on_operatorsr{  u  s=   € õ •”˜ FÑ+Ô+Ñ,Ô,€EØ	ˆU€{€{Ø�Š�RÑÔÐØ€Lr   c                 óX   — | r'| d d…                               ¦   «         | dd …         z   ndS )Nr   r]   )r¬   r`  s    r   Ú_lower_first_char_of_stringr}  }  s3   € Ø.4Ð<ˆ6�"�1�"Œ:×ÒÑÔ  q r r¤
Ñ*Ð*¸"Ð<r   c                 ó´   ‡— d„ | D ¦   «         }t           j                             t           j                             |¦  «        ¦  «        Šˆfd„| D ¦   «         }|S )zàReturns a list of args with absolute paths replaced by relative paths
       using the longest common path. Absolute paths are detected using os.path.isabs(path).
       Non-path and relative-path args are not modified.
    c                 óP   — g | ]#}t           j                             |¦  «        ¯!|‘Œ$S r   )r;   r3   rš   )rY   rˆ   s     r   r`   z1_convert_abspaths_to_relpaths.<locals>.<listcomp>…  s+   € Ð3Ð3Ð3�A¥¤§¢¨qÑ!1Ô!1Ð3ˆaÐ3Ð3Ð3r   c                 ó’   •— g | ]C}t           j                             |¦  «        r t           j                             |‰¦  «        n|‘ŒDS r   )r;   r3   rš   r•   )rY   rˆ   Úlcps     €r   r`   z1_convert_abspaths_to_relpaths.<locals>.<listcomp>‰  sA   ø€ ÐQÐQÐQÀq­2¬7¯=ª=¸Ñ+;Ô+;ÐB•”—’  3Ñ'Ô'Ð'ÀÐQÐQÐQr   )r;   r3   rƒ   Úcommonprefix)rÅ   re  r§   r�  s      @r   r¥   r¥   €  s[   ø€ ð
 4Ð3˜Ð3Ñ3Ô3€Eõ Œ'�/Š/�"œ'×.Ò.¨uÑ5Ô5Ñ
6Ô
6€CØQÐQÐQÐQÈDÐQÑQÔQ€HØ€Or   rØ   r   )Fr   )FFFNNN)NFNNN)NN)NrM  NN)r   )7rÍ   Ú
__future__r   r   ÚargparseÚ
contextlibrŽ   ÚinspectÚior;   rž   rª   rG   rl  r]   r   r   Úversion_infor>   r   Úcontextmanagerr   ÚStringIOr   r{   r~   r†   rŠ   r‚   r—   r›   r¨   r®   r´   ÚArgumentParserr¶   rÏ   rå   rç   r  r
  r   r.  r*  r+  rJ  rI  rX  ra  rg  rS  rs  r{  r}  r¥   r   r   r   ú<module>rŒ     sÈ  ððð ð 'Ð &Ð &Ð &Ð &Ð &Ø %Ð %Ð %Ð %Ð %Ð %à €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø 	€	€	€	Ø 
€
€
€
Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à
Ô˜Ô˜aÒ€ðBð Bð Bð Ôðð ñ Ôððg!ð g!ð g!ð g!ð g!˜BœKñ g!ô g!ð g!ðR(ð (ð (ð	ð 	ð 	ð?ð ?ð ?ð ?ðð ð ðð ð ð(ð (ð (ð (ð#ð #ð #ðð ð ðEð Eð Eð	ð 	ð 	ð">ð ">ð ">ð ">ð ">˜8Ô2ñ ">ô ">ð ">ðH$ð $ð $ð $ð $Ð1ñ $ô $ð $ð>ð ð ð ð2(ð (ð (ð (ðX =BØ"Ø8<ð"/ð "/ð "/ð "/ðJ 27Ø8<ðbð bð bð bð@@ð @ð @ð @ðUð Uð Uð Uð QUÐ^bØ˜T˜T™VœVð ð  ð  ð  ð<Uð Uð Uð Uð QUÐ^bØ˜T˜T™VœVð ð  ð  ð  ð6 -RØ.2ð ð  ð  ð  ð@Fð Fð Fðð ð ð ðð ð ð<ð ð ð"ð ð ð=ð =ð =ð
ð 
ð 
ð 
ð 
r   