
    <iT(                     >    S SK Jr  S SKJr  S SKJr   " S S\5      rg)    )StringIO)Token)CommonTokenStreamc                   D  ^  \ rS rSrSrSrSrSrU 4S jrS r	S r
\4S	 jr\4S
 jr\4S jrS r\4S jrS rS rS rS r\4S jrS rS rS rS r\4S jrS rS rS rS\S\4S jrS r " S S \ 5      r! " S! S"\!5      r" " S# S$\"5      r# " S% S&\!5      r$S'r%U =r&$ )(TokenStreamRewriter   )tokensprogramslastRewriteTokenIndexesdefaultd   r   c                 j   > [         [        U ]  5         Xl        U R                  / 0U l        0 U l        g)zW
:type  tokens: antlr4.BufferedTokenStream.BufferedTokenStream
:param tokens:
:return:
N)superr   __init__r	   DEFAULT_PROGRAM_NAMEr
   r   )selfr	   	__class__s     T/home/james-whalen/.local/lib/python3.13/site-packages/antlr4/TokenStreamRewriter.pyr   TokenStreamRewriter.__init__   s2     	!41322B7')$    c                     U R                   $ N)r	   r   s    r   getTokenStream"TokenStreamRewriter.getTokenStream   s    {{r   c                     U R                   R                  US 5      nU(       a  X0R                  U U R                   U'   g g r   )r
   getMIN_TOKEN_INDEX)r   instruction_indexprogram_nameinss       r   rollbackTokenStreamRewriter.rollback"   s:    mmd3*-.B.BDU*VDMM,' r   c                 <    U R                  U R                  U5        g r   )r"   r   r   r    s     r   deleteProgram!TokenStreamRewriter.deleteProgram'   s    d**L9r   c                 <    U R                  UR                  X#5        g r   )insertAfter
tokenIndexr   tokentextr    s       r   insertAfterToken$TokenStreamRewriter.insertAfterToken*   s    ))4>r   c                     U R                  U R                  US-   U5      nU R                  U5      n[        U5      Ul        UR                  U5        g N   )InsertAfterOpr	   
getProgramleninstructionIndexappend)r   indexr-   r    oprewritess         r   r)   TokenStreamRewriter.insertAfter-   sD    UQY=??<0!(mr   c                 <    U R                  U R                  X5        g r   )insertBeforer   r   r8   r-   s      r   insertBeforeIndex%TokenStreamRewriter.insertBeforeIndex3   s    $33UAr   c                 <    U R                  X1R                  U5        g r   )r=   r*   r+   s       r   insertBeforeToken%TokenStreamRewriter.insertBeforeToken6   s    ,(8(8$?r   c                     U R                  U R                  X#5      nU R                  U5      n[        U5      Ul        UR                  U5        g r   )InsertBeforeOpr	   r4   r5   r6   r7   )r   r    r8   r-   r9   r:   s         r   r=    TokenStreamRewriter.insertBefore9   s>      e:??<0!(mr   c                 >    U R                  U R                  XU5        g r   replacer   r>   s      r   replaceIndex TokenStreamRewriter.replaceIndex?   s    T..dCr   c                 >    U R                  U R                  XU5        g r   rH   )r   from_idxto_idxr-   s       r   replaceRange TokenStreamRewriter.replaceRangeB   s    T..$Gr   c                 h    U R                  U R                  UR                  UR                  U5        g r   )rI   r   r*   )r   r,   r-   s      r   replaceSingleToken&TokenStreamRewriter.replaceSingleTokenE   s'    T..0@0@%BRBRTXYr   c                 R    U R                  XAR                  UR                  U5        g r   )rI   r*   )r   
from_tokento_tokenr-   r    s        r   replaceRangeTokens&TokenStreamRewriter.replaceRangeTokensH   s    \#8#8(:M:MtTr   c           	         [        X#:  US:  US:  U[        U R                  R                  5      :  45      (       a8  [        SR	                  X#[        U R                  R                  5      5      5      eU R                  X#U R                  U5      nU R                  U5      n[        U5      Ul        UR                  U5        g )Nr   z'replace: range invalid: {}..{}(size={}))	anyr5   r	   
ValueErrorformat	ReplaceOpr4   r6   r7   )r   r    rM   rN   r-   r9   r:   s          r   rI   TokenStreamRewriter.replaceK   s    !8a<!Vs4;;K]K]G^=^_``9@@SVW[WbWbWiWiSjkm m^^Hdkk4@??<0!(mr   c                 <    U R                  U R                  X5        g r   deleter   )r   r,   s     r   deleteTokenTokenStreamRewriter.deleteTokenT       D--u<r   c                 <    U R                  U R                  X5        g r   r`   )r   r8   s     r   deleteIndexTokenStreamRewriter.deleteIndexW   rd   r   c                     [        U[        5      (       a(  U R                  XR                  UR                  S5        g U R                  XUS5        g )N )
isinstancer   rI   r*   )r   r    rM   rN   s       r   ra   TokenStreamRewriter.deleteZ   s;    h&&LL':':F<M<MrRLL<r   c                 :    U R                   R                  US5      $ )N)r   r   r%   s     r   lastRewriteTokenIndex)TokenStreamRewriter.lastRewriteTokenIndex`   s    ++//bAAr   c                      X R                   U'   g r   )r   )r   r    is      r   setLastRewriteTokenIndex,TokenStreamRewriter.setLastRewriteTokenIndexc   s    56$$\2r   c                 :    U R                   R                  U/ 5      $ r   )r
   
setdefaultr%   s     r   r4   TokenStreamRewriter.getProgramf   s    }}''b99r   c                 |    U R                  U R                  S[        U R                  R                  5      S-
  5      $ )Nr   r2   )getTextr   r5   r	   r   s    r   getDefaultText"TokenStreamRewriter.getDefaultTexti   s0    ||D55q#dkk>P>P:QTU:UVVr   startstopc                 ^   U R                   R                  U5      nU[        U R                  R                  5      S-
  :  a"  [        U R                  R                  5      S-
  nUS:  a  SnU(       d  U R                  R	                  X#5      $ [        5       nU R                  U5      nUn[        Xs:*  U[        U R                  R                  5      :  45      (       a  UR                  US5      nU R                  R                  U5      n	Uc?  U	R                  [        R                  :w  a  UR                  U	R                  5        US-  nOUR                  U5      n[        Xs:*  U[        U R                  R                  5      :  45      (       a  M  U[        U R                  R                  5      S-
  :X  ad  UR                  5        HP  nUR                   [        U R                  R                  5      S-
  :  d  M5  UR                  UR                  5        MR     UR#                  5       $ )z;
:return: the text in tokens[start, stop](closed interval)
r2   r   N)r
   r   r5   r	   rx   r    _reduceToSingleOperationPerIndexallpoptyper   EOFwriter-   executevaluesr8   getvalue)
r   r    r{   r|   r:   buf	indexToOprq   r9   r,   s
             r   rx   TokenStreamRewriter.getTextl   s    ==$$\2 #dkk(()A--t{{))*Q.D19E  3 3E @@j99(C	19a#dkk&8&8"99:;;q$'BKKOOA&Ez::*CIIejj,AQJJsO 19a#dkk&8&8"99:;; 3t{{))*1,,&&(88s4;;#5#56q88#))BGG:L ) ||~r   c                 
   [        U5       GH  u  p#[        US L [        U[        R                  5      (       + 45      (       a  M9  US U  Vs/ s H&  n[        U[        R
                  5      (       d  M$  UPM(     nnU H  nUR                  UR                  :X  a;  S XR                  '   SR                  UR                  UR                  5      Ul	        MX  [        UR                  UR                  :  UR                  UR                  :*  45      (       d  M  S XR                  '   M     US U  Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU GHU  n[        UR                  UR                  :  UR                  UR                  :*  45      (       a  S XR                  '   MT  [        UR                  UR                  :  UR                  UR                  :  45      n	[        UR                  S L UR                  S L U	(       + 45      (       au  S XR                  '   [        UR                  UR                  5      Ul        [        UR                  UR                  5      Ul        [        SR                  U5      5        GM4  U	(       a  GM>  [        SR                  X85      5      e   GM     [        U5       GH  u  p&[        US L [        U[        R
                  5      (       + 45      (       a  M9  US U  Vs/ s H&  n[        U[        R
                  5      (       d  M$  UPM(     n
n[        U
5       H  u  pUR                  UR                  :X  aA  [        U5      [        R
                  L a%  U=R                  UR                  -  sl	        S X'   M`  UR                  UR                  :X  d  M|  [        U5      [        R                   L d  M  UR                  UR                  -   Ul	        S X'   M     US U  Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nnU H  nUR                  UR                  :X  a$  UR                  UR                  -   Ul	        S X'   MA  [        UR                  UR                  :  UR                  UR                  :*  45      (       d  M  [        SR                  Xc5      5      e   GM     0 n[        U5       HC  u  p$Uc  M
  UR#                  UR                  5      (       a  [        S5      eXMUR                  '   ME     U$ s  snf s  snf s  snf s  snf )Nz{}{}z
New rop {}z4replace op boundaries of {} overlap with previous {}z-insert op {} within boundaries of previous {}zshould be only one op per index)	enumeraterZ   rj   r   r]   rE   r8   r6   r\   r-   r   
last_indexminprintr[   r   r3   r   )r   r:   rq   ropr9   insertsiopprevReplacesprevRop
isDisjointprevInserts
prev_indexprevIopreduceds                 r   r~   4TokenStreamRewriter._reduceToSingleOperationPerIndex   s   )FAC4KZ5H5R5R%S!STUU$,RaLgLbJrCVCeCe4frLGg99		)59H112%}}SXXsxx@CH#))cii/cnn1LMNN59H112  *2"1g2BH[HeHe9fBLg'2G4F4F#..4XYZZ9=H556 '"4"4SYY">cnn@\!]^
,chh$.>JOPP9=H556 #GMM399 =CI%(););S^^%LCN,--c23$*$%[%b%bcf%pqq ( *8  )FAC4KZ5H5W5W%X!XYZZ(0!k"
2GZGiGi8j2Kk'0'=#
==CII-$w-CVCeCe2eHH,H+/H(]]cii/DMEXEfEf4f&||chh6CH+/H( (> *2"1g2BH[HeHe9fBLg#99		)"xx#((2CH"&HK		SYY.		S^^0KLMM$%T%[%[\_%eff $ ** x(EAz8{{288$$J7X,Y&Y "BHH )
 g h h$ l hs0   #T73T70#T<T<#U2U#U3Uc                   .    \ rS rSrSrSS jrS rS rSrg)	$TokenStreamRewriter.RewriteOperation   r	   r8   r-   r6   c                 6    Xl         X l        X0l        SU l        g)zT
:type tokens: CommonTokenStream
:param tokens:
:param index:
:param text:
:return:
r   Nr   )r   r	   r8   r-   s       r   r   -TokenStreamRewriter.RewriteOperation.__init__   s     !KJI$%D!r   c                     U R                   $ )z3
:type buf: StringIO.StringIO
:param buf:
:return:
)r8   r   r   s     r   r   ,TokenStreamRewriter.RewriteOperation.execute   s     ::r   c                     SR                  U R                  R                  U R                  R	                  U R
                  5      U R                  5      $ )Nz<{}@{}:"{}">)r\   r   __name__r	   r   r8   r-   r   s    r   __str__,TokenStreamRewriter.RewriteOperation.__str__   s<    !(()@)@$++//RVR\R\B]_c_h_hiir   )r8   r6   r-   r	   Nri   )	r   
__module____qualname____firstlineno__	__slots__r   r   r   __static_attributes__ r   r   RewriteOperationr      s    C		&		jr   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )"TokenStreamRewriter.InsertBeforeOp   c                 B   > [         [        R                  U ]  XU5        g r   )r   r   rE   r   )r   r	   r8   r-   r   s       r   r   +TokenStreamRewriter.InsertBeforeOp.__init__   s    %44dDVTXYr   c                 T   UR                  U R                  5        U R                  R                  U R                  5      R
                  [        R                  :w  a>  UR                  U R                  R                  U R                  5      R                  5        U R                  S-   $ r1   )r   r-   r	   r   r8   r   r   r   r   s     r   r   *TokenStreamRewriter.InsertBeforeOp.execute   sf    IIdii {{tzz*//599<		$++//$**5::;::>!r   r   r   )r   r   r   r   r   r   r   __classcell__r   s   @r   rE   r      s    	Z	" 	"r   rE   c                       \ rS rSrSrg)!TokenStreamRewriter.InsertAfterOp   r   N)r   r   r   r   r   r   r   r   r3   r      s    r   r3   c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )TokenStreamRewriter.ReplaceOp   r   c                 N   > [         [        R                  U ]  X1U5        X l        g r   )r   r   r]   r   r   )r   rM   rN   r	   r-   r   s        r   r   &TokenStreamRewriter.ReplaceOp.__init__   s!    %//?RVW$Or   c                 x    U R                   (       a  UR                  U R                   5        U R                  S-   $ r1   )r-   r   r   r   s     r   r   %TokenStreamRewriter.ReplaceOp.execute   s(    yy		$))$??Q&&r   c                     U R                   (       ac  SR                  U R                  R                  U R                  5      U R                  R                  U R
                  5      U R                   5      $ g )Nz<ReplaceOp@{}..{}:"{}">)r-   r\   r	   r   r8   r   r   s    r   r   %TokenStreamRewriter.ReplaceOp.__str__   sX    yy077

8SUYU`U`UdUdeietetUu8<		C C r   )r   )
r   r   r   r   r   r   r   r   r   r   r   s   @r   r]   r      s     		%	'
	C 	Cr   r]   )r   r
   r	   )'r   r   r   r   r   r   PROGRAM_INIT_SIZEr   r   r   r"   r&   r.   r)   r?   rB   r=   rJ   rO   rR   rW   rI   rb   rf   ra   rn   rr   r4   ry   intrx   r~   objectr   rE   r3   r]   r   r   r   s   @r   r   r      s   AI$O	*W
 *> : :N ? 5I B ;O @DHZ K_ U=== 2F B7:W# C @9vj6 j6	") 	" C$ C Cr   r   N)ior   antlr4.Tokenr   antlr4.CommonTokenStreamr   r   r   r   r   r   <module>r      s       6rC& rCr   