
    UHjg#                        d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	  ee
      j                         j                  d   Zedz  ZdZd	Zdd
Z	 	 	 	 	 	 	 	 ddZddZddZefddZddZedk(  r e        yy)zLSummarize whether opcode 0x24 context+0x58 state promotes the current route.    )annotationsN)Path)Any   outmap1_01amap2_02dc                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     H/home/exedev/hwanse/tools/summarize_save_selector_context58_consumers.py	load_jsonr      s*    ;;=::dnngn677    c                   | j                  d      xs i j                  d      xs i }| j                  d      xs i j                  d      xs g }| j                  d      xs g D cg c]  }|j                  d      dk(  r| }}|j                  d      xs i }|j                  d      xs i }|j                  d      xs g D cg c]  }d	|j                  d
      xs dv r| }	}t        |j                  d      xs d      }
t        d |D              }d}i dt        dt        ddd|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d
      d|d t        |      d!|d"|d#t        |	      d$|	d%|
d&k(  r|sd'nd(d)g d*|d+S c c}w c c}w ),NoffsetSummary0x58fieldRefsByOffsetrouteRelevantRefs	offsetHexcurrentBoundarycurrentModegeneralHandlerRowszcontext+0x58meaning streamPlus1Hexc              3  f   K   | ])  }d |j                  d      xs dj                         v  + yw)mode1	routeNoter!   N)getlower.0rows     r   	<genexpr>z build_summary.<locals>.<genexpr>*   s4      ) 	CGGK(.B5577)s   /1a  The current map1_01a->map2_02d opcode 0x24 boundary is mode 1, which writes object+0x61 from 0x0059e348 and advances by +4. The static object-field scan finds context/object+0x58 references, but the route-relevant opcode 0x24 context+0x58 reference is mode 0 only. The known nested opcode 0x20 handler that stores context+0x58 is a generic saved-pointer-table helper, not a direct leaf-table, frontier-reader, or map transition selector. This closes context+0x58 as standalone promotion evidence for the current route.sourcetarget	objectivezIclassify opcode 0x24 context+0x58 consumers for the current route blockercontext58RefCounttotalcontext58ReadCountreadscontext58WriteCountwritescurrentOpcode24VaHexopcodeVaHexcurrentOpcode24ValueHexopcodeValueHexcurrentOpcode24ModeHexcurrentOpcode24ModeMeaning#currentOpcode24ModeTouchesContext58opcode24Mode0Context58RefCountopcode24Mode0Context58Refscontext58Refsopcode20Context58HandlerCountopcode20Context58Handlerscontext58PromotionStatus0x01z!blocked-not-current-opcode24-pathinspectblocked)zDruntime producer proof for 0x0059e348 or selected pointer 0x0059de30z,strict map1_01a source coordinate or hotspotz;selector merge/control-flow proof that reaches selector 2:0)promotionStatusnextEvidenceNeeded
conclusion)r&   stranyROUTE_SOURCEROUTE_TARGETlen)object_field_refsopcode24_handleropcode20_nested_base_modesoffset_summarycontext58_refsr*   route_relevantcurrent_boundarycurrent_modecontext58_handlerscurrent_mode_textcurrent_mode_touches_context58rG   s                r   build_summaryrX      s   
 (++O<BGGOUSUN'++,?@FBKKFSYWYN(,,-@AGR77;6) 	N  (++,=>D"#''6<"L1556JKQrcggi06B7 	  ,001ABHbI%( )!) &"
	O ,, 	` 	^//8	
 	n009 	~11(; 	 0 4 4] C 	"#3#7#78H#I 	!"2"6"67G"H 	%l&6&6y&A 	./M 	)#n*= 	%n 	 	(-?)@  	$%7!" 	#&/M %H'( %

 !5 /s   (G% G*c                `   ddd| d    d| d    dd| j                  d	       d
| j                  d       d| j                  d       dd| j                  d       d| j                  d       dd| j                  d       dd| j                  d       d| j                  d       d| j                  d       dd| j                  d      xs ddddddg}| j                  d      xs g D ]`  }|j                  d |j                  d!       d"|j                  d#       d$|j                  d%       d"|j                  d&      xs d' d(	       b | j                  d      s|j                  d)       |j                  g d*       | j                  d+      xs g D ]N  }|j                  d |j                  d,       d-|j                  d.       d"|j                  d/      xs d' d(       P | j                  d+      s|j                  d0       |j                  d       d1j                  |      S )2Nz&# Save Selector Context+0x58 Consumersr!   z
- route: `r,   z -> r-   `z- context+0x58 refs: r/    (reads=r1   	, writes=r3   )z- current opcode 0x24: `r5   z	` value `r7   z- current opcode 0x24 mode: `r9   z%- current mode touches context+0x58: r;   z'- opcode20 context+0x58 handler count: r?   z- promotion status: `rE   rG   z### Route-Relevant Context+0x58 Refsz| va | access | raw | note |z| --- | --- | --- | --- |r=   z| `vaHexz` | accessz | `rawHexr%   -z |z| - | - | - | - |)r!   z!## Opcode20 Context+0x58 Handlersr!   z| opcode | handler | meaning |z| --- | --- | --- |r@   	opcodeHexz` | `handlerVaHexr    z| - | - | - |
)r&   appendextendjoin)summarylinesr*   s      r   markdownrj   T   sa   0

WX&'tGH,=+>a@
,? @A B++234IgkkJ_>`=aab	d
"7;;/E#F"GyQXQ\Q\]vQwPxxyz
'4L(M'NaP
/<a0b/cd
1'++>]2^1_`
,= >?qA
L!'R
-
&##E& {{78>B 
#'''"#4(9':$swwx?P>QQUVYV]V]^iVjVqnqUrrtu	

 ;;34()	LL   {{67=2 
#''+&'uSWW^-D,ET#''R[J\Jc`cIddfg	

 ;;23_%	LL99Ur   c                   dj                  d | j                  d      xs g D              }dj                  d | j                  d      xs g D              }dj                  dddd	t        j                  | d
          dt        j                  | d          ddd| j                  d       d| j                  d       d| j                  d       ddt        j                  t	        | j                  d                   dt        j                  t	        | j                  d                   ddt        j                  t	        | j                  d                   dd| j                  d       dd | j                  d!       dd"t        j                  t	        | j                  d#                   dd$d%t        j                  t	        | j                  d&      xs d'             d(d)d*|xs d+d,d-d.|xs d/d,g      S )0Nrd   c              3    K   | ]  }d t        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d      xs d             d	  y	w)
<tr><td><code>r^   </code></td><td>r_   z</td><td><code>r`   r%   ra   
</td></tr>NhtmlescaperH   r&   r(   s     r   r+   zhtml_page.<locals>.<genexpr>   s       	[[SWWW%5!678 9{{3swwx0123 4[[SWWX%6!789 :{{3sww{3:s;<= >		s   C	Cr=   c              3  >  K   | ]  }d t        j                  t        |j                  d                   dt        j                  t        |j                  d                   dt        j                  t        |j                  d      xs d             d  yw)	rm   rb   z</code></td><td><code>rc   rn   r    ra   ro   Nrp   r(   s     r   r+   zhtml_page.<locals>.<genexpr>   s       	[[SWW[%9!:;< =[[SWW^%<!=>? @{{3swwy18S9:; <	s   BBr@   zX<!doctype html><meta charset="utf-8"><title>Save Selector Context+0x58 Consumers</title>z<style>body{font-family:system-ui,sans-serif;background:#111;color:#eee;max-width:1100px;margin:24px auto}table{border-collapse:collapse}td,th{border:1px solid #444;padding:6px 8px;vertical-align:top}code{color:#9bd4ff}</style>z-<h1>Save Selector Context+0x58 Consumers</h1>z<p>route: <code>r,   z -&gt; r-   z</code></p>z<ul>z<li>context+0x58 refs: r/   r[   r1   r\   r3   z)</li>z<li>current opcode 0x24: <code>r5   z</code> value <code>r7   z</code></li>z$<li>current opcode 0x24 mode: <code>r9   z'<li>current mode touches context+0x58: r;   z</li>z)<li>opcode20 context+0x58 handler count: r?   z<li>promotion status: <code>rE   z</ul>z<p>rG   r!   z</p>z)<h2>Route-Relevant Context+0x58 Refs</h2>zY<table><thead><tr><th>va</th><th>access</th><th>raw</th><th>note</th></tr></thead><tbody>z1<tr><td>-</td><td>-</td><td>-</td><td>-</td></tr>z</tbody></table>z'<h2>Opcode20 Context+0x58 Handlers</h2>zU<table><thead><tr><th>opcode</th><th>handler</th><th>meaning</th></tr></thead><tbody>z'<tr><td>-</td><td>-</td><td>-</td></tr>)rg   r&   rq   rr   rH   )rh   
route_rowshandler_rowss      r   	html_pagerv      sZ     ;;;<B J 99  ;;:;Ar L 99d 	n7
4;;wx'89:'$++gV^N_B`Aaalm
!'++.A"B!C8GKKXlLmKnnwx  yD  yD  EZ  y[  x\  \b  	c
)$++c'++F\:]6^*_)``tuy  vA  vA  BE  FM  FQ  FQ  Rk  Fl  Bm  vn  uo  o{  	|
.t{{3w{{Kc?d;e/f.ggst
1'++>c2d1eejk
3GKK@_4`3aafg
&t{{3w{{CT7U3V'W&XXde
dkk#gkk,7=2>?@E3cII1_AA+  r   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       y )
NT)parentsexist_ok&save_selector_context58_consumers.jsonF   )ensure_asciiindentrd   r   r   )mkdir
write_textr   dumps)rh   out_dirs     r   write_outputsr      sD    MM$M.77CC

7q9D@ D r   c                 J   t        j                  t              } | j                  dt        t
               | j                         }|j                  }t        t        |dz  i       t        |dz  i       t        |dz  i             }t        ||       t        d|dz          y )	N)descriptionz	--out-dir)typedefaultz$save_selector_object_field_refs.jsonz#save_selector_opcode24_handler.jsonz-save_selector_opcode20_nested_base_modes.jsonz wrote context+0x58 consumers -> rz   )argparseArgumentParser__doc__add_argumentr   OUT
parse_argsr   rX   r   r   print)parserargsr   rh   s       r   mainr      s    $$9F
$<DllG'BBBG'AA2F'KKRPG
 '7#	,W7_-_,`
abr   __main__)r   r   r   r   returnr   )rM   dictrN   r   rO   r   r   r   )rh   r   r   rH   )rh   r   r   r   r   None)r   r   )r   
__future__r   r   rq   r   pathlibr   typingr   __file__resolverx   ROOTr   rJ   rK   r   rX   rj   rv   r   r   __name__ r   r   <module>r      s    R "      H~''*
Ul8999 !%9 
	9x(V(V 25 c zF r   