
    yfV              	          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mZ d Zd Zd Zd Zd Zd	 Zd
 Zd2dZi ddddddddd eej0                        d eej2                        d eej4                        dej6                  dej8                  d eej:                        d eej<                        d eej>                        d eej@                        d eejB                        d eejD                        d eejF                        d eejH                         eejJ                         eejL                         eejN                        eeedZ(h dZ)dZ* e+ e, e,d d!d"             Z-d#Z. G d$ d%      Z/ G d& d'e	      Z0 G d( d)e	      Z1 G d* d+e	      Z2 G d, d-e jf                        Z4 G d. d/      Z5 G d0 d1      Z6y)3    N   )
NO_DEFAULTExtractorErrorfunction_with_repr
js_to_jsonremove_quotestruncate_stringunified_timestampwrite_stringc                      d  fd}|S )Nc                     | d t         fv ryt        j                  t              5  t	        j
                  |       r
	 d d d        y	 d d d        | S # 1 sw Y   | S xY wNr   JS_Undefined
contextlibsuppress	TypeErrormathisnan)xs    1/usr/lib/python3/dist-packages/yt_dlp/jsinterp.pyzeroisez_js_bit_op.<locals>.zeroise   sY    |$$  + 	zz!}	 		 	 s   AAc                 4      |        |            dz  S )Nl     )abopr   s     r   wrappedz_js_bit_op.<locals>.wrapped   s    '!*gaj)J66    r   )r   r   r   s   ` @r   
_js_bit_opr       s    7 Nr   c                       fd}|S )Nc                 P    t         | |fv rt        d      S  | xs d|xs d      S Nnanr   r   floatr   r   r   s     r   r   z_js_arith_op.<locals>.wrapped&   s.    Aq6!<!&q!&q!!r   r   r   r   s   ` r   _js_arith_opr)   $   s    "
 Nr   c                 `    t         | |fv s| s|st        d      S |r	| xs d|z  S t        d      S )Nr$   r   infr%   r   r   s     r   _js_divr-   .   s5    1va1U|AFa<.%,.r   c                 B    t         | |fv s|st        d      S | xs d|z  S r#   r%   r,   s     r   _js_modr/   4   s(    1vQU|Fa<r   c                 D    |syt         | |fv rt        d      S | xs d|z  S )Nr   r$   r   r%   r,   s     r   _js_expr1   :   s,    	!Q	U|Fq=r   c                       fd}|S )Nc                 B    | |hd t         hk  r	 | |       S  | |      S N)r   r'   s     r   r   z_js_eq_op.<locals>.wrappedD   s*    q6dL))a8O!Qxr   r   r(   s   ` r   	_js_eq_opr5   B   s    
 Nr   c                       fd}|S )Nc                     t         | |fv ryt        | t              st        |t              r# t        | xs d      t        |xs d            S  | xs d|xs d      S )NFr   )r   
isinstancestrr'   s     r   r   z_js_comp_op.<locals>.wrappedN   sW    Aq6!aAs!3c!&qk3qvA;//!&q!&q!!r   r   r(   s   ` r   _js_comp_opr:   L   s    " Nr   c                     | ddddt         fv r|S t        j                  t              5  t	        j
                  |       r|cddd       S 	 ddd       |S # 1 sw Y   |S xY w)z6Simulate JS's ternary operator (cndn?if_true:if_false)FNr    r   )cndnif_trueif_falses      r   _js_ternaryr@   X   sb    tQL11			Y	' ::d  N Ns   AA???||&&|^&===!====!=<=>=<>z>>z<<)+-*%/z**>   rN   rO   rK   rL   rJ   rM   rI   rH   z[a-zA-Z_$][\w$]*z()z{}[]z'"/c                       e Zd Zy)r   N)__name__
__module____qualname__r   r   r   r   r      s    r   r   c                       e Zd Zd Zy)JS_Breakc                 0    t        j                  | d       y )NzInvalid breakr   __init__selfs    r   r^   zJS_Break.__init__   s    o6r   NrW   rX   rY   r^   r   r   r   r[   r[      s    7r   r[   c                       e Zd Zd Zy)JS_Continuec                 0    t        j                  | d       y )NzInvalid continuer]   r_   s    r   r^   zJS_Continue.__init__   s    &89r   Nra   r   r   r   rc   rc      s    :r   rc   c                       e Zd Zd Zy)JS_Throwc                 D    || _         t        j                  | d|        y )NzUncaught exception )errorr   r^   )r`   es     r   r^   zJS_Throw.__init__   s!    
(;A3&?@r   Nra   r   r   r   rf   rf      s    Ar   rf   c                       e Zd Zd Zd Zy)LocalNameSpacec                 `    | j                   D ]  }||v s|||<    y  || j                   d   |<   y r   )maps)r`   keyvaluescopes       r   __setitem__zLocalNameSpace.__setitem__   s<    YY 	Ee|"c
	 "		!Sr   c                     t        d      )NzDeleting is not supported)NotImplementedError)r`   rn   s     r   __delitem__zLocalNameSpace.__delitem__   s    !"=>>r   N)rW   rX   rY   rq   rt   r   r   r   rk   rk      s    "?r   rk   c                   >    e Zd ZddlZdZeddd       Zed        Z	y)Debuggerr   NFd   levelc                 ^    t        ddd| z
  z   dj                  d |D               d       y )Nz[debug] JS: z  rw    c              3   H   K   | ]  }t        t        |      d d         yw)2   N)r	   r9   ).0r   s     r   	<genexpr>z!Debugger.write.<locals>.<genexpr>   s      OQQR!@ Os    "
)r   join)ry   argss     r   writezDebugger.write   s9    |DC%K$8#9 O$ OOPPRT 	Ur   c                       fd}|S )Nc                    	j                   r#|j                         r	j                  ||       	  
| |||g|i |\  }}	j                   rD|j                         r4|st        |      |k(  s$	j                  ddg|   t        |      d||       ||fS # t        $ rD}	j                   r2t	        |t
              r|j                  }	j                  d|d||        d }~ww xY w)Nrx   z
=> Raises:z<-|z->z=>)ENABLEDstripr   	Exceptionr8   r   orig_msgrepr)r`   stmt
local_varsallow_recursionr   kwargsret
should_retri   clsfs            r   interpret_statementz6Debugger.wrap_interpreter.<locals>.interpret_statement   s    {{tzz|		$o	6"#D$
O"]d"]V\"]Z {{tzz|T#Y$%6IItTl:6S	5$VeIf
?"  ;;!!^4JJIIlAud/IRs   B 	C%!?C  C%r   )r   r   r   s   `` r   wrap_interpreterzDebugger.wrap_interpreter   s    	# #"r   )
rW   rX   rY   sysmodulesr   staticmethodr   classmethodr   r   r   r   rv   rv      s5    G U U # #r   rv   c                   0   e Zd ZdZddej
                  ej                  ej                  ej                  ddZ	ddZ
 G d d	e      Zd
 Zed        Zedd       Zedd       Zd ZddZd Zej.                  dd       Zd Zd Zd Zd Zd Zd Zd Zy)JSInterpreterr   i   i   i   )dgimsuyNc                 D    |i c| _         | _        |i | _        y || _        y r4   )code
_functions_objects)r`   r   objectss      r   r^   zJSInterpreter.__init__   s#    %)2"	4?%o7r   c                         e Zd Zd fd	Z xZS )JSInterpreter.Exceptionc                 p    | |j                          dt        |dd       }t        |   |g|i | y )Nz in: r}   )rstripr	   superr^   )r`   msgexprr   r   	__class__s        r   r^   z JSInterpreter.Exception.__init__   s@    eOD"b,I+JKGS24262r   r4   )rW   rX   rY   r^   __classcell__)r   s   @r   r   r      s    	3 	3r   r   c                     | xj                   dz  c_         d| j                    }t        |      r*t        |t              st        |d| j                    d      }|||<   |S )Nr   __yt_dlp_jsinterp_objF<rO   )$_JSInterpreter__named_object_countercallabler8   r   )r`   	namespaceobjnames       r   _named_objectzJSInterpreter._named_object   sa    ##q(#&t'B'B&CDC=C1C!D$SBt/J/J.K1*MNC	$r   c                     d}|s||fS t        |      D ]'  \  }}|| j                  vr n|| j                  |   z  }) ||dz   d  fS )Nr   r   )	enumerate	_RE_FLAGS)r   r   flagsidxchs        r   _regex_flagszJSInterpreter._regex_flags   sd    $;  	'GC&S]]2&&E	' d378n$$r   c              #     K   d}| sy t         j                         D ci c]  }|d }}dddt        |      dz
  f\  }}}}	d\  }
}}}t        |       D ]  \  }}|
s|t         v r|t         |   xx   dz  cc<   nI|
s||v r||   r>||xx   dz  cc<   n0|s.|t        v r|
|d fv r|
s|s|dk7  r|
r|sd n|}
n|
dk(  r	|dv r|dk(  }| xr	 |
xr |dk(  }|
 xr | xr
 |d	vxr |d
v }|
s||v r|n|j                         xr |}|||   k7  st        |j                               s|
s|rd}||	k7  r|dz  }| |||	z
    |dz   d}}|dz  }|s||k\  s n | |d   y c c}w w)Nz+-*/%&|^=<>!,;{}:[r   r   )NFTFrT   rU   [\TFz-+)_MATCHING_PARENSvalueslenr   _QUOTESisspaceany)r   delim	max_splitOP_CHARSkcountersstartsplitspos	delim_lenin_quoteescapingafter_opin_regex_char_groupr   charin_unary_ops                    r   	_separatezJSInterpreter._separate   s    '"2"9"9";<QAqD<<()1aUa(?%vsI<T9(H&9"4 	IC(8 8)$/0A50$("2D>TNa'N7?xD$<'?8ts{+3<O4UY_*.#+'#|AATT\H'< N0C,C N'}<NAE $,1AtId\dHuSz!S):%;x;	!qucIo..q!3EaKFVy09	: 56lA =s   E!
ED"E!E!E!c                     ||xr t         |d      }t        | j                  ||d            }t        |      dk  r| j	                  d| |      |d   dd  j                         |d   j                         fS )Nr   r      zNo terminating paren )r   listr   r   r   r   )r   r   r   	separateds       r   _separate_at_parenz JSInterpreter._separate_at_paren  s    =6-d1g6EtUA67	y>A--"7w ?FF|AB%%'1););)===r   c           	      f   |dv r|dk(  t        |      z  r5|S |dk(  r|d t        fvr$|S |dk(  rt        |g| j                  |dd       }| j                  |||      }t        j                  |      s|S 	 t	        |   ||      S # t        $ r"}| j                  d|d| d|||	      d }~ww xY w)
N)rC   rD   rD   rB   rA   :r   zFailed to evaluate r{   cause)r@   r   r   interpret_expression
_OPERATORSgetr   )	r`   r   left_val
right_exprr   r   r   	right_valri   s	            r   	_operatorzJSInterpreter._operator$  s    d
k(334Zl333Y$XSz3PQ0RSJ--j*oV	~~b!	gb>(I66 	g..#6xl!B4q!VX\de.ff	gs   6B 	B0B++B0c                     |dk(  rt        |      S 	 t        |t              r|t        |         S ||   S # t        $ r2}|rt
        cY d }~S | j	                  d| t        |      |      d }~ww xY w)NlengthzCannot get index r   )r   r8   r   intr   r   r   )r`   r   r   allow_undefinedri   s        r   _indexzJSInterpreter._index7  st    (?s8O	P$.sD$93s3x=Gs3xG 	P##..#4SE!:DIQ.OO	Ps$   5 5 	A0A+A0 A++A0c                 p    	 t        j                  |      S # t        $ r | j                  ||      cY S w xY wr4   )jsondumpsr   r   )r`   r   r   s      r   _dumpzJSInterpreter._dumpA  s7    	6::c?" 	6%%i55	6s    55c                     6789:;< dk  r j                  d      dz  d}t         j                  |d            xs dg}|j                         j	                         x9}|D ]   } j                  |      \  }}|s||fc S  t        j                  d|      }|rj|t        |j                  d            d  j	                         9|j                  d      rt         j                  9            |j                  d	       }9sd |fS 9d   t        v r j                  99d   d      \  }	}
9d   d
k(  r j                  |
      \  }}
|	 d
| }	n't        j                  t!        |	 9d    d            }	|
s|	|fS  j#                  |	      |
z   99j%                  d      r9dd  }|j%                  d      rm j'                  |dd        \  }}t)         j                  |      d      }| j                  d|9       j+                  t-        |dz              |z   9n j                  d| 9      9j%                  d      r j                  9dd        }d |fS 9j%                  d      r j'                  9      \  }	}
 j                  |	      D cg c],  }t         j                  |j	                         dd            . }}t/        d |D              r fd8t1        8fd|D              |fS  j                  |	      \  }	}|
r|r|	|xs |fS  j+                  |	      |
z   99j%                  d      rK j'                  9      \  }	}
 j                  |	      \  }	}|
r|r|	|xs |fS  j+                  |	      |
z   99j%                  d      rY j'                  9      \  }	}
 j#                   j                  |	      D cg c]  } j                  |       c}      }||
z   9t        j                  d9      }|r|j3                         ni }|j5                  d      rȉ j'                  9|j7                         dz
  d        \  }9 j'                  9j9                               \  }9d }t        j                  d9      }|r( j'                  9|j7                         dz
  d        \  }9t;         j                  |            } j                  |r|n|      \  }}|r|dfS |j5                  d      ri j'                  9|j7                         dz
  d        \  }9d }	  j                  |      \  }}|r|dfS 	 d }t        j                  d!t<         d"9      }|r j'                  9|j7                         dz
  d        \  }9|rii }|j                  d#      r0t?        |t              r|j@                  n|||j                  d#      <   jC                  |      }d  j                  ||      }}t        j                  d$9      }|rD j'                  9|j7                         dz
  d        \  }9 j                  |      \  }}|r|dfS |\  }}|r|dfS |rC||j5                  d%      r, j'                  9|j7                         dz
  d        \  }}|j%                  d      r j'                  |      \  } 9ndt        j                  d&|      }!|!rG j'                  ||!j7                         dz
  d        \  }"} j'                  |d'      \  } 9d(|"d)| d'} n|dc} 9 j                  |d      \  }#}}$ j                  |#       	 t;         j                  |            sn5	  j                  |       \  }}|r|dfS 	  j                  |$       P|j5                  d*      r j'                  9|j7                         dz
  d        \  }"} j                  |"      }" j'                  |d'      \  } 9| jI                  d+d,      jK                  d-      dd  }%d.D ]y  }&d}'|%D ]l  }d/  j                  |dd      D        \  }(}|&r
|'xs |(d0k(  }'n|'s|(d0k7  xr |" j                  |(      k(  }'|'sN	  j                  |      \  }}|r|c c S n |'sy n |r j                  9      \  }}||xs |fS t         j                  9            }t        |      dkD  r)|D ]   } j                  |      \  }}|s|dfc S  dfS t        jL                  d1t<         d2t<         d39      D ]  }|j                  d4      xs |j                  d5      })|jO                         \  }#}*|j                  d6      xs |j                  d7      }+|)   }|)xx   |+d   d8k(  rdnd9z  cc<   |j                  d6      r|)   }9d |#  j+                  |      z   9|*d  z   9 9sd |fS t        j                  d:t<         d;d<jQ                  tS        t        jT                  tW        tX              tZ        z
               d=t<         d>t<         d?t<         d@t<         dA9      }|rt|j                  dB      rbj5                  |j                  dC            },|j                  dD      s\ j]                  |j                  dE      |,|j                  dF      9      |j                  dC      <   |j                  dC         |fS |,d t^        fv r$ j                  dG|j                  dC       9       j                  |j                  dD            }-t?        |-t,        t`        f      s j                  dH|- dI9      t-        |-      }- j]                  |j                  dE       jc                  |,|-      |j                  dF      9      |,|-<   |,|-   |fS 9je                         rt-        9      |fS 9dJk(  r
tE               9dKk(  r
tG               9dLk(  rt^        |fS 9dMk(  rta        dM      |fS |r8|j                  dN      r'j5                  |j                  dO      t^              |fS tg        jh                  tj              5  t        j                  t!        9d            |fcd d d        S c c}w c c}w # t         $ r}|}Y d }~d }~ww xY w# tD        $ r Y CtF        $ r Y ew xY w# tD        $ r Y  ew xY w# 1 sw Y   nxY w|r[|j                  dP      rJ|j                  dQ         }. j                  |j                  dR            }- jc                  |.|-      |fS tX        D ]  }/t         j                  9|/            }0|0j                         }1	 |/dSv r2t        |0      dkD  r$|0d9   j	                         s|0j                          n|0r|/dTk(  r|1j%                  dU      sn"|/ |1 }1|/dVk7  r|0j                          |/ |1 }1q|0s j                  |/jQ                  |0            }, j]                  |/|,|19      |fc S  |r|j                  dW      r|j                  d	dXdY      \  <:;:s" j                  |j                  dZ            :9|j7                         d  66j%                  d      r j'                  6      \  6}nd 6c6}9: fd[7679:; <f	d\}2|r6 j                   j#                   |2             |z         \  }}||xs |fS  |2       |fS |r|j                  d]      r|j                  d^      }3 j                  |j                  d_            D 4cg c]  }4 j                  |4       nc c}4w }5}4|3v r |3   |5`      |fS |3 jl                  vr jo                  |3       jl                  |3<     jl                  |3   |5`      |fS  j                  da9|k7  rtq        9dbdb      nd |      )cNr   zRecursion limit reachedr   F;r<   zJ(?P<var>(?:var|const|let)\s)|return(?:\s+|(?=["\'])|$)|(?P<throw>throw\s+)throwvarrT   T)strictznew    zDate(zFailed to parse date i  zUnsupported object zvoid    {r   c              3   8   K   | ]  }t        |      d k(    yw)r   N)r   )r~   sub_exprs     r   r   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s     F(3x=A%Fs   c                     j                  |      }t        j                  t        |       r| |fS j                  |       |fS r4   )r   rematch_NAME_RE)rn   valr   r   r`   s     r   	dict_itemz4JSInterpreter.interpret_statement.<locals>.dict_item  sI    33C_UCxx#."Cx44S*oVX[[[r   c              3   6   K   | ]  \  }} ||        y wr4   r   )r~   r   vr  s      r   r   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s     H1IaOHs   (r   z(?x)
                (?P<try>try)\s*\{|
                (?P<if>if)\s*\(|
                (?P<switch>switch)\s*\(|
                (?P<for>for)\s*\(
                ifzelse\s*{try)NFzcatch\s*(?P<err>\(\s*z	\s*\))?\{errzfinally\s*\{forzswitch\s*\(}zswitch(z){switchzdefault:zcase default:zcase )FTc              3   <   K   | ]  }|j                           y wr4   )r   )r~   r   s     r   r   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s     !R!'')!Rs   defaultz3(?x)
                (?P<pre_sign>\+\+|--)(?P<var1>z)|
                (?P<var2>z)(?P<post_sign>\+\+|--)var1var2pre_sign	post_signrP   z5(?x)
            (?P<assign>
                (?P<out>z7)(?:\[(?P<index>[^\]]+?)\])?\s*
                (?P<op>rE   z)?
                =(?!=)(?P<expr>.*)$
            )|(?P<return>
                (?!if|return|true|false|null|undefined|NaN)(?P<name>z6)$
            )|(?P<indexing>
                (?P<in>zG)\[(?P<idx>.+)\]$
            )|(?P<attribute>
                (?P<var>zz)(?:(?P<nullish>\?)?\.(?P<member>[^(]+)|\[(?P<member2>[^\]]+)\])\s*
            )|(?P<function>
                (?P<fname>z )\((?P<args>.*)\)$
            )assignoutindexr   r   z Cannot index undefined variable zList index z must be integerbreakcontinue	undefinedNaNreturnr   indexinginr   z?<>*-rA   .rQ   	attributemembernullishmember2c                 8    | sj                   d|       y)z3 assert, but without risk of getting optimized out r{   N)r   )r=   r   r   r  r`   s     r   	assertionz4JSInterpreter.interpret_statement.<locals>.assertiony  s'    ..F81SE):DAA r   c            	      
  	 fdk(  r;t         j                  r*t         j                  j                  d d             y t        t
        d} j                  | j                  t                    }|t        u rMj                  vr	 j                        j                  <   j                  j                  t              }r|t        u rt        S j                  |      S j                        D cg c]  }j                  |       }}|t        k(  rBdk(  r( |d       dj                  t        t         |            S j                  d       |t
        k(  r:d	k(  r  t#        |      d
k(  d       |d   |d   z  S j                  d       dk(  rB |d        t#        |      dk(  d       |d   r|j%                  |d         S t'        |      S dk(  r@ t)        |t&              d        t#        |      dk(  d       |d   j                  |      S dk(  r | d       |j+                          |S dk(  r4 t)        |t&              d        t#        |      dk(  d       ||d   d  S dk(  r t)        |t&              d        |d       t        t,        |t#        |      gz   d d
       \  }}|dk  r|t#        |      z  }|d
d  }g }t/        |t1        ||z   t#        |                  D ]"  }|j3                  |j5                  |             $ t7        |      D ]  \  }}	|j9                  ||z   |	        |S dk(  rD t)        |t&              d        |d       t;        |      D ]  }	|j9                  d|	        |S dk(  r4 t)        |t&              d        | d       |sy |j5                         S dk(  r |d       |j=                  |       |S dk(  rU |d        t#        |      d
k  d       |dgz   d d
 \  }
}t7        |      D 	cg c]  \  }}	 |
|	||fd|i       c}	}S dk(  r= |d        t#        |      d
k  d       |dgz   d d
 \  }}	 |j?                  ||      S d k(  rc t)        |t              d!        t#        |      dk(  d       t)        |d   t,              r|d   nd}|t#        |      k\  ry tC        ||         S t)        |t&              rt-              n} ||   |"      S # j                  $ r s Y w xY wc c}w c c}	}w # t@        $ r Y yw xY w)#N)consoledebugr   ])StringMathfromCharCodeztakes one or more argumentsr<   zUnsupported String method powr   ztakes two argumentsr   r   zUnsupported Math method splitz&with limit argument is not implementedr   zmust be applied on a listztakes exactly one argumentreversezdoes not take any argumentsslicespliceunshiftpoppushforEachztakes at-most 2 argumentsthisindexOfr  
charCodeAtzmust be applied on a stringr   )"rv   r   r   r   r9   r&   r   r   r   extract_objectr   r   r   r   r   mapchrr   r,  r   r8   r-  r   rangeminappendr1  r   insertreversedextendr  
ValueErrorord)typesr   r  argvalsr  howMany	add_itemsresr   itemr   r4  r   r   r   arg_strr#  r   r   r  r   r`   variables                 r   eval_methodz6JSInterpreter.interpret_statement.<locals>.eval_method~  s   f%)=='' t'@'@1WIQQ[]l'mn "! !nnXuyy:/NO*$t}}4&6:6I6I(6SDMM(3 --++HlCCsl2'' ?;;sFG<<
 "^^G46 --a_M6 6 #:/!'+HI!wws3'899..+EfX)NPTUUE\!#g,!"35JK&qzWQZ77..+CF8)LdSSW$g'DEc'la/1YZ4;AJ399WQZ0MDIMv%jd35PQc'la/1MN"1:??3//y('k+HIKKMJw&jd35PQc'la/1MNwqz{++x'jd35PQg'DE%(w#c(/CRa.H%INE7qyS) 'IC"5#egos3x*HI 3

3775>23#,Y#7 44

519d34Jy(jd35PQg'DE ( 1 ,

1d+,Ju_jd35PQ'k+HI779$v%g'DEJJw'Jy(g'DEc'la/1LM&"~r2GAtbklobpqU^UXZ^AtS#.Pqqy(g'DEc'la/1LM")QC-!!4JC""yye44 |+jc24QRc'la/1MN(271:s(C'!*Cc#h#s3x=(%/T%:c&ks3xII  $~~ &#* % $+&6@ r & "!"s0   T8 UUU 8UU	U('U(functionfnamer   r7  zUnsupported JS expression    )9r   r   r   r1  r   r   r   r   r   grouprf   r   r   r   r   loadsr   r   
startswithr   r
   r   r   alldict	groupdictr   endlstripr@   r   r8   rh   	new_childr[   rc   replacer,  finditerspanr   r9  escapesetr   _COMP_OPERATORSr   r   r&   r   isdigitr   r   rA  r   extract_functionr	   )=r`   r   r   r   should_returnsub_statementssub_stmtr   r   innerouterr   r   leftrightdater   sub_expressionsshould_abortrH  r   mdr=   if_expr	else_exprtry_exprr  ri   pending
catch_varsconstructor	remainingbodyswitch_m
switch_valr   	incrementitemsr  matchedcaser   rU  signr   r   r  r   r   r   rK  rM  r  rD  rI  r#  r  r   r  r   rJ  s=   ` ``                                                  @@@@@@@r   r   z!JSInterpreter.interpret_statementG  s   Q..!:;;1dnnT378@RD$((*0022t& 	*H!%!9!9(JP_!`CM))	*
 HHbdhiAGGAJ()//1Dwwwt88z?[\\ !.M&&7g>>$Q;LE5Aw#~#007u '5'* 

:Qy.A$#OPm++%%j%85@D??6"qr(C~~g&"55c!"g>e(--dJPRWY<..+@)I4PPzz#dTk"2J?%Gnn':3%%@$GG??7#,,T!"Xz?SD&&??32248LE5^b^l^lmr^stRZtDNN8>>3CS!$LMtOtFoFF\ HHH-WW"&":":5*o"^E<Ll;m;;zz%4u<??32248LE5"&":":5*o"^E<Ll;m;;zz%4u<??32248LE5%%j NN5133 ))$
OL33 4D %<DHH 
   Q[[]R66$<00aeegkl1CDJD$ 33DKKMBMGTId+A"&"9"9$quuw{|:L"M	4t88z?[\D $ 8 8Y
O!MCDy 66%=!44T!%%'A+,5GHNHdC$($<$<XzSb$c!\9$   $G1(:FMA!%!8!8aeegkl9K!L$!#Jwwu~BLSRZB[SYYad
1775>2!+!5!5j!AJ#')A)A(JXg)hC$/A!%!8!8aeegkl9K!L$$($<$<XzSb$c!\9$ 'CDy 	VVE]%)%<%<T!%%'A+,=O%P"K##C(!44Y?
d88NI>,0,C,CIhlln_`N`NaDb,c)J	!%!8!8C!HJD$/94@D!*BJD$%)^^K%E"E4%%eZI"4#<#<T:#_`(,(@(@zSb(c%C#"Dy( $ )))ZQ  VVH$($;$;D1<N$O!J	22:z?[J00C@JD$LL_=CCGLQRPE( ! D!RT^^D#q5Q!RJD$")">TY->$#'9#4 $r'1T5N5NtU_ap5q'q  " ,0,D,DT:Wf,g)\'#&J ( %(  $ 8 8z? [C555 t~~d34!#+ %$($<$<XzSb$c!\9$% : #//7j 9"#:>?CE 
	KA ''&/4QWWV_CJE377:&>!''+*>DS/CsODGsNq:Owwz" o<$**S*"==ST
JD
	K &&HH !
 #RYYJ/0Q!RST UE FNJ O z "!
 ##* %  "!~~aggen5H777#-1^^GGDM8QWWV_dJP_.a
1775>*!!''%.1=@@dL11nn'GPUGW%XZ^__++AGGG,<j/ZCcC<0nn{3%7G%H$OOc(C NNt{{8S91776?DR\^moHSMC=-//\\^t9m++W_*Z-[ ..U]<..1778$>>!''&/<@-OO  , 	L::jd;<mK	L 	Lo u433B  d   " 0 $ `	L 	L $QWWT]+C++AGGENJXC;;sC(-77 	nBT^^D"56I"J=S^a%7	"@S@S@UMMO#c	j6K6KC6P "tJ<0
9$-MMO#4RD!EJ  001CZQ`aH>>"h
D*o^`mmm	n  %()x(K%Hfg2217793EzSbc15578nG!!#&%)%<%<W%E"%)7"B
nJ nJ` $($<$<&&z;=AIM%1!\ M9\99"}m33177:&GGG$E $qwwv ?A 00JP A AG A
"(z%(/RTaaadoo-)-)>)>u)E&)4??5)'?SUbbbnn($RV,r2)F\^(_`bfh 	hs`   +1s$s"

s' t  #t1"t,'	s=0s88s= 	ttt	t)(t),t5"~=c                 Z    | j                  |||      \  }}|r| j                  d|      |S )Nz Cannot return from an expression)r   r   )r`   r   r   r   r   r`  s         r   r   z"JSInterpreter.interpret_expression  s5    !55dJX]..!CTJJ
r   c           	         d}i }t        j                  dt        j                  |      d|d| j                        }|s| j	                  d|       |j                  d      }t        j                  d|dt        d	|      }|D ]n  }|j                  d
      j                  d      }t        |j                  d            }	t        | j                  ||j                  d            d|	 d      ||	<   p |S )Nz1(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')z(?x)
                (?<!\.)z,\s*=\s*{\s*
                    (?P<fields>(zP\s*:\s*function\s*\(.*?\)\s*{.*?}(?:,\s*)?)*)
                }\s*;
            zCould not find object fieldsz(?x)
                (?P<key>z!)\s*:\s*function\s*\((?P<args>(?:z%|,)*)\){(?P<code>[^}]+)}
            r   ,rn   r   r   rO   )r   searchr[  r   r   rO  rY  r   r,  r   r   build_function)
r`   objname_FUNC_NAME_REr   obj_mr|  fields_mr   argnamesr   s
             r   r8  zJSInterpreter.extract_object	  s    P		
 99W%}	6
 II ..#9'!CDDX&;; !(, 	
  	iAwwv,,S1H 0D*4+>+>xQW+Y]_`d_eef[ghCI	i
 
r   c                 l   t        j                  ddt        j                  |      iz  | j                        }|| j	                  d| d      | j                  |j                  d            \  }}|j                  d      j                  d      D cg c]  }|j                          c}|fS c c}w )z @returns argnames, code a  (?xs)
                (?:
                    function\s+%(name)s|
                    [{;,]\s*%(name)s\s*=\s*function|
                    (?:var|const|let)\s+%(name)s\s*=\s*function
                )\s*
                \((?P<args>[^)]*)\)\s*
                (?P<code>{.+})r   zCould not find JS function ""r   r   r}  )	r   r~  r[  r   r   r   rO  r,  r   )r`   funcnamefunc_mr   _r   s         r   extract_function_codez#JSInterpreter.extract_function_code#  s    " &,RYYx-@$AB II	 >..#?z!KLL))&,,v*>?a#)<<#7#=#=c#BCa	CTIICs   B1c                 Z    t         | j                  | j                  |       d| d      S )Nr   rO   )r   extract_function_from_coder  )r`   r  s     r   r_  zJSInterpreter.extract_function4  s6    !+D++T-G-G-QR
! 	r   c           
         i }	 t        j                  d|      }|n|j                         \  }}| j                  ||dz
  d        \  }}	| j	                  | | j
                  |j                  d      j                  d      D 
cg c]  }
|
j                          c}
||g|       }|d | |z   |	z   } | j                  |||g| S c c}
w )Nzfunction\((?P<args>[^)]*)\)\s*{r   r   r}  )
r   r~  rZ  r   r   r  rO  r,  r   r  )r`   r  r   global_stackr   mobjr   
body_startrr  rq  r   r   s               r   r  z(JSInterpreter.extract_function_from_code9  s    
99?FD| $		E:"55d:>?6KLOD)%%j2Q$2Q2Q$(JJv$6$<$<S$ABqBj31#/31 2D <$&2D  #t""8T:MMM Cs   C
c                 0     | j                  |      |      S r4   )r_  )r`   r  r   s      r   call_functionzJSInterpreter.call_functionG  s    .t$$X.t44r   c                 Z     t              xs i gt              i df fd	}|S )Nrw   c                     d   j                  t        j                  | d              d   j                  |       t         }	j	                  j                  dd      ||dz
        \  }}|r|S y )Nr   )	fillvaluer   r{   r   )update	itertoolszip_longestrk   r   rX  )
r   r   r   	var_stackr   ri  r  r   r  r`   s
         r   resfz*JSInterpreter.build_function.<locals>.resfN  sz    O""9#8#84SW#XYO""6*&5I $ 8 8dC9PR[]lop]p qC
 r   )r   tuple)r`   r  r   r  r  s   ```` r   r  zJSInterpreter.build_functionJ  s3    L)1bT? # 	 	 r   r4   )r}  N)F)rw   ) rW   rX   rY   r   r   IMSUr   r^   r   r   r   r   r   r   r   r   r   r   r   rv   r   r   r   r8  r  r_  r  r  r  r   r   r   r   r      s     TTTTTTTTI;3N 3 % % $ $L > >g&P6 yh yhv4J"
N5r   r   r   )7collectionsr   r  r   r   operatorr   utilsr   r   r   r   r   r	   r
   r   r    r)   r-   r/   r1   r5   r:   r@   or_xorand_is_is_noteqnelegeltgtrshiftlshiftaddsubmulr   r]  r   rS  zipr   r   r   r[   rc   rf   ChainMaprk   rv   r   r   r   r   <module>r     sC         		 	 	/	$ 	$ 	$	 HLL	! HLL	! HMM	" 
8<< 
8?? 	)HKK
  	)HKK
  	+hkk
"  	+hkk
"!" X[[	!#$ X[[	!%( 	*X__
%)* 	*X__
%+. 
hll	#	hll	#	hll	#		
;
@ CStT234 
	 	7~ 7
:. :
A~ A	?[)) 	?# #:N
 N
r   