
    daf                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( dZ)d	Z* G d
 de      Z+e+jX                  e+jZ                  e+j\                  e+j^                  dZ0e G d d             Z1 G d de      Z2 G d de(e      Z3y)    N)	dataclassfield)Enum)IOAnyDictListOptionalSetTextTuple)grammar)AltCutForcedGatherGrammarVisitorGroupLeaf	Lookahead	NamedItemNameLeafNegativeLookaheadOptPositiveLookaheadRepeat0Repeat1RhsRule
StringLeaf)ParserGeneratorz#include "pegen.h"

#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
#  define D(x) if (p->debug) { x; }
#else
#  define D(x)
#endif

#ifdef __wasi__
#  define MAXSTACK 4000
#else
#  define MAXSTACK 6000
#endif

z
void *
_PyPegen_parse(Parser *p)
{
    // Initialize keywords
    p->keywords = reserved_keywords;
    p->n_keyword_lists = n_keyword_lists;
    p->soft_keywords = soft_keywords;

    return start_rule(p);
}
c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y	)
	NodeTypesr                        N)__name__
__module____qualname__
NAME_TOKENNUMBER_TOKENSTRING_TOKENGENERIC_TOKENKEYWORDSOFT_KEYWORDCUT_OPERATORF_STRING_CHUNK     </root/Python-3.12.4/Tools/peg_generator/pegen/c_generator.pyr#   r#   ?   s*    JLLMGLLNr7   r#   )NAMENUMBERSTRINGr3   c                       e Zd ZU eed<    ee      Zee	   ed<   dZ
ee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   d	Zeed
<   dZee   ed<   defdZy)FunctionCallfunction)default_factory	argumentsNassigned_variableassigned_variable_typereturn_typenodetypeF
force_truecommentreturnc           	         g }|j                  | j                         | j                  r<|j                  ddj                  t	        t
        | j                               d       | j                  r|j                  d       | j                  r@| j                  r!d| j                  dd| j                  dg|d}nd| j                  dg|d}| j                  r|j                  d| j                          dj                  |      S )N(, )z, !p->error_indicator = z  //  )
appendr>   r@   joinmapstrrE   rA   rB   rF   )selfpartss     r8   __str__zFunctionCall.__str__]   s    T]]#>>LL1TYYs3'?@ACD??LL01!!****//	 	 	 d44eIeISI<<LL5/0wwu~r7   )r+   r,   r-   rQ   __annotations__r   listr@   r	   r   rA   r
   rB   rC   rD   r#   rE   boolrF   rT   r6   r7   r8   r=   r=   R   sy    M 6ItCy6'+x}+,0HSM0!%K#%$(Hhy!(J!GXc]! r7   r=   c                   P    e Zd Zdedeeef   dee   fdZdede	fdZ
dede	fd	Zd
ede	fdZd
ede	fdZd
ede	fdZd
ede	fdZd
edede	fdZd
ede	fdZd
ede	fdZd
ede	fdZd
ede	fdZd
ede	fdZd
e de	fdZ!d
e"de	fdZ#d
e$de	fdZ%d
e&de	fdZ'd
e(de	f fdZ) xZ*S )CCallMakerVisitorparser_generatorexact_tokensnon_exact_tokensc                 J    || _         || _        || _        i | _        g | _        y N)genr[   r\   cachecleanup_statements)rR   rZ   r[   r\   s       r8   __init__zCCallMakerVisitor.__init__x   s*     $( 0.0
-/r7   keywordrG   c           
      z    t        ddd| j                  j                  |   gdt        j                  d| d      S )N_keyword_PyPegen_expect_tokenpToken *token=''rA   r>   r@   rC   rD   rF   )r=   r_   keywordsr#   r2   )rR   rc   s     r8   keyword_helperz CCallMakerVisitor.keyword_helper   sD    (,DHH--g67!&&gYa(
 	
r7   valuec           
      L    t        ddd|gdt        j                  d| d      S )Nre   _PyPegen_expect_soft_keywordrg   expr_tyzsoft_keyword='rj   rk   )r=   r#   r3   )rR   rn   s     r8   soft_keyword_helperz%CCallMakerVisitor.soft_keyword_helper   s4    (3El!++$UG1-
 	
r7   nodec           
      $   |j                   }|| j                  v rz|t        v r<t        |j	                          dd|j	                          ddgt        |   d|      S t        |j	                          ddd|gt
        j                  dd	| d
      S d }| j                  j                  j                  |j	                               }|.|j                         s|j                         rdn|j                  }t        | d| ddg||       S )N_var	_PyPegen__tokenrg   rq   rA   r>   r@   rD   rC   rF   rf   rh   ri   rj   
asdl_seq *_rulerA   r>   r@   rC   rF   )rn   r\   BASE_NODETYPESr=   lowerr#   r1   r_   	all_rulesgetis_loop	is_gathertype)rR   rs   namer   rules        r8   visit_NameLeafz CCallMakerVisitor.visit_NameLeaf   s   zz4(((~%#)-d&;(f="e+D1 )    %)ZZ\N$"70+"00%!$q)  xx!!%%djjl3#'<<>T^^5E<499D!%dmvU^ef
 	
r7   c           
         t        j                  |j                        }t        j                  d|      rG|j                  j                  d      r| j                  |      S | j                  |j                        S || j                  v sJ |j                   d       | j                  |   }t        ddd|gt        j                  dd| d	      S )
Nz[a-zA-Z_]\w*\Zrj    is not a known literal_literalrf   rg   rh   ri   rx   )astliteral_evalrn   rematchendswithrm   rr   r[   r=   r#   r1   )rR   rs   valr   s       r8   visit_StringLeafz"CCallMakerVisitor.visit_StringLeaf   s    tzz*88%s+zz""3'**3////

;;$+++S

|;R-SS+$$S)D",0+"00%!#a( r7   c                 b   || j                   v r| j                   |   S |j                  r9| j                  |j                  d   j                  d         | j                   |<   n?| j
                  j                  |      }t        | d| ddg|       | j                   |<   | j                   |   S )Nr   ru   rz   rg   )rA   r>   r@   rF   )r`   can_be_inlinedgenerate_callaltsitemsr_   artifical_rule_from_rhsr=   rR   rs   r   s      r8   	visit_RhszCCallMakerVisitor.visit_Rhs   s    4::::d###11$))A,2D2DQ2GHDJJt8833D9D+%)F$- 6%&	 DJJt zz$r7   c                     | j                  |j                        }|j                  r|j                  |_        |j                  r|j                  |_        |S r^   )r   itemr   rA   r   rB   rR   rs   calls      r8   visit_NamedItemz!CCallMakerVisitor.visit_NamedItem   sA    !!$)),99%)YYD"99*.))D'r7   positivec                 P   | j                  |j                        }|j                  t        j                  k(  r&t        d||j                  g|j                  d      S |j                  t        j                  k(  r&t        d||j                  g|j                  d      S |j                  t        j                  t        j                  hv r4t        d||j                  g|j                  dd|j                         S t        d||j                  g|j                  d      S )	N_PyPegen_lookahead_with_nameint)r>   r@   rC   _PyPegen_lookahead_with_string_PyPegen_lookahead_with_intztoken=)r>   r@   rC   rF   _PyPegen_lookahead)r   rs   rD   r#   r.   r=   r>   r@   r3   r1   r2   )rR   rs   r   r   s       r8   lookahead_call_helperz'CCallMakerVisitor.lookahead_call_helper   s   !!$)),==I0007#T]]DT^^D! 
 ]]i4449#T]]DT^^D! 
 ]]y66	8I8IJJ6#T]]DT^^D! ,	   -#T]]DT^^D! r7   c                 &    | j                  |d      S )Nr$   r   rR   rs   s     r8   visit_PositiveLookaheadz)CCallMakerVisitor.visit_PositiveLookahead       ))$22r7   c                 &    | j                  |d      S Nr   r   r   s     r8   visit_NegativeLookaheadz)CCallMakerVisitor.visit_NegativeLookahead  r   r7   c           
      $   | j                  |j                        }t        |j                  t              rt        |j                  t              sJ t	        j
                  |j                  j                        }|| j                  v sJ |j                  j                   d       | j                  |   }t        ddd|d| dgt        j                  dd| d	      S t        |j                  t              r| j                  |j                  j                        }d |_        d |_        t        dd
dt!        |      d|j                  j                  dgdd|j                  j                  d      S t#        d|j                   d      )Nr   r   _PyPegen_expect_forced_tokenrg   "rh   zforced_token='rj   rx   _PyPegen_expect_forced_resultvoid *zforced_token=(rK   r{   zForced tokens don't work with z nodes)r   rs   
isinstancer   r   r   rn   r[   r=   r#   r1   r   visitrhsrA   rF   rQ   NotImplementedError)rR   rs   r   r   r   s        r8   visit_ForcedzCCallMakerVisitor.visit_Forced  sc   !!$)),dii&dii...""499??3C$+++X		/@@W-XX+$$S)D",7#aj1"00%(Q/  dii'::diimm,D%)D"DL",8D	Qtyy}}.?q+AB$((9;  &(FtyykQW&XYYr7   c                     | j                  |j                        }t        d|j                  |j                  d|       S )N_opt_varT)rA   r>   r@   rE   rF   )r   rs   r=   r>   r@   r   s      r8   	visit_OptzCCallMakerVisitor.visit_Opt#  s<    !!$)),(]]nnf
 	
r7   c                     || j                   v r| j                   |   S | j                  j                  |j                  d      }t	        | d| ddgd|       | j                   |<   | j                   |   S )NFru   rz   rg   ry   r{   r`   r_   artificial_rule_from_repeatrs   r=   r   s      r8   visit_Repeat0zCCallMakerVisitor.visit_Repeat0-  sz    4::::d##xx33DIIuE'!%dmvU^e$f


4 zz$r7   c                     || j                   v r| j                   |   S | j                  j                  |j                  d      }t	        | d| ddgd|       | j                   |<   | j                   |   S )NTru   rz   rg   ry   r{   r   r   s      r8   visit_Repeat1zCCallMakerVisitor.visit_Repeat1:  sz    4::::d##xx33DIItD'!%dmvU^e$f


4 zz$r7   c                     || j                   v r| j                   |   S | j                  j                  |      }t        | d| ddgd|       | j                   |<   | j                   |   S )Nru   rz   rg   ry   r{   )r`   r_   artifical_rule_from_gatherr=   r   s      r8   visit_GatherzCCallMakerVisitor.visit_GatherG  st    4::::d##xx2248'!%dmvU^e$f


4 zz$r7   c                 8    | j                  |j                        S r^   )r   r   r   s     r8   visit_GroupzCCallMakerVisitor.visit_GroupT  s    !!$((++r7   c                 <    t        dddt        j                        S )N_cut_varr   1)rA   rC   r>   rD   )r=   r#   r4   r   s     r8   	visit_CutzCCallMakerVisitor.visit_CutW  s!    (++	
 	
r7   c                 "    t         |   |      S r^   )superr   )rR   rs   	__class__s     r8   r   zCCallMakerVisitor.generate_call_  s    w}T""r7   )+r+   r,   r-   r!   r   rQ   r   r   rb   r=   rm   rr   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   r   r   r   r   __classcell__r   s   @r8   rY   rY   w   s   
0)
0 38n
0 c(	
0
c 
l 

 
 
 
8  
  
DZ L & c  l  I , ) s | 83,= 3, 33,= 3, 3Z ZL Z:
c 
l 
 '  l   '  l     L  , ,, ,
c 
l 
## #, # #r7   rY   c                       e Zd Z	 	 d9dej                  deeef   deeef   dee   de	e
e      dedef fdZd:dZd:dZded	d
fdZd;ded	efdZdeded	d
fdZdeded	d
fdZ	 d<dede	e   d	d
fdZdeded	d
fdZded	d
fdZd	eeeeeef      f   fdZd:dZd:dZd:dZd:d Zd:d!Zd"ed#ed	d
fd$Z d"ed	efd%Z!d"ed&e"d#ed	d
fd'Z#d"ed&e"d	d
fd(Z$d"ed	d
fd)Z%d"e&d	d
fd*Z'd"e"d+ed,ed-e	e   d	d
f
d.Z(d/ed"e)d	d
fd0Z*d<d"e+de	e   d	d
fd1Z,d,ed"e+d	d
fd2Z-d:d3Z.d"e+d,ed-e	e   d	d
fd4Z/d"e+d,ed-e	e   d	d
fd5Z0d"e+d+ed,ed-e	e   d	d
f
d6Z1d"e+d	ee	e   e	e   f   fd7Z2d"e&d	ee	e   e	e   f   fd8Z3 xZ4S )=CParserGeneratorr   tokensr[   r\   filedebugskip_actionsc                     t         |   |t        |j                               |       t	        | ||      | _        d| _        || _        || _        g | _	        y r   )
r   rb   setvaluesrY   callmakervisitor_varname_counterr   r   ra   )	rR   r   r   r[   r\   r   r   r   r   s	           r8   rb   zCParserGenerator.__init__d  sW     	#fmmo"6=3D, 04
 !"
(-/r7   rG   Nc                     | j                  d       | j                         5  | j                  d       d d d        | j                  d       y # 1 sw Y   xY w)Nzif (p->level++ == MAXSTACK) {z_Pypegen_stack_overflow(p);}printindentrR   s    r8   	add_levelzCParserGenerator.add_levelw  sE    

23[[] 	6JJ45	6

3	6 	6   AAc                 &    | j                  d       y )Nzp->level--;r   r   s    r8   remove_levelzCParserGenerator.remove_level}  s    

=!r7   ret_valc                     | j                   D ]  }| j                  |        | j                          | j                  d| d       y )Nzreturn ;)ra   r   r   )rR   r   stmts      r8   
add_returnzCParserGenerator.add_return  sD    ++ 	DJJt	

WWIQ'(r7   r   c                 f    |dz   t        | j                        z   }| xj                  dz  c_        |S )N_r$   )rQ   r   )rR   r   new_vars      r8   unique_varnamezCParserGenerator.unique_varname  s1    *s4#8#899"r7   	call_text	returnvalc                    | j                         }| j                  d| d| d       | j                  d| d       | j                         5  | j                  |       d d d        | j                  d       y # 1 sw Y   xY w)Nint rL   r   if () {r   )r   r   r   r   )rR   r   r   	error_vars       r8   call_with_errorcheck_returnz,CParserGenerator.call_with_errorcheck_return  su    '')	

T)C	{!45

T)D)*[[] 	'OOI&	'

3	' 	's   A::Bgoto_targetc                    | j                         }| j                  d| d| d       | j                  d| d       | j                         5  | j                  d| d       d d d        | j                  d       y # 1 sw Y   xY w)Nr   rL   r   r   r   goto r   )r   r   r   )rR   r   r   r   s       r8   call_with_errorcheck_gotoz*CParserGenerator.call_with_errorcheck_goto  s    '')	

T)C	{!45

T)D)*[[] 	/JJ{m1-.	/

R	/ 	/s   A>>Bexprcleanup_codec                 &   | j                  d| d       | j                         5  || j                  |       | j                  d       | j                  d       | j                  d       d d d        | j                  d       y # 1 sw Y   xY w)Nr   r   p->error_indicator = 1;PyErr_NoMemory();NULLr   r   r   r   )rR   r   r   s      r8   out_of_memory_returnz%CParserGenerator.out_of_memory_return  s}    
 	

T$t$%[[] 	$'

<(JJ01JJ*+OOF#	$ 	

R	$ 	$s   ABBc                     | j                  d| d       | j                         5  | j                  d       | j                  d| d       d d d        | j                  d       y # 1 sw Y   xY w)Nr   r   r   r   r   r   r   )rR   r   r   s      r8   out_of_memory_gotoz#CParserGenerator.out_of_memory_goto  se    

T$t$%[[] 	/JJ*+JJ{m1-.	/ 	

R	/ 	/s   'A''A0filenamec                 r   | j                          t        j                  j                  |      }| j	                  d|        | j
                  j                  j                  dt              }|r | j	                  |j                  d             | j
                  j                  j                  dd      }|r| j	                  |       | j                          | j                          t        | j                  j                         d      D ]1  \  }\  }}|j                  rdnd}| j	                  d| d	| |        3 | j	                          | j                  j                         D ]]  \  }}|j!                         s|j#                         rd
}	n|j$                  r|j$                  dz   }	nd}	| j	                  d|	 | d       _ | j	                          t'        | j                  j                               D ]C  \  }}| j	                          |j                  r| j	                  d       | j)                  |       E | j*                  rd}
ndd| j,                  v r%t/        | j,                  d   j$                  dk(        nd}
|
dk(  r*| j
                  j                  j                  d      r|
dz  }
| j
                  j                  j                  dd      }| j
                  j                  j                  dt0              }|r/| j	                  |j                  d      t3        |
|      z         y y )Nz// @generated by pegen from header
	subheaderrM   i  z  // Left-recursivez#define z_type ry    r   static z_rule(Parser *p);z// Left-recursiver   startmod_tyr$   bytecode
modulenameparsetrailer)moder  )collect_rulesospathbasenamer   r   metasr   EXTENSION_PREFIXrstrip_setup_keywords_setup_soft_keywords	enumerater~   r   left_recursiver   r   r   rV   r   r   rulesr   EXTENSION_SUFFIXdict)rR   r  r  r  r  irulenamer   rF   r   r  r  r  s                r8   generatezCParserGenerator.generate  s   77##H-

1(<=##''2BCJJv}}T*+LL&&**;;	JJy!!!##,T^^-A-A-CT#J 	@A$/3/B/B+GJJ(6!WI>?	@ 	

"nn224 	DNHd||~!1#yy3JJxj0ABC	D 	

"4>>#7#7#9: 	NHdJJL""

./JJt		
 D@G4::@U3tzz'*//8;<[\DqyT\\//33J?	\\''++L'B
,,$$((4DEJJw~~d+d.TTU r7   c                     i }| j                   j                         D ]3  \  }}t        |      }||v r||   j                  ||f       ,||fg||<   5 |S r^   )rl   r   lenrN   )rR   groupskeyword_strkeyword_typelengths        r8   _group_keywords_by_lengthz*CParserGenerator._group_keywords_by_length  si    35)-)<)<)> 	?%K%Fv%%{L&AB#."=!>v	? r7   c                    t        | j                        dkD  r5t        t        | j                  j                         t                     dz   nd}| j	                  d| d       | j                         }| j	                  d       | j                         5  |rt        |      dz   nd}t        |      D ]  }||j                         vr| j	                  d       '| j	                  d       | j                         5  ||   D ]  \  }}| j	                  d	| d
| d        | j	                  d       d d d        | j	                  d        	 d d d        | j	                  d       y # 1 sw Y   7xY w# 1 sw Y   'xY w)Nr   )keyr$   z#static const int n_keyword_lists = r   z,static KeywordToken *reserved_keywords[] = {z(KeywordToken[]) {{NULL, -1}},z(KeywordToken[]) {z{"z", z},z{NULL, -1},};)r#  rl   maxkeysr   r(  r   range)rR   n_keyword_listsr$  
num_groupskeywords_lengthr%  r&  s          r8   r  z CParserGenerator._setup_keywords  sW   ;>t}};MPQ;QCDMM&&(c23a7WX 	 	

88IKL//1

AB[[] 	%,2VqJ#(#4 	%"&++-7JJ?@JJ34 29?9P P5K JJ[M\N#'NOP

=12 JJt$	%	% 	

42 2	% 	%s%   A&E5<7E)3E5)E2.E55E>c                    t        | j                        }| j                  d       | j                         5  |D ]  }| j                  d| d        | j                  d       d d d        | j                  d       y # 1 sw Y   xY w)Nz static char *soft_keywords[] = {r   z",zNULL,r+  )sortedsoft_keywordsr   r   )rR   r4  rc   s      r8   r  z%CParserGenerator._setup_soft_keywords  sz    t112

56[[] 	 ( ,

Qwir?+,JJw	  	

4		  	 s   .A??Bc                 ^   | j                  d       | j                         5  | j                  d       | j                  d       d d d        | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y # 1 sw Y   _xY w)	Nz7if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {r   r   r   z-int _start_lineno = p->tokens[_mark]->lineno;z2UNUSED(_start_lineno); // Only used by EXTRA macroz5int _start_col_offset = p->tokens[_mark]->col_offset;z6UNUSED(_start_col_offset); // Only used by EXTRA macror   r   s    r8   '_set_up_token_start_metadata_extractionz8CParserGenerator._set_up_token_start_metadata_extraction  s    

LM[[] 	$JJ01OOF#	$ 	

3

BC

GH

JK

KL	$ 	$s   #B##B,c                 ^   | j                  d       | j                  d       | j                         5  | j                  d       d d d        | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y # 1 sw Y   _xY w)	Nz:Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);zif (_token == NULL) {r   r   z%int _end_lineno = _token->end_lineno;z0UNUSED(_end_lineno); // Only used by EXTRA macroz-int _end_col_offset = _token->end_col_offset;z4UNUSED(_end_col_offset); // Only used by EXTRA macror   r   s    r8   %_set_up_token_end_metadata_extractionz6CParserGenerator._set_up_token_end_metadata_extraction  s    

OP

*+[[] 	$OOF#	$

3

:;

EF

BC

IJ	$ 	$s   B##B,c                     | j                  d       | j                         5  | j                  d       d d d        | j                  d       y # 1 sw Y   xY w)Nif (p->error_indicator) {r   r   r   r   s    r8   _check_for_errorsz"CParserGenerator._check_for_errors  sD    

./[[] 	$OOF#	$

3	$ 	$r   rs   result_typec                 F   | j                  d       | j                         5  | j                          | j                  | d       | j                  d|j                   d       | j                         5  | j	                  d       d d d        | j                  d       | j                  d       | j                  d       | j                  d	       | j                         5  | j                  d
|j                   dd       | j                  d       | j                  d|j                   d       | j                  d       | j                         5  | j	                  d       d d d        | j                  d       | j                  d       | j                         5  | j                  d       d d d        | j                  d       | j                  d       d d d        | j                  d       | j                  d       | j	                  d       d d d        | j                  d       | j                  d|        | j                  |j                   d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N{ _res = NULL;if (_PyPegen_is_memoized(p, _type, &_res)) {_resr   int _mark = p->mark;zint _resmark = p->mark;zwhile (1) {z_PyPegen_update_memo(p, _mark, z_type, _res)p->mark = _mark;zvoid *_raw = z_raw(p);r:  r   z(if (_raw == NULL || p->mark <= _resmark)zbreak;z_resmark = p->mark;z_res = _raw;zp->mark = _resmark;r	  z_raw(Parser *p))r   r   r   r   r   r   )rR   rs   r<  s      r8   _set_up_rule_memoizationz)CParserGenerator._set_up_rule_memoization  s   

3[[] 	$NNJJ+m45JJ5dii[@QRS ('(JJsOJJ-.JJ01JJ}% +005dii[Mv 

-.

]499+X>?

67[[] ,OOF+,

3

EF[[] )JJx()

02

>*+ JJsOJJ,.OOF#7	$8 	

3

W[M*+

dii[015( (, ,) )+ +	$ 	$sn   AJ6I%AJ$A2JI2(:J"I?4*J;J%I/	*J2I<7J?JJJ	JJ c                 8    |j                   xr |j                   S r^   )memor  r   s     r8   _should_memoizez CParserGenerator._should_memoize?  s    yy4!4!444r7   r   c                    | j                  |      }| j                         5  | j                          | j                          | j	                  | d       |rZ| j	                  d|j
                   d       | j                         5  | j                  d       d d d        | j	                  d       | j	                  d       t        d |j                  D              r| j                          | j                  |d|j                         |j
                  	       | j                  r| j	                  d
|j
                   d       | j	                  d       d d d        | j	                  d       | j                         5  |r| j	                  d|j
                   d       | j                  d       d d d        y # 1 sw Y   &xY w# 1 sw Y   sxY w# 1 sw Y   y xY w)Nr?  r@  rA  rB  r   rC  c              3   T   K   | ]   }|j                   xr d |j                   v  " ywEXTRANaction.0alts     r8   	<genexpr>z=CParserGenerator._handle_default_rule_body.<locals>.<genexpr>O  %     LC3::7'SZZ"77L   &(Fr   r   r   zD(fprintf(stderr, "Fail at %d: z\n", p->mark));z_res = NULL;z  done:z_PyPegen_insert_memo(p, _mark, z_type, _res);)rH  r   r   r;  r   r   r   anyr   r6  r   r   r   )rR   rs   r   r<  memoizes        r8   _handle_default_rule_bodyz*CParserGenerator._handle_default_rule_bodyB  s   &&t,[[] 	'NN""$JJ+m45

9$))DUVW[[] ,OOF+,

3JJ-.L388LL<<>JJ..*	   zz

<TYYKGWXYJJ~&)	'* 	

9[[] 	$

<TYYK}UVOOF#	$ 	$!, ,	' 	',	$ 	$s1   A&GF>B?G3G>G	GGG c                 :   | j                  |      }|j                  j                  d      }| j                         5  | j	                          | j                          | j                  d       |rZ| j                  d|j                   d       | j                         5  | j                  d       d d d        | j                  d       | j                  d       |r| j                  d       | j                  d	       | j                  d
       | j                  d       | j                  d       t        d |j                  D              r| j                          | j                  |d|j                         |j                         |r]| j                  d       | j                         5  | j                  d       | j                  d       d d d        | j                  d       | j                  d       | j                  dd       | j                  d       | j                  d       |r+|j                  r| j                  d|j                   d       | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N_loop1zvoid *_res = NULL;r@  rA  rB  r   rC  zint _start_mark = p->mark;z0void **_children = PyMem_Malloc(sizeof(void *));z
!_childrenz"Py_ssize_t _children_capacity = 1;zPy_ssize_t _n = 0;c              3   T   K   | ]   }|j                   xr d |j                   v  " ywrK  rM  rO  s     r8   rR  z:CParserGenerator._handle_loop_rule_body.<locals>.<genexpr>t  rS  rT  TrU  z$if (_n == 0 || p->error_indicator) {PyMem_Free(_children);r   zCasdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);z!_seqr   zIfor (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);z%_PyPegen_insert_memo(p, _start_mark, z_type, _seq);_seq)rH  r   
startswithr   r   r;  r   r   r   rV  r   r6  r   r   )rR   rs   r   rW  
is_repeat1s        r8   _handle_loop_rule_bodyz'CParserGenerator._handle_loop_rule_body`  s   &&t,YY))(3
[[] $	$NN""$JJ+,

9$))DUVW[[] ,OOF+,

3JJ-.

78JJIJ%%
4JJ;<JJ+,L388LL<<>JJ..*	   

AB[[] ,JJ78OOF+, 

3JJ\]%%=U%VJJbcJJ/0499

B499+][\OOF#I$	$ $	$, ,(, ,5$	$ $	$s>   A#J I82C=J/#JBJ8J	=JJ	
JJc                 0   |j                         }|j                         }|j                         }|s|rd}n|j                  r|j                  }nd}t	        |      j                         D ]  }| j                  d|         |j                  r.|j                  r"| j                  d| d|j                   d       | j                  d|        | j                  |j                   d       |j                  r|j                  r| j                  ||       | j                  d       |j                  j                  d	      rV| j                         5  | j                  d
       | j                  d       | j                  j                  d       d d d        |r| j                  ||       n| j!                  |||       |j                  j                  d	      r| j                  j#                          | j                  d       y # 1 sw Y   xxY w)Nry   r   z// r	  r  z_raw(Parser *);z_rule(Parser *p)r>  without_invalidz/int _prev_call_invalid = p->call_invalid_rules;zp->call_invalid_rules = 0;z+p->call_invalid_rules = _prev_call_invalid;r   )r   r   flattenr   rQ   
splitlinesr   r  leaderr   rE  r   r   ra   rN   ra  rX  pop)rR   rs   r   r   r   r<  lines          r8   
visit_RulezCParserGenerator.visit_Rule  s   ,,.NN$	llni&KYY))K"KI((* 	%DJJTF|$	%4;;JJQtyykIJ

W[M*+

dii[ 0124;;))$<

399/0 ^

LM

78''../\]^
 ''c2**4kB99/0##'')

3^ ^s   >HHc                     | j                   j                  |      }|j                  r | j                  |j                        |_        | j	                  |       y r^   )r   r   rA   deduper   r   s      r8   r   z CParserGenerator.visit_NamedItem  sD    $$2248!!%)[[1G1G%HD"

4r7   r   r   r   c                     |rt        |j                        dk(  sJ |j                  D ]  }| j                  ||||        y )Nr$   rU  )r#  r   r   )rR   rs   r   r   r   rQ  s         r8   r   zCParserGenerator.visit_Rhs  sF     tyy>Q&&&99 	UCJJsGy8JT	Ur7   rc   c                    | j                  | d       | j                         5  d}|j                  D ])  }|rd}n| j                  d       | j                  |       + 	 d d d        | j                  d       y # 1 sw Y   xY w)Nz (TFz&&rK   )r   r   r   r   )rR   rc   rs   firstr   s        r8   join_conditionsz CParserGenerator.join_conditions  sw    

gYb>"[[] 	!E

 !!EJJt$

4 !	! 	

3	! 	!s   ;A;;Bc                 ~   | j                  d|j                   d       | j                  d       | j                         5  | j                  d       |r| j                  |       | j                  d       d d d        | j                  d       | j                  r| j                  d| d       y y # 1 sw Y   =xY w)	N_res = r   z'if (_res == NULL && PyErr_Occurred()) {r   r   r   zDD(fprintf(stderr, "Hit with action [%d-%d]: %s\n", _mark, p->mark, ""));)r   rN  r   r   r   )rR   rs   r   s      r8   emit_actionzCParserGenerator.emit_action  s    

WT[[M+,

<=[[] 	$JJ01

<(OOF#		$
 	

3::JJWX\W]]ab 	$ 	$s   6B33B<c                    t        | j                        dkD  r|rMt        | j                        dk(  sJ | j                  d| j                  d    d| j                  d    d       y | j                  r| j                  d| d       | j                  d	dj	                  | j                         d       y | j                  r| j                  d
| d       | j                  d| j                  d    d       y )Nr$   r%   z'_res = _PyPegen_seq_insert_in_front(p, r   rJ   z);zGD(fprintf(stderr, "Hit without action [%d:%d]: %s\n", _mark, p->mark, "rr  z_res = _PyPegen_dummy_name(p, zLD(fprintf(stderr, "Hit with default action [%d:%d]: %s\n", _mark, p->mark, "rq  r   )r#  local_variable_namesr   r   rO   )rR   r   rs   s      r8   emit_default_actionz$CParserGenerator.emit_default_action  s   t(()A-4445:::

=0034Bt7P7PQR7S6TTVX
 ::JJbcgbhhlm 

4TYYt?X?X5Y4ZZ\] zz

cdhciimn JJ!:!:1!= >a@Ar7   c                 &    | j                  d       y )Nz_res = _PyPegen_dummy_name(p);r   r   s    r8   emit_dummy_actionz"CParserGenerator.emit_dummy_action  s    

34r7   c                 .   | j                  d|       | j                  d       | j                         5  t        |      j	                  dd      }| j                  d| d| d       |j
                  rd	|j
                  v r| j                          | j                  r| j                          n0|j
                  r| j                  |       n| j                  ||       | j                  d
       d d d        | j                  d       y # 1 sw Y   xY w)Nifrc   rs   r>  r   \"zD(fprintf(stderr, "%*c+ z;[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "rr  rL  z
goto done;r   )ro  r   r   rQ   replacerN  r8  r   rx  rs  rv  )rR   rs   r   r   node_strs        r8   handle_alt_normalz"CParserGenerator.handle_alt_normal  s    T5

3[[] 	&4y((e4HJJ*8*4rs{r|  }A  B {{w$++5::<  &&(  &((D9 JJ%!	&" 	

3#	& 	&s   B<DDc                    | j                  d|       | j                  d       | j                         5  |j                  rd|j                  v r| j	                          | j
                  r| j                          n2|j                  r| j                  |d       n| j                  ||       | j                  d       | j                         5  | j                  d       | j                  d	       | j                  d
d       | j                  d       d d d        | j                  d       | j                  d       | j                  d       d d d        | j                  d       y # 1 sw Y   VxY w# 1 sw Y   'xY w)Nwhiler{  r>  rL  r\  r]  zif (_n == _children_capacity) {z_children_capacity *= 2;zSvoid **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));z!_new_childrenz_children = _new_children;r   z_children[_n++] = _res;z_mark = p->mark;)
ro  r   r   rN  r8  r   rx  rs  rv  r   )rR   rs   r   r   s       r8   handle_alt_loopz CParserGenerator.handle_alt_loop  s<   W48

3[[] 	+{{w$++5::<  &&(  4L M((D9 JJ89 9

56

i ))NJb)c

789 JJsOJJ01JJ)*/	+0 	

39 9	+ 	+s%   BE8AE,;E8,E5	1E88Fc                    t        |j                        dk(  r<t        |j                  d         j                  d      r| j	                  d|        n| j	                  d|        | j                         5  | j                          t        |      j                  dd      }| j	                  d| d	| d
       | j                  |      }t        d |j                         D              D ]Y  \  }}|sd}n|dz  }|dk(  r|dz  }| j	                  | | d       |s3|j                  d      sE| j	                  d| d       [ | j                         5  |r| j                  |||       n| j                  |||       d d d        | j	                  d       t        |      j                  dd      }| j	                  d| d| d
       d|v rL| j	                  d       | j                         5  | j                  d       d d d        | j	                  d       d d d        | j	                  d       y # 1 sw Y   xY w# 1 sw Y   @xY w# 1 sw Y   3xY w)Nr$   r   invalid_z if (p->call_invalid_rules) { // z{ // r   r|  zD(fprintf(stderr, "%*c> z0[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "rr  c              3   ,   K   | ]  }|d    	|  yw)r   Nr6   )rP  r   s     r8   rR  z-CParserGenerator.visit_Alt.<locals>.<genexpr>;  s     %[ttAwGZd%[s   
r   r  r   z = 0r   r   zUNUSED(z); // Silence compiler warningsrD  zD(fprintf(stderr, "%*c%s zo[%d-%d]: %s failed!\n", p->level, ' ',
                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "zif (_cut_var) {r   r   )r#  r   rQ   r_  r   r   r;  r}  collect_varsr3  local_variable_contextr  r  r   )	rR   rs   r   r   r   r~  varsvvar_types	            r8   	visit_AltzCParserGenerator.visit_Alt,  sA    tzz?aC

1$6$A$A*$MJJ:4&ABJJv'[[] #	 ""$4y((e4HJJ*8*4ghpgqquv $$T*D%%[tzz|%[[ 	M8'HOH
?KA

hZs!,-j1JJ+JKL	M ,,. F((y(C**4HE	F JJ)*4y((e4HJJ,XJ 7[[cZddhj T!

,-[[] ,OOF+,

3G#	 H 	

3#F F, ,C#	  #	 sJ   9B'I!I3'I*H:A1I5II:I	?II	IIc                     i }| j                         5  |j                  D ]  }| j                  |      \  }}|||<    	 d d d        |S # 1 sw Y   |S xY wr^   )r  r   add_var)rR   rs   typesr   r   r   s         r8   r  zCParserGenerator.collect_varsY  s_    ((* 	#

 #!\\$/
d"d#	# 		# s   +A		Ac                 
   | j                   j                  |j                        }|j                  r|j                  n|j                  }|| j                  |      }|j                  |j                  n|j                  }||fS r^   )r   r   r   r   rA   rk  r   rC   )rR   rs   r   r   rC   s        r8   r  zCParserGenerator.add_vara  sl    $$22499= IItyy4+A+A;;t$D*.))*;d&&[  r7   )FF)rG   N)tmpvarr^   )5r+   r,   r-   r   Grammarr   r   rQ   r   r
   r   r   rW   rb   r   r   r   r   r   r   r   r  r!  r	   r   r(  r  r  r6  r8  r;  r   rE  rH  r   rX  ra  ri  r   r   r   r   ro  r   rs  rv  rx  r  r  r  r  r  r   r   s   @r8   r   r   c  s^    "00 S#X0 38n	0
 c(0 r$x 0 0 0&")# )$ )3 c 
S S T 3 S T  '+ sm 
	s   'V 'V 'VR4T%S/5J0J+K *	M	K 2T  2  2  2D5D 5T 5$d $ $3 $SW $<($4 ($c ($d ($T&t & &PI $ UU"&U37UCKC=U	U
s 
# 
$ 
 8C= D  BT B B B.5c d hsm X\ .C D HSM VZ >++"&+37+CKC=+	+Z hsmXc].J)K !I !%x}0L*M !r7   r   )4r   os.pathr  r   dataclassesr   r   enumr   typingr   r   r   r	   r
   r   r   r   pegenr   pegen.grammarr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    pegen.parser_generatorr!   r  r  r#   r.   r/   r0   r3   r|   r=   rY   r   r6   r7   r8   <module>r     s    
  	 (  B B B     ( 3 $     $$$$**	 ! ! !Hi# i#XD! D!r7   