³ò
Ù‘RMc           @   s  d  Z  d d k Z d d k Z d d k Z d e f d „  ƒ  YZ e ƒ  Z d „  Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ	 d
 e f d „  ƒ  YZ
 e
 d d d ƒZ e
 d d d ƒZ d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d1 ƒ Z d „  Z d d  k l Z d! e f d" „  ƒ  YZ d! e f d# „  ƒ  YZ d! e f d$ „  ƒ  YZ d! e f d% „  ƒ  YZ d& „  Z d' „  Z d( „  Z  d) e f d* „  ƒ  YZ! d+ e f d, „  ƒ  YZ" d- e f d. „  ƒ  YZ# d/ e# f d0 „  ƒ  YZ$ d S(2   sS   
This file defines utilities for manipulating objects in an
RPython-compliant way.
iÿÿÿÿNt   _Specializec           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   d „  } | S(   s¹    Specialize functions based on argument values. All arguments has
        to be constant at the compile time. The whole function call is replaced
        by a call result then.
        c         S   s   d |  _  |  S(   Ns   specialize:memo(   t   _annspecialcase_(   t   func(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   decorated_func   s    	(    (   t   selfR   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   memo   s    	c            s   ‡  ‡ f d †  } | S(   s6   Specialize function based on values of given positions of arguments.
        They must be compile-time constants in order to work.

        There will be a copy of provided function for each combination
        of given arguments on positions in args (that can lead to
        exponential behavior!).
        c            s   d ˆ  i  ˆ ƒ |  _ |  S(   Ns   specialize:arg(   t   _wrapR   (   R   (   R   t   args(    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   )   s    (    (   R   R   R   (    (   R   R   s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   arg!   s    c            s   ‡  ‡ f d †  } | S(   s÷    Specialize function based on types of arguments on given positions.

        There will be a copy of provided function for each combination
        of given arguments on positions in args (that can lead to
        exponential behavior!).
        c            s   d ˆ  i  ˆ ƒ |  _ |  S(   Ns   specialize:argtype(   R   R   (   R   (   R   R   (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   6   s    (    (   R   R   R   (    (   R   R   s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   argtype/   s    c         C   s   d „  } | S(   sØ    This is version of argtypes that cares about low-level types
        (so it'll get additional copies for two different types of pointers
        for example). Same warnings about exponential behavior apply.
        c         S   s   d |  _  |  S(   Ns   specialize:ll(   R   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   A   s    	(    (   R   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   ll<   s    	c            s   ‡  f d †  } | S(   s     XXX what does that do?
        c            s   d ˆ  |  _  |  S(   Ns   specialize:ll_and_arg(%d)(   R   (   R   (   R   (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   J   s    (    (   R   R   R   (    (   R   s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt
   ll_and_argG   s    c         C   s6   d d i  g  } | D] } | t | ƒ q ~ ƒ d S(   Nt   (t   ,t   )(   t   joint   repr(   R   R   t   _[1]R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   P   s    (   t   __name__t
   __module__R   R   R	   R
   R   R   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR       s   	
					c             s   ‡  f d †  } | S(   s¡    Decorate a function with forcing of RPython-level types on arguments.
    None means no enforcing.

    XXX shouldn't we also add asserts in function body?
    c            s   ˆ  |  _  |  S(   N(   t   _annenforceargs_(   t   f(   R   (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt	   decorator[   s    	(    (   R   R   (    (   R   s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   enforceargsU   s    t   Symbolicc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   d  S(   N(   t   None(   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt
   annotationd   s    c         C   s   d  S(   N(   R   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   lltypeg   s    c         C   s%   |  | j o d Sn t  d ƒ ‚ d  S(   Ni    s   Symbolics can not be compared!(   t	   TypeError(   R   t   other(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __cmp__j   s    c         C   s   t  d ƒ ‚ d  S(   Ns   Symbolics are not hashable!(   R   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __hash__p   s    c         C   s   t  d ƒ ‚ d  S(   Ns   Symbolics are not comparable(   R   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __nonzero__s   s    (   R   R   R   R   R   R   R    (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   b   s
   				t   ComputedIntSymbolicc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t
   compute_fn(   R   R"   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __init__x   s    c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   t   model(   t   pypy.annotationR$   t   SomeInteger(   R   R$   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   {   s    c         C   s   d d k  l } | i S(   Niÿÿÿÿ(   R   (   t   pypy.rpython.lltypesystemR   t   Signed(   R   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR      s    (   R   R   R#   R   R   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR!   v   s   		t   CDefinedIntSymbolicc           B   s&   e  Z d  d „ Z d „  Z d „  Z RS(   i    c         C   s   | |  _  | |  _ d  S(   N(   t   exprt   default(   R   R*   R+   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR#   …   s    	c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   R$   (   R%   R$   R&   (   R   R$   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR   ‰   s    c         C   s   d d k  l } | i S(   Niÿÿÿÿ(   R   (   R'   R   R(   (   R   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR      s    (   R   R   R#   R   R   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR)   ƒ   s   	t   MALLOC_ZERO_FILLEDR+   i    t   RUNNING_ON_LLINTERPi   c         C   s2   t  |  t ƒ o |  i |  ƒ Sn t i |  ƒ Sd S(   s"   Create an empty instance of 'cls'.N(   t
   isinstancet   typet   __new__t   typest   InstanceType(   t   cls(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   instantiate—   s    c           C   s   t  S(   N(   t   False(    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   we_are_translatedž   s    c          G   s   d  S(   N(    (   t   values(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   keepalive_until_here¢   s    t   FREED_OBJECTc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  d ƒ ‚ d  S(   Ns   trying to access freed object(   t   RuntimeError(   R   t   attr(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __getattribute__¨   s    c         C   s   t  d ƒ ‚ d  S(   Ns   trying to access freed object(   R:   (   R   R;   t   value(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __setattr__ª   s    (   R   R   R<   R>   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR9   §   s   	c         C   s@   t  |  i d d ƒ i d ƒ p
 t d ‚ h  |  _ t |  _ d  S(   Nt   _alloc_flavor_t   gcs   trying to free gc object(   t   getattrt	   __class__t
   startswitht   AssertionErrort   __dict__R9   (   t   obj(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   free_non_gc_object®   s    *	c         C   s—   t  |  t t f ƒ o t |  ƒ Sn t  |  t ƒ o |  Sn t  |  t ƒ o t |  ƒ Sn t  |  t ƒ o t |  ƒ Sn |  d j o d Sn t
 |  ƒ S(   s[  RPython equivalent of hash(x), where 'x' is an immutable
    RPython-level.  For strings or unicodes it computes the hash as
    in Python.  For tuples it calls compute_hash() recursively.
    For instances it uses compute_identity_hash().

    Note that this can return 0 or -1 too.

    Behavior across translation:

      * on lltypesystem, it always returns the same number, both
        before and after translation.  Dictionaries don't need to
        be rehashed after translation.

      * on ootypesystem, the value changes because of translation.
        Dictionaries need to be rehashed.
    i    N(   R.   t   strt   unicodet   _hash_stringt   intt   floatt   _hash_floatt   tuplet   _hash_tupleR   t   compute_identity_hash(   t   x(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   compute_hash¹   s    c         C   s@   t  i |  ƒ } y | |  i d <Wn t t f j
 o n X| S(   sw  RPython equivalent of object.__hash__(x).  This returns the
    so-called 'identity hash', which is the non-overridable default hash
    of Python.  Can be called for any RPython-level object that turns
    into a GC object, but not NULL.  The value is not guaranteed to be the
    same before and after translation, except for RPython instances on the
    lltypesystem.
    t   __precomputed_identity_hash(   t   objectR   RE   R   t   AttributeError(   RQ   t   result(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRP   Ö   s    c         C   s
   t  |  ƒ S(   sA  RPython equivalent of id(x).  The 'x' must be an RPython-level
    object that turns into a GC object.  This operation can be very
    costly depending on the garbage collector.  To remind you of this
    fact, we don't support id(x) directly.
    (XXX not implemented on ootype, falls back to compute_identity_hash)
    (   t   id(   RQ   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   compute_unique_idå   s    c         C   s    d d k  l } | t |  ƒ ƒ S(   sî   A cheap version of id(x).  The current memory location of an
    object can change over time for moving GCs.  Also note that on
    ootypesystem this typically doesn't return the real address but
    just the same as compute_hash(x).
    iÿÿÿÿ(   t   intmask(   t   pypy.rlib.rarithmeticRY   RW   (   RQ   RY   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   current_object_addr_as_intî   s    c         C   s–   d d k  l } t |  ƒ } | d j o d Sn t |  d ƒ d >} d } x4 | | j  o& d | t |  | ƒ A} | d 7} qN W| | N} | | ƒ S(   s>   The algorithm behind compute_hash() for a string or a unicode.iÿÿÿÿ(   RY   i    i   iCB i   (   RZ   RY   t   lent   ord(   t   sRY   t   lengthRQ   t   i(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRJ   ù   s     
c         C   s¼   d d k  l } l } l } | |  ƒ o |  d j  o d Sq[ d Sn | |  ƒ o d Sn t i |  ƒ \ } } | t 9} t | ƒ } | t | ƒ t } | t | ƒ | d >} | | ƒ S(   sÿ   The algorithm behind compute_hash() for a float.
    This implementation is identical to the CPython implementation,
    except the fact that the integer case is not treated specially.
    In RPython, floats cannot be used with ints in dicts, anyway.
    iÿÿÿÿ(   RY   t   isinft   isnang        i,Úûÿi/Ë i    i   (	   RZ   RY   Ra   Rb   t   matht   frexpt	   TAKE_NEXTRK   RL   (   R   RY   Ra   Rb   t   vt   expot   hipartRQ   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRM     s    
i   i   c         C   sK   d d k  l } d } x. |  D]& } t | ƒ } | d | | Aƒ } q W| S(   s   NOT_RPYTHON.  The algorithm behind compute_hash() for a tuple.
    It is modelled after the old algorithm of Python 2.3, which is
    a bit faster than the one introduced by Python 2.4.  We assume
    that nested tuples are very uncommon in RPython, making the bad
    case unlikely.
    iÿÿÿÿ(   RY   ixV4 iCB (   RZ   RY   RR   (   t   tRY   RQ   t   itemt   y(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRO     s     (   t   ExtRegistryEntryt   Entryc           B   s    e  Z e Z d  „  Z d „  Z RS(   c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   R$   (   R%   R$   R&   (   R   t   s_xt   annmodel(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   compute_result_annotation2  s    c         C   s:   | i  \ } | i | ƒ \ } | i ƒ  } | i | | ƒ S(   N(   t   args_rt	   inputargst   get_ll_hash_functiont   gendirectcall(   R   t   hopt   r_objt   v_objt   ll_fn(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   specialize_call6  s    (   R   R   RR   t   _about_Rp   Ry   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRm   /  s   	c           B   s    e  Z e Z d  „  Z d „  Z RS(   c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   R$   (   R%   R$   R&   (   R   Rn   Ro   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRp   ?  s    c         C   sà   d d k  l } | i | i d ƒ \ } | i i i d j o/ t | i | i	 ƒ o | i i
 i d j } n& d d k l } t | i | i ƒ } | p* d d k l } | d | i f ƒ ‚ n | i d	 | g d
 | i ƒS(   Niÿÿÿÿ(   R   i    t   lltypesystemR@   (   t   ootype(   t
   TyperErrors/   compute_identity_hash() cannot be applied to %rt   gc_identityhasht
   resulttype(   R'   R   Rr   Rq   t   rtypert   type_systemt   nameR.   t   concretetypet   Ptrt   TOt   _gckindt   pypy.rpython.ootypesystemR|   t   OOTypet   pypy.rpython.errorR}   t   genopR(   (   R   Ru   R   t   vobjt   okR|   R}   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRy   C  s    (   R   R   RP   Rz   Rp   Ry   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRm   <  s   	c           B   s    e  Z e Z d  „  Z d „  Z RS(   c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   R$   (   R%   R$   R&   (   R   Rn   Ro   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRp   U  s    c         C   sà   d d k  l } | i | i d ƒ \ } | i i i d j o/ t | i | i	 ƒ o | i i
 i d j } n& d d k l } t | i | i ƒ } | p* d d k l } | d | i f ƒ ‚ n | i d	 | g d
 | i ƒS(   Niÿÿÿÿ(   R   i    R{   R@   (   R|   (   R}   s+   compute_unique_id() cannot be applied to %rt   gc_idR   (   R'   R   Rr   Rq   R€   R   R‚   R.   Rƒ   R„   R…   R†   R‡   R|   t   InstanceR‰   R}   RŠ   R(   (   R   Ru   R   R‹   RŒ   R|   R}   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRy   Y  s    (   R   R   RX   Rz   Rp   Ry   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRm   R  s   	c           B   s    e  Z e Z d  „  Z d „  Z RS(   c         C   s   d d k  l } | i ƒ  S(   Niÿÿÿÿ(   R$   (   R%   R$   R&   (   R   Rn   Ro   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRp   k  s    c         C   s  | i  | i d ƒ \ } | i i i d j oJ d d k l } t | i | i	 ƒ o  | i
 d | g d | i ƒSqÙ na | i i i d j oJ d d k l } t | i | i ƒ o  | i
 d	 | g d | i ƒSqÙ n d d
 k l } | d | i f ƒ ‚ d  S(   Ni    R{   iÿÿÿÿ(   R   t   cast_ptr_to_intR   t   ootypesystem(   R|   R~   (   R}   s4   current_object_addr_as_int() cannot be applied to %r(   Rr   Rq   R€   R   R‚   R'   R   R.   Rƒ   R„   RŠ   R(   R‡   R|   RŽ   R‰   R}   (   R   Ru   R‹   R   R|   R}   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRy   o  s    (   R   R   R[   Rz   Rp   Ry   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRm   h  s   	c         G   s   t  d ‚ d  S(   Ns6   hlinvoke is meant to be rtyped and not called direclty(   R   (   R   t
   llcallableR   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   hlinvoke  s    c         C   s\   d d k  l } |  | i _ | | i _ d d k l } | | i |  ƒ | | i | ƒ d S(   s–   Call before() before any external function call, and after() after.
    At the moment only one pair before()/after() can be registered at a time.
    iÿÿÿÿ(   t   rffi(   t   llhelperN(   R'   R“   t   aroundstatet   beforet   aftert   pypy.rpython.annlowlevelR”   t   AroundFnPtr(   R–   R—   R“   R”   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   invoke_around_extcall„  s    c          C   s    d d k  l }  |  i i d j S(   Niÿÿÿÿ(   R“   i   (   R'   R“   t   stackcountert   stacks_counter(   R“   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   is_in_callback“  s    t   UnboxedValuec           B   s8   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z RS(   s½   A mixin class to use for classes that have exactly one field which
    is an integer.  They are represented as a tagged pointer, if the
    translation.taggedpointers config option is used.c         C   s]   d |  i  j p t ‚ t |  i t ƒ p t |  i ƒ d j p t ‚ t t |  ƒ i |  ƒ S(   NR#   i   (	   RE   RD   R.   t	   __slots__RH   R\   t   superRž   R0   (   R3   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR0   ž  s    0c         C   s•   | d d } t  i d | j o t  i j n oN t |  i i t ƒ o t |  |  i i | ƒ q‘ t |  |  i i d | ƒ n t d ƒ ‚ d  S(   Ni   i   i    s#   UnboxedValue: argument out of range(   t   syst   maxintR.   RB   RŸ   RH   t   setattrt   OverflowError(   R   R=   t   int_as_pointer(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR#   £  s    )c         C   s   d |  i  ƒ  f S(   Ns   <unboxed %d>(   t   get_untagged_value(   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __repr__®  s    c         C   sH   t  |  i i t ƒ o t |  |  i i ƒ Sn t |  |  i i d ƒ Sd  S(   Ni    (   R.   RB   RŸ   RH   RA   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR¦   ±  s    (	   R   R   t   __doc__t   Truet   _mixin_R0   R#   R§   R¦   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRž   ˜  s   			t   r_dictc           B   sÈ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sª   An RPython dict-like object.
    Only provides the interface supported by RPython.
    The functions key_eq() and key_hash() are used by the key comparison
    algorithm.c         C   s   h  |  _  | |  _ | |  _ d  S(   N(   t   _dictt   key_eqt   key_hash(   R   R­   R®   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR#   À  s    		c         C   s   |  i  t |  | ƒ S(   N(   R¬   t
   _r_dictkey(   R   t   key(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __getitem__Å  s    c         C   s   | |  i  t |  | ƒ <d  S(   N(   R¬   R¯   (   R   R°   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __setitem__È  s    c         C   s   |  i  t |  | ƒ =d  S(   N(   R¬   R¯   (   R   R°   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __delitem__Ë  s    c         C   s   t  |  i ƒ S(   N(   R\   R¬   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __len__Î  s    c         c   s    x |  i  D] } | i Vq
 Wd  S(   N(   R¬   R°   (   R   t   dk(    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __iter__Ñ  s    
 c         C   s   t  |  | ƒ |  i j S(   N(   R¯   R¬   (   R   R°   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __contains__Õ  s    c         C   s   |  i  i t |  | ƒ | ƒ S(   N(   R¬   t   getR¯   (   R   R°   R+   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR¸   Ø  s    c         C   s   |  i  i t |  | ƒ | ƒ S(   N(   R¬   t
   setdefaultR¯   (   R   R°   R+   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR¹   Û  s    c         C   s"   |  i  i ƒ  \ } } | i | f S(   N(   R¬   t   popitemR°   (   R   Rµ   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRº   Þ  s    c         C   s&   t  |  i |  i ƒ } | i |  ƒ | S(   N(   R«   R­   R®   t   update(   R   RV   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   copyâ  s    c         C   s+   x$ | i  ƒ  D] \ } } | |  | <q Wd  S(   N(   t   items(   R   R   R°   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR»   ç  s     c         C   s%   g  } |  i  D] } | | i q ~ S(   N(   R¬   R°   (   R   R   Rµ   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   keysë  s    c         C   s   |  i  i ƒ  S(   N(   R¬   R7   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR7   î  s    c         C   s7   g  } |  i  i ƒ  D] \ } } | | i | f q ~ S(   N(   R¬   R½   R°   (   R   R   Rµ   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR½   ñ  s    c         C   s   |  i  i ƒ  S(   N(   R¬   t
   itervalues(   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR¿   ö  s    c         c   s2   x+ |  i  i ƒ  D] \ } } | i | f Vq Wd  S(   N(   R¬   R½   R°   (   R   Rµ   R=   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt	   iteritemsù  s     c         C   s   |  i  i ƒ  d  S(   N(   R¬   t   clear(   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRÁ   ý  s    c         C   s   d |  i  f S(   s&   Representation for debugging purposes.s
   r_dict(%r)(   R¬   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR§      s    c         C   s   t  d ƒ ‚ d  S(   Ns   cannot hash r_dict instances(   R   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR     s    (   R   R   R¨   R#   R±   R²   R³   R´   R¶   R·   R¸   R¹   Rº   R¼   R»   R¾   R7   R½   t   iterkeysR¿   RÀ   RÁ   R§   R   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR«   º  s,   																			R¯   c           B   sD   e  Z d  d d g Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   t   dicR°   t   hashc         C   s(   | |  _  | |  _ | i | ƒ |  _ d  S(   N(   RÃ   R°   R®   RÄ   (   R   RÃ   R°   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR#   
  s    		c         C   s1   t  | t ƒ p t Sn |  i i |  i | i ƒ S(   N(   R.   R¯   t   NotImplementedRÃ   R­   R°   (   R   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __eq__  s    c         C   s2   t  | t ƒ p t Sn |  i i |  i | i ƒ S(   N(   R.   R¯   RÅ   RÃ   R­   R°   (   R   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyt   __ne__  s    c         C   s   |  i  S(   N(   RÄ   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR     s    c         C   s   t  |  i ƒ S(   N(   R   R°   (   R   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR§     s    (   R   R   RŸ   R#   RÆ   RÇ   R   R§   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR¯     s   				t   _r_dictkey_with_hashc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   RÃ   R°   RÄ   (   R   RÃ   R°   RÄ   (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyR#     s    		(   R   R   R#   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pyRÈ     s   l        (%   R¨   R¡   R1   Rc   RT   R    t
   specializeR   R   R!   R)   t   malloc_zero_filledt   running_on_llinterpR4   R6   R8   R9   RG   RR   RP   RX   R[   RJ   RM   RL   Re   RO   t   pypy.rpython.extregistryRl   Rm   R’   Rš   R   Rž   R«   R¯   RÈ   (    (    (    s)   /64/home/arigo/u/pypy/rlib/objectmodel.pys   <module>   sH   =																	"N
