[pypy-commit] pypy win_ffi: merge from default
mattip
noreply at buildbot.pypy.org
Tue Jun 5 11:48:33 CEST 2012
Author: Matti Picus <matti.picus at gmail.com>
Branch: win_ffi
Changeset: r55406:160b34ac6199
Date: 2012-06-05 12:46 +0300
http://bitbucket.org/pypy/pypy/changeset/160b34ac6199/
Log: merge from default
diff --git a/pypy/doc/cppyy.rst b/pypy/doc/cppyy.rst
--- a/pypy/doc/cppyy.rst
+++ b/pypy/doc/cppyy.rst
@@ -361,6 +361,11 @@
If a pointer is a global variable, the C++ side can replace the underlying
object and the python side will immediately reflect that.
+* **PyObject***: Arguments and return types of ``PyObject*`` can be used, and
+ passed on to CPython API calls.
+ Since these CPython-like objects need to be created and tracked (this all
+ happens through ``cpyext``) this interface is not particularly fast.
+
* **static data members**: Are represented as python property objects on the
class and the meta-class.
Both read and write access is as expected.
diff --git a/pypy/doc/test/test_whatsnew.py b/pypy/doc/test/test_whatsnew.py
--- a/pypy/doc/test/test_whatsnew.py
+++ b/pypy/doc/test/test_whatsnew.py
@@ -16,6 +16,7 @@
startrev = parseline(line)
elif line.startswith('.. branch:'):
branches.add(parseline(line))
+ branches.discard('default')
return startrev, branches
def get_merged_branches(path, startrev, endrev):
@@ -51,6 +52,10 @@
.. branch: hello
qqq www ttt
+
+.. branch: default
+
+"default" should be ignored and not put in the set of documented branches
"""
startrev, branches = parse_doc(s)
assert startrev == '12345'
diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py
--- a/pypy/jit/backend/llsupport/test/test_gc.py
+++ b/pypy/jit/backend/llsupport/test/test_gc.py
@@ -276,8 +276,8 @@
repr(offset_to_length), p))
return p
- def _write_barrier_failing_case(self, adr_struct, adr_newptr):
- self.record.append(('barrier', adr_struct, adr_newptr))
+ def _write_barrier_failing_case(self, adr_struct):
+ self.record.append(('barrier', adr_struct))
def get_write_barrier_failing_case(self, FPTRTYPE):
return llhelper(FPTRTYPE, self._write_barrier_failing_case)
@@ -402,7 +402,7 @@
#
s_hdr.tid |= gc_ll_descr.GCClass.JIT_WB_IF_FLAG
gc_ll_descr.do_write_barrier(s_gcref, r_gcref)
- assert self.llop1.record == [('barrier', s_adr, r_adr)]
+ assert self.llop1.record == [('barrier', s_adr)]
def test_gen_write_barrier(self):
gc_ll_descr = self.gc_ll_descr
diff --git a/pypy/module/posix/test/test_posix2.py b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -945,6 +945,20 @@
import os
assert hasattr(os, 'kill')
+ def test_pipe_flush(self):
+ os = self.posix
+ ffd, gfd = os.pipe()
+ f = os.fdopen(ffd, 'r')
+ g = os.fdopen(gfd, 'w')
+ g.write('he')
+ g.flush()
+ x = f.read(1)
+ assert x == 'h'
+ f.flush()
+ x = f.read(1)
+ assert x == 'e'
+
+
class AppTestEnvironment(object):
def setup_class(cls):
cls.space = space
diff --git a/pypy/objspace/std/listobject.py b/pypy/objspace/std/listobject.py
--- a/pypy/objspace/std/listobject.py
+++ b/pypy/objspace/std/listobject.py
@@ -1221,41 +1221,29 @@
i += 1
return space.w_True
-def lessthan_unwrappeditems(space, w_list1, w_list2):
- # needs to be safe against eq_w() mutating the w_lists behind our back
- # Search for the first index where items are different
- i = 0
- # XXX in theory, this can be implemented more efficiently as well. let's
- # not care for now
- while i < w_list1.length() and i < w_list2.length():
- w_item1 = w_list1.getitem(i)
- w_item2 = w_list2.getitem(i)
- if not space.eq_w(w_item1, w_item2):
- return space.lt(w_item1, w_item2)
- i += 1
- # No more items to compare -- compare sizes
- return space.newbool(w_list1.length() < w_list2.length())
+def _make_list_comparison(name):
+ import operator
+ op = getattr(operator, name)
+ def compare_unwrappeditems(space, w_list1, w_list2):
+ # needs to be safe against eq_w() mutating the w_lists behind our back
+ # Search for the first index where items are different
+ i = 0
+ # XXX in theory, this can be implemented more efficiently as well.
+ # let's not care for now
+ while i < w_list1.length() and i < w_list2.length():
+ w_item1 = w_list1.getitem(i)
+ w_item2 = w_list2.getitem(i)
+ if not space.eq_w(w_item1, w_item2):
+ return getattr(space, name)(w_item1, w_item2)
+ i += 1
+ # No more items to compare -- compare sizes
+ return space.newbool(op(w_list1.length(), w_list2.length()))
+ return func_with_new_name(compare_unwrappeditems, name + '__List_List')
-def greaterthan_unwrappeditems(space, w_list1, w_list2):
- # needs to be safe against eq_w() mutating the w_lists behind our back
- # Search for the first index where items are different
- i = 0
- # XXX in theory, this can be implemented more efficiently as well. let's
- # not care for now
- while i < w_list1.length() and i < w_list2.length():
- w_item1 = w_list1.getitem(i)
- w_item2 = w_list2.getitem(i)
- if not space.eq_w(w_item1, w_item2):
- return space.gt(w_item1, w_item2)
- i += 1
- # No more items to compare -- compare sizes
- return space.newbool(w_list1.length() > w_list2.length())
-
-def lt__List_List(space, w_list1, w_list2):
- return lessthan_unwrappeditems(space, w_list1, w_list2)
-
-def gt__List_List(space, w_list1, w_list2):
- return greaterthan_unwrappeditems(space, w_list1, w_list2)
+lt__List_List = _make_list_comparison('lt')
+le__List_List = _make_list_comparison('le')
+gt__List_List = _make_list_comparison('gt')
+ge__List_List = _make_list_comparison('ge')
def delitem__List_ANY(space, w_list, w_idx):
idx = get_list_index(space, w_idx)
diff --git a/pypy/objspace/std/test/test_listobject.py b/pypy/objspace/std/test/test_listobject.py
--- a/pypy/objspace/std/test/test_listobject.py
+++ b/pypy/objspace/std/test/test_listobject.py
@@ -1204,6 +1204,57 @@
s.update(Sub2(arg))
assert s == set(base(arg))
+ def test_comparison(self):
+ assert ([] < []) is False
+ assert ([] <= []) is True
+ assert ([] == []) is True
+ assert ([] != []) is False
+ assert ([] > []) is False
+ assert ([] >= []) is True
+ assert ([5] < []) is False
+ assert ([5] <= []) is False
+ assert ([5] == []) is False
+ assert ([5] != []) is True
+ assert ([5] > []) is True
+ assert ([5] >= []) is True
+ assert ([] < [5]) is True
+ assert ([] <= [5]) is True
+ assert ([] == [5]) is False
+ assert ([] != [5]) is True
+ assert ([] > [5]) is False
+ assert ([] >= [5]) is False
+ assert ([4] < [5]) is True
+ assert ([4] <= [5]) is True
+ assert ([4] == [5]) is False
+ assert ([4] != [5]) is True
+ assert ([4] > [5]) is False
+ assert ([4] >= [5]) is False
+ assert ([5] < [5]) is False
+ assert ([5] <= [5]) is True
+ assert ([5] == [5]) is True
+ assert ([5] != [5]) is False
+ assert ([5] > [5]) is False
+ assert ([5] >= [5]) is True
+ assert ([6] < [5]) is False
+ assert ([6] <= [5]) is False
+ assert ([6] == [5]) is False
+ assert ([6] != [5]) is True
+ assert ([6] > [5]) is True
+ assert ([6] >= [5]) is True
+ N = float('nan')
+ assert ([N] < [5]) is False
+ assert ([N] <= [5]) is False
+ assert ([N] == [5]) is False
+ assert ([N] != [5]) is True
+ assert ([N] > [5]) is False
+ assert ([N] >= [5]) is False
+ assert ([5] < [N]) is False
+ assert ([5] <= [N]) is False
+ assert ([5] == [N]) is False
+ assert ([5] != [N]) is True
+ assert ([5] > [N]) is False
+ assert ([5] >= [N]) is False
+
class AppTestForRangeLists(AppTestW_ListObject):
def setup_class(cls):
diff --git a/pypy/objspace/std/test/test_tupleobject.py b/pypy/objspace/std/test/test_tupleobject.py
--- a/pypy/objspace/std/test/test_tupleobject.py
+++ b/pypy/objspace/std/test/test_tupleobject.py
@@ -348,3 +348,54 @@
assert (4, 2, 3, 4).index(4, 1) == 3
assert (4, 4, 4).index(4, 1, 2) == 1
raises(ValueError, (1, 2, 3, 4).index, 4, 0, 2)
+
+ def test_comparison(self):
+ assert (() < ()) is False
+ assert (() <= ()) is True
+ assert (() == ()) is True
+ assert (() != ()) is False
+ assert (() > ()) is False
+ assert (() >= ()) is True
+ assert ((5,) < ()) is False
+ assert ((5,) <= ()) is False
+ assert ((5,) == ()) is False
+ assert ((5,) != ()) is True
+ assert ((5,) > ()) is True
+ assert ((5,) >= ()) is True
+ assert (() < (5,)) is True
+ assert (() <= (5,)) is True
+ assert (() == (5,)) is False
+ assert (() != (5,)) is True
+ assert (() > (5,)) is False
+ assert (() >= (5,)) is False
+ assert ((4,) < (5,)) is True
+ assert ((4,) <= (5,)) is True
+ assert ((4,) == (5,)) is False
+ assert ((4,) != (5,)) is True
+ assert ((4,) > (5,)) is False
+ assert ((4,) >= (5,)) is False
+ assert ((5,) < (5,)) is False
+ assert ((5,) <= (5,)) is True
+ assert ((5,) == (5,)) is True
+ assert ((5,) != (5,)) is False
+ assert ((5,) > (5,)) is False
+ assert ((5,) >= (5,)) is True
+ assert ((6,) < (5,)) is False
+ assert ((6,) <= (5,)) is False
+ assert ((6,) == (5,)) is False
+ assert ((6,) != (5,)) is True
+ assert ((6,) > (5,)) is True
+ assert ((6,) >= (5,)) is True
+ N = float('nan')
+ assert ((N,) < (5,)) is False
+ assert ((N,) <= (5,)) is False
+ assert ((N,) == (5,)) is False
+ assert ((N,) != (5,)) is True
+ assert ((N,) > (5,)) is False
+ assert ((N,) >= (5,)) is False
+ assert ((5,) < (N,)) is False
+ assert ((5,) <= (N,)) is False
+ assert ((5,) == (N,)) is False
+ assert ((5,) != (N,)) is True
+ assert ((5,) > (N,)) is False
+ assert ((5,) >= (N,)) is False
diff --git a/pypy/objspace/std/tupleobject.py b/pypy/objspace/std/tupleobject.py
--- a/pypy/objspace/std/tupleobject.py
+++ b/pypy/objspace/std/tupleobject.py
@@ -8,6 +8,7 @@
from pypy.objspace.std import slicetype
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
+from pypy.tool.sourcetools import func_with_new_name
# Tuples of known length up to UNROLL_TUPLE_LIMIT have unrolled certain methods
UNROLL_TUPLE_LIMIT = 10
@@ -138,29 +139,27 @@
return space.w_False
return space.w_True
- at jit.look_inside_iff(tuple_unroll_condition)
-def lt__Tuple_Tuple(space, w_tuple1, w_tuple2):
- items1 = w_tuple1.wrappeditems
- items2 = w_tuple2.wrappeditems
- ncmp = min(len(items1), len(items2))
- # Search for the first index where items are different
- for p in range(ncmp):
- if not space.eq_w(items1[p], items2[p]):
- return space.lt(items1[p], items2[p])
- # No more items to compare -- compare sizes
- return space.newbool(len(items1) < len(items2))
+def _make_tuple_comparison(name):
+ import operator
+ op = getattr(operator, name)
+ #
+ @jit.look_inside_iff(tuple_unroll_condition)
+ def compare_tuples(space, w_tuple1, w_tuple2):
+ items1 = w_tuple1.wrappeditems
+ items2 = w_tuple2.wrappeditems
+ ncmp = min(len(items1), len(items2))
+ # Search for the first index where items are different
+ for p in range(ncmp):
+ if not space.eq_w(items1[p], items2[p]):
+ return getattr(space, name)(items1[p], items2[p])
+ # No more items to compare -- compare sizes
+ return space.newbool(op(len(items1), len(items2)))
+ return func_with_new_name(compare_tuples, name + '__Tuple_Tuple')
- at jit.look_inside_iff(tuple_unroll_condition)
-def gt__Tuple_Tuple(space, w_tuple1, w_tuple2):
- items1 = w_tuple1.wrappeditems
- items2 = w_tuple2.wrappeditems
- ncmp = min(len(items1), len(items2))
- # Search for the first index where items are different
- for p in range(ncmp):
- if not space.eq_w(items1[p], items2[p]):
- return space.gt(items1[p], items2[p])
- # No more items to compare -- compare sizes
- return space.newbool(len(items1) > len(items2))
+lt__Tuple_Tuple = _make_tuple_comparison('lt')
+le__Tuple_Tuple = _make_tuple_comparison('le')
+gt__Tuple_Tuple = _make_tuple_comparison('gt')
+ge__Tuple_Tuple = _make_tuple_comparison('ge')
def repr__Tuple(space, w_tuple):
items = w_tuple.wrappeditems
diff --git a/pypy/rlib/streamio.py b/pypy/rlib/streamio.py
--- a/pypy/rlib/streamio.py
+++ b/pypy/rlib/streamio.py
@@ -500,7 +500,7 @@
if self.buf:
try:
self.do_seek(self.tell(), 0)
- except MyNotImplementedError:
+ except (MyNotImplementedError, OSError):
pass
else:
self.buf = ""
@@ -713,7 +713,7 @@
if self.buf is not None:
try:
self.do_seek(self.bufstart-len(self.buf), 1)
- except MyNotImplementedError:
+ except (MyNotImplementedError, OSError):
pass
else:
self.buf = None
@@ -968,7 +968,10 @@
def flush_buffers(self):
if self.lfbuffer:
- self.base.seek(-len(self.lfbuffer), 1)
+ try:
+ self.base.seek(-len(self.lfbuffer), 1)
+ except (MyNotImplementedError, OSError):
+ return
self.lfbuffer = ""
self.do_flush()
@@ -1102,7 +1105,7 @@
if self.buf:
try:
self.base.seek(-len(self.buf), 1)
- except MyNotImplementedError:
+ except (MyNotImplementedError, OSError):
pass
else:
self.buf = ""
More information about the pypy-commit
mailing list