
    xh                     "   S SK r SSKJr  \ R                  " S5      r\ R                  " S5      r\ R                  " S5      r\ R                  " S5      r\ R                  " S5      r\ R                  " S	5      r	S
SSSS.r
SS jrS rSS jrSS jrg)    N   ) get_behavior_family_for_platformz^@?(.*?)@[0-9]+$z::h[a-z0-9]{16}$z(\bconst\b|&)$z^([A-Z] as )z(?x)
    # gcc
    (?:
        \{
            lambda\(.*?\)\#\d+
        \}
    ) |
    # msvc
    (?:
        \blambda_[a-f0-9]{32}\b
    ) |
    # clang
    (?:
        \$_\d+\b
    )
    z (?x)
    \?A0x[a-f0-9]{8}::
    )}]>)({[<c                 r   X;  a  U $ Sn/ nS n[        U 5       H  u  pxX:X  a  US:X  a  UnUS-  nM  X:X  aT  US-  nUS:X  aG  UbB  [        U5      (       a  UR                  U" XS-   U U5      5        M[  UR                  U5        Mn  Mp  Mr  US:X  d  Mz  UR                  U5        M     SR                  U5      $ )Nr   r    )	enumeratecallableappendjoin)	sstartendreplacementdepthrv
pair_startidxchars	            %/code/sentry/stacktraces/functions.pyreplace_enclosed_stringr   $   s    ~E	BJq\	=z 
QJE[QJEz*,,		+aQ.Ez"RS		+.	 +  aZIIdO "  772;    c                 2   / n/ n/ nSn[        U 5       H  u  pVU[        ;   a  UR                  [        U   5        M)  U(       a>  XcS   :X  a6  UR                  5         U(       d  UR                  XUS-    5        US-   nMl  Mn  U(       a  Mw  UR	                  5       (       a  U(       a  UR                  U5        / nOUR                  XUS-    5        US-   nM     U(       a  UR                  U5        U Vs/ s H  nSR                  U5      PM     sn$ s  snf )Nr   r   r   )r   PAIRSr   popisspacer   )r   bufr   stackr   r   r   xs           r   split_func_tokensr'   ?   s    
C	BE
Cq\	5=LLt%tRy(IIK

137+,Ag  ||~~IIcN

137+,'C "" 
		# "#1BGGAJ###s   6Dc                 D  ^ [        U5      S:w  a  U $ U S;   a  U $ U nU R                  5       n U R                  S5      (       a  U $  [        R	                  U 5      nUc  O#U SUR                  5        R                  5       n M<  U R                  SS5      R                  SS5      R                  S	S
5      R                  SS5      R                  SS5      n U(       a  [        R                  SU 5      n U(       a  [        R                  SU 5      n S n[        U SSU5      n U4S jm[        U SST5      n [        U 5      n[        U5      S:  a&  US   S:X  a  UR                  5         US==   S-  ss'    XfR                  S5      S-
     nU(       aC  UR                  SS5      R                  SS5      R                  SS5      R                  SS5      n OUn ["        R                  SU 5      n [$        R                  S U 5      $ ! [          a    U(       a  US   n NSn Nf = f)!zGiven a function value from the frame's function attribute this returns
a trimmed version that can be stored in `function_name`.  This is only used
if the client did not supply a value itself already.
native)z
<redacted>z	<unknown>)r   z+[z-[Nz
operator<<u   operator⟨⟨z	operator<u   operator⟨z
operator()u   operator◯z -> u    ⟿ z`anonymous namespace'u   〔anonymousnamespace〕lambdau   〔anonymousnamespace〕::c                 :    U R                  5       n U S;   a  SU -  $ g)N)zanonymous namespaceoperatorz(%s)r   )strip)valuer   s     r   process_args(trim_function_name.<locals>.process_args   s#    77E>!r   r	   r   c                    > U S:X  d  [         R                  U 5      (       a  SU -  $ US:  a  g[        R                  SU 5      n [	        U SST5      n U R                  SS	5      S   $ )
Nr*   z<%s>r   <T>r   r   r   z as r   )
_lambda_rematch_rust_blanket_resubr   split)r.   r   process_genericss     r   r8   ,trim_function_name.<locals>.process_generics   sj    H
 0 0 7 7E>!19 !$$R/'sC9IJ{{61%a((r   r   r   r   r    r2   z <T>u   ⟿u   ⟨u   ◯z()r   z\1)r   r-   
startswith_cpp_trailer_researchr   rstripreplacer3   r6   _anon_namespace_rer   r'   lenr"   index
ValueError
_rust_hash_windecl_hash)	functionplatformnormalize_lambdasoriginal_functionr4   r/   tokens
func_tokenr8   s	           @r   trim_function_namerK   \   s   
 (1X=.. ~~H ,-- &&x0=Oekkm,335	  	'78	m	,	}	-		!	(*D	E  >>(H5 %))*FQ 'xc<HH) 'xc;KLHx(F
 6{Q6":.

r
f
LL/!34
 uc*WUD!WWf%W/1HI	 	 % ~~b(+H UH---  JJ	s   4H HHHc                 
   [        U S5      (       a  U R                  5       n U R                  S5      (       a  U R                  S5      $ U R                  S5      nU(       a#  [        X R                  S5      =(       d    U5      $ g)zRGiven a frame object or dictionary this returns the actual function
name trimmed.
get_raw_dataraw_functionrE   rF   N)hasattrrM   getrK   )framerF   r   s      r   get_function_name_for_framerR      sp     un%%""$ yy  yy$$ 
:	B	!"ii
&;&GxHH 
r   )N)T)rerF   r   compilerD   rC   r;   r5   r3   r?   r!   r   r'   rK   rR    r   r   <module>rV      s    	 6

./ZZ+,
**./::o. ZZ
$ ZZ  #C06$:w.tIr   