Author: Wim Lavrijsen <wlavrij...@lbl.gov> Branch: reflex-support Changeset: r55710:24e529b5eba4 Date: 2012-06-18 14:04 -0700 http://bitbucket.org/pypy/pypy/changeset/24e529b5eba4/
Log: merge default into branch diff --git a/lib_pypy/_ctypes/primitive.py b/lib_pypy/_ctypes/primitive.py --- a/lib_pypy/_ctypes/primitive.py +++ b/lib_pypy/_ctypes/primitive.py @@ -249,6 +249,13 @@ self._buffer[0] = value result.value = property(_getvalue, _setvalue) + elif tp == '?': # regular bool + def _getvalue(self): + return bool(self._buffer[0]) + def _setvalue(self, value): + self._buffer[0] = bool(value) + result.value = property(_getvalue, _setvalue) + elif tp == 'v': # VARIANT_BOOL type def _getvalue(self): return bool(self._buffer[0]) diff --git a/pypy/jit/backend/llsupport/gc.py b/pypy/jit/backend/llsupport/gc.py --- a/pypy/jit/backend/llsupport/gc.py +++ b/pypy/jit/backend/llsupport/gc.py @@ -659,10 +659,11 @@ def _check_valid_gc(self): # we need the hybrid or minimark GC for rgc._make_sure_does_not_move() - # to work - if self.gcdescr.config.translation.gc not in ('hybrid', 'minimark'): + # to work. Additionally, 'hybrid' is missing some stuff like + # jit_remember_young_pointer() for now. + if self.gcdescr.config.translation.gc not in ('minimark',): raise NotImplementedError("--gc=%s not implemented with the JIT" % - (gcdescr.config.translation.gc,)) + (self.gcdescr.config.translation.gc,)) def _make_gcrootmap(self): # to find roots in the assembler, make a GcRootMap 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 @@ -296,7 +296,7 @@ class TestFramework(object): - gc = 'hybrid' + gc = 'minimark' def setup_method(self, meth): class config_(object): diff --git a/pypy/jit/backend/llsupport/test/test_rewrite.py b/pypy/jit/backend/llsupport/test/test_rewrite.py --- a/pypy/jit/backend/llsupport/test/test_rewrite.py +++ b/pypy/jit/backend/llsupport/test/test_rewrite.py @@ -205,7 +205,7 @@ def setup_method(self, meth): class config_(object): class translation(object): - gc = 'hybrid' + gc = 'minimark' gcrootfinder = 'asmgcc' gctransformer = 'framework' gcremovetypeptr = False diff --git a/pypy/module/test_lib_pypy/ctypes_tests/test_cast.py b/pypy/module/test_lib_pypy/ctypes_tests/test_cast.py --- a/pypy/module/test_lib_pypy/ctypes_tests/test_cast.py +++ b/pypy/module/test_lib_pypy/ctypes_tests/test_cast.py @@ -94,4 +94,13 @@ def test_cast_argumenterror(self): param = c_uint(42) py.test.raises(ArgumentError, "cast(param, c_void_p)") - + + def test_c_bool(self): + x = c_bool(42) + assert x.value is True + x = c_bool(0.0) + assert x.value is False + x = c_bool("") + assert x.value is False + x = c_bool(['yadda']) + assert x.value is True diff --git a/pypy/rpython/lltypesystem/ll2ctypes.py b/pypy/rpython/lltypesystem/ll2ctypes.py --- a/pypy/rpython/lltypesystem/ll2ctypes.py +++ b/pypy/rpython/lltypesystem/ll2ctypes.py @@ -1234,6 +1234,8 @@ # upgrade to a more recent ctypes (e.g. 1.0.2) if you get # an OverflowError on the following line. cvalue = ctypes.cast(ctypes.c_void_p(cvalue), cresulttype) + elif RESTYPE == lltype.Bool: + cvalue = bool(cvalue) else: try: cvalue = cresulttype(cvalue).value # mask high bits off if needed diff --git a/pypy/translator/c/funcgen.py b/pypy/translator/c/funcgen.py --- a/pypy/translator/c/funcgen.py +++ b/pypy/translator/c/funcgen.py @@ -716,12 +716,14 @@ def OP_CAST_PRIMITIVE(self, op): TYPE = self.lltypemap(op.result) val = self.expr(op.args[0]) + result = self.expr(op.result) + if TYPE == Bool: + return "%(result)s = !!%(val)s;" % locals() ORIG = self.lltypemap(op.args[0]) if ORIG is Char: val = "(unsigned char)%s" % val elif ORIG is UniChar: val = "(unsigned long)%s" % val - result = self.expr(op.result) typename = cdecl(self.db.gettype(TYPE), '') return "%(result)s = (%(typename)s)(%(val)s);" % locals() diff --git a/pypy/translator/c/test/test_typed.py b/pypy/translator/c/test/test_typed.py --- a/pypy/translator/c/test/test_typed.py +++ b/pypy/translator/c/test/test_typed.py @@ -895,3 +895,12 @@ f = self.getcompiled(func, [int]) res = f(-2000000000) assert res == -200000000000000 + + def test_bool_2(self): + from pypy.rpython.lltypesystem import lltype, rffi + def func(n): + x = rffi.cast(lltype.Bool, n) + return int(x) + f = self.getcompiled(func, [int]) + res = f(2) + assert res == 1 # and not 2 diff --git a/pypy/translator/cli/opcodes.py b/pypy/translator/cli/opcodes.py --- a/pypy/translator/cli/opcodes.py +++ b/pypy/translator/cli/opcodes.py @@ -97,6 +97,8 @@ 'jit_force_quasi_immutable':Ignore, 'jit_force_virtualizable': Ignore, 'jit_force_virtual': DoNothing, + 'jit_force_quasi_immutable':Ignore, + 'jit_is_virtual': [PushPrimitive(ootype.Bool, False)], } # __________ numeric operations __________ _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit