Author: mattip <matti.pi...@gmail.com> Branch: Changeset: r59867:19b73fa5c8cb Date: 2012-12-30 21:23 +0200 http://bitbucket.org/pypy/pypy/changeset/19b73fa5c8cb/
Log: merge heads diff --git a/pypy/doc/Makefile b/pypy/doc/Makefile --- a/pypy/doc/Makefile +++ b/pypy/doc/Makefile @@ -32,38 +32,38 @@ -rm -rf $(BUILDDIR)/* html: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." pickle: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ @@ -73,7 +73,7 @@ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyPy.qhc" latex: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @@ -81,26 +81,26 @@ "run these through (pdf)latex." man: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man" changes: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: - python config/generate.py + # python config/generate.py #readthedocs will not run this Makefile $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." diff --git a/pypy/doc/config/translation.no__thread.txt b/pypy/doc/config/translation.no__thread.txt --- a/pypy/doc/config/translation.no__thread.txt +++ b/pypy/doc/config/translation.no__thread.txt @@ -1,3 +1,3 @@ Don't use gcc __thread attribute for fast thread local storage -implementation . Increases the chance that moving the resulting +implementation. Increases the chance that moving the resulting executable to another same processor Linux machine will work. diff --git a/pypy/doc/pypyconfig.py b/pypy/doc/pypyconfig.py --- a/pypy/doc/pypyconfig.py +++ b/pypy/doc/pypyconfig.py @@ -3,6 +3,10 @@ def setup(app): import sys, os sys.path.insert(0, os.path.abspath("../../")) + + #Autmatically calls make_cmdlline_overview + from pypy.doc.config import generate + from pypy.config import makerestdoc import py role = makerestdoc.register_config_role(py.path.local()) diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst --- a/pypy/doc/whatsnew-head.rst +++ b/pypy/doc/whatsnew-head.rst @@ -5,6 +5,11 @@ .. this is a revision shortly after release-2.0-beta1 .. startrev: 0e6161a009c6 +.. branch: callback-jit +Callbacks from C are now better JITted + +.. branch: remove-globals-in-jit + .. branch: length-hint Implement __lenght_hint__ according to PEP 424 diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py --- a/pypy/interpreter/typedef.py +++ b/pypy/interpreter/typedef.py @@ -105,6 +105,13 @@ # typical usage (case 1 is the most common kind of app-level subclasses; # case 2 is the memory-saving kind defined with __slots__). # +# +----------------------------------------------------------------+ +# | NOTE: if withmapdict is enabled, the following doesn't apply! | +# | Map dicts can flexibly allow any slots/__dict__/__weakref__ to | +# | show up only when needed. In particular there is no way with | +# | mapdict to prevent some objects from being weakrefable. | +# +----------------------------------------------------------------+ +# # dict slots del weakrefable # # 1. Y N N Y UserDictWeakref diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py --- a/pypy/jit/backend/llgraph/runner.py +++ b/pypy/jit/backend/llgraph/runner.py @@ -877,13 +877,16 @@ # assembler_helper_ptr = jd.assembler_helper_adr.ptr # fish try: - return assembler_helper_ptr(pframe, vable) + result = assembler_helper_ptr(pframe, vable) except LLException, lle: assert self.last_exception is None, "exception left behind" self.last_exception = lle # fish op op = self.current_op return op.result and op.result.value + if isinstance(result, float): + result = support.cast_to_floatstorage(result) + return result def execute_same_as(self, _, x): return x diff --git a/pypy/module/_weakref/test/test_weakref.py b/pypy/module/_weakref/test/test_weakref.py --- a/pypy/module/_weakref/test/test_weakref.py +++ b/pypy/module/_weakref/test/test_weakref.py @@ -114,19 +114,28 @@ class A(object): def __eq__(self, other): return True + def __ne__(self, other): + return False a1 = A() a2 = A() ref1 = _weakref.ref(a1) ref2 = _weakref.ref(a2) assert ref1 == ref2 + assert not (ref1 != ref2) + assert not (ref1 == []) + assert ref1 != [] del a1 gc.collect() assert not ref1 == ref2 assert ref1 != ref2 + assert not (ref1 == []) + assert ref1 != [] del a2 gc.collect() assert not ref1 == ref2 assert ref1 != ref2 + assert not (ref1 == []) + assert ref1 != [] def test_getweakrefs(self): import _weakref, gc @@ -298,6 +307,13 @@ if seen_callback: assert seen_callback == [True, True, True] + def test_type_weakrefable(self): + import _weakref, gc + w = _weakref.ref(list) + assert w() is list + gc.collect() + assert w() is list + class AppTestProxy(object): spaceconfig = dict(usemodules=('_weakref',)) @@ -435,6 +451,8 @@ class A(object): def __eq__(self, other): return True + def __ne__(self, other): + return False a = A() assert _weakref.ref(a) == a diff --git a/pypy/rpython/lltypesystem/rffi.py b/pypy/rpython/lltypesystem/rffi.py --- a/pypy/rpython/lltypesystem/rffi.py +++ b/pypy/rpython/lltypesystem/rffi.py @@ -283,9 +283,10 @@ args = ', '.join(['a%d' % i for i in range(len(TP.TO.ARGS))]) source = py.code.Source(r""" def inner_wrapper(%(args)s): - callback_hook = aroundstate.callback_hook - if callback_hook: - callback_hook(llstr("%(callable_name_descr)s")) + if aroundstate is not None: + callback_hook = aroundstate.callback_hook + if callback_hook: + callback_hook(llstr("%(callable_name_descr)s")) return callable(%(args)s) inner_wrapper._never_inline_ = True diff --git a/pypy/rpython/memory/gc/minimark.py b/pypy/rpython/memory/gc/minimark.py --- a/pypy/rpython/memory/gc/minimark.py +++ b/pypy/rpython/memory/gc/minimark.py @@ -2000,6 +2000,17 @@ (obj + offset).address[0] = llmemory.NULL continue # no need to remember this weakref any longer # + elif self.header(pointing_to).tid & GCFLAG_NO_HEAP_PTRS: + # see test_weakref_to_prebuilt: it's not useful to put + # weakrefs into 'old_objects_with_weakrefs' if they point + # to a prebuilt object (they are immortal). If moreover + # the 'pointing_to' prebuilt object still has the + # GCFLAG_NO_HEAP_PTRS flag, then it's even wrong, because + # 'pointing_to' will not get the GCFLAG_VISITED during + # the next major collection. Solve this by not registering + # the weakref into 'old_objects_with_weakrefs'. + continue + # self.old_objects_with_weakrefs.append(obj) def invalidate_old_weakrefs(self): @@ -2013,6 +2024,9 @@ continue # weakref itself dies offset = self.weakpointer_offset(self.get_type_id(obj)) pointing_to = (obj + offset).address[0] + ll_assert((self.header(pointing_to).tid & GCFLAG_NO_HEAP_PTRS) + == 0, "registered old weakref should not " + "point to a NO_HEAP_PTRS obj") if self.header(pointing_to).tid & GCFLAG_VISITED: new_with_weakref.append(obj) else: diff --git a/pypy/rpython/memory/test/test_gc.py b/pypy/rpython/memory/test/test_gc.py --- a/pypy/rpython/memory/test/test_gc.py +++ b/pypy/rpython/memory/test/test_gc.py @@ -557,6 +557,19 @@ res = self.interpret(f, [20]) # for GenerationGC, enough for a minor collection assert res == True + def test_weakref_to_prebuilt(self): + import weakref + class A: + pass + a = A() + def f(x): + ref = weakref.ref(a) + assert ref() is a + llop.gc__collect(lltype.Void) + return ref() is a + res = self.interpret(f, [20]) # for GenerationGC, enough for a minor collection + assert res == True + def test_many_weakrefs(self): # test for the case where allocating the weakref itself triggers # a collection diff --git a/pypy/translator/platform/linux.py b/pypy/translator/platform/linux.py --- a/pypy/translator/platform/linux.py +++ b/pypy/translator/platform/linux.py @@ -36,7 +36,13 @@ # places where we need to look for libffi.a # XXX obscuuure! only look for libffi.a if run with translate.py if 'translate' in sys.modules: - return self.library_dirs_for_libffi() + ['/usr/lib'] + if sys.maxint > 2**32: + host = 'x86_64' + else: + host = 'x86' + return self.library_dirs_for_libffi() + [ + '/usr/lib', + '/usr/lib/%s-linux-gnu/' % host] else: return [] _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit