
    ^hU                     p    S r SSKrSSKrSSKrSSKJrJr   " S S\R                  5      r	 " S S\5      r
g)z
Implementation of quick lambdas in Pyccolo, similar to MacroPy's.
Ref: https://macropy3.readthedocs.io/en/latest/quick_lambda.html#quicklambda

Example:
```
with QuickLambdaTracer:
    pyc.eval("f[_ + _](3, 4)")
>>> 7
```
    N)Quasiquoteris_macroc                       \ rS rSrS rS\R                  S\R                  4S jrS\R                  S\R                  4S jr	Sr
g)	_ArgReplacer   c                     SU l         g )Nr   ctr)selfs    W/home/james-whalen/.local/lib/python3.13/site-packages/pyccolo/examples/quick_lambda.py__init___ArgReplacer.__init__   s	        nodereturnc                     [        UR                  [        R                  5      (       a  UR                  R                  S:X  a  U$ U R                  U5      $ Nf)
isinstancevalueastNameidgeneric_visitr   r   s     r   visit_Subscript_ArgReplacer.visit_Subscript   s<    djj#((++

0DK%%d++r   c                 x    UR                   S:X  a)  SU R                   3Ul         U =R                  S-  sl        U$ )N_   )r   r
   r   s     r   
visit_Name_ArgReplacer.visit_Name   s0    77c>$((nDGHHMHr   r	   N)__name__
__module____qualname____firstlineno__r   r   	Subscriptr   r   r!   __static_attributes__ r   r   r   r      s=    ,CMM ,cmm ,sxx CHH r   r   c                   b   ^  \ rS rSrU 4S jr\R                  " \" S5      SS9S 5       rSr	U =r
$ )QuickLambdaTracer&   c                 z   > [         TU ]  " U0 UD6  U R                  R                  S5        [	        5       U l        g r   )superr   macrosaddr   _arg_replacer)r   argskwargs	__class__s      r   r   QuickLambdaTracer.__init__'   s/    $)&))^r   r   T)when	reentrantc                   ^^ U R                   R                  nUR                  n[        UR                  [        R
                  5      (       a  UR                  nU R                   R                  [        R                  " U5      5      nU R                   R                  U-
  n	SR                  S [        XfU	-   5       5       5      n
[        R                  " SU
 S35      mUU4S j$ )Nz, c              3   ,   #    U  H
  nS U 3v   M     g7f)r   Nr)   ).0arg_idxs     r   	<genexpr>8QuickLambdaTracer.handle_quick_lambda.<locals>.<genexpr>6   s       
)TgayM)Ts   z	q[lambda z: ast_literal[lambda_body]]c                  \   > [         R                  " T TR                  TR                  5      $ )N)pyceval	f_globalsf_locals)
ast_lambdaframes   r   <lambda>7QuickLambdaTracer.handle_quick_lambda.<locals>.<lambda>:   s    sxx
EOOU^^Lr   )r1   r
   slicer   r   Indexr   visitcopydeepcopyjoinranger?   r@   )r   _retr   rD   r   __orig_ctrorig_lambda_bodylambda_bodynum_lambda_argslambda_argsrC   s      `       @r   handle_quick_lambda%QuickLambdaTracer.handle_quick_lambda,   s    %%))::djj#)),,/55((..MM*+
 ,,008;ii  
).xO9S)T 
 
 XX	+6QRS
LLr   )r1   )r#   r$   r%   r&   r   r?   before_subscript_slicer   rU   r(   __classcell__)r4   s   @r   r+   r+   &   s0    ,
 	Xc]dCM DMr   r+   )__doc__r   rJ   pyccolor?   pyccolo.examples.quasiquoter   r   NodeTransformerr   r+   r)   r   r   <module>r]      s8   
    =3&& $M Mr   