Ë
    ojÏG  ã                   ó  — d Z ddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ  G d„ d	«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ d«      Z e«       Zeeeeee ed«      e ee«      g	Z G d„ d«      Z  G d„ d«      Z! G d„ d«      Z" G d„ d«      Z#d„ Z$ G d„ de%«      Z& ejN                  d«      Z(d „ Z)d!„ Z*d"„ Z+d#„ Z,d$„ Z- G d%„ d&«      Z.d'„ Z/d.d(„Z0d)„ Z1d*„ Z2d+„ Z3 G d,„ d-«      Z4y)/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                   ó   — e Zd Zd„ Zy)ÚNamedc                 ó   — || _         y ©N©Úname)Úselfr   s     ú7/usr/lib/python3/dist-packages/twisted/persisted/aot.pyÚ__init__zNamed.__init__"   s	   € Øˆ�	ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r
   r
   !   s   „ ór   r
   c                   ó   — e Zd Zd„ Zy)ÚClassc                 ó    — d| j                   z  S )Nz	Class(%r)r   ©r   s    r   Ú	getSourcezClass.getSource'   s   € Ø˜TŸY™YÑ&Ð&r   N©r   r   r   r   r   r   r   r   r   &   s   „ ó'r   r   c                   ó   — e Zd Zd„ Zy)ÚFunctionc                 ó    — d| j                   z  S )NzFunction(%r)r   r   s    r   r   zFunction.getSource,   s   € Ø §	¡	Ñ)Ð)r   Nr   r   r   r   r   r   +   s   „ ó*r   r   c                   ó   — e Zd Zd„ Zy)ÚModulec                 ó    — d| j                   z  S )Nz
Module(%r)r   r   s    r   r   zModule.getSource1   s   € Ø˜dŸi™iÑ'Ð'r   Nr   r   r   r   r!   r!   0   s   „ ó(r   r!   c                   ó   — e Zd Zd„ Zd„ Zy)ÚInstanceMethodc                 óª   — t        |t        «      s.t        |t        «      st        |t        «      st	        d|z  «      ‚|| _        || _        || _        y )Nz$%s isn't an Instance, Ref, or Deref!)Ú
isinstanceÚRefÚInstanceÚDerefÚ	TypeErrorr   ÚklassÚinstance)r   r   r+   Úinsts       r   r   zInstanceMethod.__init__6   sF   € ä�tœSÔ!Ü˜$¤Ô)Ü˜$¤Ô&äÐBÀTÑIÓJÐJØˆŒ	ØˆŒ
Øˆ�r   c                 óv   — dj                  | j                  | j                  t        | j                  «      «      S )Nz InstanceMethod({!r}, {!r}, 
 {}))Úformatr   r+   Úprettifyr,   r   s    r   r   zInstanceMethod.getSourceA   s/   € Ø3×:Ñ:Ø�I‰IØ�J‰JÜ�T—]‘]Ó#ó
ð 	
r   N©r   r   r   r   r   r   r   r   r$   r$   5   s   „ ò	ó
r   r$   c                   ó   — e Zd Zy)Ú_NoStateObjN)r   r   r   r   r   r   r3   r3   I   s   „ Ør   r3   c                   ó   — e Zd Zefd„Zd„ Zy)r(   c                 ó˜   — t        |t        «      st        d|z  «      ‚|| _        |t        ur|| _        d| _        y || _        d| _        y )Nz%s isn't a string!r   r   )r&   Ústrr*   r+   Ú
NoStateObjÚstateÚstateIsDict)r   Ú	classNameÚ__stateObj__r8   s       r   r   zInstance.__init__]   sJ   € Ü˜)¤SÔ)ÜÐ0°9Ñ<Ó=Ð=ØˆŒ
ØœzÑ)Ø%ˆDŒJØ ˆDÕàˆDŒJØ ˆDÕr   c                 óÂ  — | j                   r| j                  }nWt        | j                  t        «      r;t        | j                  j                  t
        «      r| j                  j                  }nd }|�	 d| j                  ›dt        |«      › d�S d| j                  ›dt        | j                  «      › d�S # t        $ r d| j                  ›dt        |«      › d�cY S w xY w)Nz	Instance(ú, ú))
r9   r8   r&   r'   ÚobjÚdictr+   ÚdictToKWÚNonFormattableDictr0   )r   Ú	stateDicts     r   r   zInstance.getSourceh   sÇ   € à×ÒØŸ
™
‰IÜ˜Ÿ
™
¤CÔ(¬Z¸¿
¹
¿¹ÌÔ-MØŸ
™
Ÿ™‰IàˆIØÐ ðJØ" 4§:¡: .°´8¸IÓ3FÐ2GÀqÐIÐIð ˜4Ÿ:™:˜.¨¬8°D·J±JÓ+?Ð*@ÀÐBÐBøô &ò JØ" 4§:¡: .°´8¸IÓ3FÐ2GÀqÐIÒIðJús   Á4B6 Â6%CÃCN)r   r   r   r7   r   r   r   r   r   r(   r(   \   s   „ Ø/9ó 	!óCr   r(   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)r'   c                 ól   — t        |«      dk(  r|d   | _        |d   | _        y |sd | _        d | _        y y )Né   r   r   )ÚlenÚrefnumr?   )r   Úargss     r   r   zRef.__init__y   s9   € äˆt‹9˜Š>Ø˜q™'ˆDŒKØ˜A‘wˆD�HÙØˆDŒKØˆD�Hð r   c                 ó`   — | j                   rt        d|› d| j                   › �«      ‚|| _         y )NzError setting id ú, I already have )rH   Ú
ValueError©r   Únums     r   ÚsetRefz
Ref.setRef‚   s.   € Ø�;Š;ÜÐ0°°Ð5FÀtÇ{Á{ÀmÐTÓUÐUØˆ�r   c                 ó`   — | j                   rt        d|› d| j                   › �«      ‚|| _         y )NzError setting obj rK   )r?   rL   )r   r?   s     r   ÚsetObjz
Ref.setObj‡   s.   € Ø�8Š8ÜÐ1°#°Ð6GÈÏÉÀzÐRÓSÐSØˆ�r   c                 óº   — | j                   €t        d«      ‚| j                  r$d| j                  t        | j                   «      fz  S t        | j                   «      S )Nz7Don't try to display me before setting an object on me!zRef(%d, 
 %s))r?   ÚRuntimeErrorrH   r0   r   s    r   r   zRef.getSourceŒ   sQ   € Ø�8‰8ÐÜØIóð ð �;Š;Ø$¨¯©´X¸d¿h¹hÓ5GÐ'HÑHÐHÜ˜Ÿ™Ó!Ð!r   N)r   r   r   r   rO   rQ   r   r   r   r   r'   r'   x   s   „ òòò
ó
"r   r'   c                   ó   — e Zd Zd„ Zd„ ZeZy)r)   c                 ó   — || _         y r   ©rH   rM   s     r   r   zDeref.__init__—   s	   € Øˆ�r   c                 ó    — d| j                   z  S )Nz	Deref(%d)rV   r   s    r   r   zDeref.getSourceš   s   € Ø˜TŸ[™[Ñ(Ð(r   N)r   r   r   r   r   Ú__repr__r   r   r   r)   r)   –   s   „ òò)ð �Hr   r)   c                   ó   — e Zd Zd„ Zd„ Zy)ÚCopyregc                 ó    — || _         || _        y r   )Úloadfuncr8   )r   r\   r8   s      r   r   zCopyreg.__init__¡   s   € Ø ˆŒØˆ�
r   c                 óN   — d| j                   ›dt        | j                  «      › d�S )NzCopyreg(r=   r>   )r\   r0   r8   r   s    r   r   zCopyreg.getSource¥   s&   € Ø˜$Ÿ-™-Ð*¨"¬X°d·j±jÓ-AÐ,BÀ!ÐDÐDr   Nr1   r   r   r   rZ   rZ       s   „ òóEr   rZ   c                 ó0   — t        dt        | «      z   «      S )zDPass me an AO, I'll return a nicely-formatted source representation.zapp = )Ú	indentifyr0   )Úaos    r   r   r   ®   s   € ä�X¤¨£Ñ,Ó-Ð-r   c                   ó   — e Zd ZdZy)rB   z!A dictionary was not formattable.N)r   r   r   Ú__doc__r   r   r   rB   rB   ³   s   „ Ú+r   rB   z[a-zA-Z_][a-zA-Z0-9_]*$c           	      óR  — g }t        | j                  «       «      }|j                  «        |D ]g  \  }}t        |t        «      st        d|z  «      ‚t        j                  |«      st        d|z  «      ‚|j                  d|› dt        |«      › d�«       Œi dj                  |«      S )Nz%r ain't a stringz%r ain't an identifierú
 ú=ú,Ú )ÚlistÚitemsÚsortr&   r6   rB   ÚrÚmatchÚappendr0   Újoin)ÚdÚoutri   ÚkÚvs        r   rA   rA   º   s˜   € Ø
€CÜ�—‘“‹O€EØ	‡J�J„LØò .‰ˆˆ1Ü˜!œSÔ!Ü$Ð%8¸1Ñ%<Ó=Ð=Ü�w‰w�qŒzÜ$Ð%=ÀÑ%AÓBÐBØ�
‰
�T˜!˜˜Aœh q›k˜]¨!Ð,Õ-ð.ð �7‰7�3‹<Ðr   c           	      ó"  — t        | d«      r| j                  «       S t        | «      }|t        v rt	        | «      S |t
        u rxdg}| j                  «       D ]/  \  }}|j                  dt        |«      › dt        |«      › d�«       Œ1 |j                  t        | «      xr dxs d«       dj                  |«      S |t        u rZd	g}| D ]  }|j                  d
t        |«      z  «       Œ! |j                  t        | «      xr dxs d«       dj                  |«      S |t        u rZdg}| D ]  }|j                  d
t        |«      z  «       Œ! |j                  t        | «      xr dxs d«       dj                  |«      S t        d|› d| › d�«      ‚)Nr   ú{rd   z: rf   z
 }ú}rg   ú[z
 %s,z
 ]ú]ú(z
 )r>   zUnsupported type z when trying to prettify ú.)Úhasattrr   ÚtypeÚ_SIMPLE_BUILTINSÚreprr@   ri   rm   r0   rG   rn   rh   Útupler*   )r?   Útrp   rq   rr   Úxs         r   r0   r0   Ç   s{  € Üˆs�KÔ Ø�}‰}‹Ðô �‹IˆàÔ Ñ Ü˜“9Ðà”$‰YØ�%ˆCØŸ	™	›ò A‘��1Ø—
‘
˜T¤(¨1£+ ¨b´¸!³°¸QÐ?Õ@ðAà�J‰J”s˜3“xÒ+ GÒ2¨sÔ3Ø—7‘7˜3“<Ðà”$‰YØ�%ˆCØò 4�Ø—
‘
˜9¤x°£{Ñ2Õ3ð4à�J‰J”s˜3“xÒ+ GÒ2¨sÔ3Ø—7‘7˜3“<Ðà”%‰ZØ�%ˆCØò 4�Ø—
‘
˜9¤x°£{Ñ2Õ3ð4à�J‰J”s˜3“xÒ+ GÒ2¨sÔ3Ø—7‘7˜3“<ÐäÐ/°¨sÐ2KÈCÈ5ÐPQÐRÓSÐSr   c                 ó<  — g }g }d| g}t        |j                  «      D ]l  \  }}\  }}\  }}	}
|dv r|j                  |«       n|dv r|j                  «        |dk(  r|j                  dt        |«      z  «       Œ\|j                  |«       Œn dj	                  |«      S )Nrg   )rv   rx   rt   )rw   r>   ru   ú z  )ÚtokenizeÚpoprm   rG   rn   )Úsrp   ÚstackÚlÚ	tokenTypeÚtokenStringÚstartRowÚstartColumnÚendRowÚ	endColumnÚlogicalLines              r   r_   r_   é   s¦   € Ø
€CØ€EØ	ˆQˆ€Aô 
�!—%‘%‹ò$ñ 	ØØÙˆ�;Ùˆ�Øà˜/Ñ)Ø�L‰L˜Õ%Ø˜OÑ+Ø�I‰IŒKØ˜$ÒØ�J‰J�tœc %›jÑ(Õ)à�J‰J�{Õ#ð$ð �7‰7�3‹<Ðr   c                 ó4   — t        «       j                  | «      S )zG
    Pass me an Abstract Object Tree, and I'll unjelly it for you.
    )ÚAOTUnjellierÚunjelly)Úaots    r   ÚunjellyFromAOTr“     s   € ô ‹>×!Ñ! #Ó&Ð&r   c           	      ó
  — t         t        t        t        t        t
        t        t        dœ}t        | d«      r| j                  «       }n| }t        |dd«      }t        |||«       d|v rt        |d   «      S t        d| z  «      ‚)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'   r)   rZ   Úreadz<source>ÚexecÚappz'%s needs to define an 'app', it didn't!)r(   r$   r   r   r!   r'   r)   rZ   rz   r•   ÚcompileÚevalr“   rL   )ÚstringOrFileÚnsÚsourceÚcodes       r   ÚunjellyFromSourcerž     sƒ   € ô Ü(ÜÜÜÜÜÜñ	
€Bô ˆ|˜VÔ$Ø×"Ñ"Ó$‰àˆÜ�6˜: vÓ.€DÜˆˆr�2Ôà��{Ü˜b ™iÓ(Ð(äÐBÀ\ÑQÓRÐRr   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
r�   zWI handle the unjellying of an Abstract Object Tree.
    See AOTUnjellier.unjellyAO
    c                 ó.   — i | _         g | _        g | _        y r   )Ú
referencesr†   ÚafterUnjellyr   s    r   r   zAOTUnjellier.__init__/  s   € ØˆŒØˆŒ
ØˆÕr   c                 óT   — t        j                  «       }| j                  |d|«       |S )zUnjelly a node, later.r   )r   Ú_DeferÚunjellyInto)r   Únodero   s      r   ÚunjellyLaterzAOTUnjellier.unjellyLater7  s%   € ä�O‰OÓˆØ×Ñ˜˜A˜tÔ$Øˆr   c                 óŠ   — | j                  |«      }|||<   t        |t        j                  «      r|j	                  ||«       |S )zvUtility method for unjellying one object into another.
        This automates the handling of backreferences.
        )Ú	unjellyAOr&   r   ÚNotKnownÚaddDependant)r   r?   Úlocr`   Úos        r   r¥   zAOTUnjellier.unjellyInto=  s>   € ð �N‰N˜2ÓˆØˆˆC‰Ü�aœ×*Ñ*Ô+Ø�N‰N˜3 Ô$Øˆr   c                 ó¤   — t        |t        j                  «      rd g}|j                  |d«       n|g}| j                  j                  ||f«       y )Nr   )r&   r   rª   r«   r¢   rm   )r   ÚcallableÚresultÚ
listResults       r   Ú	callAfterzAOTUnjellier.callAfterG  sI   € Ü�fœh×/Ñ/Ô0Ø˜ˆJØ×Ñ 
¨AÕ.à ˜ˆJØ×Ñ× Ñ  (¨JÐ!7Õ8r   c                 ó>   — | j                  |j                  ||«       y)zÙUtility 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   r,   ÚattrNamer`   s       r   ÚunjellyAttributezAOTUnjellier.unjellyAttributeO  s   € ð 	×Ñ˜×*Ñ*¨H°bÕ9r   c           	      ó	  — | j                   j                  |«       t        |«      }|t        v r|S |t        u r;g }|D ]2  }|j                  d«       | j                  |t        |«      dz
  |«       Œ4 |S |t        u rpg }t        }|D ][  }|j                  d«       t        | j                  |t        |«      dz
  |«      t        j                  «      sŒLt        j                  }Œ]  ||«      S |t        u rWi }|j                  «       D ]@  \  }}t        j                  |«      }	| j                  |	d|«       | j                  |	d|«       ŒB |S |j                  }
|
t         u rt#        j$                  |j&                  «      S |
t(        t*        fv st-        |
t        «      rt#        j.                  |j&                  «      S |
t0        u r«|j&                  }t#        j.                  |j2                  «      }| j5                  |j6                  «      }||j8                  v rL|€t;        ||«      S t        |t        j                  «      rt        j<                  |||«      S t?        |||«      S tA        d«      ‚|
tB        u r¥t#        j.                  |j2                  «      }| j5                  |jD                  «      }|jG                  |«      }tI        |d«      r| jK                  |jL                  |«       |S t        |t        «      r	||_        |S |jO                  «       |_        |S |
tP        u r«| j5                  |jR                  «      }|jT                  }| jV                  jY                  |«      }|€|| jV                  |<   |S t        |t        j                  «      r"|j[                  |«       || jV                  |<   |S |€	 |S t]        d|›d|›d|›d�«      ‚|
t^        u rQ|jT                  }| jV                  jY                  |«      }|€&t        j`                  |«      }|| jV                  |<   |S |S |
tb        u rMt#        j.                  |jd                  «      }| jg                  |jD                  «      ji                  d	„ |«      }|S tA        d
|z  «      ‚)zaUnjelly an Abstract Object and everything it contains.
        I return the real object.
        Nr   r   zinstance method changedÚ__setstate__z&Multiple references with the same ID: r=   ú!c                 ó   —  || Ž S r   r   )r°   Ú_ls     r   ú<lambda>z(AOTUnjellier.unjellyAO.<locals>.<lambda>º  s
   € ¡r¨6 {€ r   zUnsupported AOT type: %s)5r†   rm   r{   r|   rh   r¥   rG   r~   r&   r   rª   Ú_Tupler@   ri   Ú_DictKeyAndValueÚ	__class__r!   r   ÚnamedModuler   r   r   Ú
issubclassÚnamedObjectr$   r+   r©   r,   r´   ÚgetattrÚ_InstanceMethodr   r*   r(   r8   Ú__new__rz   r²   r¸   Ú__getstate__r'   r?   rH   r¡   ÚgetÚresolveDependantsrL   r)   Ú_DereferencerZ   r\   r§   ÚaddCallback)r   r`   r   r‡   r€   Útuple_ro   rq   rr   ÚkvdÚcÚim_nameÚim_classÚim_selfr+   r8   r-   r­   ÚrefkeyÚrefrN   Úderr\   s                          r   r©   zAOTUnjellier.unjellyAOX  s  € ð 	�
‰
×Ñ˜"ÔÜ�‹HˆØÔ Ñ ØˆIà”$‰YØˆAØò 3�Ø—‘˜”Ø× Ñ  ¤C¨£F¨Q¡J°Õ2ð3ð ˆHà”%‰ZØˆAÜˆFØò -�Ø—‘˜”Ü˜d×.Ñ.¨q´#°a³&¸1±*¸aÓ@Ä(×BSÑBSÕTÜ%Ÿ_™_‘Fð-ñ ˜!“9Ðà”$‰YØˆAØŸ™›
ò ,‘��1Ü×/Ñ/°Ó2�Ø× Ñ   a¨Ô+Ø× Ñ   a¨Õ+ð,ð ˆHð —‘ˆAØ”F‰{Ü×*Ñ*¨2¯7©7Ó3Ð3à”uœhÐ'Ñ'¬:°a¼Ô+>Ü×*Ñ*¨2¯7©7Ó3Ð3à”nÑ$ØŸ'™'�Ü"×.Ñ.¨r¯x©xÓ8�ØŸ.™.¨¯©Ó5�Ø˜h×/Ñ/Ñ/Ø�Ü& x°Ó9Ð9Ü# G¬X×->Ñ->Ô?Ü'×7Ñ7¸ÀÈ(ÓSÐSä/°¸'À7ÓKÐKä#Ð$=Ó>Ð>à”h‘Ü×+Ñ+¨B¯H©HÓ5�ØŸ™ r§x¡xÓ0�Ø—}‘} UÓ+�Ü˜5 .Ô1Ø—N‘N 4×#4Ñ#4°eÔ<ð
 �ô	   ¤tÔ,Ø$)�D”Mð �ð %*×$6Ñ$6Ó$8�D”MØ�à”c‘Ø—N‘N 2§6¡6Ó*�ØŸ™�Ø—o‘o×)Ñ)¨&Ó1�Ø�;Ø./�D—O‘O FÑ+ð �ô   ¤X×%6Ñ%6Ô7Ø×)Ñ)¨!Ô,Ø./�D—O‘O FÑ+ð �ð �^àð �õ	 %â¢ªð,óð ð ”e‘Ø—i‘i�Ø—o‘o×)Ñ)¨#Ó.�Ø�;Ü"×/Ñ/°Ó4�CØ+.�D—O‘O CÑ(Ø�JØ�
à”g‘Ü"×.Ñ.¨r¯{©{Ó;�Ø×%Ñ% b§h¡hÓ/×;Ñ;Ù2°Hó�ð �äÐ :¸QÑ >Ó?Ð?r   c           	      ó6  — 	 d g}| j                  |d|«       | j                  D ]  \  }} ||d   «       Œ |d   S # t        $ rS t        j                  d«       t        j                  dj                  t        t        | j                  «      «      «       ‚ w xY w)Nr   ú+Error jellying object! Stacktrace follows::ú
)	r¥   r¢   ÚBaseExceptionr   Úmsgrn   Úmapr}   r†   )r   r`   r‡   Úfuncrr   s        r   r‘   zAOTUnjellier.unjellyÀ  sŒ   € ð		Ø�ˆAØ×Ñ˜Q  2Ô&Ø×,Ñ,ò ‘��aÙ�Q�q‘T•
ðà�Q‘4ˆKøÜò 	Ü�G‰GÐAÔBÜ�G‰G�D—I‘Iœc¤$¨¯
©
Ó3Ó4Ô5Øð	ús
   ‚9< ¼ABN)r   r   r   rb   r   r§   r¥   r²   r¶   r©   r‘   r   r   r   r�   r�   *  s-   „ ñòòòò9ò:òf@óP
r   r�   c                 ó4   — t        «       j                  | «      S )z-Convert an object to an Abstract Object Tree.)Ú
AOTJellierÚjelly)r?   s    r   Ú
jellyToAOTrÞ   Ò  s   € ä‹<×Ñ˜cÓ"Ð"r   c                 ó†   — t        | «      }|r*|j                  t        |«      j                  d«      «       yt        |«      S )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)r?   Úfiler’   s      r   ÚjellyToSourcerã   ×  s5   € ô �S‹/€CÙØ�
‰
”9˜S“>×(Ñ(¨Ó1Õ2ä˜‹~Ðr   c                 ó.   — | j                   j                  S )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                 ó   — | j                   S )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                 ó   — | j                   S )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                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)rÜ   c                 ó.   — i | _         d| _        g | _        y )Nr   )ÚpreparedÚ_ref_idr†   r   s    r   r   zAOTJellier.__init__  s   € àˆŒØˆŒØˆ�
r   c                 ó4   — || j                   t        |«      <   y)zaI prepare an object for later referencing, by storing its id()
        and its _AORef in a cache.N)rñ   Úid)r   ÚaorefÚobjects      r   ÚprepareForRefzAOTJellier.prepareForRef  s   € ð %*ˆ�‰”b˜“jÒ!r   c           	      ó&  ‡ ‡‡— t        ‰«      }‰ j                  j                  t        ‰«      «       |t        v r‰Š�n@t        |t        j                  «      rVt        t        ‰«      j                  t        j                  t        ‰«      «      ‰ j                  t        ‰«      «      «      Š�nÐt        |t        j                   «      rt#        ‰j                  «      Š�nŸt        |t         «      r t%        t        j                  ‰«      «      Š�no|t        j&                  u r t)        t        j*                  ‰«      «      Š�n=t-        ‰«      ‰ j.                  v rw‰ j.                  t-        ‰«         }|j0                  r|j0                  }t7        |«      S ‰ j2                  dz   ‰ _        ‰ j2                  }|j5                  |«       t7        |«      S t9        «       Šˆˆˆ fd„}‰ j;                  ‰‰«       |t<        u r0‰j?                  ‰D �cg c]  }‰ j                  |«      ‘Œ c}«       �nT|t@        u r0‰j?                  tA        tC        ‰ j                  ‰«      «      «       �n|tD        u rOi }‰jG                  «       D ](  \  }}	‰ j                  |	«      |‰ j                  |«      <   Œ* ‰j?                  |«       nÅ|tH        jJ                  v rYtI        jJ                  |   ‰«      \  }
}‰j?                  tM        t        j*                  |
«      ‰ j                  |«      «      «       nZtO        ‰d«      r |‰jQ                  «       «       n7tO        ‰d«      r |‰jR                  «       ntU        d|j                  z  «      ‚‰ j                  d= ‰S c c}w )z+I turn an object into an AOT and return it.r   c                 ó”   •— ‰j                  t        t        j                  ‰j                  «      ‰j                  | «      «      «       y r   )rQ   r(   r   Úqualr¿   Ú	jellyToAO)r8   r?   Úretvalr   s    €€€r   Ú
_stateFromz(AOTJellier.jellyToAO.<locals>._stateFromL  s/   ø€ Ø—‘ÜœWŸ\™\¨#¯-©-Ó8¸$¿.¹.ÈÓ:OÓPõr   rÆ   r´   zUnsupported type: %séÿÿÿÿ)+r{   r†   rm   r}   r|   rÁ   ÚtypesÚ
MethodTyper$   rë   r   r   rú   rè   rû   rî   Ú
ModuleTyper!   r   ÚFunctionTyper   ÚfullFuncNamerô   rñ   rH   rò   rO   r)   r'   r÷   rh   rQ   r~   rÙ   r@   ri   Úcopy_regÚdispatch_tablerZ   rz   rÆ   r´   r*   )r   r?   ÚobjTypeÚoldRefÚkeyrý   r­   ro   rq   rr   ÚunpickleFuncr8   rü   s   ``          @r   rû   zAOTJellier.jellyToAO  s¶  ú€ ä�s“)ˆØ�
‰
×Ñœ$˜s›)Ô$ð Ô&Ñ&ØŠFä˜¤×!1Ñ!1Ô2ô $Ü˜cÓ"×+Ñ+Ü—‘œ^¨CÓ0Ó1Ø—‘œ}¨SÓ1Ó2óŠFô ˜¤×!1Ñ!1Ô2Ü˜CŸL™LÓ)ŠFä˜¤Ô&Üœ7Ÿ<™<¨Ó,Ó-ŠFàœ×*Ñ*Ñ*Üœg×2Ñ2°3Ó7Ó8ŠFô �#‹w˜$Ÿ-™-Ñ'ØŸ™¤r¨#£wÑ/�Ø—=’=à Ÿ-™-�Cô ˜S“zÐ!ð $(§<¡<°!Ñ#3�D”LØŸ,™,�CØ—M‘M #Ô&Ü˜S“zÐ!ä“UˆFöð
 ×Ñ˜v sÔ+àœ$‰Ø—‘¸#Ö>°Q˜tŸ~™~¨aÕ0Ò>Ö?àœEÑ!Ø—‘œe¤C¨¯©¸Ó$<Ó=Ö>àœD‘Ø�ØŸI™I›Kò =‘D�A�qØ+/¯>©>¸!Ó+<�A�d—n‘n QÓ'Ò(ð=à—‘˜aÕ àœH×3Ñ3Ñ3Ü&.×&=Ñ&=¸gÑ&FÀsÓ&KÑ#�˜eà—‘ÜœG×0Ñ0°Ó>ÀÇÁÈuÓ@UÓVõô ˜˜nÔ-Ù˜3×+Ñ+Ó-Õ.Ü˜˜jÔ)Ù˜3Ÿ<™<Õ(äÐ 6¸×9IÑ9IÑ IÓJÐJà�J‰J�rˆNØˆùò5 ?s   È
Nc                 óÌ   — 	 | j                  |«      }|S # t        $ rE t        j                  d«       t        j                  dj	                  | j
                  «      «       ‚ w xY w)NrÕ   rÖ   )rû   r×   r   rØ   rn   r†   )r   r?   r`   s      r   rÝ   zAOTJellier.jellyp  sR   € ð	Ø—‘ Ó$ˆBØˆIøÜò 	Ü�G‰GÐAÔBÜ�G‰G�D—I‘I˜dŸj™jÓ)Ô*Øð	ús
   ‚ •AA#N)r   r   r   r   r÷   rû   rÝ   r   r   r   rÜ   rÜ     s   „ òò*ò
Vópr   rÜ   r   )5rb   Úcopyregr  Úrerÿ   Útwisted.persistedr   Útwisted.pythonr   r   Útwisted.python.compatr   Ú	_tokenizer   rƒ   r
   r   r   r!   r$   r3   r7   ÚboolÚbytesr6   ÚintÚfloatÚcomplexr{   ÚsliceÚEllipsisr|   r(   r'   r)   rZ   r   Ú	ExceptionrB   r˜   rk   rA   r0   r_   r“   rž   r�   rÞ   rã   rè   rë   rî   rÜ   r   r   r   ú<module>r     s9  ðñó Û 	Û å &ß 'Ý 2õ 3÷ñ ô
'ˆEô 'ô
*ˆuô *ô
(ˆUô (÷

ñ 
÷(	ñ 	ñ ‹]€
ð 	Ø	ØØØ	ØÙˆƒJØ	ÙˆƒNð
Ð ÷Cñ C÷8"ñ "÷<ñ ÷Eñ Eò.ô
,˜ô ,ð €B‡J�JÐ(Ó)€ò
òTòDò6'òS÷>`ñ `òP#ó
ò
+ò
!ò
!÷kò kr   