Author: Armin Rigo <[email protected]>
Branch: inline-dict-ops
Changeset: r48322:60b28b27a311
Date: 2011-10-21 23:14 +0200
http://bitbucket.org/pypy/pypy/changeset/60b28b27a311/

Log:    Workaround: add 'arraydescr' and 'fielddescr' on the class too, like
        we do in other classes, for tests where the annotator doesn't see an
        actual instance.

diff --git a/pypy/jit/backend/llsupport/descr.py 
b/pypy/jit/backend/llsupport/descr.py
--- a/pypy/jit/backend/llsupport/descr.py
+++ b/pypy/jit/backend/llsupport/descr.py
@@ -141,23 +141,6 @@
         return fielddescr
 
 # ____________________________________________________________
-# InteriorFieldDescr
-
-class InteriorFieldDescr(AbstractDescr):
-    def __init__(self, arraydescr, fielddescr):
-        self.arraydescr = arraydescr
-        self.fielddescr = fielddescr
-
-    def is_pointer_field(self):
-        return self.fielddescr.is_pointer_field()
-
-    def is_float_field(self):
-        return self.fielddescr.is_float_field()
-
-    def repr_of_descr(self):
-        return '<InteriorFieldDescr %s>' % self.fielddescr.repr_of_descr()
-
-# ____________________________________________________________
 # ArrayDescrs
 
 _A = lltype.GcArray(lltype.Signed)     # a random gcarray
@@ -241,17 +224,6 @@
                          NonGcPtrArrayNoLengthDescr, 'ArrayNoLength', 
'get_item_size',
                          '_is_array_of_floats', '_is_item_signed')
 
-def get_interiorfield_descr(gc_ll_descr, ARRAY, FIELDTP, name):
-    cache = gc_ll_descr._cache_interiorfield
-    try:
-        return cache[(ARRAY, FIELDTP, name)]
-    except KeyError:
-        arraydescr = get_array_descr(gc_ll_descr, ARRAY)
-        fielddescr = get_field_descr(gc_ll_descr, FIELDTP, name)
-        descr = InteriorFieldDescr(arraydescr, fielddescr)
-        cache[(ARRAY, FIELDTP, name)] = descr
-        return descr
-
 def get_array_descr(gccache, ARRAY):
     cache = gccache._cache_array
     try:
@@ -277,6 +249,36 @@
         cache[ARRAY] = arraydescr
         return arraydescr
 
+# ____________________________________________________________
+# InteriorFieldDescr
+
+class InteriorFieldDescr(AbstractDescr):
+    arraydescr = BaseArrayDescr()     # workaround for the annotator
+    fielddescr = BaseFieldDescr('', 0)
+
+    def __init__(self, arraydescr, fielddescr):
+        self.arraydescr = arraydescr
+        self.fielddescr = fielddescr
+
+    def is_pointer_field(self):
+        return self.fielddescr.is_pointer_field()
+
+    def is_float_field(self):
+        return self.fielddescr.is_float_field()
+
+    def repr_of_descr(self):
+        return '<InteriorFieldDescr %s>' % self.fielddescr.repr_of_descr()
+
+def get_interiorfield_descr(gc_ll_descr, ARRAY, FIELDTP, name):
+    cache = gc_ll_descr._cache_interiorfield
+    try:
+        return cache[(ARRAY, FIELDTP, name)]
+    except KeyError:
+        arraydescr = get_array_descr(gc_ll_descr, ARRAY)
+        fielddescr = get_field_descr(gc_ll_descr, FIELDTP, name)
+        descr = InteriorFieldDescr(arraydescr, fielddescr)
+        cache[(ARRAY, FIELDTP, name)] = descr
+        return descr
 
 # ____________________________________________________________
 # CallDescrs
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to