
    daf                     d   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
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ ej@                  Z!ejD                  Z#ej@                  jI                         D  ch c]  \  } }| e#jK                         vs| c}} Z&d
edee   fdZ'ddde
e(   dee   de)defdZ*dddde+dee   de)de)def
dZ,de+dee   fdZ-de+de+defdZ.d
ede+fdZ/	 	 d!d
edej`                  de)dee+   def
dZ1de)fd Z2yc c}} w )"    N)IOAnyDictFinalOptionalTypecast)compile_c_extension)CParserGenerator)Grammar)GeneratedParser)Parser)PythonParserGenerator)	Tokenizergrammarreturnc                     t        j                         }t        | |      }|j                  d       i }t	        |j                         |       |d   S )N<string>r   )ioStringIOr   generateexecgetvalue)r   outgenrnss       9/root/Python-3.12.4/Tools/peg_generator/pegen/testutil.pygenerate_parserr      sH    
++-C #.DMM* B      Fverbosefileparser_classr!   c                    t        t        j                  | j                              } |||      }|j	                         }||j                  d      |S )Nr    zinvalid syntax)r   tokenizegenerate_tokensreadlinestartmake_syntax_error)r"   r#   r!   	tokenizerparserresults         r   
run_parserr-   &   sN    (224==ABI)W5F\\^F~&&'788Mr   T)dedentr!   sourcer.   c                v    |rt        j                  |       } t        j                  |       }t	        |||      S )Nr    )textwrapr.   r   r   r-   )r/   r#   r.   r!   r"   s        r   parse_stringr2   0   s2     (;;vDdL'::r   c                 8    t        | t              }t        |      S )N)r2   GrammarParserr   )r/   r   s     r   make_parserr5   :   s    6=1G7##r   	full_namepathc                     t         j                  j                  | |      }|J t         j                  j                  |      }t	        t
        |j                        }|j                  |       |S )z"Import a python module from a path)	importlibutilspec_from_file_locationmodule_from_specr	   r   loaderexec_module)r6   r7   specmodr=   s        r   import_filerA   @   s_     >>11)TBD
..
)
)$
/C #t{{#F
sJr   c                     t        j                         }t        | t        t        t
        |      }|j                  d       |j                         S )Nr   )r   r   r   
ALL_TOKENSEXACT_TOKENSNON_EXACT_TOKENSr   r   )r   r   r   s      r   generate_c_parser_sourcerF   N   s9    
++-CGZ?OQTUDMM*<<>r   debuglibrary_dirc           	          t        j                  |      rJ |dz  }t        |dd      5 }t        | t        t
        t        ||      }|j                  d       ddd       t        t        |      t        |      d|       y# 1 sw Y   +xY w)	zGenerate a parser c extension for the given grammar in the given path

    Returns a module object with a parse_string() method.
    TODO: express that using a Protocol.
    zparse.cwzutf-8)encoding)rG   NT)	build_dirdisable_optimizationrH   )
oslistdiropenr   rC   rD   rE   r   r
   str)r   r7   rG   rH   r/   r"   r   s          r   generate_parser_c_extensionrR   U   s     zz$IF	fcG	, !Z/?U
 	i 	!
 Fd)!! !s   /BBc                     d} 	 dd l }t        d       |j                         }|j	                         }i }|j
                  | z  |d<   |j                  | z  |d<   t        j                  dk(  r|j                  | z  |d<   nLdd l
}|j                  |j                        }t        j                  d	k(  rd
}nd}|j                  |z  | z  |d<   |j                         D ]  \  }}	t        d|dd|	dd        y# t        $ r Y yw xY w)Ni   r   FzMemory stats:rssvmswin32maxrssdarwin   i   z  z12.12sz: z10.0fz MiBT)psutilImportErrorprintProcessmemory_inforT   rU   sysplatform	peak_wsetresource	getrusageRUSAGE_SELF	ru_maxrssitems)
MiBrZ   processmeminforesrb   rusagefactorkeyvalues
             r   print_memstatsro   r   s   C 
/nnG!!#G
Cs"CJs"CJ
||w))C/H 	##H$8$89<<8#FF((61C7Hiik 4
U3v,buT234-  s   C8 8	DD)FN)3importlib.utilr9   r   rN   pathlibr_   r1   tokenr%   typingr   r   r   r   r   r   r	   pegen.buildr
   pegen.c_generatorr   pegen.grammarr   pegen.grammar_parserr   r4   pegen.parserr   pegen.python_generatorr   pegen.tokenizerr   tok_namerC   EXACT_TOKEN_TYPESrD   rf   valuesrE   r   bytesboolr-   rQ   r2   r5   rA   rF   PurePathrR   ro   )indexnames   00r   <module>r      s    	 	  
    = = = + . ! A  8 %^^
&&!NN002UDe<CVCVCX6XD 
	!W 	!f 	! PU RY d6l  Y\  @DUZ;;#F|;8<;NR;;$ $V $3 c c g #  =B!%#,,59# 	: {s   D,-D,