Author: Armin Rigo <ar...@tunes.org> Branch: stmgc-c4 Changeset: r66836:17f62ee163f2 Date: 2013-09-07 18:14 +0200 http://bitbucket.org/pypy/pypy/changeset/17f62ee163f2/
Log: merge heads diff --git a/lib_pypy/_tkinter/tklib.py b/lib_pypy/_tkinter/tklib.py --- a/lib_pypy/_tkinter/tklib.py +++ b/lib_pypy/_tkinter/tklib.py @@ -1,6 +1,7 @@ # C bindings with libtcl and libtk. from cffi import FFI +import sys tkffi = FFI() @@ -102,6 +103,17 @@ int Tk_GetNumMainWindows(); """) +# XXX find a better way to detect paths +# XXX pick up CPPFLAGS and LDFLAGS and add to these paths? +if sys.platform.startswith("openbsd"): + incdirs = ['/usr/local/include/tcl8.5', '/usr/local/include/tk8.5', '/usr/X11R6/include'] + linklibs = ['tk85', 'tcl85'] + libdirs = ['/usr/local/lib', '/usr/X11R6/lib'] +else: + incdirs=['/usr/include/tcl'], + linklibs=['tcl', 'tk'], + libdirs = [] + tklib = tkffi.verify(""" #include <tcl.h> #include <tk.h> @@ -109,6 +121,7 @@ char *get_tk_version() { return TK_VERSION; } char *get_tcl_version() { return TCL_VERSION; } """, -include_dirs=['/usr/include/tcl'], -libraries=['tcl', 'tk'], +include_dirs=incdirs, +libraries=linklibs, +library_dirs = libdirs ) diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py --- a/pypy/interpreter/baseobjspace.py +++ b/pypy/interpreter/baseobjspace.py @@ -77,12 +77,12 @@ raise NotImplementedError("only for interp-level user subclasses " "from typedef.py") - def getname(self, space, default='?'): + def getname(self, space): try: return space.str_w(space.getattr(self, space.wrap('__name__'))) except OperationError, e: if e.match(space, space.w_TypeError) or e.match(space, space.w_AttributeError): - return default + return '?' raise def getaddrstring(self, space): diff --git a/pypy/interpreter/function.py b/pypy/interpreter/function.py --- a/pypy/interpreter/function.py +++ b/pypy/interpreter/function.py @@ -482,17 +482,16 @@ space.abstract_isinstance_w(w_firstarg, self.w_class)): pass # ok else: - clsdescr = self.w_class.getname(space, "") - if clsdescr: + clsdescr = self.w_class.getname(space) + if clsdescr and clsdescr != '?': clsdescr += " instance" else: clsdescr = "instance" if w_firstarg is None: instdescr = "nothing" else: - instname = space.abstract_getclass(w_firstarg).getname(space, - "") - if instname: + instname = space.abstract_getclass(w_firstarg).getname(space) + if instname and instname != '?': instdescr = instname + " instance" else: instdescr = "instance" diff --git a/pypy/interpreter/test/test_argument.py b/pypy/interpreter/test/test_argument.py --- a/pypy/interpreter/test/test_argument.py +++ b/pypy/interpreter/test/test_argument.py @@ -128,7 +128,7 @@ def type(self, obj): class Type: - def getname(self, space, default='?'): + def getname(self, space): return type(obj).__name__ return Type() diff --git a/pypy/module/_minimal_curses/fficurses.py b/pypy/module/_minimal_curses/fficurses.py --- a/pypy/module/_minimal_curses/fficurses.py +++ b/pypy/module/_minimal_curses/fficurses.py @@ -26,6 +26,9 @@ def try_ldflags(): yield ExternalCompilationInfo(libraries=['curses']) yield ExternalCompilationInfo(libraries=['curses', 'tinfo']) + yield ExternalCompilationInfo(libraries=['ncurses']) + yield ExternalCompilationInfo(libraries=['ncurses'], + library_dirs=['/usr/lib64']) def try_tools(): try: diff --git a/pypy/module/_weakref/interp__weakref.py b/pypy/module/_weakref/interp__weakref.py --- a/pypy/module/_weakref/interp__weakref.py +++ b/pypy/module/_weakref/interp__weakref.py @@ -175,8 +175,8 @@ state = '; dead' else: typename = space.type(w_obj).getname(space) - objname = w_obj.getname(space, '') - if objname: + objname = w_obj.getname(space) + if objname and objname != '?': state = "; to '%s' (%s)" % (typename, objname) else: state = "; to '%s'" % (typename,) diff --git a/pypy/objspace/descroperation.py b/pypy/objspace/descroperation.py --- a/pypy/objspace/descroperation.py +++ b/pypy/objspace/descroperation.py @@ -597,8 +597,8 @@ if num1 != num2: lt = num1 # if obj1 is a number, it is Lower Than obj2 else: - name1 = w_typ1.getname(space, "") - name2 = w_typ2.getname(space, "") + name1 = w_typ1.getname(space) + name2 = w_typ2.getname(space) if name1 != name2: lt = name1 < name2 else: diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py --- a/pypy/objspace/std/typeobject.py +++ b/pypy/objspace/std/typeobject.py @@ -502,6 +502,12 @@ else: return w_self.name + def getname(w_self, space): + name = w_self.name + if name is None: + name = '?' + return name + def add_subclass(w_self, w_subclass): space = w_self.space if not space.config.translation.rweakref: diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py --- a/rpython/jit/backend/x86/assembler.py +++ b/rpython/jit/backend/x86/assembler.py @@ -37,6 +37,7 @@ from rpython.jit.backend.x86 import stmtlocal from rpython.rlib import rstm from rpython.memory.gc.stmgc import StmGC +from rpython.jit.backend.llsupport.gc import STMBarrierDescr class Assembler386(BaseAssembler): @@ -301,13 +302,15 @@ Before using such a relative address, call self._stm_tl_segment_prefix_if_necessary.""" if self.cpu.gc_ll_descr.stm and we_are_translated(): - # also not during tests + # only for STM and not during tests result = adr - stmtlocal.threadlocal_base() assert rx86.fits_in_32bits(result) return result return adr - def _stm_tl_segment_prefix_if_necessary(self, mc): + def _tl_segment_if_stm(self, mc): + """Insert segment prefix for thread-local memory if we run + in STM and not during testing.""" if self.cpu.gc_ll_descr.stm and we_are_translated(): stmtlocal.tl_segment_prefix(mc) @@ -346,7 +349,7 @@ mc.ADD_ri(esp.value, WORD) # ea = self._get_stm_tl(self.cpu.pos_exception()) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(eax, heap(ea)) mc.TEST_rr(eax.value, eax.value) mc.J_il8(rx86.Conditions['NZ'], 0) @@ -900,11 +903,9 @@ that gives the address of the stack top. If this integer doesn't fit in 32 bits, it will be loaded in r11. """ - rst = self._get_root_stack_top_addr() + rst = self._get_stm_tl(gcrootmap.get_root_stack_top_addr()) if rx86.fits_in_32bits(rst): - if gcrootmap.is_stm and we_are_translated(): - # during testing, it will be an absolute address - stmtlocal.tl_segment_prefix(mc) + self._tl_segment_if_stm(mc) mc.MOV_rj(ebx.value, rst) # MOV ebx, [rootstacktop] else: mc.MOV_ri(X86_64_SCRATCH_REG.value, rst) # MOV r11, rootstacktop @@ -932,9 +933,7 @@ self.mc.ADD_ri(ebx.value, WORD) if rx86.fits_in_32bits(rst): - if gcrootmap.is_stm and we_are_translated(): - # during testing, it will be an absolute address - stmtlocal.tl_segment_prefix(self.mc) + self._tl_segment_if_stm(self.mc) self.mc.MOV_jr(rst, ebx.value) # MOV [rootstacktop], ebx else: # The integer 'rst' doesn't fit in 32 bits, so we know that @@ -944,12 +943,9 @@ ebx.value) # MOV [r11], ebx def _call_footer_shadowstack(self, gcrootmap): - rst = self._get_root_stack_top_addr() - + rst = self._get_stm_tl(gcrootmap.get_root_stack_top_addr()) if rx86.fits_in_32bits(rst): - if gcrootmap.is_stm and we_are_translated(): - # during testing, it will be an absolute address - stmtlocal.tl_segment_prefix(self.mc) + self._tl_segment_if_stm(self.mc) self.mc.SUB_ji8(rst, WORD) # SUB [rootstacktop], WORD else: self.mc.MOV_ri(ebx.value, rst) # MOV ebx, rootstacktop @@ -1262,25 +1258,12 @@ cb = callbuilder.CallBuilder(self, fnloc, arglocs) cb.emit_no_collect() - def _get_root_stack_top_addr(self): - gcrootmap = self.cpu.gc_ll_descr.gcrootmap - - rst = gcrootmap.get_root_stack_top_addr() - if gcrootmap.is_stm and we_are_translated(): - # during testing, we return an absolute address - rst = rst - stmtlocal.threadlocal_base() - assert rx86.fits_in_32bits(rst) - return rst - def _reload_frame_if_necessary(self, mc, align_stack=False): gc_ll_descr = self.cpu.gc_ll_descr gcrootmap = gc_ll_descr.gcrootmap if gcrootmap and gcrootmap.is_shadow_stack: - rst = self._get_root_stack_top_addr() - - if gcrootmap.is_stm and we_are_translated(): - # during testing, it will be an absolute address - stmtlocal.tl_segment_prefix(mc) + rst = self._get_stm_tl(gcrootmap.get_root_stack_top_addr()) + self._tl_segment_if_stm(mc) mc.MOV(ecx, heap(rst)) mc.MOV(ebp, mem(ecx, -WORD)) # @@ -1809,7 +1792,7 @@ def genop_guard_guard_no_exception(self, ign_1, guard_op, guard_token, locs, ign_2): ea = self._get_stm_tl(self.cpu.pos_exception()) - self._stm_tl_segment_prefix_if_necessary(self.mc) + self._tl_segment_if_stm(self.mc) self.mc.CMP(heap(ea), imm0) self.implement_guard(guard_token, 'NZ') @@ -1824,7 +1807,7 @@ loc = locs[0] loc1 = locs[1] ea = self._get_stm_tl(self.cpu.pos_exception()) - self._stm_tl_segment_prefix_if_necessary(self.mc) + self._tl_segment_if_stm(self.mc) self.mc.MOV(loc1, heap(ea)) self.mc.CMP(loc1, loc) self.implement_guard(guard_token, 'NE') @@ -1838,7 +1821,7 @@ eva = self._get_stm_tl(self.cpu.pos_exc_value()) ea = self._get_stm_tl(self.cpu.pos_exception()) # - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) if excvalloc is not None: assert excvalloc.is_core_reg() mc.MOV(excvalloc, heap(eva)) @@ -1849,28 +1832,28 @@ # if exctploc is not None: assert exctploc.is_core_reg() - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(exctploc, heap(ea)) # - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(ea), imm0) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(eva), imm0) def _restore_exception(self, mc, excvalloc, exctploc, tmploc=None): eva = self._get_stm_tl(self.cpu.pos_exc_value()) ea = self._get_stm_tl(self.cpu.pos_exception()) if excvalloc is not None: - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(eva), excvalloc) else: assert tmploc is not None ofs = self.cpu.get_ofs_of_frame_field('jf_guard_exc') mc.MOV(tmploc, RawEbpLoc(ofs)) mc.MOV_bi(ofs, 0) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(eva), tmploc) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(ea), exctploc) def _gen_guard_overflow(self, guard_op, guard_token): @@ -2072,11 +2055,11 @@ # We might have an exception pending. Load it into ebx... eva = self._get_stm_tl(self.cpu.pos_exc_value()) ea = self._get_stm_tl(self.cpu.pos_exception()) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(ebx, heap(eva)) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(ea), imm0) - self._stm_tl_segment_prefix_if_necessary(mc) + self._tl_segment_if_stm(mc) mc.MOV(heap(eva), imm0) # ...and save ebx into 'jf_guard_exc' offset = self.cpu.get_ofs_of_frame_field('jf_guard_exc') @@ -2394,24 +2377,14 @@ mc.overwrite(j_ok3 - 1, chr(offset)) def _get_stm_private_rev_num_addr(self): - assert self.cpu.gc_ll_descr.stm - rn = rstm.get_adr_of_private_rev_num() - rn = rn - stmtlocal.threadlocal_base() - assert rx86.fits_in_32bits(rn) - return rn + return self._get_stm_tl(rstm.get_adr_of_private_rev_num()) def _get_stm_read_barrier_cache_addr(self): - assert self.cpu.gc_ll_descr.stm - rbc = rstm.get_adr_of_read_barrier_cache() - rbc = rbc - stmtlocal.threadlocal_base() - assert rx86.fits_in_32bits(rbc) - return rbc + return self._get_stm_tl(rstm.get_adr_of_read_barrier_cache()) def _stm_barrier_fastpath(self, mc, descr, arglocs, is_frame=False, align_stack=False): assert self.cpu.gc_ll_descr.stm - from rpython.jit.backend.llsupport.gc import ( - STMBarrierDescr, STMReadBarrierDescr, STMWriteBarrierDescr) if we_are_translated(): # tests use a a mock class, but translation needs it assert isinstance(descr, STMBarrierDescr) @@ -2442,7 +2415,7 @@ if we_are_translated(): # during tests, _get_stm_private_rev_num_addr returns # an absolute address, not a tl-offset - stmtlocal.tl_segment_prefix(mc) + self._tl_segment_if_stm(mc) mc.MOV_rj(X86_64_SCRATCH_REG.value, rn) else: # testing: mc.MOV(X86_64_SCRATCH_REG, heap(rn)) @@ -2472,7 +2445,7 @@ if we_are_translated(): # during tests, _get_stm_rbca returns # an absolute address, not a tl-offset - stmtlocal.tl_segment_prefix(mc) + self._tl_segment_if_stm(mc) mc.ADD_rj(X86_64_SCRATCH_REG.value, rbc) else: # testing: mc.PUSH_r(eax.value) diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py --- a/rpython/jit/backend/x86/regalloc.py +++ b/rpython/jit/backend/x86/regalloc.py @@ -28,6 +28,7 @@ from rpython.rlib.rarithmetic import r_longlong, r_uint from rpython.rtyper.lltypesystem.lloperation import llop from rpython.rtyper.lltypesystem import lltype, rffi, rstr +from rpython.rtyper.lltypesystem.lloperation import llop class X86RegisterManager(RegisterManager): diff --git a/rpython/jit/backend/x86/test/test_stm_integration.py b/rpython/jit/backend/x86/test/test_stm_integration.py --- a/rpython/jit/backend/x86/test/test_stm_integration.py +++ b/rpython/jit/backend/x86/test/test_stm_integration.py @@ -531,7 +531,9 @@ ResOperation(rop.FINISH, [i], None, descr=finaldescr) ) + print operations + # COMPILE & EXECUTE LOOP: inputargs = [p for p in (p1, p2) if not isinstance(p, Const)] @@ -541,9 +543,6 @@ args = [s for i, s in enumerate((s1, s2)) if not isinstance((p1, p2)[i], Const)] + [7] - print "======" - print "inputargs:", inputargs+[i1], args - print "\n".join(map(str,c_loop[1])) frame = self.cpu.execute_token(looptoken, *args) frame = rffi.cast(JITFRAMEPTR, frame) @@ -692,9 +691,6 @@ looptoken) args = [] - print "======" - print "inputargs:", inputargs, args - print "\n".join(map(str,c_loop[1])) frame = self.cpu.execute_token(looptoken, *args) @@ -742,7 +738,6 @@ looptoken = JitCellToken() looptoken.outermost_jitdriver_sd = FakeJitDriverSD() c_loop = cpu.compile_loop(None, inputargs, ops, looptoken) - print "\n".join(map(str,c_loop[1])) ARGS = [lltype.Signed] * 10 RES = lltype.Signed @@ -766,7 +761,6 @@ othertoken = JitCellToken() cpu.done_with_this_frame_descr_int = BasicFinalDescr() c_loop = cpu.compile_loop(None, [], ops, othertoken) - print "\n".join(map(str,c_loop[1])) deadframe = cpu.execute_token(othertoken) frame = rffi.cast(JITFRAMEPTR, deadframe) diff --git a/rpython/rtyper/test/test_rclass.py b/rpython/rtyper/test/test_rclass.py --- a/rpython/rtyper/test/test_rclass.py +++ b/rpython/rtyper/test/test_rclass.py @@ -1192,3 +1192,19 @@ assert self.interpret(f, [True]) == f(True) assert self.interpret(f, [False]) == f(False) + + def test_init_with_star_args(self): + class Base(object): + def __init__(self, a, b): + self.a = a + self.b = b + class A(Base): + def __init__(self, *args): + Base.__init__(self, *args) + self.c = -1 + cls = [Base, A] + + def f(k, a, b): + return cls[k](a, b).b + + assert self.interpret(f, [1, 4, 7]) == 7 diff --git a/rpython/translator/c/src/debug_print.c b/rpython/translator/c/src/debug_print.c --- a/rpython/translator/c/src/debug_print.c +++ b/rpython/translator/c/src/debug_print.c @@ -19,8 +19,8 @@ FILE *pypy_debug_file = NULL; /* XXX make it thread-local too? */ static unsigned char debug_ready = 0; static unsigned char debug_profile = 0; -__thread_if_stm static char debug_start_colors_1[32]; -__thread_if_stm static char debug_start_colors_2[28]; +static __thread_if_stm char debug_start_colors_1[32]; +static __thread_if_stm char debug_start_colors_2[28]; __thread_if_stm char pypy_debug_threadid[16] = {0}; static char *debug_stop_colors = ""; static char *debug_prefix = NULL; _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit