+
    Ni0              
       f  a  R6 t50 t R t^ RIt^ RIt^ RIt^ RIHtHtHtH	t	H
t
HtHtHtHt ^ RIHt ^ RIHt ^ RIHt RR.tRt]P.                  ! ]4      tR	 R
 lt]! ]]4       R R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R lt"]PF                  ! R4      t$Rt%Rt&]]
].]3,          t']PF                  ! R]% R]& R 24      ]3]PF                  ! R]% R!]& R 24      ]3]PF                  ! R"]PP                  4      ]PR                  ! ]R#R$7      3]PF                  ! R%]PP                  4      ]PR                  ! ]R&R$7      3]PF                  ! R']PP                  4      ]PR                  ! ]R(R$7      3]$] 3.t*] ^ k . R7Ot+R)t,R*t-R+t.],]-]..t/R, R- lt0R. R/ lt1R0 R1 lt2R2 R3 lt3R4 R5 lt4R# )8z
Python parser for gdb's machine interface interpreter.

Parses string output from gdb with the `--interpreter=mi2` flag into
structured objects.

See more at https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI.html#GDB_002fMI
N)	AnyCallableDictListMatchOptionalPatternTupleUnionunescape)	fmt_green)StringStreamparse_responseresponse_is_finishedFc                H    V ^8  d   QhR\         P                  R\        RR/# )   loggerdebugreturnN)loggingLoggerbool)formats   ":/tmp/pip-target-e6j6ikcs/lib/python/pygdbmi/gdbmiparser.py__annotate__r      s%      '..  $     c                    R V n         \        P                  ! 4       pVP                  \        P                  ! R4      4       V'       d   \        P
                  pM\        P                  pV P                  V4       V P                  V4       R# )Fz9[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)sN)		propagater   StreamHandlersetFormatter	FormatterDEBUGERRORsetLevel
addHandler)r   r   handlerlevels   &&  r   _setup_loggerr(      sf    F##%GUV 
OOE
gr   c                0    V ^8  d   QhR\         R\        /# r   gdb_mi_textr   )strr   )r   s   "r   r   r   1   s        r   c                    \        V \        R7      p\         F$  w  r#VP                  V 4      pVf   K  V! WA4      u # 	  RRRRRV /# )a8  Parse gdb mi text and turn it into a dictionary.

See https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Stream-Records.html#GDB_002fMI-Stream-Records
for details on types of gdb mi output.

Args:
    gdb_mi_text: String output from gdb

Returns:
    dictionary with keys "type", "message", "payload", "token"
)r   Ntypeoutputmessagepayload)r   _DEBUG_GDB_MI_PATTERNS_AND_PARSERSmatch)r+   streampatternparserr4   s   &    r   r   r   1   sV     +V4F7k*%(( 8 	4; r   c                0    V ^8  d   QhR\         R\        /# r*   )r,   r   )r   s   "r   r   r   M   s     	G 	Gc 	Gd 	Gr   c                0    \         P                  V 4      RJ# )zReturn true if the gdb mi response is ending

Args:
    gdb_mi_text: String output from gdb

Returns:
    True if gdb response is finished
N)_GDB_MI_RESPONSE_FINISHED_REr4   )r+   s   &r   r   r   M   s     (--k:$FFr   c                <    V ^8  d   QhR\         R\        R\        /# r   r4   r5   r   r   r   r   )r   s   "r   r   r   ^   s!      E < D r   c           
         V R,          p\         P                  R4       \         P                  R\        V4      4       RRRVP                  4       R\	        W4      R\        V 4      /# )zcParser function for matches against a notify record.

See _GDB_MI_PATTERNS_AND_PARSERS for details.r0   zparsed message%sr.   notifyr1   token)r   r   r   strip_extract_payload_extract_token)r4   r5   r0   s   && r   _parse_mi_notifyrE   ^   s_     IG
LL!"
LLy)* 	7==?#E2&	 r   c                <    V ^8  d   QhR\         R\        R\        /# r<   r=   )r   s   "r   r   r   n   s!     	 	E 	< 	D 	r   c           
     H    RRRV R,          R\        W4      R\        V 4      /# )zcParser function for matches against a result record.

See _GDB_MI_PATTERNS_AND_PARSERS for details.r.   resultr0   r1   rA   )rC   rD   r4   r5   s   &&r   _parse_mi_resultrJ   n   s2    
 	5##E2&	 r   c                H    V ^8  d   QhR\         R\        R\        R\        /# )r   r4   r5   output_typer   )r   r   r,   r   )r   s   "r   r   r   z   s(     
 
E 
< 
c 
d 
r   c           	     2    RVRRR\        V R,          4      /# )zParser function for matches against a console, log or target record.

The record type must be specified in output_type.

See _GDB_MI_PATTERNS_AND_PARSERS for details.r.   r0   Nr1   r   )r4   r5   rL   s   &&&r   _parse_mi_outputrN   z   s'     	48E),- r   c                <    V ^8  d   QhR\         R\        R\        /# r<   r=   )r   s   "r   r   r      s!      e \ d r   c                    RRRRRR/# )zeParser function for matches against a finished record.

See _GDB_MI_PATTERNS_AND_PARSERS for details.r.   doner0   Nr1    rI   s   &&r   _parse_mi_finishedrS      s    
 	44 r   c                F    V ^8  d   QhR\         R\        \        ,          /# )r   r4   r   )r   r   int)r   s   "r   r   r      s     5 5% 5HSM 5r   c                6    V R,          pVe   \        V4      # R# )zaExtract a token from a match against a regular expression which included
_GDB_MI_COMPONENT_TOKEN.rA   N)rU   )r4   rA   s   & r   rD   rD      s!     'NE*3u:44r   c                R    V ^8  d   QhR\         R\        R\        \        ,          /# r<   )r   r   r   r   )r   s   "r   r   r      s%      E < HTN r   c                V    V R,          f   R# VP                  R.4       \        V4      # )zcExtract a token from a match against a regular expression which included
_GDB_MI_COMPONENT_PAYLOAD.r1   N,)advance_past_chars_parse_dictrI   s   &&r   rC   rC      s-     Y
se$vr   z^\(gdb\)\s*$z(?P<token>\d+)?z(?P<payload>,.*)?^z\^(?P<message>\S+?)$z[*=](?P<message>\S+?)z~"(?P<payload>.*)"console)rL   z&"(?P<payload>.*)"logz@"(?P<payload>.*)"target{["c                0    V ^8  d   QhR\         R\        /# r   r5   r   )r   r   )r   s   "r   r   r      s     7 7 7 7r   c                   / p\         P                  R\        R4      4        V P                  ^4      pV\        9   d   K  VR9   d   K(  VR9   d   MV P                  R	4       \        V 4      w  r4W19   dB   \        W,          \        4      '       d   W,          P                  V4       MW,          V.W&   MWAV&   RpV P                  ^4      pV'       d;   VR
9   d   RpK  \         P                  RV,           4       V P                  ^4      pKB  V P                  R	4       EK  \         P                  R4       \         P                  R\        V4      4       V# )zParse dictionary, with optional starting character '{'
return (tuple):
    Number of characters parsed from to_parse
    Parsed dictionary
r?   zparsing dictTFzskipping unexpected charcter: zparsed dict)ra   rY   )} )rg   rY   rh   )
r   r   r   read_WHITESPACEseek_parse_key_val
isinstancelistappend)r5   objckeyvallook_ahead_for_garbages   &     r   r[   r[      s    .0C
LLy01
KKN*_)^ KKO%f-HCz ch--HOOC( ##CHC%)"AA(&-2*
 LL!AA!EFAAKKO
LL
LLy~&Jr   c          	      ~    V ^8  d   QhR\         R\        \        \        \        \        \
        3,          3,          /# re   )r   r	   r,   r
   r   r   )r   s   "r   r   r   4  s/      < E#uS$_7M2M,N r   c                   \         P                  R4       \        V 4      p\        V 4      p\         P                  R4       \         P                  R\	        V4      4       \         P                  R\	        V4      4       W3# )zxParse key, value combination
return (tuple):
    Parsed key (string)
    Parsed value (either a string, array, or dict)
zparsing key/valzparsed key/valr?   )r   r   
_parse_key
_parse_valr   )r5   rs   rt   s   &  r   rm   rm   4  s]     LL"#
V
C
V
C
LL!"
LLy~&
LLy~&8Or   c                0    V ^8  d   QhR\         R\        /# re   )r   r,   )r   s   "r   r   r   F  s      |  r   c                    \         P                  R4       V P                  R.4      p\         P                  R4       \         P                  R\        V4      4       V# )z?Parse key, value combination
returns :
    Parsed key (string)
zparsing key=zparsed key:r?   )r   r   rZ   r   )r5   rs   s   & r   rx   rx   F  sE    
 LL

#
#SE
*C
LL
LLy~&Jr   c                \    V ^8  d   QhR\         R\        \        \        \        3,          /# re   )r   r
   r,   r   r   )r   s   "r   r   r   T  s%     & &| &c4o(> &r   c                   \         P                  R4        V P                  ^4      pVR8X  d   \        V 4      pMrVR8X  d   \	        V 4      pM_VR8X  d   V P                  4       pMG\        '       d   \        RV,          4      h\         P                  RV R\        V4       R24       R	pK  \         P                  R
4       \         P                  R\        V4      4       V# )zTParse value from string
returns:
    Parsed value (either a string, array, or dict)
zparsing valuera   rb   rc   zunexpected character: %szunexpected character: "z" (z). Continuing.rh   zparsed value:r?   )r   r   rj   r[   _parse_array$advance_past_string_with_gdb_escapesr2   
ValueErrorwarnordr   )r5   rr   rt   s   &  r   ry   ry   T  s     LL! KKN8f%C#Xv&C#X==?CV7!;<< KK1!CAx~NOC
LL!
LLy~&Jr   c                0    V ^8  d   QhR\         R\        /# re   )r   ro   )r   s   "r   r   r   }  s       $ r   c                t   \         P                  R4       . p V P                  ^4      pV\        9   d0   V P	                  R4       \        V 4      pVP                  V4       KL  V\        9   d   KY  VR8X  d   Kb  VR8X  g   Kk   \         P                  R4       \         P                  R\        T4      4       T# )zPParse an array, stream should be passed the initial [
returns:
    Parsed array
zparsing arrayrY   ]zparsed array:r?   ri   )	r   r   rj   _GDB_MI_VALUE_START_CHARSrl   ry   rp   rk   r   )r5   arrrr   rt   s   &   r   r   r   }  s     LL!
C
KKN))KKOV$CJJsO+#X#X 
LL!
LLy~&Jr   c                x    V ^8  d   Qh/ ^ \         9   d&   \        \        \        \        3,          ,          ;R&   # )r   r3   )__conditional_annotations__r   r	   r   _PARSER_FUNCTION)r   s   "r   r   r      s4      p2 2d52B)B#CD 2qr   ) 	
)6r   __doc__	functoolsr   retypingr   r   r   r   r   r   r   r	   r
   pygdbmi.gdbescapesr   pygdbmi.printcolorr   pygdbmi.StringStreamr   __all__r2   	getLogger__name__r   r(   r   r   rE   rJ   rN   rS   rD   rC   compiler:   _GDB_MI_COMPONENT_TOKEN_GDB_MI_COMPONENT_PAYLOADr   DOTALLpartialr3   rk   _GDB_MI_CHAR_DICT_START_GDB_MI_CHAR_ARRAY_START_GDB_MI_CHAR_STRING_STARTr   r[   rm   rx   ry   r   r   )r   s   @r   <module>r      s     	 T T T ' ( -  
			8	$  ff 8	G" 	
5  "zz/:  - 0  UL1478 $ 	

())<=V<WWXY	
 		 	

())>?X>YYZ[	
 		 	

("))4*	B 	

("))4*> 	

("))4*A
 	%]2H  2j &    7t$&Rr   