
    eCi4                        d dl Z d dlZd dlZd dlZd dlZd dlZej                            ej                            e	                    Z
ej                            e
          Zej                            d e           d dlmZmZmZmZ d dlmZ d dlmZ  ej                    Z ed          ZdZ eej                            d          pd          Z eej                            d	          pd
          Zej                             d          Z!ej                            d          Z" ej#        d          Z$ ej#        d          Z%d Z&d Z' G d d          Z(dZ)dZ*dZ+dZ, ej-                    d             Z. ej/        d          dd            Z0d Z1e2dk    r ej3         e1                       dS dS )    N)buildingconfigsharedutils)ToolchainProfiler)path_from_rootztools/acorn-optimizer.mjs   EMCC_JSOPT_MIN_CHUNK_SIZEi   EMCC_JSOPT_MAX_CHUNK_SIZEi  P win
EMCC_DEBUGzfunction ([_\w$]+)\(z\["defun", ?"([_\w$]+)",c                      t           j        } t          d | D                       s|                     d           | t          gz   S )Nc              3      K   | ]}d |v V  	dS )z--stack-sizeN ).0args     6/b/s/w/ir/x/w/install/emscripten/tools/js_optimizer.py	<genexpr>z get_acorn_cmd.<locals>.<genexpr>)   s'      33s^s"333333    z--stack-size=8192)r   NODE_JSanyappendACORN_OPTIMIZER)nodes    r   get_acorn_cmdr   '   sK    	$	33d333	3	3 % 	KK#$$$	!	!!r   c                     d |                      d          dd          D             }g }|D ]O}t                              |          }|s|                    d          }|sJ |                    ||f           P|S )Nc                     g | ]}d |z   S )	function r   )r   parts     r   
<listcomp>zsplit_funcs.<locals>.<listcomp>5   s    
D
D
D$;
D
D
Dr   r      )splitfunc_sigsearchgroupr   )jspartsfuncsfuncmidents         r   split_funcsr,   0   s    
 E
D"((;*?*?*C
D
D
D%
%    dA GGAJJELL5	LL%	,r   c                   $    e Zd ZdZd Zd Zd ZdS )Minifierzminification support. We calculate minification of
  globals here, then pass that into the parallel acorn-optimizer.mjs runners which
  perform minification of locals.
  c                 0    || _         d | _        d| _        d S )NF)r&   symbols_fileprofiling_funcs)selfr&   s     r   __init__zMinifier.__init__G   s    DGD Dr   c           	      8   |                     dd          }| j        sud t                              | j                  D             | _        t          | j                  dk    r.d t                              | j                  D             | _        ng | _        t          	                    d          5 }t          |d          5 }|                    |           |                    d           |                    d	t          j        |                                           z              d d d            n# 1 swxY w Y   t                      |d
gz   }|r|                    d           t#          j        |t&          j                  j        }d d d            n# 1 swxY w Y   t          |          r|                    d          rJ d|z               |                    d	          \  }}t          j        |          | _        | j        rtd                    d | j                                        D                       }	t#          j        | j        |	dz              t;          d| j        t<          j                   |                     dd          S )Nz0.013371337c                 8    g | ]}|                     d           S r!   r%   r   r*   s     r   r    z)Minifier.minify_shell.<locals>.<listcomp>W   s"    CCC1AGGAJJCCCr   r   c                 8    g | ]}|                     d           S r7   r8   r9   s     r   r    z)Minifier.minify_shell.<locals>.<listcomp>Y   s"    JJJQaggajjJJJr   z.minifyglobals.jsw
// EXTRA_INFO:minifyGlobals--minify-whitespace)stdoutzAssertion failedzError in js optimizer: c              3   *   K   | ]\  }}| d | V  dS ):Nr   )r   keyvalues      r   r   z(Minifier.minify_shell.<locals>.<genexpr>m   s4      PPzsEU**S**PPPPPPr   zwrote symbol map file tofile) replacer1   r#   finditerr&   globslenfunc_sig_json
temp_filesget_fileopenwritejsondumps	serializer   r   r   run_process
subprocessPIPEr@   
startswithr"   loadsr0   joinitems
write_fileprintsysstderr)
r2   shellminify_whitespace	temp_filefcmdoutputcodemetadatamappings
             r   minify_shellzMinifier.minify_shellL   s    MM%,,E  CC(9(9$'(B(BCCCdj	TZA		JJ-*@*@*I*IJJJ
dj			0	1	1 	EY	3 A1			 4:dnn.>.>#?#??@@@A A A A A A A A A A A A A A A
 OOy/::c	 *

())) Z_===Df	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E v;;hv001CDDhhF_bhFhhhD\\"233ND(H%%DJ L		PPTZ=M=M=O=OPPPPPgt('D.999&(9
KKKK<<
E***s8   4FA'D8,F8D<	<F?D<	 AFF"%F"c                     d| j         iS )Nglobals)rI   )r2   s    r   rR   zMinifier.serializes   s     r   N)__name__
__module____qualname____doc__r3   rg   rR   r   r   r   r.   r.   A   sL         
! ! !
%+ %+ %+N    r   r.   z// EMSCRIPTEN_START_FUNCS
z// EMSCRIPTEN_END_FUNCS
// EMSCRIPTEN_START_ASM
// EMSCRIPTEN_END_ASM
c                    g }g }d}| D ]U}t          |d                   }||z   |k     r|                    |           ||z  };|                    |           |g}|}V|r|                    |           d }d |D             S )Nr   r!   c                 L    g | ]!}d                      d |D                       "S ) c              3   &   K   | ]}|d          V  dS )r!   Nr   )r   r)   s     r   r   z&chunkify.<locals>.<listcomp>.<genexpr>   s&      ,,d$q',,,,,,r   )rX   r   chunks     r   r    zchunkify.<locals>.<listcomp>   s3    	A	A	A"'',,e,,,
,
,	A	A	Ar   )rJ   r   )r(   
chunk_sizechunkscurr
total_sizer)   	curr_sizes          r   chunkifyr{      s    &	$*  dDGII
**
kk$IjjmmDVdjj	 
MM$D	A	A&	A	A	AAr   zjs_optimizer.run_on_filec                   ./0123 t          j        d          5  t          t                    sgt	          j        |           }t          j        dk    r |                    t          j        d          }|	                    t                    }|                    t                    }|dk     s||k     rt	          j        d|d|           dv }|rPd D             |	                    t                    }|                    t                    }|dk    |dk    k    sJ dv }	|	rd	 D             d
v }
|
rd D             d d d            n# 1 swxY w Y   |st          j        d          5  |d |t!          t                    z            }||t!          t                    z   d          }||t!          t                    z   |         }g //fd1d                    1fd|                    d          D                       }d                    /          dz   |z   }t          |z   }d d d            n# 1 swxY w Y   nt          j        d          5  |d |t!          t                    z            }||d          }||t!          t                    z   |t!          t                    z            dz   ||t!          t                    z   |t!          t                    z            z   }||t!          t                    z   |         }t'          |          00fd..fdD             0                    |dv                               d          \  }}|                    dd          }||dz   t          z   z  }t          |z   |z   }0                                }|rB|                                D ]-\  }}||vs|||         k    sJ ||||         g            |||<   .d d d            n# 1 swxY w Y   t          j        d          5  t!          |          }t/          |          }d }d d d            n# 1 swxY w Y   t          j        d          5  t1          t	          j                    t4          z            }t7          t8          t;          t<          ||z                      }t?          ||          }d |D             }t@          rgd |D             }|sdg}tC          dt!          |          dt!          |          dt;          |          dt7          |          tD          j#        	  	         d }d 2|r|rJ 2d!tI          j%        |          z   z  2n|r2d!tI          j%        |          z   z  2t          j        d"          5  2fd#33fd$tM          |          D             }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d%          5  fd&|D             }tO          j(        |d'(          }d d d            n# 1 swxY w Y   t          j        d)          5  |	s|
rzd*}d+}d,}tR          *                    d-          5 }|                    |          \  }}|                    |          \  }} tW          |d.          5 }!|!,                    |           |!,                    |           |!,                    |            d d d            n# 1 swxY w Y   |}"|	rUt@          rtC          d/tD          j#                   t[          j.        |"dv0          }"tR          /                    |"           no|
rmt@          rtC          d1tD          j#                   d2g}#dv r|#0                    d           t[          j1        |"|#          }"tR          /                    |"           t	          j        |"          }$d d d            n# 1 swxY w Y   |$                    d3|          }$d4}%|$	                    |%          }&|$	                    d5|&          }'d6}(d7})|	                    d8          d9z   }*d:}+||*|*t!          |)          z            |)k    r|	                    d8|*          d9z   }*d;}+|$d |&         d<z   |+r|(nd z   d=z   ||*d          z   }||z   |$|'d9z   d          z   }d d d            n# 1 swxY w Y   | d>z  } tR          /                    |            tW          | d.          5 }!t          j        d?          5  |!,                    |           d }d d d            n# 1 swxY w Y   t          j        d@          5  dA |D             },dB |,D             }d },t          j2        3                    dC          s|4                    dD d;E           |D ]}-|!,                    |-d9                    d }d d d            n# 1 swxY w Y   t          j        dF          5  |!,                    d           |!,                    |           |!,                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | S )GNzjs_optimizer.split_markersr<   r   zGinvalid input file. Did not contain appropriate markers. (start_funcs: z, end_funcs: minifyNamesc                 "    g | ]}|d k    r|ndS )r}   minifyLocalsr   r   ps     r   r    zrun_on_file.<locals>.<listcomp>   s&    LLLQ-''^LLLr   closurec                     g | ]
}|d k    |S )r   r   r   s     r   r    zrun_on_file.<locals>.<listcomp>       444aQ)^^^^^r   cleanupc                     g | ]
}|d k    |S )r   r   r   s     r   r    zrun_on_file.<locals>.<listcomp>   r   r   zjs_optimizer.no_minify_globalsc                     | rA|                      d          s|                     d          r                    |            dS dS )N)zModule[zif (globalScope)z["X"]=1;FT)rV   endswithr   )linefinalss    r   processzrun_on_file.<locals>.process   sO     	T__%DEE 	WaIbIb 	
--


tr   c              3   2   K   | ]} |          |V  d S Nr   )r   r   r   s     r   r   zrun_on_file.<locals>.<genexpr>   s0      FFdFTFFFFFFr   zjs_optimizer.minify_globalsz
EMSCRIPTEN_FUNCS();
c                     |                      d          r#|                     dd          d         _        dS | dk    r	d_        dS dS )Nz
symbolMap==r!   FprofilingFuncsT)rV   r"   r0   r1   )r   minifiers    r   check_symbol_mappingz)run_on_file.<locals>.check_symbol_mapping   sS    <<%% 	"#''#q//!"4(
   %)(
"tr   c                 *    g | ]} |          |S r   r   )r   r   r   s     r   r    zrun_on_file.<locals>.<listcomp>   s*    ===a%9%9!%<%<====r   r?   zEMSCRIPTEN_FUNCS();z});z})zjs_optimizer.splitzjs_optimizer.split_to_chunksc                     g | ]}||S r   r   rt   s     r   r    zrun_on_file.<locals>.<listcomp>   s    11151e111r   c                 ,    g | ]}t          |          S r   rJ   )r   cs     r   r    zrun_on_file.<locals>.<listcomp>   s    (((AQ(((r   zchunkification: num funcs:zactual num chunks:zchunk size range:-rE   rr   r=   zjs_optimizer.write_chunksc                 |    t                               d|z            j        }t          j        || z              |S )Nz.jsfunc_%d.js)rL   getnamer   rZ   )ru   ir`   serialized_extra_infos      r   write_chunkz run_on_file.<locals>.write_chunk	  s;    NN?Q#677<	E,A$ABBBr   c                 .    g | ]\  }} ||          S r   r   )r   r   ru   r   s      r   r    zrun_on_file.<locals>.<listcomp>  s)    KKKXQ;;ua((KKKr   run_optimizerc                 :    g | ]}t                      |gz   z   S r   )r   )r   ra   passess     r   r    zrun_on_file.<locals>.<listcomp>  s)    BBB11#%.BBBr   zjs_opt.jo.js)!route_stdout_to_temp_files_suffixsplit_closure_cleanuprn   ro   zMwakaUnknownBefore(); var asm=wakaUnknownAfter(wakaGlobal,wakaEnv,wakaBuffer)
z.cl.jsr;   zrunning closure on shell code)prettyzrunning cleanup on shell codeJSDCEzwakaUnknownBefore();wakaUnknownAfter)z/** @suppress {uselessCode} */ uselessCode{r!   FT(zfunction(global,env,buffer) {
z.jo.js	write_presort_or_concatc                 P    g | ]#}t          t          j        |                    $S r   )r,   r   	read_file)r   out_files     r   r    zrun_on_file.<locals>.<listcomp>L  s*    RRRHU_X6677RRRr   c                     g | ]	}|D ]}|
S r   r   )r   sublistitems      r   r    zrun_on_file.<locals>.<listcomp>M  s%    ???w??tt????r   EMCC_NO_OPT_SORTc                 <    t          | d                   | d         fS )Nr!   r   r   )xs    r   <lambda>zrun_on_file.<locals>.<lambda>P  s    #ad))QqT!2 r   )rC   reverse
write_post)5r   profile_block
isinstancelistr   r   oslineseprG   findstart_funcs_markerrfindend_funcs_markerexit_with_errorstart_asm_markerend_asm_markerrJ   rX   r"   r.   rg   rR   rY   r,   roundget_num_coresNUM_CHUNKS_PER_COREminMAX_CHUNK_SIZEmaxMIN_CHUNK_SIZEr{   DEBUGr[   r\   r]   rP   rQ   	enumerater   run_multiple_processesrL   rM   rN   rO   r   closure_compilernoter   acorn_optimizerenvironr   sort)4filenamer   
extra_infor&   start_funcs	end_funcsminify_globals	start_asmend_asmr   r   prepost	asm_shellasm_shell_preasm_shell_postminify_inforC   rD   ry   r(   intended_num_chunksrv   rw   lengths	filenamescommandscl_sepclepre_1pre_2post_1post_2ra   cldacorn_passescoutputafterstartendUSELESS_CODE_COMMENTUSELESS_CODE_COMMENT_BODYbracehas_useless_code_commentfuncsesr)   r   r   r   r   r   r   s4    `                                            @@@@@@r   run_on_filer      sM   &'CDD 5 5fd## xf		"	"B	zT::bj$''b '',--K)**IQ)k11  {F  {F  {F  HQ  HQ  R  S  S  S"f,N 0LLVLLLf''*++i((g1n'Q,////6!G 5446444f6!G 5446444f95 5 5 5 5 5 5 5 5 5 5 5 5 5 5< 
 2#		()I	J	J % %5c"455556c	C 0111223dkC 2333I=>bf     99FFFFbhhtnnFFFFFbYYv%,d$d% % % % % % % % % % % % % % %" 
	()F	G	G  #  #1	C 011112c\dY%5!6!66{SI[E\E\7\\] a S)**	*7S5H5H+H	HIJi kC 2333I=>b "h     >===6===f&.&;&;IG\`fGf&g&g&m&m  oD  'E  'E#m^%--eT::n	]T!$666c.5d&&((k	 #$**,, 	# 	#JCK''5K4D+D+D+DsES^_bScFd+D+DD"+c

A #  #  #  #  #  #  #  #  #  #  #  #  #  #  #J &';<<  RJOOE	B              
 &'EFF L L   3 5 58K KLL^SFY9Y%Z%Z[[JeZ((F11111F `(((((g #(#e**6JCPVKKYlnqrynznz|  BE  FM  BN  BN  UX  U_  `  `  `  `E I^/$*[2I2III	 I/$*Z2H2HHH		()D	E	E L L     LKKK69J9JKKKiL L L L L L L L L L L L L L L-L L L L L L L L L L L L L L L: &77 j jBBBB	BBBH-hZhiiiIj j j j j j j j j j j j j j j &'>?? -2 -2 ,2' ,2-i)g_fx(( 'Cyy++uG,,#s^^ 	q
''%...
''&///
''&///	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	 D1
CCCC)#6KSY6YZZZ#
//#



 	 D1
CCCC!,"f,, 5666(l;;#
//#


/#&&+' ' ' ' ' ' ' ' ' ' ' ' ' ' '.  6	BBg ell5!!eLLe$$c ?"/jjoo!e!&	uUS!:;;;;	<@Y	Y	Y

3&&*#' FUFOc!=U%]%9%9[]^  bC  C  FK  LQ  LR  LR  FS  Scga 11d[-2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2^ h(//(Hc a		(	5	5  ggclllc               
	()9	:	: 
 
RR	RRRg??7???egZ^^.// B

22D
AAA  $	Qe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
	(	6	6  ggdmmmggdmmmggdmmm              #              , 
/sq  D1EE E:B>III%FPPP !QQQ,D3W#!W W#W	W#W	W##W'*W'%X33X7:X7&c8A_89A \9_8\		_8\	C_8,c8_<	<c?_<	 Ccc"%c"i2-ei2e	i2e	i20A4g0$i20g4	4i27g4	8i2A ii2i	i2"i	#i22i69i6c                  T   t           j        d         } d| v r3t          j        |           }t           j        d d         t           _        nd }t	          t           j        d         t           j        dd          |          }t          j        |t           j        d         dz              dS )Nr   r!      )r   z	.jsopt.jsr   )r\   argvrP   rW   r   shutilcopyfile)lastr   outs      r   mainr   ^  s    	"$D[[D!!Jx}CHHJCHQK!""*EEE#/#sx{[0111	
r   __main__r   )4rP   r   rer   rT   r\   pathdirnameabspath__file____scriptdir____rootdir__inserttoolsr   r   r   r   tools.toolchain_profilerr   tools.utilsr   get_temp_filesrL   r   r   intr   r   r   r   platformrV   WINDOWSr   compiler#   rK   r   r,   r.   r   r   r   r   profiler{   r   r   r   rj   exitr   r   r   <module>r     s    				 				      



 9 9::goom,, ;    1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6 & & & & & &"V"$$
 !.!<== RZ^^$?@@NJOORZ^^$?@@SOTT
,
!
!%
(
(

|$$2:-..
677" " "  "5 5 5 5 5 5 5 5p 3 . . *
 B B B( ! !;<<D D D =<DN	 	 	 z
#(4466 r   