³ò
Ñ‘RMc           @   s¤   d  Z  d d k Z d d k l Z d d d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e	 f d „  ƒ  YZ
 d d d „  ƒ  YZ d S(   s   
Miscellaneous utilities.
iÿÿÿÿN(   t   r_uintt	   RootStackc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   	   s   t   Stackc           B   sk   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d d	 „ Z
 d
 „  Z d „  Z RS(   s#   Utility class implementing a stack.s   specialize:ctr_locationc         C   s   g  |  _  d  S(   N(   t   items(   t   self(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   __init__   s    c         C   sW   |  i  ƒ  } xD |  i D]9 } y | i ƒ  } Wn t j
 o n X| i | ƒ q W| S(   N(   t	   __class__R   t   clonet   AttributeErrort   push(   R   t   st   item(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR	      s    
 c         C   s   |  i  i | ƒ d  S(   N(   R   t   append(   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR      s    c         C   s   |  i  i ƒ  S(   N(   R   t   pop(   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   !   s    c         C   s    | d j o |  i  | 3n d  S(   Ni    (   R   (   R   t   n(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   drop$   s    i    c         C   sI   | d j  o t  d ‚ n | t |  i ƒ j o t d ‚ n |  i | S(   sl   'position' is 0 for the top of the stack, 1 for the item below,
        and so on.  It must not be negative.i    s   negative stack positions   not enough entries in stack(   t
   ValueErrort   lenR   t
   IndexError(   R   t   position(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   top(   s
    c         C   sO   | d j  o t  d ‚ n | t |  i ƒ j o t d ‚ n | |  i | <d S(   sl   'position' is 0 for the top of the stack, 1 for the item below,
        and so on.  It must not be negative.i    s   negative stack positions   not enough entries in stackN(   R   R   R   R   (   R   t   valueR   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   set_top1   s
    c         C   s   t  |  i ƒ S(   N(   R   R   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   depth:   s    c         C   s   t  |  i ƒ d j S(   Ni    (   R   R   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   empty=   s    (   R   R   t   __doc__t   _annspecialcase_R   R	   R   R   R   R   R   R   R   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR      s   		
						t
   FixedStackc           B   sn   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d d	 „ Z
 d
 „  Z d „  Z RS(   s   specialize:ctr_locationc         C   s   d  S(   N(    (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   E   s    c         C   s#   t  d ƒ |  _ d  g | |  _ d  S(   Ni    (   R    t   ptrt   NoneR   (   R   t	   stacksize(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   setupH   s    c         C   st   |  i  ƒ  } | i t |  i ƒ ƒ xK |  i |  i  D]9 } y | i ƒ  } Wn t j
 o n X| i | ƒ q3 W| S(   N(   R   R!   R   R   R   R	   R
   R   (   R   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR	   L   s     c         C   s'   |  i  } | |  i | <| d |  _  d  S(   Ni   (   R   R   (   R   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   X   s    	c         C   s4   |  i  d } |  i | } d  |  i | <| |  _  | S(   Ni   (   R   R   R   (   R   R   t   ret(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   ]   s
    	c         C   sB   x; | d j o- | d 8} |  i  d 8_  d  |  i |  i  <q Wd  S(   Ni    i   (   R   R   R   (   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   d   s
     
i    c         C   s   |  i  |  i | S(   N(   R   R   (   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   j   s    c         C   s   | |  i  |  i | <d  S(   N(   R   R   (   R   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   n   s    c         C   s   |  i  S(   N(   R   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   r   s    c         C   s   |  i  S(   N(   R   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   u   s    (   R   R   R   R   R!   R	   R   R   R   R   R   R   R   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   A   s   							t   InitializedClassc           B   s   e  Z d  Z d „  Z RS(   s‰   NOT_RPYTHON.  A meta-class that allows a class to initialize itself (or
    its subclasses) by calling __initclass__() as a class method.c         C   sg   t  t |  ƒ i | | | ƒ xD |  i D]9 } | i i d ƒ } t | t i ƒ o | |  ƒ q& q& Wd  S(   Nt   __initclass__(	   t   superR#   R   t   __mro__t   __dict__t   gett
   isinstancet   typest   FunctionType(   R   t   namet   basest   dictt   baseclst   raw(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   |   s    
 (   R   R   R   R   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR#   y   s   t   RwDictProxyc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s˜   NOT_RPYTHON.  A dict-like class standing for 'cls.__dict__', to work
    around the fact that the latter is a read-only proxy for new-style
    classes.c         C   s   | |  _  d  S(   N(   t   cls(   R   R2   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   ‰   s    c         C   s   |  i  i | S(   N(   R2   R'   (   R   t   attr(    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   __getitem__Œ   s    c         C   s   t  |  i | | ƒ d  S(   N(   t   setattrR2   (   R   R3   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   __setitem__   s    c         C   s   | |  i  i j S(   N(   R2   R'   (   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   __contains__’   s    c         C   s   |  i  i i ƒ  S(   N(   R2   R'   R   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR   •   s    (   R   R   R   R   R4   R6   R7   R   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR1   „   s   				t   ThreadLocalsc           B   s/   e  Z d  Z d Z d „  Z d „  Z d „  Z RS(   s4  Pseudo thread-local storage, for 'space.threadlocals'.
    This is not really thread-local at all; the intention is that the PyPy
    implementation of the 'thread' module knows how to provide a real
    implementation for this feature, and patches 'space.threadlocals' when
    'thread' is initialized.
    c         C   s   |  i  S(   N(   t   _value(   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   getvalue¢   s    c         C   s   | |  _  d  S(   N(   R9   (   R   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   setvalue¥   s    c         C   s   |  i  S(   N(   R9   (   R   (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyt   getmainthreadvalue¨   s    N(   R   R   R   R   R9   R:   R;   R<   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pyR8   ™   s
   		(    (    (   R   R*   t   pypy.rlib.rarithmeticR    R   R   R   t   typeR#   t   objectR1   R8   (    (    (    s.   /64/home/arigo/u/pypy/interpreter/miscutils.pys   <module>   s   58
