
    Ğir              
          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d;dZd<dedefdZi ddddddddd eej                  d eej                  d eej                  dej        dej        d eej                   d eej!                  d eej"                  d eej#                  d eej$                  d  eej%                  d! eej&                  d" eej'                   eej(                   eej)                   eej*                  eeed#Z+h d$Z,d%Z- e. e/ e/d&d'd(d)          d*di          Z0d+Z1d,Z2 G d- d.          Z3 G d/ d0e	          Z4 G d1 d2e	          Z5 G d3 d4e	          Z6 G d5 d6e j7                  Z8 G d7 d8          Z9 G d9 d:          Z:dS )=    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dS t          j        t                    5  t	          j        |           r	 d d d            dS 	 d d d            n# 1 swxY w Y   t          t          |                     S Nr   )JS_Undefined
contextlibsuppress	TypeErrormathisnanintfloat)xs    TC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/jsinterp.pyzeroisez_js_bit_op.<locals>.zeroise   s    |$$$1 ++ 	 	z!}} 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 588}}s   AAAc                 F      |            |                    dz  S )Nl     )abopr   s     r   wrappedz_js_bit_op.<locals>.wrapped   s*    r''!**ggajj))J66    r   )r   r   r   s   ` @r   
_js_bit_opr!      s8      7 7 7 7 7 7 Nr    c                       fd}|S )Nc                 X    t           | |fv rt          d          S  | pd|pd          S Nnanr   r   r   r   r   r   s     r   r   z_js_arith_op.<locals>.wrapped&   s8    Aq6!!<<r!&q!&q!!!r    r   r   r   s   ` r   _js_arith_opr)   $   s#    " " " " "
 Nr    c                 n    t           | |fv s| s|st          d          S |r| pd|z  nt          d          S )Nr%   r   infr&   r   r   s     r   _js_divr-   .   sD    1va1U||.AFa<<%,,.r    c                 H    t           | |fv s|st          d          S | pd|z  S r$   r&   r,   s     r   _js_modr/   4   s0    1vQU||Fa<r    c                 L    |sdS t           | |fv rt          d          S | pd|z  S )Nr   r%   r   r&   r,   s     r   _js_expr1   :   s8     q	!Q		U||Fq=r    c                       fd}|S )Nc                 R    | |hd t           hk    r | |           S  | |          S N)r   r'   s     r   r   z_js_eq_op.<locals>.wrappedD   s5    q6dL)))2a88Or!Qxxr    r   r(   s   ` r   	_js_eq_opr5   B   s#        
 Nr    c                       fd}|S )Nc                     t           | |fv rdS t          | t                    st          |t                    r* t          | pd          t          |pd                    S  | pd|pd          S )NFr   )r   
isinstancestrr'   s     r   r   z_js_comp_op.<locals>.wrappedN   sz    Aq6!!5a 	0As!3!3 	02c!&qkk3qvA;;///r!&q!&q!!!r    r   r(   s   ` r   _js_comp_opr:   L   s#    " " " " " Nr    TFc                     | ddddt           fv r|S t          j        t                    5  t	          j        |           r|cddd           S 	 ddd           n# 1 swxY w Y   |S )z6Simulate JS's ternary operator (cndn?if_true:if_false)FNr    )r   r   r   r   r   r   )cndnif_trueif_falses      r   _js_ternaryr@   X   s    tQL111		Y	'	'  :d 	       	               Ns   AA!A
   valradixc                 0  
 |t           d fv rd}|t          dd          v s
J d            t          j        |           rdS | dk    rdS t          j        |           r
| dk     rdnd	S |dk    r	 d

t          j                    }| dk     }t          |           } t          j        |           \  }}t          t          j
        dt          j                  t          j        |           dz            }||k    r|                    d           ||k    r||z  }t          j        ||z            \  }}|                    t          |                     |dk    p|dk    ot          |          dz  }|rq||z   dk    rht          t          dt!          |                              D ]7}	||	         dz   |k     r||	xx         dz  cc<    n|                                 8|dz  }n||k    t%          t          |          |          \  }}|                    |           |dk    r.t%          ||          \  }}|                    |           |dk    .|r|                    d           t)          
fd|D                                           d          S )NrA      %   z:radix must be an integer at least 2 and no greater than 36NaNr   0z	-InfinityInfinitys&   0123456789abcdefghijklmnopqrstuvwxyz.-g        g      ?r   c              3   (   K   | ]}|         V  d S r4   r   ).0digitALPHABETs     r   	<genexpr>z&js_number_to_string.<locals>.<genexpr>   s'      55U%555555r    ascii)r   ranger   r   isinfcollectionsdequeabsmodfmax	nextafterr+   ulpappendr   reversedlenpopdivmod
appendleftbytesdecode)rB   rC   resultsignfractionintegerdeltarN   needs_roundingindexrO   s             @r   js_number_to_stringrj   c   s   t$$$E!RLL   "^   z# u
axxsz# 6!Agg{{:5{{8H  F7D
c((C	#Hgr48,,dhsmma.?@@E5b
e

)Hu$455%c%jj!!!!COHO,NE

Q 		h.22!%3v;;"7"788  %=1$u,,5MMMQ&MMME

 1 e

" CLL%00NGU
e
A++//%    A++  "5555f55555<<WEEEr    ???||&&|^&===!====!=<=>=<>z>>z<<)+-*%/z**>   rx   ry   ru   rv   rt   rw   rs   rr   z[a-zA-Z_$][\w$]*z()z{}[]strictr   z'"/z&[^[\]]+(?:\[[^[\]]+(?:\[[^\]]+\])?\])?c                       e Zd ZdS )r   N)__name__
__module____qualname__r   r    r   r   r      s        Dr    r   c                       e Zd Zd ZdS )JS_Breakc                 0    t          j        | d           d S )NzInvalid breakr   __init__selfs    r   r   zJS_Break.__init__   s    o66666r    Nr   r   r   r   r   r    r   r   r      s#        7 7 7 7 7r    r   c                       e Zd Zd ZdS )JS_Continuec                 0    t          j        | d           d S )NzInvalid continuer   r   s    r   r   zJS_Continue.__init__   s    &899999r    Nr   r   r    r   r   r      s#        : : : : :r    r   c                       e Zd Zd ZdS )JS_Throwc                 D    || _         t          j        | d|            d S )NzUncaught exception )errorr   r   )r   es     r   r   zJS_Throw.__init__   s+    
&?A&?&?@@@@@r    Nr   r   r    r   r   r      s(        A A A A Ar    r   c                   &    e Zd Zd Zd Zd Zd ZdS )LocalNameSpacec                 R    | j         D ]}||v r|||<    d S || j         d         |<   d S r   maps)r   keyvaluescopes       r   __setitem__zLocalNameSpace.__setitem__   sI    Y 	 	Ee||"c
  "	!Sr    c                      t          d          )NzDeleting is not supported)NotImplementedErrorr   r   s     r   __delitem__zLocalNameSpace.__delitem__   s    !"=>>>r    c                 &    || j         d         |<   d S r   r   )r   r   r   s      r   	set_localzLocalNameSpace.set_local   s    !	!Sr    c                 T    || j         d         v r| j         d         |         S t          S r   )r   r   r   s     r   	get_localzLocalNameSpace.get_local   s*    $)A,9Q<$$r    N)r   r   r   r   r   r   r   r   r    r   r   r      sP        " " "? ? ?" " "    r    r   c                   L    e Zd ZddlZdZeddd            Zed             Z	dS )	Debuggerr   NFpytestd   levelc                 v    t          ddd| z
  z   d                    d |D                        d           d S )Nz[debug] JS: z  r    c              3   R   K   | ]"}t          t          |          d d           V  #dS )2   N)r	   r9   rM   r   s     r   rP   z!Debugger.write.<locals>.<genexpr>   s4       O OQQR!@!@ O O O O O Or    
)r   join)r   argss     r   writezDebugger.write   sj     TDC%K$8 T O O$ O O OOOT T T 	U 	U 	U 	U 	Ur    c                       fd}|S )Nc                    	j         r+|                                r	                    ||           	  
| |||g|R i |\  }}nP# t          $ rC}	j         r6t	          |t
                    r|j        }	                    d|d||            d }~ww xY w	j         rX|                                rD|st          |          |k    r/	                    ddg|         t          |          d||           ||fS )Nr   z
=> Raises:z<-|z->z=>)ENABLEDstripr   	Exceptionr8   r   orig_msgrepr)r   stmt
local_varsallow_recursionr   kwargsret
should_retr   clsfs            r   interpret_statementz6Debugger.wrap_interpreter.<locals>.interpret_statement   s1   { 7tzz|| 7		$o	666"#!D$
O"]d"]"]"]V\"]"]ZZ   ; S!!^44 'JIIlAud/IRRR { gtzz|| g gcd!2!2IItTl:6S		5$VeIfff
?"s   A 
B>BBr   )r   r   r   s   `` r   wrap_interpreterzDebugger.wrap_interpreter   s*    	# 	# 	# 	# 	# 	# #"r    )
r   r   r   sysmodulesr   staticmethodr   classmethodr   r   r    r   r   r      sh        JJJG U U U U \U # # [# # #r    r   c                      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dS ) JSInterpreterr   i   i   i   )dgimsuyNc                 `    |i c| _         | _        |i n|| _        t                      | _        d S r4   )code
_functions_objectsset_undefined_varnames)r   r   objectss      r   r   zJSInterpreter.__init__  s3    %)2"	4?%o7#&55   r    c                         e Zd Zd fd	Z xZS )JSInterpreter.ExceptionNc                     |(|                                  dt          |dd           } t                      j        |g|R i | d S )Nz in: r   )rstripr	   superr   )r   msgexprr   r   	__class__s        r   r   z JSInterpreter.Exception.__init__  s]    KKOD"b,I,IKKEGGS24222622222r    r4   )r   r   r   r   __classcell__)r   s   @r   r   r     s=        	3 	3 	3 	3 	3 	3 	3 	3 	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<ry   )$_JSInterpreter__named_object_countercallabler8   r   )r   	namespaceobjnames       r   _named_objectzJSInterpreter._named_object"  st    ##q(##Dt'BDDC== 	OC1C!D!D 	O$S*Mt/J*M*M*MN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*  sn     	$;  	' 	'GC&&S]2&&EEd3788n$$r    ,c              #   0  K   d}| sd S t                               t                                          d          }dddt	          |          dz
  f\  }}}}d\  }	}
}}t          |           D ]\  }}|	s%|t          v r|t          |         xx         dz  cc<   nS|	s||v r||         r||xx         dz  cc<   n4|
s2|t          v r|	|d fv r|	s|s|dk    r|	r|sd n|}	n|	dk    r
|dv r|dk    }|
 o|	o|dk    }
|	 o
| o|d	vo|d
v }|	s||v r|n|                                o|}|||         k    s%t          |                                          s|	s|rd}||k    r|dz  }| |||z
           V  |dz   d}}|dz  }|r||k    r n| |d          V  d S )Nz+-*/%&|^=<>!,;{}:[r   r   )NFTFr~   r   [\TFz-+)	dictfromkeys_MATCHING_PARENSvaluesr]   r   _QUOTESisspaceany)r   delim	max_splitOP_CHARScountersstartsplitspos	delim_lenin_quoteescapingafter_opin_regex_char_groupr   charin_unary_ops                   r   	_separatezJSInterpreter._separate5  st     ' 	F==!1!8!8!:!:A>>()1aUa(?%vsI<T9(H&9"4 	 	IC 6(8 8 8)$/000A50000 	6$("2"2D> (TNNNa'NNN 67??xD$<'?'? Z8 Zts{{+3#Y<O#Y44UY__*.#+'#|AATT\H'< N0C,C N'}<NAE $,e1A1AttId\dHuSz!!S):):%;%;!x!;!	!!qucIo-....q!3EaKF Vy00566lr    c                 H   ||ot           |d                  }t          |                     ||d                    }t          |          dk     r|                     d| |          |d         dd                                          |d                                         fS )Nr   r   rE   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677	y>>A-- ? ? ?FFF|ABB%%''1););)=)===r    c           	         |dv r|dk    t          |          z  r|S n<|dk    r|d t          fvr|S n(|dk    r"t          |g|                     |dd          R  }|                     |||          }t                              |          s|S 	 t	          |         ||          S # t          $ r&}|                     d|d| d|||	          d }~ww xY w)
N)rm   rn   rn   rl   rk   :r   zFailed to evaluate r   cause)r@   r   r  interpret_expression
_OPERATORSgetr   )	r   r   left_val
right_exprr   r   r   	right_valr   s	            r   	_operatorzJSInterpreter._operatore  s#   d
k(333   4ZZl333 43YY$XSz3PQ0R0RSSSJ--j*oVV	~~b!! 		gb>(I666 	g 	g 	g..!Vx!V!VB!V!V!V!VX\de.fff	gs   B$ $
C.!CCFc                 "   |dk    rt          |          S 	 t          |t                    r|t          |                   n||         S # t          $ r;}|rt
          cY d }~S |                     d| t          |          |          d }~ww xY w)NlengthzCannot get index r  )r]   r8   r  r   r   r   r   )r   r   r   allow_undefinedr   s        r   _indexzJSInterpreter._indexx  s    (??s88O	P$.sD$9$9G3s3xx==s3xG 	P 	P 	P $#######..!:S!:!:DIIQ.OOO	Ps#   1A	 	
BB	B!(B		Bc                 x    	 t          j        |          S # t          $ r |                     ||          cY S w xY wr4   )jsondumpsr   r   )r   r   r   s      r   _dumpzJSInterpreter._dump  sL    	6:c??" 	6 	6 	6%%i55555	6s     99r   c                 d'   789:;<= dk     r                      d          dz  d}t                               |d                    pdg}|                                                                x:}|D ]$}                     |          \  }}|r||fc S %t          j        d|          }	|	r|t          |		                    d                    d                                          :|		                    d          r$t                               :                    |		                    d	           }|p!t          |		                    d	                    }:sd |fS :d         t          v r                     ::d         d          \  }
}:d         d
k    r                      |          \  }}|
 d
| }
n-t          j        t#          |
 :d          d                    }
|s|
|fS                      |
          |z   ::                    d          r:dd          }|                    d          r                     |dd                    \  }}t+                               |          d          }|                      d|:                               t/          |dz                      |z   :n                      d| :          :                    d          r#                     :dd                    }d |fS :                    d          r                     :          \  }
} fd                     |
          D             }t1          d |D                       r$ fd9t3          9fd|D                       |fS                      |
          \  }
}|r|r|
|p|fS                      |
          |z   ::                    d          rU                     :          \  }
}                     |
          \  }
}|r|r|
|p|fS                      |
          |z   ::                    d          rT                     :          \  }
}                      fd                     |
          D                       }||z   :t          j        d:          }	|	r|	                                ni }|                    d          r                     :|	                                dz
  d                    \  }:                     :                                          \  }:d }t          j        d:          }	|	r5                     :|	                                dz
  d                    \  }:t=                               |                    }                     |r|n|          \  }}|r|dfS |                    d           r                     :|	                                dz
  d                    \  }:d }	                      |          \  }}|r|dfS n# t           $ r}|}Y d }~nd }~ww xY wd!}t          j        d"t>           d#:          }	|	r                     :|	                                dz
  d                    \  }:|ryi }|		                    d$          r4tA          |t                    r|j!        n|||		                    d$          <   "                    |          }d                      ||          }}t          j        d%:          }	|	rU                     :|	                                dz
  d                    \  }:                     |          \  }}|r|dfS |\  }}|r|dfS |r|n|                    d&          r                     :|	                                dz
  d                    \  }}|                    d          r                     |          \  } :ntt          j        d'|          }!|!rX                     ||!                                dz
  d                    \  }"}                     |d(          \  } :d)|"d*| d(} n|dc} :                     |d          \  }#}}$                     |#           	 t=                               |                    snU	                      |           \  }}|r|dfS n# tF          $ r Y n'tH          $ r Y nw xY w                     |$           znE|                    d+          r/                     :|	                                dz
  d                    \  }"}                     |"          }"                     |d(          \  } :| %                    d,d-          &                    d.          dd          }%d/D ]}&d}'|%D ]}(d0                      |(d1d          D             \  })}|&r	|'p|)d2k    }'n#|'s!|)d2k    o|"                     |)          k    }'|'sW	                      |          \  }}|r|c c S {# tF          $ r Y  nw xY w|'r n|r                      :          \  }}||p|fS t                               :                    }t          |          dk    r-|D ]&}                     ||3          \  }}|r|dfc S '|dfS t          j        d4t>           d5tN           d6d7(                    tS          t          j*        tW          tX                    tZ          z
                       d8:          }	|	r                    |		                    d9                    }*|		                    d:          s .                    |		                    d;          |*|		                    d<          :          }+|r*/                    |		                    d9          |+           n|+|		                    d9          <   |		                    d9                   |fS |*d t`          fv r,                      d=|		                    d9           :                               |		                    d:                    },tA          |,t.          tb          f          s                      d>|, d?:          t/          |,          }, .                    |		                    d;           2                    |*|,          |		                    d<          :          |*|,<   |*|,         |fS t          j3        d@t>           dAt>           dB:          D ]}	|		                    dC          p|		                    dD          }-|	4                                \  }#}.|		                    dE          p|		                    dF          }/|-         }|-xx         |/d         dGk    rdndHz  cc<   |		                    dE          r|-         }:d |#                              |          z   :|.d          z   :݉:sd |fS t          j        dIt>           dJt>           dKtN           dLt>           dMt>           dN:          }	:5                                rt/          :          |fS :dOk    rtF          :dPk    rtH          :dQk    r	t`          |fS :dRk    rtc          dR          |fS |	r|		                    dS          r|		                    dT          }-|r,6                    |-          }/                    |-|           nE                    |-tn                    }|tn          u r!t`          } j8        9                    |-           ||fS tu          j;        tx                    5  t          j        t#          :d                    |fcd d d            S # 1 swxY w Y   |	rr|		                    dU          r]|		                    dV                   }0                     |		                    dW                    }, 2                    |0|,          |fS tX          D ]}1t                               :|1                    }2|2                                }3	 |1dXv rBt          |2          dk    r/|2dH                                         s|2                                 n|2r|1dYk    r|3                    dZ          sn'|1 |3 }3|1d[k    r|2                                 |1 |3 }3|2sɉ                     |1(                    |2                    }* .                    |1|*|3:          |fc S |	r|		                    d\          r|		                    d	d]d^          \  =;<;s*                     |		                    d_                    ;:|	                                d          77                    d          r                     7          \  7}nd 7c7}:; fd`878:;< =f	da}4|r?                                           |4                      |z             \  }}||p|fS  |4            |fS |	r|		                    db          r|		                    dc          }5 fdd                     |		                    de                    D             }6|5v r |5         |6f          |fS |5 j=        vr >                    |5           j=        |5<     j=        |5         |6f          |fS                       dg:|k    rt          :dhdh          nd |          )iNr   zRecursion limit reachedr   F;r<   zJ(?P<var>(?:var|const|let)\s)|return(?:\s+|(?=["\'])|$)|(?P<throw>throw\s+)throwvarr~   Tr   znew    zDate(zFailed to parse date i  zUnsupported object zvoid    {c           	      |    g | ]8}t                              |                                d d                    9S )r  r   )r  r  r   )rM   sub_exprr   s     r   
<listcomp>z5JSInterpreter.interpret_statement.<locals>.<listcomp>  s<    tttRZtDNN8>>3C3CS!$L$LMMtttr    c              3   <   K   | ]}t          |          d k    V  dS )rE   N)r]   )rM   r.  s     r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s-      FF(3x==A%FFFFFFr    c                                          |          }t          j        t          |           r| |fS                      |           |fS r4   )r  rematch_NAME_RE)r   rB   r   r   r   s     r   	dict_itemz4JSInterpreter.interpret_statement.<locals>.dict_item  sU    33C_UUCx#.. ("Cx44S*oVVX[[[r    c              3   6   K   | ]\  }} ||          V  d S r4   r   )rM   kvr5  s      r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>  s1      HH1IIaOOHHHHHHr    (r   c                 >    g | ]}                     |          S r   r  )rM   itemr   r   r   s     r   r/  z5JSInterpreter.interpret_statement.<locals>.<listcomp>  s;     33 33 33 ))$
OLL33 33 33r    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   | ]}|                                 V  d S r4   r   )rM   r   s     r   rP   z4JSInterpreter.interpret_statement.<locals>.<genexpr>=  s*      !R!R!''))!R!R!R!R!R!Rr    r  default)_is_var_declarationz(?x)
                (?P<out>z)(?:\[(?P<index>z )\])?\s*
                (?P<op>ro   z3)?
                =(?!=)(?P<expr>.*)$
            outri   r   r   z Cannot index undefined variable zList index z must be integerz3(?x)
                (?P<pre_sign>\+\+|--)(?P<var1>z)|
                (?P<var2>z)(?P<post_sign>\+\+|--)var1var2pre_sign	post_signrz   rK   za(?x)
            (?P<return>
                (?!if|return|true|false|null|undefined|NaN)(?P<name>z8)$
            )|(?P<attribute>
                (?P<var>z`)(?:
                    (?P<nullish>\?)?\.(?P<member>[^(]+)|
                    \[(?P<member2>zL)\]
                )\s*
            )|(?P<indexing>
                (?P<in>zH)\[(?P<idx>.+)\]$
            )|(?P<function>
                (?P<fname>z )\((?P<args>.*)\)$
            )breakcontinue	undefinedrG   returnr   indexinginr   z?<>*-rk   .r{   	attributemembernullishmember2c                 B    | s                      d|           dS )z3 assert, but without risk of getting optimized out r   N)r   )r=   r   r   rT  r   s     r   	assertionz4JSInterpreter.interpret_statement.<locals>.assertion  s:     B..F):):S):):DAAAB Br    c            	      D  	 fdk    rAt           j        r3t                                                   d d                     d S t          t
          t          d}                     |                     t                              t          u r\j	        vr3	 
                              j	        <   n# j        $ r s Y nw xY wj	                            t                    rt          u rt          S                               S fd                              D             }t          t                     r                    d          rω                    d          d                             d          \  }}} |d	            t          |d
                   d            |dk    r|^}na|dk    rB t'          |          dk    d           |\  } t          |t                    d           n                    d|           |t          u rSdk    r4 |d	           d                    t+          t,          |                    S                     d           t
          u rMdk    r. t'          |          dk    d           |d
         |d         z  S                     d           dk    r[ |d	            t'          |          dk    d           |d
         r                    |d
                   nt                    S dk    rW t          t                    d            t'          |          dk    d           |d
                                       S dk    r# | d                                            S dk    rW t          t          t          f          d            t'          |          dk    d            t3          g |d R           S d!k    r	 t          t                    d            |d	           t+          t4          g |t'                    d d                   \  }}|d
k     r|t'                    z  }|dd          }g }t7          |t9          ||z   t'                                        D ]*}|                                        |                     +t?          |          D ]\  }	}
                     ||	z   |
           |S d"k    rU t          t                    d            |d	           tC          |          D ]}
                     d
|
           S d#k    rD t          t                    d            | d           sd S                                 S d$k    r# |d	           "                    |           S d%k    rX |d	            t'          |          dk    d&           g |dd d         \  fd't?                    D             S d(k    rb |d	            t'          |          dk    d&           g |d
d d         \  }}	 #                    ||          S # tH          $ r Y d)S w xY wd*k    r t          t                    d+            t'          |          dk    d           t          |d
         t4                    r|d
         nd
}|t'                    k    rd S tK          |                   S t          t                    rt5                    n} |         |,          S )-N)consoledebugr   ])StringMathArrayc                 >    g | ]}                     |          S r   r;  rM   r8  r   r   r   s     r   r/  zJJSInterpreter.interpret_statement.<locals>.eval_method.<locals>.<listcomp>  s;     6 6 6 --a_MM6 6 6r    z
prototype.rR  rE   ztakes one or more argumentsr   zneeds binding to type callapplyztakes two argumentsz"second argument needs to be a listzUnsupported Function method fromCharCoder<   zUnsupported String method powr   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slicez#must be applied on a list or stringztakes between 0 and 2 argumentsspliceunshiftr^   pushforEachztakes at-most 2 argumentsc                 :    g | ]\  }} ||fd i          S )thisr   )rM   r   r<  r   r   r   rn  s      r   r/  zJJSInterpreter.interpret_statement.<locals>.eval_method.<locals>.<listcomp>C  s9    qqqU^UXZ^AAtS#.PPqqqr    indexOfrK   
charCodeAtzmust be applied on a stringr   )&r   r   r   r  r9   r   r  r  r   r   extract_objectr   r   r!  r  r8   type
startswith	partitionr]   r   mapchrrf  rg  rh  r   rR   minr[   r^   r   insertr\   extendri   
ValueErrorord)typesargvals
new_member_func_prototyperi   how_many	add_itemsresr   r<  r   r  r   r   rn  r   arg_strrX  r   r   rT  rU  r   variables                @@@r   eval_methodz6JSInterpreter.interpret_statement.<locals>.eval_method  s    f%)===' o t'@'@WQ[]l'm'mnnnF "!! 
 !nnXuyy:/N/NOO*$$t}44&6:6I6I(T^6_6_DM(33#~ & & &#* & %& && -++HlCCC (sl22'' ?;;sFG<<<6 6 6 6 6 6!^^G446 6 6
 c4(( (V->->|-L-L (4:4D4DS4I4I!4L4V4VWZ4[4[1J>Ig'DEEEIjS99;YTW;Y;YZZZ%//(/gg'722!	#g,,!"35JKKK'.W!	*Wd";";=abbbb"nn-\N-\-\^bccc'F#:://!	'+HIII!wws3'8'8999..)Nf)N)NPTUUUE\\!	#g,,!"35JKKK&qzWQZ77..)LF)L)LdSSSW$$Ig'DEEEIc'lla/1YZZZ4;AJM399WQZ000DIIMv%%Ijd335PQQQIc'lla/1MNNN"1:??3///y((I'k+HIIIKKMMMJw&&IjtSk::<abbbIc'lla/1RSSSu4g4t44455x''Ijd335PQQQIg'DEEE&)#0D'0D3s880Dbqb/I&J&JOE8qyyS) 'IC"5#eh.>C*I*IJJ 3 3

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

519d3333Jy((Ijd335PQQQIg'DEEE ( 1 1 , ,

1d++++Ju__Ijd335PQQQI'k+HIII 7799$v%%Ig'DEEEJJw'''Jy((Ig'DEEEIc'lla/1LMMM-~"~rr2GAtqqqqqqqbklobpbpqqqqy((Ig'DEEEIc'lla/1LMMM"/G-Q-!!4JC""yye444% " " "!rr"|++Ijc224QRRRIc'lla/1MNNN(271:s(C(CJ'!**Cc#hh#ts3x==(%/T%:%:Fc&kkks3xIIIIs$   %C CC1[ 
[[functionfnamec                 >    g | ]}                     |          S r   r;  ra  s     r   r/  z5JSInterpreter.interpret_statement.<locals>.<listcomp>a  sA     A A A 00JPP A A Ar    r   rq  zUnsupported JS expression    )@r   r  r  r^   r   r   r2  r3  r]   groupr   r  boolr   r   r#  loadsr   r   rt  r  r
   r%  r   allr   	groupdictr  endlstripr@   r4  r8   r   	new_childr   r   replacerf  _NESTED_BRACKETSr   rv  escaper   r  _COMP_OPERATORSr  r   r   r   r!  finditerspanisdigitr   r   r   addr   r   r{  r   extract_functionr	   )>r   r   r   r   rF  should_returnsub_statementssub_stmtr   r   innerouterr   r   leftrightdatesub_expressionsshould_abortr   mdr=   if_expr	else_exprtry_exprr?  r   pendingr.  
catch_varsconstructor	remainingbodyswitch_m
switch_valr  	incrementitemsrE  matchedr<  caser  eval_resultr   r)  r  rd   rB   r   r  r  r  r  r~  r  rX  r5  r   rT  rU  r  s>   ` ``                                                   @@@@@@@r   r   z!JSInterpreter.interpret_statement  s*   Q..!:;;;1dnnT37788@RD$((**00222t& 	* 	*H!%!9!9(JP_!`!`C *M))))* Hbdhii 	NAGGAJJ(()//11Dwww ]t88z?[[\\\ !.M"5"Maggenn9M9M 	'&&7g>>$Q;;LE5Aw#~~#0077u **5** 
:.AQ.A.A$#O#O#OPP ,m++%%j%885@D??6"" 
	Hqrr(C~~g&& H"55c!""g>>e(--dJPPRWY Y<..)I)I)I4PPPzz#dTk"2"2J??%Gnn%@3%@%@$GGG??7## 	',,T!""Xz?SSD&&??3 	=22488LE5tttt^b^l^lmr^s^stttOFFoFFFFF X\ \ \ \ \ \ \ HHHHHHHHH-WW"&":":5*o"^"^E< =L =l;m;;zz%44u<??3 	=22488LE5"&":":5*o"^"^E< =L =l;m;;zz%44u<??3 	 22488LE5%%j 33 33 33 33 33 33 NN51133 33 33 4 4D %<DH 
    'Q[[]]]R66$<< 	!00aeeggkll1CDDJD$ 33DKKMMBBMGTId++A N"&"9"9$quuww{||:L"M"M	4t88z?[[\\D $ 8 8.Y
O!M !MC !Dy 66%== V	!44T!%%''A+,,5GHHNHdC$($<$<XzSb$c$c!\ %9$%    $GF(FFFMMA i!%!8!8aeeggkll9K!L!L$ i!#Jwwu~~ eBLSRZB[B[5dSYYad
1775>>2!+!5!5j!A!AJ#')A)A(JXg)h)hC$//A %!%!8!8aeeggkll9K!L!L$$($<$<XzSb$c$c!\ %9$ 'C !Dy  	 VVE]] 2	%)%<%<T!%%''A+,,=O%P%P"K##C(( 	/!44Y??
dd8NI>> /,0,C,CIhllnn_`N`NaNaDb,c,c)J	!%!8!8C!H!HJD$$/9zz444@DD!*BJD$%)^^K%E%E"E4%%eZIIIR"4#<#<T:#_#_`` (,(@(@zSb(c(c%C# )"Dy()   E"   D)))ZQQQR VVH 	$($;$;D1<N$O$O!J	22:z?[[J00C@@JD$LL_==CCGLLQRRPE(  !  D!R!RT^^D#q5Q5Q!R!R!RJD$ s")">TY->$ s#'9#4 $r'1T5N5NtU_ap5q5q'q  " ! ,0,D,DT:Wf,g,g)\' '#&JJJJJ'#    E  	6 $ 8 8z? [ [C555 t~~d3344!##+ % %$($<$<j/Ob %= %d %d!\ %9$$$%:H ! 3C RYJ/0Q!R!RSS   	 
  	0!~~aggenn55H777## 	`"nnGGDMM8QWWV__dJP_a a& =((EEEE1<Jqwwu~~.!!''%..1=@@dL111nn%XPU%X%XZ^___++AGGG,<,<j/ZZCcC<00 Pnn%H3%H%H%H$OOOc((C NNt{{8S991776??DR\^mo oHSMC=-// >/7> >"> > >?CE E 
	K 
	KA ''&//4QWWV__CJE377:&&>!''+*>*>DS/CsOOODGsNNqq:OOOwwz"" & o<$**S*"="==STT
JDD 	'&&H EM  "	  $4  !  $     <<>> 	&t99m++W__NZ[  ..U]]<<.. 	&1778$$ 	&''&//C" 	6 **3// $$S#.... nnS*55*$$&C,00555%% ,, 	L 	L:jd;;;<<mK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L  	8$$ 	8QWWT]]+C++AGGENNJXXC;;sC((-77 	n 	nBT^^D"5566I"JF==S^^a%7%7	"@S@S@U@U%7MMOOOO# c		j6K6KC6P6P	 "0J00
99$-MMOO!ER!E!E!EJF  001C1CZQ`aaH>>"h
D*o^^`mmmmm a	c%% a	c()x(K(K%Hfg d2217793E3EzSbcc1557788nG!!#&& 3%)%<%<W%E%E"%)7"B B B B B B B
@J @J @J @J @J @J @J @J @J @J @J @J @JD  4$($<$<&&z;;==AAIM%1 %1!\ M9\99"{}}m33 	c177:&& 	cGGG$$EA A A A A A $qwwv ? ?A A AG
""(z%(/RRRTaaado--)-)>)>u)E)E&)4?5)'?SSSUbbbnn`$RV,,r2)F)F)F\^``bfh h 	hsY   Y% %
Y;/Y66Y;d3 3
e?	e
e4j
j%$j%/%A@!@!A@%@(A@%c                 j    |                      |||          \  }}|r|                     d|          |S )Nz Cannot return from an expression)r   r   )r   r   r   r   r   r  s         r   r  z"JSInterpreter.interpret_expressionl  sA    !55dJXX] 	K..!CTJJJ
r    c           	          d}i }t          j        dt          j        |          d|d| j                  }|s|                     d|           |                    d          }t          j        d|dt          d	|          }|D ]}|                    d
                              d          }	t          |                    d                    }
t           | j        |	|                    d          g|R  d|
 d          ||
<   |S )Nz1(?:[a-zA-Z$0-9]+|"[a-zA-Z$0-9]+"|'[a-zA-Z$0-9]+')z'(?x)
                (?<![a-zA-Z$0-9.])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   r   r   r   r   ry   )r2  searchr  r   r   r  r  r4  rf  r   r   build_function)r   objnameglobal_stack_FUNC_NAME_REr   obj_mr  fields_mr   argnamesr   s              r   rr  zJSInterpreter.extract_objectr  s=   P		
 9W%%%%}}}	6
 I   	E..!C'!C!CDDDX&&;; !==(((, 	 
  	] 	]Awwv,,S11H 00D*##HaggfooMMMM|TX|||] ]CII 
r    c                 X   t          j        ddt          j        |          iz  | j                  }||                     d| d          |                     |                    d                    \  }}d |                    d                              d	          D             |fS )
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   NzCould not find JS function ""r   c                 6    g | ]}|                                 S r   rD  r   s     r   r/  z7JSInterpreter.extract_function_code.<locals>.<listcomp>  s     CCCa		CCCr    r   r   )r2  r  r  r   r   r  r  rf  )r   funcnamefunc_mr   r  s        r   extract_function_codez#JSInterpreter.extract_function_code  s    " &,RYx-@-@$AB I	 	 >..!K!K!K!KLLL))&,,v*>*>??aCC6<<#7#7#=#=c#B#BCCCTIIr    c                 j    t           | j        g |                     |          |R  d| d          S )Nr   ry   )r   extract_function_from_coder  )r   r  r  s      r   r  zJSInterpreter.extract_function  sL    !+D+aT-G-G-Q-QaT`aaa  	r    c           	         i }	 t          j        d|          }|n|                                \  }}|                     ||dz
  d                    \  }}	|                     | | j        d |                    d                              d          D             ||g|R            }
|d |         |
z   |	z   } | j        |||g|R  S )NTzfunction\((?P<args>[^)]*)\)\s*{r   c                 6    g | ]}|                                 S r   rD  r   s     r   r/  z<JSInterpreter.extract_function_from_code.<locals>.<listcomp>  s     BBBqBBBr    r   r   )	r2  r  r  r  r   r  r  rf  r  )r   r  r   r  r   mobjr  
body_startr  r  r   s              r   r  z(JSInterpreter.extract_function_from_code  s   
		39?FFD| $		E:"55d:>??6KLLOD)%%j2Q$2QBBDJJv$6$6$<$<S$A$ABBBj31#/31 31 31 2 2D <$&2D		3 #t"8T:MMMMMr    c                 >     |                      |          |          S r4   )r  )r   r  r   s      r   call_functionzJSInterpreter.call_function  s     .t$$X..t444r    c                 f     t                    pi gt                    i df fd	}|S )Nr   c                    d                              t          j        | d                      d                              |           t           }	                                        dd          ||dz
            \  }}|r|S d S )Nr   )	fillvaluer   r   r   )update	itertoolszip_longestr   r   r  )
r   r   r   	var_stackr   r  r  r   r  r   s
         r   resfz*JSInterpreter.build_function.<locals>.resf  s    O""9#84SW#X#X#XYYYO""6***&5I $ 8 8dC9P9PR[]lop]p q qC 
 r    )r  tuple)r   r  r   r  r  s   ```` r   r  zJSInterpreter.build_function  s^    L))1bT?? # 	 	 	 	 	 	 	 	 	 r    r4   )r   N)F)r   F) r   r   r   r   r2  IMSUr   r   r   r   r   r   r   r   r  r  r  r!  r%  r   r   r   r  rr  r  r  r  r  r  r   r    r   r   r     s        TTTT I) ) ) )
3 3 3 3 3N 3 3 3   % % [% $ $ $ \$L > > > [>g g g&P P P P6 6 6 ah ah ah ahF    6J J J"  
N N N5 5 5    r    r   r   )rA   );rT   r   r  r#  r   operatorr2  utilsr   r   r   r   r   r	   r
   r   r!   r)   r-   r/   r1   r5   r:   r@   r   r   rj   or_xorand_is_is_noteqnelegeltgtrshiftlshiftr  submulr  r  r4  r   zipr   r   r  r   r   r   r   ChainMapr   r   r   r   r    r   <module>r     s                  					 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	    / / /      	 	 	   3F 3FU 3F3 3F 3F 3F 3Fn$ 	$ 	$	 HL	!	! HL	!	! HM	"	" 
8< 
8? 	))HK
 
  	))HK
 
  	++hk
"
"  	++hk
"
"!" X[	!	!#$ X[	!	!%( 	**X_
%
%)* 	**X_
%
%+. 
hl	#	#	hl	#	#	hl	#	#		
;  
@ CBB4SStT$???MMMNN 
< 	 	 	 	 	 	 	 	7 7 7 7 7~ 7 7 7
: : : : :. : : :
A A A A A~ A A A    [)   (# # # # # # # #:x
 x
 x
 x
 x
 x
 x
 x
 x
 x
r    