+
    DfjG                        R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^ RI
Ht ^RIHt  ! R R4      t ! R R	]4      t ! R
 R]4      t ! R R]4      t ! R R4      t ! R R4      t]! 4       t]]]]]]]! R4      ]]! ]4      .	t ! R R4      t  ! R R4      t! ! R R4      t" ! R R4      t#R t$ ! R R]%4      t&]PN                  ! R4      t(R t)R t*R  t+R! t,R" t- ! R# R$4      t.R% t/R,R& lt0R' t1R( t2R) t3 ! R* R+4      t4R# )-z|
AOT: Abstract Object Trees
The source-code-marshallin'est abstract-object-serializin'est persister
this side of Marmalade!
N)crefutil)logreflect)_constructMethod)generate_tokensc                   &   a  ] tR t^!t o R tRtV tR# )Namedc                    Wn         R # Nname)selfr   s   &&7/usr/lib/python3/dist-packages/twisted/persisted/aot.py__init__Named.__init__"   s    	    r   N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell____classdict__s   @r   r   r   !   s      r   r   c                   &   a  ] tR t^&t o R tRtV tR# )Classc                (    R V P                   ,          # )z	Class(%r)r   r   s   &r   	getSourceClass.getSource'   s    TYY&&r    Nr   r   r   r   r   r   r   r   s   @r   r   r   &   s     ' 'r   r   c                   &   a  ] tR t^+t o R tRtV tR# )Functionc                (    R V P                   ,          # )zFunction(%r)r   r   s   &r   r   Function.getSource,   s    		))r   r    Nr!   r   s   @r   r#   r#   +   s     * *r   r#   c                   &   a  ] tR t^0t o R tRtV tR# )Modulec                (    R V P                   ,          # )z
Module(%r)r   r   s   &r   r   Module.getSource1   s    dii''r   r    Nr!   r   s   @r   r'   r'   0   s     ( (r   r'   c                   ,   a  ] tR t^5t o R tR tRtV tR# )InstanceMethodc                    \        V\        4      '       g?   \        V\        4      '       g)   \        V\        4      '       g   \	        R V,          4      hWn        W n        W0n        R# )z$%s isn't an Instance, Ref, or Deref!N)
isinstanceRefInstanceDeref	TypeErrorr   klassinstance)r   r   r2   insts   &&&&r   r   InstanceMethod.__init__6   sI    tS!!$))$&&BTIJJ	
r   c                v    R P                  V P                  V P                  \        V P                  4      4      # )z InstanceMethod({!r}, {!r}, 
 {}))formatr   r2   prettifyr3   r   s   &r   r   InstanceMethod.getSourceA   s/    3::IIJJT]]#
 	
r   )r3   r2   r   Nr   r   r   r   r   r   r   r   r   s   @r   r+   r+   5   s     	
 
r   r+   c                       ] tR t^ItRtR# )_NoStateObjr    N)r   r   r   r   r   r    r   r   r<   r<   I   s    r   r<   c                   2   a  ] tR t^\t o ]3R ltR tRtV tR# )r/   c                    \        V\        4      '       g   \        R V,          4      hWn        V\        Jd   W n        ^ V n        R# W0n        ^V n        R# )z%s isn't a string!N)r-   strr1   r2   
NoStateObjstatestateIsDict)r   	className__stateObj__rA   s   &&&,r   r   Instance.__init__]   sG    )S))09<==
z)%J DJ Dr   c                   V P                   '       d   V P                  pMc\        V P                  \        4      '       dB   \        V P                  P                  \
        4      '       d   V P                  P                  pMR pVe    RV P                  : R\        V4       R2# RV P                  : R\        V P                  4       R2#   \         d!    RT P                  : R\        T4       R2u # i ; i)Nz	Instance(, ))
rB   rA   r-   r.   objdictr2   dictToKWNonFormattableDictr8   )r   	stateDicts   & r   r   Instance.getSourceh   s    

I

C((Z

-M-M

II J"4::.8I3F2GqII 4::.8DJJ+?*@BB & J"4::.8I3F2GqIIJs   C (C76C7)r2   rA   rB   N)	r   r   r   r   r@   r   r   r   r   r   s   @r   r/   r/   \   s     /9 	!C Cr   r/   c                   8   a  ] tR t^xt o R tR tR tR tRtV t	R# )r.   c                    \        V4      ^8X  d   V^ ,          V n        V^,          V n        R# V'       g   RV n        RV n        R# R# )   N)lenrefnumrI   )r   argss   &*r   r   Ref.__init__y   s9    t9>q'DKAwDHDKDH r   c                l    V P                   '       d   \        R V RV P                    24      hWn         R# )zError setting id , I already have N)rS   
ValueErrorr   nums   &&r   setRef
Ref.setRef   s.    ;;;05Ft{{mTUUr   c                l    V P                   '       d   \        R V RV P                    24      hWn         R# )zError setting obj rW   N)rI   rX   )r   rI   s   &&r   setObj
Ref.setObj   s.    8881#6GzRSSr   c                    V P                   f   \        R4      hV P                  '       d)   RV P                  \        V P                   4      3,          # \        V P                   4      # )Nz7Don't try to display me before setting an object on me!zRef(%d, 
 %s))rI   RuntimeErrorrS   r8   r   s   &r   r   Ref.getSource   sS    88I  ;;;$Xdhh5G'HHH!!r   )rI   rS   N)
r   r   r   r   r   r[   r^   r   r   r   r   s   @r   r.   r.   x   s     

" "r   r.   c                   0   a  ] tR t^t o R tR t]tRtV tR# )r0   c                    Wn         R # r
   rS   rY   s   &&r   r   Deref.__init__   s    r   c                (    R V P                   ,          # )z	Deref(%d)re   r   s   &r   r   Deref.getSource   s    T[[((r   re   N)	r   r   r   r   r   r   __repr__r   r   r   s   @r   r0   r0      s     ) Hr   r0   c                   ,   a  ] tR t^t o R tR tRtV tR# )Copyregc                    Wn         W n        R # r
   loadfuncrA   )r   rn   rA   s   &&&r   r   Copyreg.__init__   s     
r   c                P    R V P                   : R\        V P                  4       R2# )zCopyreg(rG   rH   )rn   r8   rA   r   s   &r   r   Copyreg.getSource   s&    $--*"Xdjj-A,B!DDr   rm   Nr:   r   s   @r   rk   rk      s     E Er   rk   c                8    \        R\        V 4      ,           4      # )zDPass me an AO, I'll return a nicely-formatted source representation.zapp = )	indentifyr8   )aos   &r   r   r      s    X,--r   c                       ] tR t^tRtRtR# )rL   z!A dictionary was not formattable.r    N)r   r   r   r   __doc__r   r    r   r   rL   rL      s    +r   rL   z[a-zA-Z_][a-zA-Z0-9_]*$c           	      |   . p\        V P                  4       4      pVP                  4        V F{  w  r4\        V\        4      '       g   \        R V,          4      h\        P                  V4      '       g   \        RV,          4      hVP                  RV R\        V4       R24       K}  	  RP                  V4      # )z%r ain't a stringz%r ain't an identifier
 =, )listitemssortr-   r?   rL   rmatchappendr8   join)doutr}   kvs   &    r   rK   rK      s    
COE	JJL!S!!$%81%<==wwqzz$%=%ABB

T!Ahqk]!,-  773<r   c           	         \        V R 4      '       d   V P                  4       # \        V 4      pV\        9   d   \	        V 4      # V\
        J d   R.pV P                  4        F/  w  r4VP                  R\        V4       R\        V4       R24       K1  	  TP                  \        V 4      ;'       d    R;'       g    R4       RP                  V4      # V\        J dm   R.pV  F$  pVP                  R	\        V4      ,          4       K&  	  TP                  \        V 4      ;'       d    R
;'       g    R4       RP                  V4      # V\        J dm   R.pV  F$  pVP                  R	\        V4      ,          4       K&  	  TP                  \        V 4      ;'       d    R;'       g    R4       RP                  V4      # \        RV RV  R24      h)r   {rx   z: rz   z
 }}r{   [z
 %s,z
 ]](z
 )rH   zUnsupported type z when trying to prettify .)hasattrr   type_SIMPLE_BUILTINSreprrJ   r}   r   r8   rR   r   r|   tupler1   )rI   tr   r   r   xs   &     r   r8   r8      s}   sK  }} I  9$Y%C		

T(1+b!Q?@ $JJs3x++G22s3773<$Y%C

9x{23 JJs3x++G22s3773<%Z%C

9x{23 JJs3x++G22s3773</s2KC5PQRSSr   c                 V   . p. pR V .p\        VP                  4       Fx  w  ppw  rgw  rp
VR9   d   VP                  V4       MVR9   d   VP                  4        VR8X  d$   VP                  R\        V4      ,          4       Kg  VP                  V4       Kz  	  R P	                  V4      # )r{    z  )r   r   r   )r   rH   r   )tokenizepopr   rR   r   )sr   stackl	tokenTypetokenStringstartRowstartColumnendRow	endColumnlogicalLines   &          r   rs   rs      s    
CE	QA 
!%%	/)LL%O+IIK$JJtc%j()JJ{# 
 773<r   c                4    \        4       P                  V 4      # )z?
Pass me an Abstract Object Tree, and I'll unjelly it for you.
)AOTUnjellierunjelly)aots   &r   unjellyFromAOTr     s     >!!#&&r   c                8   R\         R\        R\        R\        R\        R\
        R\        R\        /p\        V R	4      '       d   V P                  4       pMT p\        VR
R4      p\        W1V4       RV9   d   \        VR,          4      # \        RV ,          4      h)z
Pass me a string of code or a filename that defines an 'app' variable (in
terms of Abstract Objects!), and I'll execute it and unjelly the resulting
AOT for you, returning a newly unpersisted Application object!
r/   r+   r   r#   r'   r.   r0   rk   readz<source>execappz'%s needs to define an 'app', it didn't!)r/   r+   r   r#   r'   r.   r0   rk   r   r   compileevalr   rX   )stringOrFilenssourcecodes   &   r   unjellyFromSourcer     s     	H.H&s7	
B |V$$""$6:v.D2{bi((B\QRRr   c                   N   a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
tV tR# )r   i*  zOI handle the unjellying of an Abstract Object Tree.
See AOTUnjellier.unjellyAO
c                0    / V n         . V n        . V n        R # r
   )
referencesr   afterUnjellyr   s   &r   r   AOTUnjellier.__init__/  s    
r   c                V    \         P                  ! 4       pV P                  V^ V4       V# )zUnjelly a node, later.)r   _DeferunjellyInto)r   noder   s   && r   unjellyLaterAOTUnjellier.unjellyLater7  s%    OOAt$r   c                    V P                  V4      pWAV&   \        V\        P                  4      '       d   VP	                  W4       V# )zfUtility method for unjellying one object into another.
This automates the handling of backreferences.
)	unjellyAOr-   r   NotKnownaddDependant)r   rI   locrt   os   &&&& r   r   AOTUnjellier.unjellyInto=  s=     NN2Ca**++NN3$r   c                    \        V\        P                  4      '       d   R .pVP                  V^4       MV.pV P                  P                  W34       R # r
   )r-   r   r   r   r   r   )r   callableresult
listResults   &&& r   	callAfterAOTUnjellier.callAfterG  sJ    fh//00J
A. J  (!78r   c                >    V P                  VP                  W#4       R# )zUtility method for unjellying into instances of attributes.

Use this rather than unjellyAO unless you like surprising bugs!
Alternatively, you can use unjellyInto on your instance's __dict__.
N)r   __dict__)r   r3   attrNamert   s   &&&&r   unjellyAttributeAOTUnjellier.unjellyAttributeO  s     	**H9r   c           	     	   V P                   P                  V4       \        V4      pV\        9   d   V# V\        J dB   . pV F7  pVP                  R4       V P                  V\        V4      ^,
          V4       K9  	  V# V\        J d~   . p\        pV Fg  pVP                  R4       \        V P                  V\        V4      ^,
          V4      \        P                  4      '       g   KW  \        P                  pKi  	  V! V4      # V\        J dZ   / pVP                  4        FA  w  rx\        P                  ! V4      p	V P                  V	^ V4       V P                  V	^V4       KC  	  V# VP                  p
V
\         J d!   \"        P$                  ! VP&                  4      # V
\(        \*        39   g   \-        V
\        4      '       d!   \"        P.                  ! VP&                  4      # V
\0        J d   VP&                  p\"        P.                  ! VP2                  4      pV P5                  VP6                  4      pWP8                  9   dS   Vf   \;        W4      # \        V\        P                  4      '       d   \        P<                  ! WV4      # \?        WV4      # \A        R4      hV
\B        J d   \"        P.                  ! VP2                  4      pV P5                  VPD                  4      pVPG                  V4      p\I        VR4      '       d   V PK                  VPL                  V4       V# \        V\        4      '       d
   VVn        V# VPO                  4       Vn        V# V
\P        J d   V P5                  VPR                  4      pVPT                  pV PV                  PY                  V4      pVf   VV PV                  V&   V# \        V\        P                  4      '       d#   VP[                  V4       VV PV                  V&   V# Vf    V# \]        RV: RV: RV: R24      hV
\^        J dU   VPT                  pV PV                  PY                  V4      pVf(   \        P`                  ! V4      pVV PV                  V&   V# V# V
\b        J dO   \"        P.                  ! VPd                  4      pV Pg                  VPD                  4      Pi                  R V4      pV# \A        RV,          4      h)	zQUnjelly an Abstract Object and everything it contains.
I return the real object.
Nzinstance method changed__setstate__z&Multiple references with the same ID: rG   !c                     V! V !  # r
   r    )r   _ls   &&r   <lambda>(AOTUnjellier.unjellyAO.<locals>.<lambda>  s    r6{r   zUnsupported AOT type: %s)5r   r   r   r   r|   r   rR   r   r-   r   r   _TuplerJ   r}   _DictKeyAndValue	__class__r'   r   namedModuler   r   r#   
issubclassnamedObjectr+   r2   r   r3   r   getattr_InstanceMethodr   r1   r/   rA   __new__r   r   r   __getstate__r.   rI   rS   r   getresolveDependantsrX   r0   _Dereferencerk   rn   r   addCallback)r   rt   r   r   r   tuple_r   r   r   kvdcim_nameim_classim_selfr2   rA   r4   r   refkeyrefrZ   derrn   s   &&                     r   r   AOTUnjellier.unjellyAOX  s	    	

"H  I$YA  CFQJ2  H%ZAFd..q#a&1*a@(BSBSTT%__F  !9$YA
//2  a+  a+ # H AF{**27733uh'':a+>+>**27733n$''"..rxx8..5///&x99#GX->->??'77(SS/7KK#$=>>h++BHH5rxx0}}U+5.11NN4#4#4e<
 	  t,,$)DM  %*$6$6$8DMcNN266*oo))&1;./DOOF+   X%6%677))!,./DOOF+  ^ 	 %,  eiioo))#.;"//4C+.DOOC(J
g"..r{{;%%bhh/;;2H  :Q >??r   c           	     P    R .pV P                  V^ V4       V P                   F  w  r4V! V^ ,          4       K  	  V^ ,          #   \         dV    \        P                  ! R4       \        P                  ! RP                  \        \        T P                  4      4      4       h i ; i)N+Error jellying object! Stacktrace follows::
)	r   r   BaseExceptionr   msgr   mapr   r   )r   rt   r   funcr   s   &&   r   r   AOTUnjellier.unjelly  s    		AQ2&,,QqT
 -Q4K 	GGABGGDIIc$

345	s   AA A B%)r   r   r   N)r   r   r   r   rv   r   r   r   r   r   r   r   r   r   r   s   @r   r   r   *  s5     9:f@P
 
r   r   c                4    \        4       P                  V 4      # )z-Convert an object to an Abstract Object Tree.)
AOTJellierjelly)rI   s   &r   
jellyToAOTr     s    <c""r   c                    \        V 4      pV'       d,   VP                  \        V4      P                  R4      4       R# \        V4      # )z
Pass me an object and, optionally, a file object.
I'll convert the object to an AOT either return it (if no file was
specified) or write it to the file.
zutf-8N)r   writer   encode)rI   filer   s   && r   jellyToSourcer     s5     S/C

9S>((12~r   c                .    V P                   P                  # )z
Get the associated class of the given method object.

@param methodObject: a bound method
@type methodObject: L{types.MethodType}

@return: a class
@rtype: L{type}
)__self__r   methodObjects   &r   _classOfMethodr    s       ***r   c                    V P                   # )z
Get the associated function of the given method object.

@param methodObject: a bound method
@type methodObject: L{types.MethodType}

@return: the function implementing C{methodObject}
@rtype: L{types.FunctionType}
)__func__r  s   &r   _funcOfMethodr            r   c                    V P                   # )z
Get the object that a bound method is bound to.

@param methodObject: a bound method
@type methodObject: L{types.MethodType}

@return: the C{self} passed to C{methodObject}
@rtype: L{object}
)r  r  s   &r   _selfOfMethodr
    r  r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )r   i  c                0    / V n         ^ V n        . V n        R# )    N)prepared_ref_idr   r   s   &r   r   AOTJellier.__init__  s    
r   c                4    WP                   \        V4      &   R# )zYI prepare an object for later referencing, by storing its id()
and its _AORef in a cache.N)r  id)r   aorefobjects   &&&r   prepareForRefAOTJellier.prepareForRef  s     %*bj!r   c           	       a aa \        S4      pS P                  P                  \        S4      4       V\        9   d   SoEM\        V\        P                  4      '       dX   \        \        S4      P                  \        P                  ! \        S4      4      S P                  \        S4      4      4      oEM	\        V\        P                   4      '       d   \#        SP                  4      oEM\        V\         4      '       d"   \%        \        P                  ! S4      4      oEMV\        P&                  J d"   \)        \        P*                  ! S4      4      oEMf\-        S4      S P.                  9   d|   S P.                  \-        S4      ,          pVP0                  '       d   VP0                  pM5S P2                  ^,           S n        S P2                  pVP5                  V4       \7        V4      # \9        4       oVVV 3R lpS P;                  SS4       V\<        J d3   SP?                  S Uu. uF  pS P                  V4      NK  	  up4       EMqV\@        J d1   SP?                  \A        \C        S P                  S4      4      4       EM7V\D        J dQ   / pSPG                  4        F(  w  rS P                  V	4      VS P                  V4      &   K*  	  SP?                  V4       MV\H        PJ                  9   d_   \H        PJ                  V,          ! S4      w  rSP?                  \M        \        P*                  ! V
4      S P                  V4      4      4       Mj\O        SR4      '       d   V! SPQ                  4       4       MA\O        SR4      '       d   V! SPR                  4       M\U        RVP                  ,          4      hS P                  R S# u upi )z+I turn an object into an AOT and return it.c                    < SP                  \        \        P                  ! SP                  4      SP                  V 4      4      4       R # r
   )r^   r/   r   qualr   	jellyToAO)rA   rI   retvalr   s   &r   
_stateFrom(AOTJellier.jellyToAO.<locals>._stateFromL  s/    W\\#--8$..:OPr   r   r   zUnsupported type: %s)+r   r   r   r   r   r   types
MethodTyper+   r  r   r   r  r  r  r
  
ModuleTyper'   r   FunctionTyper#   fullFuncNamer  r  rS   r  r[   r0   r.   r  r|   r^   r   r   rJ   r}   copy_regdispatch_tablerk   r   r   r   r1   )r   rI   objTypeoldRefkeyr  r   r   r   r   unpickleFuncrA   r  s   ff          @r   r  AOTJellier.jellyToAO  s   s)

$s)$ &&F!1!122 $c"++^C01}S12F !1!122CLL)F&&7<<,-F***g22378F #w$--'r#w/=== --C $(<<!#3DL,,CMM#&Sz!UF
 vs+$#>#Qt~~a0#>?E!eC$<=>DIIKDA+/>>!+<AdnnQ'( (a H333&.&=&=g&Fs&K#G00>u@UV n--3++-.j))3<<( 69I9I IJJJJrN5 ?s   .Oc                     V P                  V4      pV#   \         dH    \        P                  ! R 4       \        P                  ! RP	                  T P
                  4      4       h i ; i)r   r   )r  r   r   r   r   r   )r   rI   rt   s   && r   r   AOTJellier.jellyp  sR    	$BI 	GGABGGDIIdjj)*	s
    AA')r  r  r   N)
r   r   r   r   r   r  r  r   r   r   r   s   @r   r   r     s      *
Vp r   r   r
   )5rv   copyregr$  rer  twisted.persistedr   twisted.pythonr   r   twisted.python.compatr   	_tokenizer   r   r   r   r#   r'   r+   r<   r@   boolbytesr?   intfloatcomplexr   sliceEllipsisr   r/   r.   r0   rk   r   	ExceptionrL   r   r   rK   r8   rs   r   r   r   r   r   r  r  r
  r   r    r   r   <module>r;     s7    	  & ' 2 3 
'E '
*u *
(U (

 
(	 	 ]
 			J	N
 C C8" "< E E.
, , JJ()
TD6'S>` `P#

+
!
!k kr   