[pypy-commit] pypy enumerate-rstr: Make enumerate() work with rstr.
jerith
noreply at buildbot.pypy.org
Thu Feb 21 17:58:44 CET 2013
Author: Jeremy Thurgood <firxen at gmail.com>
Branch: enumerate-rstr
Changeset: r61554:c0e310c1482e
Date: 2013-02-21 18:57 +0200
http://bitbucket.org/pypy/pypy/changeset/c0e310c1482e/
Log: Make enumerate() work with rstr.
diff --git a/rpython/rtyper/lltypesystem/rlist.py b/rpython/rtyper/lltypesystem/rlist.py
--- a/rpython/rtyper/lltypesystem/rlist.py
+++ b/rpython/rtyper/lltypesystem/rlist.py
@@ -419,6 +419,7 @@
def __init__(self, r_list):
self.r_list = r_list
+ self.external_item_repr = r_list.external_item_repr
self.lowleveltype = Ptr(GcStruct('listiter',
('list', r_list.lowleveltype),
('index', Signed)))
diff --git a/rpython/rtyper/lltypesystem/rstr.py b/rpython/rtyper/lltypesystem/rstr.py
--- a/rpython/rtyper/lltypesystem/rstr.py
+++ b/rpython/rtyper/lltypesystem/rstr.py
@@ -1054,15 +1054,18 @@
def __init__(self):
self.ll_striter = ll_striter
self.ll_strnext = ll_strnext
+ self.ll_getnextindex = ll_getnextindex
class StringIteratorRepr(BaseStringIteratorRepr):
+ external_item_repr = char_repr
lowleveltype = Ptr(GcStruct('stringiter',
('string', string_repr.lowleveltype),
('index', Signed)))
class UnicodeIteratorRepr(BaseStringIteratorRepr):
+ external_item_repr = unichar_repr
lowleveltype = Ptr(GcStruct('unicodeiter',
('string', unicode_repr.lowleveltype),
('index', Signed)))
@@ -1087,6 +1090,9 @@
iter.index = index + 1
return chars[index]
+def ll_getnextindex(iter):
+ return iter.index
+
string_repr.iterator_repr = StringIteratorRepr()
unicode_repr.iterator_repr = UnicodeIteratorRepr()
diff --git a/rpython/rtyper/rrange.py b/rpython/rtyper/rrange.py
--- a/rpython/rtyper/rrange.py
+++ b/rpython/rtyper/rrange.py
@@ -207,7 +207,7 @@
v_index = hop.gendirectcall(self.ll_getnextindex, v_enumerate)
hop2 = hop.copy()
hop2.args_r = [self.r_baseiter]
- r_item_src = self.r_baseiter.r_list.external_item_repr
+ r_item_src = self.r_baseiter.external_item_repr
r_item_dst = hop.r_result.items_r[1]
v_item = self.r_baseiter.rtype_next(hop2)
v_item = hop.llops.convertvar(v_item, r_item_src, r_item_dst)
More information about the pypy-commit
mailing list