[pypy-commit] pypy default: merge heads

mattip noreply at buildbot.pypy.org
Fri Feb 22 13:53:47 CET 2013


Author: mattip <matti.picus at gmail.com>
Branch: 
Changeset: r61603:f5e56471a998
Date: 2013-02-22 14:43 +0200
http://bitbucket.org/pypy/pypy/changeset/f5e56471a998/

Log:	merge heads

diff --git a/rpython/rlib/objectmodel.py b/rpython/rlib/objectmodel.py
--- a/rpython/rlib/objectmodel.py
+++ b/rpython/rlib/objectmodel.py
@@ -153,7 +153,8 @@
             else:
                 return type(arg)
         def typecheck(*args):
-            from rpython.annotator.model import SomeList, SomeDict, SomeChar
+            from rpython.annotator.model import SomeList, SomeDict, SomeChar,\
+                 SomeInteger
             for i, (expected_type, arg) in enumerate(zip(types, args)):
                 if expected_type is None:
                     continue
@@ -167,6 +168,9 @@
                 if isinstance(s_expected, SomeChar) and (
                         isinstance(arg, str) and len(arg) == 1):   # a char
                     continue
+                if (isinstance(s_expected, SomeInteger) and
+                    isinstance(arg, s_expected.knowntype)):
+                    continue
                 #
                 s_argtype = get_annotation(get_type_descr_of_argument(arg))
                 if not s_expected.contains(s_argtype):
diff --git a/rpython/rtyper/lltypesystem/rdict.py b/rpython/rtyper/lltypesystem/rdict.py
--- a/rpython/rtyper/lltypesystem/rdict.py
+++ b/rpython/rtyper/lltypesystem/rdict.py
@@ -8,6 +8,7 @@
 from rpython.rlib.rarithmetic import r_uint, intmask, LONG_BIT
 from rpython.rtyper import rmodel
 from rpython.rtyper.error import TyperError
+from rpython.annotator.model import SomeInteger
 
 
 HIGHEST_BIT = intmask(1 << (LONG_BIT - 1))
@@ -385,39 +386,39 @@
 #  be direct_call'ed from rtyped flow graphs, which means that they will
 #  get flowed and annotated, mostly with SomePtr.
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_everused_from_flag(entries, i):
     return entries[i].f_everused
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_everused_from_key(entries, i):
     return bool(entries[i].key)
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_everused_from_value(entries, i):
     return bool(entries[i].value)
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_valid_from_flag(entries, i):
     return entries[i].f_valid
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_mark_deleted_in_flag(entries, i):
     entries[i].f_valid = False
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_valid_from_key(entries, i):
     ENTRIES = lltype.typeOf(entries).TO
     dummy = ENTRIES.dummy_obj.ll_dummy_value
     return entries.everused(i) and entries[i].key != dummy
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_mark_deleted_in_key(entries, i):
     ENTRIES = lltype.typeOf(entries).TO
     dummy = ENTRIES.dummy_obj.ll_dummy_value
     entries[i].key = dummy
 
- at objectmodel.enforceargs(None, int)
+ at objectmodel.enforceargs(None, SomeInteger(nonneg=True))
 def ll_valid_from_value(entries, i):
     ENTRIES = lltype.typeOf(entries).TO
     dummy = ENTRIES.dummy_obj.ll_dummy_value
@@ -525,6 +526,7 @@
 
 @jit.look_inside_iff(lambda d, i: jit.isvirtual(d) and jit.isconstant(i))
 def _ll_dict_del(d, i):
+    assert i >= 0
     d.entries.mark_deleted(i)
     d.num_items -= 1
     # clear the key and the value if they are GC pointers
@@ -585,6 +587,7 @@
     direct_compare = not hasattr(ENTRIES, 'no_direct_compare')
     mask = len(entries) - 1
     i = hash & mask
+    assert i >= 0
     # do the first try before any looping
     if entries.valid(i):
         checkingkey = entries[i].key
@@ -615,6 +618,7 @@
         i = r_uint(i)
         i = (i << 2) + i + perturb + 1
         i = intmask(i) & mask
+        assert i >= 0
         # keep 'i' as a signed number here, to consistently pass signed
         # arguments to the small helper methods.
         if not entries.everused(i):
@@ -648,11 +652,13 @@
     entries = d.entries
     mask = len(entries) - 1
     i = hash & mask
+    assert i >= 0
     perturb = r_uint(hash)
     while entries.everused(i):
         i = r_uint(i)
         i = (i << 2) + i + perturb + 1
         i = intmask(i) & mask
+        assert i >= 0
         perturb >>= PERTURB_SHIFT
     return i
 
@@ -745,6 +751,7 @@
         if dict:
             entries = dict.entries
             index = iter.index
+            assert index >= 0
             entries_len = len(entries)
             while index < entries_len:
                 entry = entries[index]


More information about the pypy-commit mailing list