3
Z_ð]K  ã               @   sl   d Z ddlZddlZddlZdai Zi Zdd„ ZG dd„ deƒZ	G dd„ deƒZ
G d	d
„ d
eƒZdd„ ZdS )zn
Support for using stackless python.  Broken and riddled with print statements
at the moment.  Please fix it!
é    Nc               C   s   t tjƒ  S )N)Útasklet_to_greenletÚ	stacklessÚ
getcurrent© r   r   ú?/tmp/pip-build-yz_zf6az/eventlet/eventlet/support/stacklesss.pyr      s    r   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚFirstSwitchc             C   s
   || _ d S )N)Úgr)Úselfr   r   r   r   Ú__init__   s    zFirstSwitch.__init__c             O   sH   | j }|`|jd  }|_tj|ƒ}||_|t|< |j||Ž |jƒ  d S )N)r   ÚswitchÚrunr   ZtaskletÚtr   Úsetup)r	   ÚargsÚkwr   r   r   r   r   r   Ú__call__   s    
zFirstSwitch.__call__N)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r   r   r      s   r   c               @   s.   e Zd Zd
dd„Zdd„ Zdd„ Zdd	„ ZdS )ÚgreenletNc             C   s6   d| _ |d krtƒ }|| _|d k	r(|| _t| ƒ| _d S )NF)Údeadr   Úparentr   r   r   )r	   r   r   r   r   r   r
   %   s    zgreenlet.__init__c             G   s@   t jƒ a|t| < | jjƒ  t jƒ  t| jk	r4tjƒ  t|  }|S )N)r   r   ÚcallerÚ	coro_argsr   ÚinsertÚscheduleÚremove)r	   r   Úrvalr   r   r   r   0   s    

zgreenlet.switchc             C   s   d S )Nr   )r	   r   r   r   r   <   s    zgreenlet.runc             C   s   | j d ko| j S )N)r   r   )r	   r   r   r   Ú__bool__?   s    zgreenlet.__bool__)NN)r   r   r   r
   r   r   r   r   r   r   r   r   $   s   
r   c               @   s   e Zd ZdS )ÚGreenletExitN)r   r   r   r   r   r   r   r   C   s   r   c              C   sZ   t jdƒ} | tjd< t| _t| _t| _tjƒ }d t|< tƒ }|t|< ||_	|`
d t|< d S )Nr   )ÚtypesÚ
ModuleTypeÚsysÚmodulesr   r   r   r   r   r   r   r   )Úmoduler   Z	main_coror   r   r   ÚemulateG   s    

r%   )Ú__doc__r"   r    r   r   r   r   r   Úobjectr   r   Ú	Exceptionr   r%   r   r   r   r   Ú<module>   s   