[pypy-svn] r17414 - in pypy/dist/pypy: annotation rpython rpython/test
arigo at codespeak.net
arigo at codespeak.net
Fri Sep 9 17:52:08 CEST 2005
Author: arigo
Date: Fri Sep 9 17:52:05 2005
New Revision: 17414
Modified:
pypy/dist/pypy/annotation/unaryop.py
pypy/dist/pypy/rpython/rdict.py
pypy/dist/pypy/rpython/test/test_rdict.py
Log:
Support the method clear() on interp-level dicts.
Modified: pypy/dist/pypy/annotation/unaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/unaryop.py (original)
+++ pypy/dist/pypy/annotation/unaryop.py Fri Sep 9 17:52:05 2005
@@ -301,6 +301,9 @@
return getbookkeeper().newlist(SomeTuple((dct.dictdef.read_key(),
dct.dictdef.read_value())))
+ def method_clear(dct):
+ pass
+
class __extend__(SomeString):
Modified: pypy/dist/pypy/rpython/rdict.py
==============================================================================
--- pypy/dist/pypy/rpython/rdict.py (original)
+++ pypy/dist/pypy/rpython/rdict.py Fri Sep 9 17:52:05 2005
@@ -147,6 +147,11 @@
def rtype_method_items(self, hop):
return self._rtype_method_kvi(hop, dum_items)
+ def rtype_method_clear(self, hop):
+ v_dict, = hop.inputargs(self)
+ hop.exception_cannot_occur()
+ return hop.gendirectcall(ll_clear, v_dict)
+
class __extend__(pairtype(StrDictRepr, rmodel.StringRepr)):
def rtype_getitem((r_dict, r_string), hop):
@@ -387,6 +392,14 @@
i += 1
return d
+def ll_clear(d):
+ if len(d.entries) == d.num_pristine_entries == STRDICT_INITSIZE:
+ return
+ DICTPTR = lltype.typeOf(d)
+ d.entries = lltype.malloc(DICTPTR.TO.entries.TO, STRDICT_INITSIZE)
+ d.num_items = 0
+ d.num_pristine_entries = STRDICT_INITSIZE
+
def ll_update(dic1, dic2):
d2len =len(dic2.entries)
entries = dic2.entries
Modified: pypy/dist/pypy/rpython/test/test_rdict.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rdict.py (original)
+++ pypy/dist/pypy/rpython/test/test_rdict.py Fri Sep 9 17:52:05 2005
@@ -41,6 +41,17 @@
res = interpret(func, [6])
assert res == 1
+def test_dict_clear():
+ def func(i):
+ d = {'abc': i}
+ d['def'] = i+1
+ d.clear()
+ d['ghi'] = i+2
+ return ('abc' not in d and 'def' not in d
+ and d['ghi'] == i+2 and len(d) == 1)
+ res = interpret(func, [7])
+ assert res == True
+
def test_empty_strings():
def func(i):
d = {'' : i}
More information about the Pypy-commit
mailing list